
محرك تحليل دلالي للكشف عن إصلاحات الثغرات في تصحيحات برامج تشغيل نواة ويندوز — 58 قاعدة بصيغة YAML، فك ترجمة Ghidra، تتبع الوصول، وتقييم
إطار عمل ذكي للبحث عن التصحيحات وتحليلها
محرك تحليل دلالي لاكتشاف إصلاحات الثغرات في تصحيحات برامج تشغيل Windows kernel. يستخدم AutoPiff قواعد YAML تحفظية لتحديد تغييرات الكود ذات الصلة بالأمان بدقة عالية وقابلية للتفسير.
يحلل AutoPiff الاختلافات بين إصدارات برامج التشغيل الثغرة والمصححة لاكتشاف تلقائي:
ExFreePool)memcpy)ProbeForRead/ProbeForWrite)ينشر المورد 500 تحديث لبرنامج التشغيل في السنة
├── 490 هي تغييرات ميزات/أداء/تجميلية
├── 8 هي إصلاحات أخطاء بسيطة
└── 2 هي إصلاحات أمان صامتة (بدون CVE مخصصة)
بدون أتمتة: مراجعة 500 يدوياً للعثور على 2
مع AutoPiff: مراجعة 10 نتائج عالية التقييم للعثور على 2
غالباً ما يتم إصدار تصحيحات الأمان دون مخصصات CVE. إجراء هندسة عكسية يدوية لكل تحديث لبرنامج التشغيل للعثور على الإصلاحات ذات الصلة بالأمان ليس ممكناً. يحل AutoPiff هذه المشكلة من خلال عرض التغييرات المهمة تلقائياً.
الإجمالي: من 4-12 ساعة لكل زوج من برامج التشغيل إلى 2-5 دقائق
┌─────────────────────────────────────────────────────────────────┐
│ تمت أتمتته بواسطة AutoPiff │
│ ├── ابحث عن الإبرة: "هذه الدالة تغيرت بالقرب من ExFreePool" │
│ ├── صنّف: "يبدو كإصلاح استخدام بعد التحرير" │
│ └── رتّب: "الدرجة 5.5 - يستحق التحقيق" │
├─────────────────────────────────────────────────────────────────┤
│ لا يزال يدوياً (خبرتك) │
│ ├── تأكيد قابلية الاستغلال: "هل يمكنني بالفعل تشغيل هذا؟" │
│ ├── تحليل السبب الجذري: "لماذا كانت هذه ثغرة؟" │
│ ├── تطوير الاستغلال: "كيف أصل إلى هذا الـ sink؟" │
│ └── تقييم التأثير: "ما هو الخطر في العالم الحقيقي؟" │
└─────────────────────────────────────────────────────────────────┘
لا يحل AutoPiff محل أبحاث الاستغلال. بل يجعلها ممكنة على نطاق واسع من خلال أتمتة مرحلة الاستطلاع.
1. كشف التصحيحات الصامتة
2. بحث الثغرات من اليوم الأول
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 58 قاعدة عبر 22 فئة. راجع Docs/semantic_rules.md للمواصفات الكاملة و Docs/SEMANTIC_RULES_REFERENCE.md للمرجع الفني.
يتتبع محرك القواعد أكثر من 50 رمز واجهة برمجة تطبيقات خطير عبر 8 مجموعات sinks:
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 تقارير بصيغة JSON مرفقة بعينات MWDB:
{
"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 رمز واجهة برمجة تطبيقات خطير
│ └── 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/ # واجهة ويب
├── tests/unit/ # 137 اختبار وحدة
├── docker-compose.yml
└── README.md
صمم AutoPiff للعمل مع driver_analyzer، الذي يوفر البنية التحتية الكاملة للإنتاج (MWDB, Karton, MinIO, لوحات المعلومات). يقوم ملف compose الخاص بـ driver_analyzer ببناء خدمات 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
راجع README driver_analyzer لتعليمات الإعداد.
رخصة 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 | BFS لرسم بياني لاستدعاءات Ghidra من نقاط دخول IOCTL/IRP إلى الدوال المتغيرة، تصدير فك التجميع الكامل |
| 6 | karton-ranking | يسجل النتائج باستخدام قابلية الوصول، وشدة الدلالة، وسطح الهجوم |
| 7 | karton-report | يُنشئ تقارير منظمة بصيغة Markdown، ويرفعها إلى MWDB |
| 8 | autopiff-alerter | يُرسل تنبيهات Telegram للنتائج ذات الدرجة >= 8.0 |
| — | autopiff-driver-triage | تسجيل درجات سطح هجوم DriverAtlas (بالتوازي مع 1-4)، ويوسم عينات MWDB، ويرسل تنبيهات Telegram |
| الفئة | مثال الكشف |
|---|
bounds_check | إضافة فحص الطول قبل memcpy |
lifetime_fix | تعيين null بعد ExFreePool |
user_boundary_check | إضافة ProbeForRead/ProbeForWrite |
int_overflow | استخدام دوال رياضية آمنة |
state_hardening | عمليات العد المرجعي المتشابك |
ioctl_input_validation | فحوصات حجم/نوع جديدة في معالجات التوزيع |
pool_type_hardening | الترحيل إلى NonPagedPoolNx |
privilege_check | إضافة SeSinglePrivilegeCheck |
| المتغير | الوصف | الافتراضي |
|---|
MWDB_API_URL | نقطة نهاية MWDB Core API | http://mwdb-core:8080/api/ |
MWDB_API_KEY | مفتاح MWDB API للرفع | (مطلوب) |
KARTON_REDIS_HOST | مضيف Redis لـ Karton | 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 رمز واجهة برمجة تطبيقات خطير مجمعة حسب الفئة |
rules/scoring.yaml | تكوين نموذج التقييم |
schemas/ | مخططات JSON لمخرجات كل مرحلة من خط الأنابيب |