
विंडोज कर्नेल ड्राइवर पैच में सुरक्षा कमजोरियों के समाधान का पता लगाने के लिए सिमैंटिक विश्लेषण इंजन — 58 YAML नियम, Ghidra डिकंपाइलेशन, पहुंच-योग्यता ट्रेसिंग और स्कोरिंग
स्वचालित पैच बुद्धिमत्ता और खोज ढांचा
विंडोज कर्नेल ड्राइवर पैच में भेद्यता सुधार का पता लगाने के लिए एक सिमैंटिक विश्लेषण इंजन। AutoPiff उच्च सटीकता और व्याख्याक्षमता के साथ सुरक्षा-प्रासंगिक कोड परिवर्तनों की पहचान करने के लिए रूढ़िवादी YAML नियमों का उपयोग करता है।
AutoPiff असुरक्षित और पैच किए गए ड्राइवर संस्करणों के बीच अंतर का विश्लेषण करके स्वचालित रूप से पता लगाता है:
ExFreePool के बाद शून्य असाइनमेंट)memcpy से पहले लंबाई सत्यापन)ProbeForRead/ProbeForWrite)Vendor releases 500 driver updates/year
├── 490 are feature/performance/cosmetic changes
├── 8 are minor bug fixes
└── 2 are silent security fixes (no CVE assigned)
Without automation: Manually review 500 to find 2
With AutoPiff: Review 10 high-scorers to find 2
सुरक्षा पैच अक्सर बिना CVE असाइनमेंट के जारी किए जाते हैं। प्रत्येक ड्राइवर अपडेट को मैन्युअल रूप से रिवर्स इंजीनियर करके सुरक्षा-प्रासंगिक परिवर्तन खोजना संभव नहीं है। AutoPiff स्वचालित रूप से उन परिवर्तनों को सामने लाकर इस समस्या को हल करता है जो मायने रखते हैं।
कुल: प्रति ड्राइवर जोड़ी 4-12 घंटे से घटकर 2-5 मिनट
┌─────────────────────────────────────────────────────────────────┐
│ AUTOMATED by AutoPiff │
│ ├── Find the needle: "This function changed near ExFreePool" │
│ ├── Classify: "Looks like a use-after-free fix" │
│ └── Rank: "Score 5.5 - worth investigating" │
├─────────────────────────────────────────────────────────────────┤
│ STILL MANUAL (Your expertise) │
│ ├── Confirm exploitability: "Can I actually trigger this?" │
│ ├── Root cause analysis: "Why was this vulnerable?" │
│ ├── Exploit development: "How do I reach this sink?" │
│ └── Impact assessment: "What's the real-world risk?" │
└─────────────────────────────────────────────────────────────────┘
AutoPiff शोषण अनुसंधान को प्रतिस्थापित नहीं करता। यह टोही चरण को स्वचालित करके इसे बड़े पैमाने पर संभव बनाता है।
1. मूक पैच पता लगाना
2. 1-दिवसीय भेद्यता अनुसंधान
3. विक्रेता सुरक्षा ऑडिटिंग
4. ऐतिहासिक CVE कोष निर्माण
AutoPiff एक Karton पाइपलाइन के रूप में चलता है जिसमें 8 क्रमिक चरण और एक समानांतर DriverAtlas ट्रायेज शाखा होती है। प्रत्येक चरण Redis/RabbitMQ के माध्यम से संचार करने वाला एक स्वतंत्र माइक्रोसर्विस है।
graph LR
sources["WinBIndex<br/>VirusTotal"]:::src --> s0["Stage 0<br/>Monitor"]
s0 --> s14["Stages 1-4<br/>Patch Differ"]
s0 --> triage["DriverAtlas<br/>Triage"]:::triage
s14 --> s5["Stage 5<br/>Reachability"]
s5 --> s6["Stage 6<br/>Ranking"]
s6 --> s7["Stage 7<br/>Report"]
s6 --> s8["Stage 8<br/>Alerter"]
triage --> alerts["MWDB Tags<br/>+ Alerts"]:::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 में 22 श्रेणियों में 58 नियम शामिल हैं। पूर्ण विशिष्टता के लिए Docs/semantic_rules.md और तकनीकी संदर्भ के लिए Docs/SEMANTIC_RULES_REFERENCE.md देखें।
नियम इंजन 8 सिंक समूहों में 50+ खतरनाक API प्रतीकों को ट्रैक करता है:
memory_copy: RtlCopyMemory, memcpy, memmovepool_alloc: ExAllocatePool, ExAllocatePoolWithTagpool_free: ExFreePool, ExFreePoolWithTaguser_probe: ProbeForRead, ProbeForWriteio_sanitization: RtlULongAdd, RtlSizeTMultexceptions: __try, __exceptstring_copy: strcpy, wcsncpyrefcounting: InterlockedIncrement/Decrementनिष्कर्षों को एक कॉन्फ़िगरेबल मॉडल (rules/scoring.yaml) का उपयोग करके स्कोर किया जाता है:
final_score = semantic_score + reachability_bonus + sink_bonus - penalties
स्कोर घटक:
गेटिंग:
git clone https://github.com/splintersfury/AutoPiff.git
cd AutoPiff
docker compose up -d
पूर्ण उत्पादन स्टैक (MWDB, डैशबोर्ड, मॉनिटरिंग) के लिए, 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)
नियम जोड़ने या संशोधित करने के लिए rules/semantic_rules.yaml संपादित करें:
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 MWDB नमूनों से जुड़ी JSON रिपोर्ट उत्पन्न करता है:
{
"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/ # डिज़ाइन दस्तावेज़ और विशिष्टताएँ
├── ghidra/scripts/ # Ghidra हेडलेस स्क्रिप्ट
│ └── autopiff_reachability.py # पहुंच BFS + डीकंपाइलेशन निर्यात
├── rules/
│ ├── semantic_rules.yaml # 58 पता लगाने के नियम
│ ├── sinks.yaml # 50+ खतरनाक API प्रतीक
│ └── scoring.yaml # स्कोरिंग मॉडल कॉन्फ़िगरेशन
├── schemas/ # प्रत्येक चरण के लिए JSON स्कीमा
├── services/
│ ├── karton-patch-differ/ # चरण 1-4: डिफिंग + सिमैंटिक विश्लेषण
│ ├── karton-reachability/ # चरण 5: कॉल-ग्राफ + डीकंपाइलेशन
│ ├── karton-ranking/ # चरण 6: स्कोरिंग
│ ├── karton-report/ # चरण 7: रिपोर्ट निर्माण
│ ├── karton-driver-triage/ # DriverAtlas हमले की सतह ट्रायेज
│ ├── autopiff-alerter/ # चरण 8: Telegram अलर्ट
│ ├── driver-monitor/ # चरण 0: संस्करण पोलिंग
│ └── dashboard/ # वेब UI
├── tests/unit/ # 137 यूनिट परीक्षण
├── docker-compose.yml
└── README.md
AutoPiff को driver_analyzer के साथ काम करने के लिए डिज़ाइन किया गया है, जो पूर्ण उत्पादन बुनियादी ढांचा (MWDB, Karton, MinIO, डैशबोर्ड) प्रदान करता है। driver_analyzer compose फ़ाइल AutoPiff सेवाओं को सीधे बनाती है:
# 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
सेटअप निर्देशों के लिए driver_analyzer README देखें।
MIT लाइसेंस - विवरण के लिए LICENSE देखें।
| चरण | मैन्युअल प्रयास | AutoPiff के साथ | बचा हुआ समय |
|---|
| संस्करण जोड़ी | 5-15 मिनट/ड्राइवर | स्वचालित | ~100% |
| डीकंपाइलेशन | 2-10 मिनट/बाइनरी | बैच, समानांतर | ~95% |
| फ़ंक्शन मिलान | 30-60 मिनट/जोड़ी | तुरंत | ~100% |
| सुरक्षा परिवर्तन पहचान | 2-8 घंटे/जोड़ी | सेकंड | ~99% |
| प्रारंभिक ट्रायेज और रैंकिंग | 1-2 घंटे | तुरंत | ~100% |
| रिपोर्ट निर्माण | 30-60 मिनट | तुरंत | ~100% |
| चरण | सेवा | यह क्या करता है |
|---|
| 0 | driver-monitor | नए ड्राइवर संस्करणों के लिए WinBIndex और VirusTotal को पोल करता है, MWDB पर अपलोड करता है |
| 1-4 | karton-patch-differ | संस्करण जोड़ी, Ghidra डीकंपाइलेशन, फ़ंक्शन मिलान, सिमैंटिक नियम मूल्यांकन |
| 5 | karton-reachability | Ghidra कॉल-ग्राफ BFS IOCTL/IRP प्रवेश बिंदुओं से परिवर्तित फ़ंक्शन तक, पूर्ण डीकंपाइलेशन निर्यात |
| 6 | karton-ranking | पहुंच, सिमैंटिक गंभीरता और हमले की सतह का उपयोग करके निष्कर्षों को स्कोर करता है |
| 7 | karton-report | संरचित मार्कडाउन रिपोर्ट उत्पन्न करता है, MWDB पर अपलोड करता है |
| 8 | autopiff-alerter | 8.0 या उससे अधिक स्कोर वाले निष्कर्षों के लिए Telegram अलर्ट भेजता है |
| — | autopiff-driver-triage | DriverAtlas हमले की सतह स्कोरिंग (1-4 के समानांतर), MWDB नमूनों को टैग करता है, Telegram अलर्ट |
| श्रेणी | उदाहरण पता लगाना |
|---|
bounds_check | memcpy से पहले लंबाई की जाँच जोड़ी गई |
lifetime_fix | ExFreePool के बाद शून्य असाइनमेंट |
user_boundary_check | ProbeForRead/ProbeForWrite जोड़ा गया |
int_overflow | सुरक्षित गणित सहायक का उपयोग |
state_hardening | इंटरलॉक्ड रेफ़रेंस काउंट संचालन |
ioctl_input_validation | डिस्पैच हैंडलर में नए आकार/प्रकार की जाँच |
pool_type_hardening | NonPagedPoolNx में माइग्रेशन |
privilege_check | SeSinglePrivilegeCheck जोड़ा गया |
| चर | विवरण | डिफ़ॉल्ट |
|---|
MWDB_API_URL | MWDB कोर API एंडपॉइंट | http://mwdb-core:8080/api/ |
MWDB_API_KEY | अपलोड के लिए MWDB API कुंजी | (आवश्यक) |
KARTON_REDIS_HOST | Karton के लिए Redis होस्ट | karton-redis |
AUTOPIFF_GHIDRA_TIMEOUT | Ghidra डीकंपाइलेशन टाइमआउट (सेकंड) | 900 |
VT_API_KEY | ड्राइवर मॉनिटरिंग के लिए VirusTotal API कुंजी | (वैकल्पिक) |
TELEGRAM_BOT_TOKEN | अलर्ट के लिए Telegram बॉट टोकन | (वैकल्पिक) |
TELEGRAM_CHAT_ID | अलर्ट के लिए Telegram चैट | (वैकल्पिक) |
AUTOPIFF_SCORE_THRESHOLD | Telegram अलर्ट के लिए न्यूनतम स्कोर | 8.0 |
DRIVERATLAS_SCORE_THRESHOLD | ट्रायेज अलर्ट के लिए न्यूनतम हमले की सतह स्कोर | 8.0 |
| दस्तावेज़ | विवरण |
|---|
Docs/semantic_rules.md | सिमैंटिक नियम विशिष्टता: नियम कैसे संरचित हैं और प्रत्येक श्रेणी क्या पता लगाती है |
Docs/SEMANTIC_RULES_REFERENCE.md | नियम इंजन, मूल्यांकन तर्क और स्कोरिंग के लिए तकनीकी संदर्भ |
Docs/reachability.md | पहुंच टैगिंग स्पेक: डिस्पैच प्रवेश बिंदुओं से कॉल-ग्राफ BFS |
Docs/reporting.md | रिपोर्ट आउटपुट विशिष्टता और प्रारूप |
Docs/decisions.md | डिज़ाइन निर्णय और तर्क लॉग |
rules/semantic_rules.yaml | सभी 58 पता लगाने के नियम (YAML) |
rules/sinks.yaml | श्रेणी के अनुसार समूहित 50+ खतरनाक API प्रतीक |
rules/scoring.yaml | स्कोरिंग मॉडल कॉन्फ़िगरेशन |
schemas/ | प्रत्येक पाइपलाइन चरण आउटपुट के लिए JSON स्कीमा |