面向 Windows DFIR 的确定性 PE 来源验证与误报削减引擎
朴素的静态恶意软件扫描器、YARA 启发式规则和熵值脚本存在极高的误报率(在干净终端上通常高达 40% 至 60%)。它们经常将合法的 Windows 系统工具、.NET 程序集、Electron 应用、PyInstaller 打包程序以及未签名的开发者 C/C++ 构建产物误判为恶意软件。
TrueVerdict 是一个零依赖的可移植可执行文件(PE32 / PE32+)分诊引擎,严格基于 Python 标准库(ctypes、struct、math、hashlib)和原生 Win32 加密 API(wintrust.dll、crypt32.dll)构建。它通过用 7 层加密与结构交叉验证矩阵 取代单指标启发式规则,将误报率降至 接近零(在标准操作系统/开发者语料库上为 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 解析其操作系统目录签名,验证其 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 许可证 发布。
| 朴素扫描器陷阱 | 为什么干净二进制文件会触发它 | TrueVerdict 如何消除误报 |
|---|
| 1. Windows 系统文件"缺失"数字签名 | 超过 50% 的 C:\Windows\System32 二进制文件(cmd.exe、notepad.exe、powershell.exe、regedit.exe)不包含嵌入的 Authenticode 证书表(IMAGE_DIRECTORY_ENTRY_SECURITY == 0)。 | 通过 CryptCATAdminCalcHashFromFileHandle + CryptCATAdminEnumCatalogFromHash 同时查询嵌入的 PKCS#7 签名(WinVerifyTrust)和 Windows 操作系统安全目录(CatRoot .cat) 数据库。 |
| 2. "未来/伪造"的编译时间戳(例如 2034 年或 2089 年) | 从 Windows 10 1607+ 开始,Microsoft 转向可复现构建(Brepro),用确定性构建哈希替换 COFF TimeDateStamp。 | 解析 IMAGE_DIRECTORY_ENTRY_DEBUG 以查找 IMAGE_DEBUG_TYPE_REPRO(Type 16)。识别确定性构建哈希并抑制虚假时间戳告警。 |
3. 高文件熵(H > 7.2 比特/字节) | .rsrc 中的压缩图标/PNG、.NET 元数据或安装程序覆盖层(PyInstaller、InnoSetup、NSIS、Electron)自然接近 7.5 - 7.99 比特/字节。 | 计算差分节区熵,将可执行代码(.text)与非可执行资源(.rsrc)隔离,并对已知应用程序容器进行指纹识别。 |
4. 双用途 Win32 API 导入(VirtualAllocEx、ResumeThread) | 编译器、浏览器、调试器和语言运行时(python.exe、cmd.exe、kernel32.dll)合法地导入内存和线程操作 API。 | 评估导入表密度与组合聚类,当双用途 API 嵌入在高密度 CRT/操作系统导入表(55+ 个导入)或已验证签名中时予以抑制。 |
| 5. 未签名的本地开发者构建 | 本地编译的 C/C++、Rust 或 Go 二进制文件缺少 Authenticode 证书,会被"未签名 = 可疑"规则标记。 | 强制执行未签名 != 恶意(0 基线惩罚),并通过解密 MSVC Rich Header(DanS) 及其 ROL32 校验和来验证编译器来源。 |