
Moteur de provenance et de réduction des faux positifs pour Windows PE sans dépendance (Authenticode embarqué + catalogues de sécurité du système d'exploitation, vérification ROL32 de l'en-tête Rich, détection de build reproductible et entropie différentielle des sections).
Moteur déterministe de provenance PE et de réduction des faux positifs pour le DFIR Windows
Les scanners de malwares statiques naïfs, les heuristiques YARA et les scripts d'entropie souffrent de taux de faux positifs extrêmes (souvent 40 % à 60 % sur des postes propres). Ils classifient régulièrement à tort des utilitaires système Windows légitimes, des assemblys .NET, des applications Electron, des bundles PyInstaller et des builds C/C++ non signés de développeurs comme des malwares.
TrueVerdict est un moteur de triage de fichiers exécutables portables (PE32 / ) sans aucune dépendance, construit strictement sur la bibliothèque standard Python (, , , ) et les API cryptographiques natives Win32 (, ). Il ramène les faux positifs à en remplaçant les heuristiques à indicateur unique par une .
PE32+ctypesstructmathhashlibwintrust.dllcrypt32.dll0,00 % sur les corpus standards OS/développeur)| Piège du scanner naïf | Pourquoi les binaires propres le déclenchent | Comment TrueVerdict élimine le faux positif |
|---|---|---|
| 1. Signatures numériques « manquantes » sur les fichiers système Windows | Plus de 50 % des binaires de C:\Windows\System32 (cmd.exe, notepad.exe, powershell.exe, regedit.exe) ne contiennent pas de table de certificat Authenticode intégrée (IMAGE_DIRECTORY_ENTRY_SECURITY == 0). | Interroge à la fois les signatures PKCS#7 intégrées (WinVerifyTrust) et la base de données du catalogue de sécurité du système d'exploitation Windows (CatRoot .cat) via CryptCATAdminCalcHashFromFileHandle + CryptCATAdminEnumCatalogFromHash. |
| 2. Horodatages de compilation « futurs / falsifiés » (ex. année 2034 ou 2089) | À partir de Windows 10 1607+, Microsoft est passé aux builds reproductibles (Brepro), remplaçant le TimeDateStamp COFF par un hash de build déterministe. | Analyse IMAGE_DIRECTORY_ENTRY_DEBUG pour IMAGE_DEBUG_TYPE_REPRO (Type 16). Reconnaît les hashs de build déterministes et supprime les alertes d'horodatage fausses. |
3. Entropie de fichier élevée (H > 7,2 bits/octet) | Les icônes/PNG compressés dans .rsrc, les métadonnées .NET ou les surcouches d'installeurs (PyInstaller, InnoSetup, NSIS, Electron) approchent naturellement 7,5 - 7,99 bits/octet. | Calcule l'entropie différentielle par section, isolant le code exécutable (.text) des ressources non exécutables (.rsrc) et identifiant les conteneurs applicatifs connus. |
4. Imports d'API Win32 à double usage (VirtualAllocEx, ResumeThread) | Les compilateurs, navigateurs, débogueurs et runtimes de langage (, , ) importent légitimement des API de manipulation de mémoire et de threads. |
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)"]L'exécution de python trueverdict.py --benchmark évalue 32 binaires réels de système et de développeur Windows 11 (y compris des utilitaires signés par catalogue, des binaires Brepro à horodatage futur et un build C/C++ propre non signé) ainsi que 5 spécimens PE64 adversariaux synthétiques :
======================================================================================
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)Remarquez comment C:\Windows\System32\cmd.exe sous Windows 11 ne porte aucune signature Authenticode intégrée, possède un horodatage de compilation de l'année 2034 (0x789F4656) et importe ResumeThread. Un scanner heuristique naïf lui attribue un score de 80/100 (Malveillant/Suspect). TrueVerdict résout sa signature de catalogue OS, valide son entrée IMAGE_DEBUG_TYPE_REPRO, vérifie sa somme de contrôle Rich Header DanS et réduit son score de risque à 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 ne nécessite aucun paquet PyPI externe et fonctionne immédiatement sur toute installation standard de Python 3.10+ sous Windows.
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
Publié sous la licence MIT.
python.execmd.exekernel32.dllÉvalue la densité de la table d'imports et les clusters combinatoires, supprimant les API à double usage lorsqu'elles sont intégrées dans des tables d'imports CRT/OS à haute densité (55+ imports) ou des signatures vérifiées. |
| 5. Builds locaux de développeurs non signés | Les binaires C/C++, Rust ou Go compilés localement n'ont pas de certificats Authenticode et sont signalés par les règles « Non signé = Suspect ». | Applique le principe Non signé != Malveillant (pénalité de base 0) et valide la provenance du compilateur en déchiffrant le Rich Header MSVC (DanS) et en vérifiant sa somme de contrôle ROL32. |