
استغلال برنامج تشغيل LnvMSRIO.sys الضعيف
إثبات المفهوم لاستغلال LnvMSRIO.sys (برنامج تشغيل الإدخال/الإخراج لـ MSR من Lenovo)، يوضح القراءة/الكتابة العشوائية للذاكرة الفعلية والوصول إلى ذاكرة kernel عبر ترجمة Superfetch من VA إلى PA.
| الخاصية | القيمة |
|---|---|
| اسم برنامج التشغيل | LnvMSRIO.sys |
| اسم الجهاز | \\.\WinMsrDev |
| اسم الخدمة | LnvMSRIO |
| الشركة المصنعة | Lenovo |
| الغرض | الوصول إلى سجلات MSR والذاكرة الفعلية لأدوات النظام |
يعرض برنامج التشغيل عمليات kernel المميزة لوضع المستخدم:
قراءة الذاكرة الفعلية (16 بايت):
Offset 0: UInt64 PhysicalAddress
Offset 8: DWORD AccessSize (1=byte, 2=word, 8=qword)
Offset 12: DWORD Count (number of elements)
كتابة الذاكرة الفعلية (رأس 16 بايت + بيانات):
Offset 0: UInt64 PhysicalAddress
Offset 8: DWORD AccessSize
Offset 12: DWORD Count
Offset 16: Data[] (bytes to write)
نظرًا لأن برنامج التشغيل يوفر فقط الوصول إلى الذاكرة الفعلية، فإننا نستخدم تقنية Superfetch لترجمة العناوين الافتراضية kernel إلى عناوين فعلية:
NtQuerySystemInformation(SystemSuperfetchInformation)LnvMSRIOExploit.exe <path_to_LnvMSRIO.sys>
المتطلبات:
LnvMSRIOExploit.dproj في بيئة Delphi (RAD Studio)Win64\Release\LnvMSRIOExploit.exeتم توفير هذه الأداة لأغراض تعليمية وبحث أمني مصرح به فقط. الاستخدام غير المصرح به ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها غير قانوني. لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام.
لأغراض البحث والتعليم فقط.
| رمز IOCTL | الوظيفة | الوصف | إثبات المفهوم |
|---|
0x9C406104 | قراءة الذاكرة الفعلية | يقوم بالتعيين عبر MmMapIoSpace | ✅ |
0x9C40A108 | كتابة الذاكرة الفعلية | يقوم بتعيين وكتابة الذاكرة الفعلية | ✅ |
0x9C402084 | قراءة MSR | قراءة سجل خاص بالنموذج | ❌ |
0x9C402088 | كتابة MSR | كتابة سجل خاص بالنموذج | ❌ |