
Windows x64 के लिए मैनुअल kernel driver mapper जो Lenovo के LnvMSRIO.sys में CVE-2025-8061 का दुरुपयोग करके BYOVD हमला करता है, PE64 drivers को ring 0 में map करता है।
Windows x64 के लिए BYOVD मैनुअल मैपर · CVE-2025-8061
MSRMapper Windows x64 के लिए एक मैनुअल कर्नेल ड्राइवर मैपर है जो कमजोर Lenovo ड्राइवर LnvMSRIO.sys में CVE-2025-8061 का दुरुपयोग करके BYOVD (Bring Your Own Vulnerable Driver) हमला करता है।
यह प्रोजेक्ट एक PE64 ड्राइवर को सीधे कर्नेल मेमोरी में मैप करता है, बिना sc create या किसी सेवा का उपयोग किए, और उसके DriverEntry को ring 0 में निष्पादित करता है। पूरी प्रक्रिया निम्नलिखित पर निर्भर करती है:
LnvMSRIO.sys के माध्यम से MSR और फिजिकल मेमोरी रीड/राइट।NtQuerySystemInformation की SuperfetchPfnQuery क्लास के माध्यम से VA → PA ट्रांसलेशन।LSTAR हाइजैकिंग।ExAllocatePoolWithTag, RtlCopyMemory, और DriverEntry जैसे कर्नेल फ़ंक्शन कॉल करने के लिए अस्थायी NtAddAtom हुकिंग।स्थिति: Windows 10 22H2 (OS Build 19045.6466) पर परीक्षण किया गया। ड्राइवर सफलतापूर्वक मैप होता है और
DriverEntrySTATUS_SUCCESS(0x0) लौटाता है।
ExAllocatePoolWithTag का उपयोग करके कर्नेल में मैनुअल PE64 मैपिंग।KiSystemCall64, NtAddAtom, आदि)।NtQuerySystemInformation क्लास 0x4F) के साथ VA → PA ट्रांसलेशन, बिना कस्टम पेज-टेबल वॉकर की आवश्यकता के।LnvMSRIO.sys के माध्यम से MSR (LSTAR, FMASK) और फिजिकल मेमोरी रीड/राइट।LSTAR को पुनर्स्थापित करता है।NtAddAtom का PA प्राप्त करने के लिए MmGetPhysicalAddress कॉल करता है।swapgs; sysret के माध्यम से नियंत्रण यूज़र मोड को लौटाता है।\\.\WinMsrDev खोलता है (LnvMSRIO.sys द्वारा एक्सपोज़ की गई सेवा)।EnumDeviceDrivers के माध्यम से ntoskrnl बेस प्राप्त करता है और LSTAR से इसे मान्य करता है।PdbResolver को इनिशियलाइज़ करता है।NtAddAtom का PA प्राप्त करनाLSTAR हाइजैक होने पर ring 0 में चलेगा।swapgs; iretq गैजेट को LSTAR में लिखता है।PrepareStack के साथ स्टैक तैयार करता है और EnableACUserMode के माध्यम से यूज़र मोड में AC=1 सक्षम करता है।syscall पर, CPU गैजेट पर जाता है, शेलकोड चलाता है, MmGetPhysicalAddress(NtAddAtom) कॉल करता है, और PA को यूज़र बफ़र में संग्रहीत करता है।LSTAR को पुनर्स्थापित करता है और swapgs; sysret के साथ यूज़र मोड में लौटता है।ExAllocatePoolWithTag के साथ नॉन-पेज्ड पूल आवंटित करता है (अस्थायी NtAddAtom हुक के माध्यम से आह्वान किया जाता है)।RtlCopyMemory के साथ PE इमेज को पूल में कॉपी करता है।DriverObject = NULL और RegistryPath = NULL के साथ DriverEntry कॉल करता है।NtAddAtom के मूल बाइट्स को पुनर्स्थापित करता है।.asm फ़ाइलों को बनाने के लिए MASM (Microsoft Macro Assembler)।LnvMSRIO.sys (CVE-2025-8061) इंस्टॉल और WinMsrDev सेवा चालू।C:\Symbols में लोकल कैश।यह प्रोजेक्ट CMake का उपयोग करता है। कमांड लाइन से बिल्ड करने के लिए:
Visual Studio 2022 सॉल्यूशन जनरेट करें:
cmake -B build -G "Visual Studio 17 2022" -A x64
Release मोड में बिल्ड करें:
cmake --build build --config Release
आउटपुट बाइनरीज़ build/bin/Release/ में होंगी (या CMake कॉन्फ़िगरेशन के आधार पर समान पथ में)।
वैकल्पिक रूप से, आप Visual Studio 2022 में जनरेट किए गए build/KernelLoader.sln को खोलकर वहाँ से बिल्ड कर सकते हैं।
सुनिश्चित करें कि ShellcodeAsm.asm और EnableAC.asm MASM के साथ कंपाइल हों। प्रदान की गई CMakeLists.txt इसे स्वचालित रूप से संभालती है।
यदि आपको बिल्ड कॉन्फ़िगरेशन समायोजित करने की आवश्यकता है, तो CMakeLists.txt संपादित करें।
LnvMSRIO.sys सेवा इंस्टॉल और प्रारंभ करें:
sc create WinMsrDev type= kernel binPath= C:\path\to\LnvMSRIO.sys
sc start WinMsrDev
KernelLoader.exe को Administrator के रूप में चलाएँ:
KernelLoader.exe
मैप किए गए ड्राइवर के DbgPrint आउटपुट को देखने के लिए, DebugView (Sysinternals) को Administrator के रूप में इसके साथ उपयोग करें:
Capture → Capture KernelOptions → Enable Verbose Kernel OutputHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter
Default नाम का DWORD बनाकर जिसका मान हो।PdbResolver लॉग में दिखने वाला DBGHELP: ... - unmatched संदेश कॉस्मेटिक है। PDB एक कृत्रिम वर्चुअल बेस पर लोड होता है और SymFromName अभी भी सही ढंग से काम करता है। यह सिंबल रिज़ॉल्यूशन को प्रभावित नहीं करता।EnumDeviceDrivers गलत बेस लौटा सकता है। यह प्रोजेक्ट वास्तविक बेस की गणना LSTAR - KiSystemCall64 से करता है।NtAddAtom हुक अस्थायी है और प्रत्येक कॉल के बाद पुनर्स्थापित हो जाता है। फिर भी, इसका उपयोग केवल नियंत्रित वातावरण में करें।SMEP/SMAP सक्षम हैं। उन्हें CR4 के माध्यम से अस्थायी रूप से अक्षम किया जाता है और यूज़र मोड में लौटने से पहले पुनर्स्थापित किया जाता है।NtAddAtomjmp raxEnumDeviceDrivers गलत बेस लौटा सकता है; वास्तविक कर्नेल बेस की गणना LSTAR - KiSystemCall64 से की जाती है।0xFFFFFFFF