
依存関係ゼロのWindows PE来歴および誤検知削減エンジン(埋め込みAuthenticode + OSセキュリティカタログ、Rich Header ROL32検証、再現可能ビルド検出、セクションエントロピー差分)。
Windows DFIR 向けの決定論的 PE 来歴追跡および偽陽性削減エンジン
単純な静的マルウェアスキャナ、YARA ヒューリスティック、エントロピースクリプトは、極端に高い偽陽性率(クリーンなエンドポイントでしばしば 40% から 60%)に悩まされます。これらは正当な Windows システムユーティリティ、.NET アセンブリ、Electron アプリ、PyInstaller バンドル、署名されていない開発者による C/C++ ビルドを日常的にマルウェアと誤分類します。
TrueVerdict は、Python 標準ライブラリ(ctypes、struct、math、hashlib)とネイティブ Win32 暗号化 API(wintrust.dll、crypt32.dll)のみで構築された、依存関係ゼロの Portable Executable(PE32 / PE32+)トリアージエンジンです。単一指標のヒューリスティックを 7 層の暗号化・構造的裏付けマトリクス に置き換えることで、偽陽性を ほぼゼロ(標準的な OS/開発者コーパスで 0.00%) にまで低減します。
flowchart TD
A["Target PE32 / PE32+ Binary"] --> L1["Layer 1: Dual-Path Cryptographic Verification\n(wintrust.dll Embedded PKCS#7 + CatRoot .cat Lookup)"]
L1 --> L2["Layer 2: Compiler Provenance\n(Rich Header 'DanS' XOR Decryption & ROL32 Checksum)"]
L2 --> L3["Layer 3: Debug & Timestamp Validation\n(IMAGE_DEBUG_TYPE_REPRO Deterministic Build Detection)"]
L3 --> L4["Layer 4: Differential Entropy & Section Permissions\n(.text vs .rsrc Segmentation + RWX Memory Detection)"]
L4 --> L5["Layer 5: Combinatorial IAT Profiling\n(MD5 Imphash + Offensive Cluster vs. Benign CRT Density)"]
L5 --> L6["Layer 6: Canonical Path & Identity Verification\n(System32 Path Validation + Levenshtein Typosquatting + VS_VERSIONINFO)"]
L6 --> L7["Layer 7: Multi-Vector Corroboration Gate\n(Blocks Single-Indicator Alerts; Requires >= 2 Independent Layers)"]
L7 --> V["Deterministic Triage Verdict\n(BENIGN / LOW_RISK_ANOMALY / SUSPICIOUS / MALICIOUS)"]python trueverdict.py --benchmark を実行すると、32 個の実際の Windows 11 システムおよび開発者バイナリ(カタログ署名されたユーティリティ、Brepro の未来タイムスタンプ付きバイナリ、署名されていないクリーンな C/C++ ビルドを含む)と、5 個の合成敵対的 PE64 検体を評価します:
======================================================================================
TRUEVERDICT - LIVE FALSE-POSITIVE STRESS BENCHMARK & ADVERSARIAL VALIDATION
======================================================================================
[PHASE 1] Scanning 32 Legitimate OS & Developer Binaries...
--------------------------------------------------------------------------------------
BINARY NAME | SIGNING MODE | NAIVE | FINAL | VERDICT
--------------------------------------------------------------------------------------
notepad.exe | OS_CATALOG | 45 | 0 | BENIGN (99.9%)
cmd.exe | OS_CATALOG | 80 | 0 | BENIGN (99.9%)
svchost.exe | EMBEDDED_AUTHENTICODE | 60 | 0 | BENIGN (99.9%)
calc.exe | OS_CATALOG | 45 | 0 | BENIGN (99.9%)
explorer.exe | EMBEDDED_AUTHENTICODE | 60 | 0 | BENIGN (99.9%)
regedit.exe | OS_CATALOG | 45 | 0 | BENIGN (99.9%)
certutil.exe | OS_CATALOG | 45 | 0 | BENIGN (99.9%)
spoolsv.exe | OS_CATALOG | 80 | 0 | BENIGN (99.9%)
powershell.exe | OS_CATALOG | 45 | 0 | BENIGN (99.9%)
python.exe | EMBEDDED_AUTHENTICODE | 0 | 0 | BENIGN (99.9%)
clean_unsigned_dev_tool.exe | UNSIGNED | 20 | 0 | BENIGN (98.5%)
... (all 32 legitimate binaries score 0/100)
[PHASE 2] Scanning 5 Synthetic Adversarial Threat Specimens...
--------------------------------------------------------------------------------------
THREAT SPECIMEN | PRIMARY DETECTION VECTORS | SCORE | VERDICT
--------------------------------------------------------------------------------------
svchost.exe | L2_RICH_F,L6_MASQUE | 100 | MALICIOUS (99.4%)
scvhost.exe | L2_RICH_F,L6_MASQUE | 100 | MALICIOUS (99.4%)
reflective_rwx_stub.exe | L4_RWX_ME,L4_PACKED | 100 | MALICIOUS (99.4%)
hollow_injector.exe | L2_RICH_F,L3_TIMEST | 90 | MALICIOUS (94.6%)
tampered_cert_implant.exe | L1_CRYPTO,L2_RICH_F | 100 | MALICIOUS (99.4%)
======================================================================================
BENCHMARK SUMMARY: NAIVE HEURISTICS vs. TRUEVERDICT CORROBORATION ENGINE
======================================================================================
Total Binaries Evaluated : 37 (2.70s)
Naive Heuristic False Positives : 18/32 (56.25% FPR)
TrueVerdict False Positives : 0/32 (0.00% FPR)
Total False-Positive Risk Suppressed: -1175 heuristic noise points
Adversarial Threat Detection Rate : 5/5 (100.00% TPR)
======================================================================================
cmd.exe)Windows 11 の C:\Windows\System32\cmd.exe が、埋め込みの Authenticode 署名を持たず、**2034 年のコンパイルタイムスタンプ(0x789F4656)**を持ち、ResumeThread をインポートしていることに注目してください。単純なヒューリスティックスキャナはこれを 80/100(悪意/疑わしい) とスコアリングします。TrueVerdict はその OS カタログ署名を解決し、IMAGE_DEBUG_TYPE_REPRO エントリを検証し、DanS Rich Header チェックサムを検証して、リスクスコアを 0/100(BENIGN) に低減します:
====================================================================================
TRUEVERDICT FORENSIC TRIAGE REPORT : cmd.exe
====================================================================================
File Path : C:\Windows\System32\cmd.exe
File Size : 344,064 bytes
SHA-256 : 97ac98b1a92c286054cce55239cfccdfc23a5517bd07fe693072c9ca96c7dabb
Imphash (MD5) : 010b165e4c37f484601d3dbd700c9423
Architecture : x64 (64-bit) | Linker: 14.38 | Container: NATIVE_UNPACKED
Compile Timestamp : 2034-02-16 12:02:30 UTC [REPRODUCIBLE_BUILD_HASH]
[1] CRYPTOGRAPHIC PROVENANCE (AUTHENTICODE + OS CATALOG)
------------------------------------------------------------------------------
Verification Mode : OS_CATALOG
Status : Valid Windows Security Catalog Signature
Verified Signer : Microsoft Windows Production PCA 2011
Certificate Issuer: Microsoft Root Certificate Authority 2010
OS Security Cat : C:\WINDOWS\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\Microsoft-Windows-Client-Desktop-Required-Package0512~31bf3856ad364e35~amd64~~10.0.26100.9444.cat
[2] COMPILER PROVENANCE (RICH HEADER & DEBUG METADATA)
------------------------------------------------------------------------------
Rich Header (DanS): Present | XOR Key: 0xD7965A3A | ROL32 Checksum: VALID (Authentic MSVC Build)
Toolchain Objects : 11 @comp.id records
CodeView PDB Path : cmd.pdb
[5] FALSE-POSITIVE SUPPRESSION & CORROBORATION MATRIX
------------------------------------------------------------------------------
[+] TRUST ANCHOR [L1_CRYPTO_TRUST ] (-75) Valid Windows Security Catalog Signature (Microsoft Windows Production PCA 2011)
[+] TRUST ANCHOR [L2_RICH_PROVENANCE ] (-15) Authentic MSVC Rich Header ('DanS') verified via ROL32 checksum (0xD7965A3A, 11 toolchain build objects)
[~] FP SUPPRESSED [L1_CATALOG_RECOVERY ] (-20) Binary has no embedded Authenticode table, but matched verified OS Catalog
[~] FP SUPPRESSED [L3_BREPRO_TIMESTAMP ] (-25) Non-chronological PE TimeDateStamp (0x789F4656) verified as deterministic Reproducible Build (IMAGE_DEBUG_TYPE_REPRO) hash
[~] FP SUPPRESSED [L5_DUAL_USE_API_SUPPRESSION] (-35) Dual-use Win32 APIs (ResumeThread) suppressed within high-density/trusted IAT (287 total imports)
[*] Active Risk Vectors: 0 (Zero corroborated threat indicators)
====================================================================================
NAIVE HEURISTIC SCORE : 80/100 --> TRUEVERDICT FINAL SCORE : 0/100 (-80 FP noise suppressed)
FINAL VERDICT : BENIGN (Confidence: 99.9% | Corroborated Layers: 0)
====================================================================================
TrueVerdict は 外部 PyPI パッケージを一切必要とせず、Windows 上の標準的な Python 3.10+ インストールでそのまま動作します。
git clone https://github.com/prox0959/TrueVerdict.git
cd TrueVerdict
# 1. Run the live False-Positive Stress Benchmark (32 OS/Dev binaries + 5 synthetic threats)
python trueverdict.py --benchmark
# 2. Triage a single binary (.exe, .dll, .sys)
python trueverdict.py C:\Windows\System32\cmd.exe
# 3. Triage an entire directory and export structured JSON
python trueverdict.py --dir C:\Windows\System32 --limit 50 --json system32_triage.json
# 4. Run unit & integration test suite
python -m unittest discover -s tests -v
MIT License の下でリリースされています。
| 単純なスキャナの罠 | クリーンなバイナリが引っかかる理由 | TrueVerdict が偽陽性を排除する方法 |
|---|
| 1. Windows システムファイルにおけるデジタル署名の「欠如」 | C:\Windows\System32 のバイナリ(cmd.exe、notepad.exe、powershell.exe、regedit.exe)の 50% 以上は、埋め込みの Authenticode 証明書テーブル(IMAGE_DIRECTORY_ENTRY_SECURITY == 0)を含んでいません。 | 埋め込み PKCS#7 署名(WinVerifyTrust)と、Windows の OS セキュリティカタログ(CatRoot .cat) データベースの両方を、CryptCATAdminCalcHashFromFileHandle + CryptCATAdminEnumCatalogFromHash 経由で照会します。 |
| 2. 「未来の / 偽造された」コンパイルタイムスタンプ(例:2034 年や 2089 年) | Windows 10 1607 以降、Microsoft は 再現可能ビルド(Brepro) に切り替え、COFF の TimeDateStamp を決定論的ビルドハッシュに置き換えました。 | IMAGE_DIRECTORY_ENTRY_DEBUG を解析して IMAGE_DEBUG_TYPE_REPRO(Type 16) を探します。決定論的ビルドハッシュを認識し、偽のタイムスタンプアラートを抑制します。 |
3. 高いファイルエントロピー(H > 7.2 bits/byte) | .rsrc 内の圧縮されたアイコン/PNG、.NET メタデータ、またはインストーラのオーバーレイ(PyInstaller、InnoSetup、NSIS、Electron)は、自然に 7.5 - 7.99 bits/byte に近づきます。 | 差分セクションエントロピーを計算し、実行可能コード(.text)を非実行可能リソース(.rsrc)から分離し、既知のアプリケーションコンテナをフィンガープリントします。 |
4. 両用の Win32 API インポート(VirtualAllocEx、ResumeThread) | コンパイラ、ブラウザ、デバッガ、言語ランタイム(python.exe、cmd.exe、kernel32.dll)は、正当にメモリおよびスレッド操作 API をインポートします。 | インポートテーブル密度と組み合わせクラスタを評価し、高密度の CRT/OS インポートテーブル(55+ インポート)または検証済み署名内に埋め込まれている場合、両用 API を抑制します。 |
| 5. 署名されていないローカル開発者ビルド | ローカルでコンパイルされた C/C++、Rust、Go バイナリは Authenticode 証明書を欠いており、「署名なし = 疑わしい」ルールによってフラグが立てられます。 | 署名なし != 悪意(ベースラインのペナルティ 0)を徹底し、**MSVC Rich Header(DanS)**を復号してその ROL32 チェックサムを検証することで、コンパイラの来歴を検証します。 |