
拡張可能で決定論的な静的解析エンジン。PEバイナリとテキストから高シグナルのIOCを抽出し、SOCの自動化と最新の脅威分析パイプライン向けに構築されています。
IOCX CLIを使用したPEファイルからの静的IOC抽出
これは、決定的な静的IOC抽出とPE解析のためのオリジナルのIOCXエンジンです。 「iocx」という名前を使用している他のリポジトリは、このプロジェクトとは無関係です。
公式リンク:
現代のマルウェアはデフォルトで敵対的です — 不正な形式で、回避的で、単純な抽出器を破壊するように設計されています。
IOCXは、正確性と決定性が実際に重要となる環境のために構築されています。
IOCXは公式の静的IOC抽出エンジンです — DFIR、SOC自動化、CI/CDセキュリティ、大規模な脅威インテリジェンスパイプラインのために構築された、決定的でバイナリを認識するシステムです。
正規表現のみの抽出器やサンドボックス依存のツールとは異なり、IOCXは以下を実行します:
これは、スケーラブルで現代的な脅威解析のためのMalX Labsエコシステムの中核コンポーネントです。
echo "http://malicious.example" | iocx -
またはPEファイルを安全にスキャン:
iocx suspicious.exe -a deep
セキュリティチームは3つの永続的な問題に直面しています:
IOCXは、自動化、安全性、スケールのために設計された決定的で静的のみのエンジンでこれを解決します。
IOCXは意図的に以下ではありません:
信頼されていないコードを実行することは決してありません。 動的解析を実行することは決してありません。 安全性、決定性、CI/CD互換性のために設計上静的のみです。
IOCXは、レガシーツールの前提ではなく、現代のマルウェアの現実に合わせて設計されています。
安定した再現可能な出力 — ランダム性なし、変動なし。
実行は安全ではありません。静的解析は予測可能で、スケーラブルで、CIフレンドリーです。
不正なPE、破損したRVA、敵対的な文字列 — IOCXはこれらを通常の入力として扱います。
下流のシステムはアップグレード時に壊れるべきではありません。
生テキストで150〜300MB/秒。 一般的なPEで6〜15MB/秒。 最悪の敵対的負荷でも予測可能。
これらのコミットメントは、PE構造解析のための公開された研究方法論 — 決定的フィクスチャ構築、単一異常規律、および正しさのオラクルとしてのWindowsローダー動作 — に由来しています。完全な方法論についてはdocs/methodology.mdを、より広範な敵対的PE分類法と商用フィクスチャスイートについてはpaax.devを参照してください。
要約: IOCXは理想化された入力ではなく、現実の敵対的現実のために構築されています。
150〜300MB/秒の持続スループット 高速パス — PE解析なし。
| 検出器 |
|---|
dumpbinに対してエンドツーエンドで検証済みpython-magic依存関係を削除--min-lengthの一貫性修正はv0.7.5で予定されていますpip install iocx
iocx suspicious.exe
echo "Visit http://bad.example.com" | iocx -
iocx suspicious.exe -a
from iocx.engine import Engine
engine = Engine()
results = engine.extract("suspicious.exe")
print(results)
IOCXは、IOC、PEメタデータ、セクション解析、ヒューリスティクス、難読化インジケータを含む構造化された決定的JSONを生成します。
以下の例は、実際の敵対的PEサンプルからの要約出力です。ドキュメント用にサイズを管理しやすくしながら、スキーマの形状と深さを示しています。
{
"file": "heuristic_rich.full.exe",
"type": "PE",
"iocs": {
"urls": ["http://not-a-real-domain.test/payload"],
"domains": ["example-malware.com"],
"ips": ["192.0.2.123"],
"hashes": [
"abcd1234ef567890abcd1234ef567890",
"1234567890",
"3333333333333333"
],
"filepaths": [
"/usr/src/mingw-w64-11.0.1-3build1/mingw-w64-crt/crt/crtexe.c",
"/usr/x86_64-w64-mingw32/include",
"/usr/src/mingw-w64-11.0.1-3build1/mingw-w64-crt/crt/pseudo-reloc.c"
]
},
"metadata": {
"file_type": "PE",
"imports": ["KERNEL32.dll", "msvcrt.dll", "USER32.dll"],
"sections": [
".text", ".data", ".rwx", ".rdata",
"UPX0", ".pdata", ".xdata", ".tls"
],
"resources": [],
"resource_strings": [],
"delayed_imports": [],
"bound_imports": [],
"exports": [],
"signatures": [],
"has_signature": false,
"tls": {
"start_address": 5368758272,
"end_address": 5368758280,
"callbacks": 5368754232
},
"header": {
"entry_point": 5088,
"image_base": 5368709120,
"machine": "AMD64",
"subsystem": "Windows GUI"
},
"optional_header": {
"section_alignment": 4096,
"file_alignment": 512,
"size_of_image": 155648
}
},
"analysis": {
"sections": [
{ "name": ".text", "entropy": 5.92 },
{ "name": ".rwx", "entropy": 0 },
{ "name": "UPX0", "entropy": 0.34 },
{ "name": ".rdata", "entropy": 4.03 }
],
"obfuscation": [
{
"value": "abnormal_section_layout_virtual_only",
"category": "obfuscation_hint",
"metadata": {
"section": ".bss",
"raw_size": 0,
"virtual_size": 384
}
}
],
"extended": [
{
"value": "summary",
"category": "pe_metadata",
"metadata": {
"dll_count": 3,
"import_count": 45,
"resource_count": 0,
"has_tls": true,
"has_signature": false
}
}
],
"heuristics": [
{
"value": "packer_suspected",
"metadata": {
"reason": "packer_section_name",
"section": "UPX0"
}
},
{
"value": "anti_debug_heuristic",
"metadata": {
"reason": "anti_debug_api_import",
"dll": "kernel32.dll",
"function": "CheckRemoteDebuggerPresent"
}
},
{
"value": "anti_debug_heuristic",
"metadata": {
"reason": "timing_api_import",
"dll": "kernel32.dll",
"function": "GetTickCount"
}
},
{
"value": "pe_structure_anomaly",
"metadata": {
"reason": "section_overlaps_headers",
"section": ".bss",
"raw_address": 0,
"size_of_headers": 1536
}
},
{
"value": "pe_structure_anomaly",
"metadata": {
"reason": "data_directory_overlap",
"directory_a": "IMAGE_DIRECTORY_ENTRY_IMPORT",
"directory_b": "IMAGE_DIRECTORY_ENTRY_IAT"
}
}
]
}
}
iocx/
├── examples/
├── docs/
├── tests/
└── iocx
├── detectors/
├── parsers/
├── plugins/
├── cli/
└── analysis/
IOCXは安全かつ予測可能に拡張できるように設計されています。 プラグインは第一級市民であり、コアエンジンと同じ決定的スナップショットテストで検証されます。
以下を構築できます:
参照:
docs/specs/overlap-suppression.mddocs/specs/plugin-authoring-guidelines.mdIOCXは単一のバイナリ以上のものです — モジュラーエコシステムです:
IOCXは以下で使用されています:
指標を安全に、決定的に、大規模に抽出する必要があるあらゆる場所で、IOCXが適合します。
すべてのテストサンプルは:
IOCXはCIで厳格なパフォーマンスしきい値を強制し、以下を保証します:
参照:
docs/performance.mdIOCXという名前は、以下に公開されている公式エンジンのみを指します:
iocxという名前のリポジトリiocx-<plugin>iocx-extension-<name>iocx-detector-<feature>IOCXの開発は、安定性、拡張性、より深い静的解析カバレッジに焦点を当てています。 以下の項目は、進行中の作業と探索の領域を表しています。
以下を歓迎します:
ガイドラインについてはCONTRIBUTING.mdを参照してください。
セキュリティ問題を発見した場合は、GitHub issueを開かないでください。
SECURITY.mdの指示に従ってください。
MPL‑2.0ライセンス — LICENSEを参照してください。
| 機能 | IOCX | 一般的なIOC抽出器 | サンドボックス/動的ツール |
|---|
| 安全性 | ゼロ実行、静的のみ | 正規表現のみ、バイナリ安全性なし | 信頼されていないコードを実行(高リスク) |
| 決定性 | 完全に決定的な出力 | ノイズ下では非決定的 | 設計上非決定的 |
| バイナリ認識 | 完全なPE解析、ヒューリスティクス | バイナリサポートなし | あり、ただし安全でなく低速 |
| 敵対的耐性 | 不正なPE、敵対的な文字列に対してテスト済み | 簡単にバイパスされる | しばしばクラッシュまたは誤分類 |
| パフォーマンス | 150〜300MB/秒(テキスト)、6〜15MB/秒(PE) | 非常に変動的 | 極めて低速 |
| CI/CD対応 | はい — 安全、決定的、高速 | 部分的 | いいえ — パイプラインに安全でない |
| スキーマ安定性 | 保証済み | 稀 | なし |
| 1MB時間 |
|---|
| スループット |
|---|
| Crypto | 0.0037 s | ~270 MB/s |
| Filepaths | 0.0041 s | ~250 MB/s |
| IP | 0.0065 s | ~156 MB/s |
| Domains | 0.0035 s | ~300 MB/s |
idna依存関係を追加