
Semantische Analyse-Engine zur Erkennung von Schwachstellenbehebungen in Windows-Kernel-Treiber-Patches — 58 YAML-Regeln, Ghidra-Dekompilierung, Erreichbarkeitsverfolgung und Bewertung
Automatisiertes Patch-Intelligence- und Finding-Framework
Eine semantische Analyse-Engine zur Erkennung von Sicherheitslücken-Fixes in Windows-Kernel-Treiber-Patches. AutoPiff verwendet konservative YAML-Regeln, um sicherheitsrelevante Codeänderungen mit hoher Präzision und Erklärbarkeit zu identifizieren.
AutoPiff analysiert die Unterschiede zwischen verwundbaren und gepatchten Treiberversionen, um automatisch Folgendes zu erkennen:
ExFreePool)memcpy)ProbeForRead/ProbeForWrite)Hersteller veröffentlicht 500 Treiber-Updates/Jahr
├── 490 sind Funktions-/Leistungs-/kosmetische Änderungen
├── 8 sind kleinere Fehlerbehebungen
└── 2 sind stille Sicherheitsfixes (kein CVE zugewiesen)
Ohne Automatisierung: Manuelles Überprüfen von 500, um 2 zu finden
Mit AutoPiff: Überprüfung von 10 hoch bewerteten, um 2 zu finden
Sicherheitspatches werden oft ohne CVE-Zuweisung veröffentlicht. Manuelles Reverse-Engineering jedes Treiber-Updates, um die sicherheitsrelevanten zu finden, ist nicht praktikabel. AutoPiff löst dieses Problem, indem es automatisch die relevanten Änderungen hervorhebt.
Gesamt: 4-12 Stunden pro Treiberpaar auf 2-5 Minuten reduziert
┌─────────────────────────────────────────────────────────────────┐
│ AUTOMATISIERT durch AutoPiff │
│ ├── Finde die Nadel: "Diese Funktion hat sich nahe ExFreePool │
│ │ geändert" │
│ ├── Klassifiziere: "Sieht aus wie ein Use-After-Free-Fix" │
│ └── Bewerte: "Punktzahl 5,5 – eine Untersuchung wert" │
├─────────────────────────────────────────────────────────────────┤
│ WEITERHIN MANUELL (Ihr Fachwissen) │
│ ├── Bestätige Ausnutzbarkeit: "Kann ich das tatsächlich │
│ │ auslösen?" │
│ ├── Ursachenanalyse: "Warum war das verwundbar?" │
│ ├── Exploit-Entwicklung: "Wie erreiche ich diesen Sink?" │
│ └── Auswirkungsbewertung: "Welches reale Risiko besteht?" │
└─────────────────────────────────────────────────────────────────┘
AutoPiff ersetzt nicht die Exploit-Forschung. Es macht sie im großen Maßstab durchführbar, indem es die Aufklärungsphase automatisiert.
1. Stille Patch-Erkennung
2. 1-Tage-Schwachstellenforschung
3. Sicherheitsaudit von Herstellern
4. Aufbau eines historischen CVE-Korpus
AutoPiff läuft als Karton-Pipeline mit 8 aufeinanderfolgenden Stufen plus einem parallelen DriverAtlas-Triage-Zweig. Jede Stufe ist ein unabhängiger Mikroservice, der über Redis/RabbitMQ kommuniziert.
graph LR
sources["WinBIndex<br/>VirusTotal"]:::src --> s0["Stufe 0<br/>Monitor"]
s0 --> s14["Stufen 1-4<br/>Patch Differ"]
s0 --> triage["DriverAtlas<br/>Triage"]:::triage
s14 --> s5["Stufe 5<br/>Erreichbarkeit"]
s5 --> s6["Stufe 6<br/>Bewertung"]
s6 --> s7["Stufe 7<br/>Bericht"]
s6 --> s8["Stufe 8<br/>Alarm"]
triage --> alerts["MWDB-Tags<br/>+ Alarme"]:::triage
classDef src fill:#1a1a2e,stroke:#e94560,color:#eee
classDef triage fill:#1a1a2e,stroke:#e9a345,color:#eee
classDef default fill:#16213e,stroke:#0f3460,color:#eee
AutoPiff enthält 58 Regeln in 22 Kategorien. Siehe Docs/semantic_rules.md für die vollständige Spezifikation und Docs/SEMANTIC_RULES_REFERENCE.md für die technische Referenz.
Die Regel-Engine verfolgt 50+ gefährliche API-Symbole in 8 Sink-Gruppen:
memory_copy: RtlCopyMemory, memcpy, memmovepool_alloc: ExAllocatePool, ExAllocatePoolWithTagpool_free: ExFreePool, ExFreePoolWithTaguser_probe: ProbeForRead, ProbeForWriteio_sanitization: RtlULongAdd, RtlSizeTMultexceptions: __try, __exceptstring_copy: strcpy, wcsncpyrefcounting: InterlockedIncrement/DecrementFunde werden mit einem konfigurierbaren Modell bewertet (rules/scoring.yaml):
final_score = semantic_score + reachability_bonus + sink_bonus - penalties
Bewertungskomponenten:
Schwellwerte:
git clone https://github.com/splintersfury/AutoPiff.git
cd AutoPiff
docker compose up -d
Für den vollständigen Produktions-Stack mit MWDB, Dashboards und Überwachung siehe driver_analyzer.
pip install pyyaml
from services.karton_patch_differ.rule_engine import SemanticRuleEngine
engine = SemanticRuleEngine('rules/semantic_rules.yaml', 'rules/sinks.yaml')
hits = engine.evaluate(func_name, old_code, new_code, diff_lines)
Bearbeite rules/semantic_rules.yaml, um Regeln hinzuzufügen oder zu ändern:
rules:
- rule_id: my_custom_rule
category: bounds_check
confidence: 0.85
required_signals:
- sink_group: memory_copy
- change_type: guard_added
- guard_kind: length_check
plain_english_summary: Added length validation before memory copy.
AutoPiff erstellt JSON-Berichte, die an MWDB-Beispiele angehängt werden:
{
"pairing": {
"driver_new": {"sha256": "...", "version": "2.0.9.0"},
"driver_old": {"sha256": "...", "version": "2.0.8.0"},
"decision": "accept",
"confidence": 0.95
},
"semantic_deltas": {
"deltas": [
{
"function": "HandleIoctl",
"rule_id": "null_after_free_added",
"category": "lifetime_fix",
"confidence": 0.88,
"sinks": ["pool_free"],
"final_score": 5.5,
"why_matters": "Pointer is now set to NULL after freeing memory."
}
],
"summary": {
"total_deltas": 1,
"top_score": 5.5,
"match_rate": 100.0
}
}
}
AutoPiff/
├── Docs/ # Entwurfsdokumente und Spezifikationen
├── ghidra/scripts/ # Ghidra-Headless-Skripte
│ └── autopiff_reachability.py # Erreichbarkeits-BFS + Dekompilierungs-Export
├── rules/
│ ├── semantic_rules.yaml # 58 Erkennungsregeln
│ ├── sinks.yaml # 50+ gefährliche API-Symbole
│ └── scoring.yaml # Konfiguration des Bewertungsmodells
├── schemas/ # JSON-Schemas für jede Stufe
├── services/
│ ├── karton-patch-differ/ # Stufen 1-4: Diffing + semantische Analyse
│ ├── karton-reachability/ # Stufe 5: Call-Graph + Dekompilierung
│ ├── karton-ranking/ # Stufe 6: Bewertung
│ ├── karton-report/ # Stufe 7: Berichtserstellung
│ ├── karton-driver-triage/ # DriverAtlas-Angriffsflächen-Triage
│ ├── autopiff-alerter/ # Stufe 8: Telegram-Benachrichtigungen
│ ├── driver-monitor/ # Stufe 0: Versionsabfrage
│ └── dashboard/ # Weboberfläche
├── tests/unit/ # 137 Unit-Tests
├── docker-compose.yml
└── README.md
AutoPiff ist für die Arbeit mit driver_analyzer konzipiert, der die vollständige Produktionsinfrastruktur (MWDB, Karton, MinIO, Dashboards) bereitstellt. Die compose-Datei von driver_analyzer baut AutoPiff-Dienste direkt ein:
# In driver_analyzer/docker-compose.yml
karton-driver-patch-differ:
build:
context: ../AutoPiff
dockerfile: services/karton-patch-differ/Dockerfile
volumes:
- ../AutoPiff/rules:/app/rules:ro
Siehe die driver_analyzer README für Einrichtungsanweisungen.
MIT-Lizenz – Siehe LICENSE für Details.
| Phase | Manueller Aufwand | Mit AutoPiff | Zeitersparnis |
|---|
| Versionspaarung | 5-15 Min./Treiber | Automatisch | ~100 % |
| Dekompilierung | 2-10 Min./Binärdatei | Gebündelt, parallel | ~95 % |
| Funktionsabgleich | 30-60 Min./Paar | Sofort | ~100 % |
| Identifizierung von Sicherheitsänderungen | 2-8 Std./Paar | Sekunden | ~99 % |
| Erste Sichtung & Bewertung | 1-2 Std. | Sofort | ~100 % |
| Berichterstellung | 30-60 Min. | Sofort | ~100 % |
| Stufe | Service | Aufgabe |
|---|
| 0 | driver-monitor | Fragt WinBIndex und VirusTotal nach neuen Treiberversionen ab, lädt in MWDB hoch |
| 1-4 | karton-patch-differ | Versionspaarung, Ghidra-Dekompilierung, Funktionsabgleich, semantische Regelauswertung |
| 5 | karton-reachability | Ghidra-Call-Graph-BFS von IOCTL/IRP-Einstiegspunkten zu geänderten Funktionen, vollständiger Dekompilierungs-Export |
| 6 | karton-ranking | Bewertet Funde anhand von Erreichbarkeit, semantischer Schwere und Angriffsfläche |
| 7 | karton-report | Erstellt strukturierte Markdown-Berichte, lädt in MWDB hoch |
| 8 | autopiff-alerter | Sendet Telegram-Benachrichtigungen für Funde mit einem Wert >= 8,0 |
| — | autopiff-driver-triage | DriverAtlas-Angriffsflächenbewertung (parallel zu 1-4), taggt MWDB-Beispiele, Telegram-Benachrichtigungen |
| Kategorie | Beispielerkennung |
|---|
bounds_check | Hinzugefügte Längenprüfung vor memcpy |
lifetime_fix | Null-Zuweisung nach ExFreePool |
user_boundary_check | Hinzugefügte ProbeForRead/ProbeForWrite |
int_overflow | Verwendung sicherer Mathe-Helfer |
state_hardening | Interlocked-Referenzzählungsoperationen |
ioctl_input_validation | Neue Größen-/Typenprüfungen in Dispatch-Handlern |
pool_type_hardening | Migration zu NonPagedPoolNx |
privilege_check | Hinzugefügte SeSinglePrivilegeCheck |
| Variable | Beschreibung | Standard |
|---|
MWDB_API_URL | MWDB Core API-Endpunkt | http://mwdb-core:8080/api/ |
MWDB_API_KEY | MWDB-API-Schlüssel für Uploads | (erforderlich) |
KARTON_REDIS_HOST | Redis-Host für Karton | karton-redis |
AUTOPIFF_GHIDRA_TIMEOUT | Ghidra-Dekompilierungs-Timeout (Sekunden) | 900 |
VT_API_KEY | VirusTotal-API-Schlüssel für Treiberüberwachung | (optional) |
TELEGRAM_BOT_TOKEN | Telegram-Bot-Token für Benachrichtigungen | (optional) |
TELEGRAM_CHAT_ID | Telegram-Chat für Benachrichtigungen | (optional) |
AUTOPIFF_SCORE_THRESHOLD | Mindestwert für Telegram-Benachrichtigungen | 8.0 |
DRIVERATLAS_SCORE_THRESHOLD | Mindest-Angriffsflächenwert für Triage-Benachrichtigungen | 8.0 |
| Dokument | Beschreibung |
|---|
Docs/semantic_rules.md | Semantische Regelspezifikation: wie Regeln strukturiert sind und was jede Kategorie erkennt |
Docs/SEMANTIC_RULES_REFERENCE.md | Technische Referenz für die Regel-Engine, Bewertungslogik und Bewertung |
Docs/reachability.md | Erreichbarkeits-Tagging-Spezifikation: Call-Graph-BFS von Dispatch-Einstiegspunkten |
Docs/reporting.md | Berichtsausgabe-Spezifikation und -Format |
Docs/decisions.md | Entwurfsentscheidungen und Begründungsprotokoll |
rules/semantic_rules.yaml | Alle 58 Erkennungsregeln (YAML) |
rules/sinks.yaml | 50+ gefährliche API-Symbole, gruppiert nach Kategorie |
rules/scoring.yaml | Konfiguration des Bewertungsmodells |
schemas/ | JSON-Schemas für die Ausgabe jeder Pipeline-Stufe |