
CVE-2024-51324 (BYOVD) पर मास्टर थीसिस अनुसंधान। 4 परिचालन मोड (SCANNER, LOADER, KILLER, CLEANUP), SHA-256 ड्राइवर सत्यापन और पूर्ण शैक्षणिक दस्तावेज़ीकरण के साथ उन्नत एक्सप्लॉइट। पोर्टफोलियो टुकड़ा विंडोज कर्नेल ड्राइवर सुरक्षा, IOCTL रिवर्स इंजीनियरिंग और ब्रिंग योर ओन वल्नरेबल ड्राइवर शोषण को कवर करता है।
अपना स्वयं का कमजोर ड्राइवर लाएं (BYOVD) — Baidu Antivirus
BdApiUtil64.sys
तीन अप्रलेखित कर्नेल प्रिमिटिव: प्रोसेस समाप्ति, मनमानी फ़ाइल हटाना, और
SectionObjectPointerबायपास के साथ उपयोग में फ़ाइल हटाना
प्रभावित: Baidu Antivirus v5.2.3.116083 (BdApiUtil64.sys)
ड्राइवर को कर्नेल में लोड करना (LOADER मोड)
इस रिपॉजिटरी में मेरा मास्टर थीसिस अनुसंधान CVE-2024-51324 पर है, जो Baidu Antivirus के कर्नेल ड्राइवर BdApiUtil64.sys में एक Bring Your Own Vulnerable Driver (BYOVD) कमजोरी है।
NVD रिकॉर्ड CVSS v3.1 का आधार स्कोर 3.8 (निम्न) वेक्टर AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:L/A:N और CWE-269 (अनुचित विशेषाधिकार प्रबंधन) निर्दिष्ट करता है। यह स्कोर इस अनुसंधान में दर्ज स्थानीय हमले की वास्तविकता को प्रतिबिंबित नहीं करता है: एक बार जब ड्राइवर किसी प्रशासक द्वारा लोड हो जाता है (एक बार की प्रक्रिया जो सोशल इंजीनियरिंग या किसी भी स्थानीय विशेषाधिकार वृद्धि के माध्यम से प्राप्त की जा सकती है), तो कोई भी बाद की प्रक्रिया — जिसमें सैंडबॉक्स या मानक-उपयोगकर्ता प्रक्रियाएं शामिल हैं — बिना किसी और विशेषाधिकार जांच के IOCTL भेज सकती हैं। एक शोधकर्ता-मूल्यांकित CVSS v3.1 स्कोर 7.8 (उच्च) वेक्टर AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H के साथ लोड-पश्चात शोषण वास्तविकता को अधिक सटीक रूप से पकड़ता है। दोनों स्कोर तकनीकी दस्तावेज़ीकरण में चर्चित हैं।
ड्राइवर डिवाइस ऑब्जेक्ट \Device\BdApiUtil को SecurityDescriptor = NULL के साथ बनाता है, जो किसी भी प्रक्रिया को अखंडता स्तर की परवाह किए बिना एक हैंडल खोलने और IOCTL भेजने की अनुमति देता है। Ghidra 11.0.3 के माध्यम से स्थैतिक विश्लेषण से पता चलता है कि आंतरिक तंत्र पहले दस्तावेज़ीकृत की तुलना में अधिक महत्वपूर्ण है: ड्राइवर ZwOpenProcess के बजाय PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode) का उपयोग करता है, जो SeAccessCheck को पूरी तरह से बायपास करता है। तीन IOCTL प्रिमिटिव पूरी तरह से लक्षण वर्णित किए गए, जिनमें से दो का कोई पूर्व सार्वजनिक दस्तावेज़ीकरण नहीं है।
CVE-2024-51324/
├── README.md
├── LICENSE
│
├── drivers/
│ └── BdApiUtil64.sys # ड्राइवर (वितरित नहीं)
│
├── exploit/
│ ├── exploit-explanation.md
│ └── byovd_killer.py # मुख्य शोषण — 4 संचालन मोड
│
└── docs/
├── screenshots/
│ ├── 01-byovd-scan.png
│ ├── 02-byovd-scan-target.png
│ ├── 03-byovd-load.png
│ ├── 04-byovd-load-custom.png
│ ├── 05-kill-name.gif
│ ├── 06-kill-pid.gif
│ ├── 07-kill-limit.gif
│ ├── 08-dry-run.gif
│ └── 09-byovd-cleanup.png
│
└── analysis/
├── 01-root-cause.md
├── 02-driver-analysis.md # पूर्ण Ghidra RE, तीन प्रिमिटिव, PPL परीक्षण
└── 03-timeline.md
BdApiUtil64.sys (SHA-256: 47EC51B5F0EDE1E70BD66F3F0152F9EB536D534565DBB7FCC3A05F542DBE4428)python exploit/byovd_killer.py --scan
python exploit/byovd_killer.py --scan --target lsass.exe
python exploit/byovd_killer.py --load
python exploit/byovd_killer.py --load --driver C:\path\to\BdApiUtil64.sys
python exploit/byovd_killer.py --load --service-name MyService
python exploit/byovd_killer.py --kill notepad.exe
python exploit/byovd_killer.py --pid 1234
python exploit/byovd_killer.py --kill notepad.exe --max-instances 2
python exploit/byovd_killer.py --kill notepad.exe --dry-run
python exploit/byovd_killer.py --cleanup
python exploit/byovd_killer.py --cleanup --service-name MyService









Ghidra 11.0.3 के माध्यम से BdApiUtil64.sys का रिवर्स इंजीनियरिंग किसी भी पूर्व सार्वजनिक स्रोत दस्तावेज़ों की तुलना में एक व्यापक हमला सतह की पहचान की:
0x800024B4)डिस्पैच श्रृंखला में तीन स्तर हैं:
IOCTL 0x800024B4
└─ FUN_00028630 (IRP_MJ_DEVICE_CONTROL डिस्पैचर)
└─ FUN_00015230 (रैपर: IOCTL कोड और बफर आकार = 4 बाइट्स मान्य करता है)
└─ FUN_000152b0 (किल हैंडलर — भेद्यता स्थान)
पुनर्निर्मित हैंडलर (Ghidra):
if ((param_1 != 0) && (param_1 != 4)) {
PsLookupProcessByProcessId(param_1, &local_res10);
ObOpenObjectByPointer(
local_res10,
0x200, // OBJ_KERNEL_HANDLE
0, // PassedAccessState: NULL
0x1fffff, // PROCESS_ALL_ACCESS
0, // ObjectType: NULL
0, // AccessMode: KernelMode ← SeAccessCheck को बायपास करता है
local_res18
);
ZwTerminateProcess(local_res18[0], 0);
}
KernelMode SeAccessCheck को क्यों बायपास करता है:
ZwOpenProcess पथ:
NtOpenProcess → ObOpenObjectByName → SeAccessCheck
(DACL, कॉलर टोकन, अखंडता स्तर की जांच करता है)
STATUS_ACCESS_DENIED लौटा सकता है
ObOpenObjectByPointer(KernelMode) पथ:
SeAccessCheck ← आह्वान नहीं किया गया
→ PROCESS_ALL_ACCESS हैंडल बिना शर्त प्रदान किया गया
ZwOpenProcess ड्राइवर की आयात तालिका से अनुपस्थित है। पूर्व स्रोतों में मौजूद ZwOpenProcess पर आधारित विवरण तकनीकी रूप से गलत है।
0x80002648)हैंडलर FUN_00013bb0 एक यूनिकोड पथ प्राप्त करता है, InputBufferLength ≥ 0x208 मान्य करता है, और FUN_00013c10 को प्रतिनिधि बनाता है। उप-हैंडलर फ़ाइल को कर्नेल मोड में खोलता है (कॉलर टोकन पर कोई SeAccessCheck नहीं) और FileInformationClass = 0xD (FileDispositionInformation) के साथ एक IRP_MJ_SET_INFORMATION IRP भेजता है, फ़ाइल को हटाने के लिए चिह्नित करता है। कर्नेल के लिए सुलभ कोई भी फ़ाइल NTFS अनुमतियों की परवाह किए बिना हटाई जा सकती है।
0x8000264C)हैंडलर FUN_000139d0 FileObject->SectionObjectPointer (ऑफ़सेट 0x28 FILE_OBJECT में) तक पहुंचता है और हटाने वाले IRP को भेजने से पहले अस्थायी रूप से दो फ़ील्ड को शून्य करता है:
plVar1 = FileObject->SectionObjectPointer;
plVar1[2] = 0; // DataSectionObject → NULL
plVar1[0] = 0; // ImageSectionObject → NULL
IofCallDriver(device, irp);
KeWaitForSingleObject(...);
// पूर्ण होने के बाद पुनर्स्थापित करें
plVar1[2] = DataSectionObject_backup;
plVar1[0] = ImageSectionObject_backup;
IopDeleteFile FileDispositionInformation का सम्मान करने से पहले इन पॉइंटर्स की जांच करता है। उन्हें शून्य करके, हैंडलर फ़ाइल को अनमैप्ड दिखाता है, उपयोग में सुरक्षा को बायपास करता है। यह प्रिमिटिव प्रक्रिया को समाप्त किए बिना चल रहे EDR एजेंट के बाइनरी को डिस्क से हटा सकता है।
पूर्ण EDR उन्मूलन श्रृंखला:
1. EDR प्रक्रिया को समाप्त करें (IOCTL 0x800024B4)
2. डिस्क पर EDR बाइनरी हटाएं (IOCTL 0x8000264C) ← मेमोरी-मैप्ड होने पर भी काम करता है
3. पुनरारंभ रोकें ← निष्पादन योग्य अब डिस्क पर मौजूद नहीं है
PPL (संरक्षित प्रक्रिया लाइट) एकमात्र रनटाइम शमन है जो इस ड्राइवर से ObOpenObjectByPointer(KernelMode)-आधारित समाप्ति का प्रतिरोध करता है।
--cleanup के बाद क्या बचता हैEvent ID 7045 एकमात्र ऐसी कलाकृति है जो सफाई के साथ पूर्ण हमले के चक्र से बचती है। इसमें सेवा का नाम, ImagePath (पूर्ण बाइनरी पथ), सेवा प्रकार और निर्माण टाइमस्टैम्प होता है।
Event ID 7045 को हटाने के लिए wevtutil cl System निष्पादित करने से सुरक्षा चैनल में Event ID 1102 उत्पन्न होता है, जो रिकॉर्ड करता है कि लॉग किसने और कब साफ़ किया। यह लॉग छेड़छाड़ को तब भी पता लगाने योग्य बनाता है जब मूल कलाकृति नष्ट हो जाती है।
| हमलावर कार्रवाई | परिणामी कलाकृति | चैनल | स्थिरता |
|---|---|---|---|
wevtutil cl System | Event ID 7045 हटा दिया गया |
title: BYOVD Attack via BdApiUtil64.sys (CVE-2024-51324)
id: a3f7c2e1-8b4d-4f9a-b6e3-2d1c9f8a7b5e
status: experimental
logsource:
product: windows
service: system
detection:
selection_eventid:
EventID: 7045
selection_driver:
- ServiceName|contains: 'BdApi'
- ImagePath|contains: 'BdApiUtil64.sys'
condition: selection_eventid and selection_driver
level: high
tags:
- attack.defense_evasion
- attack.t1562.001
- attack.privilege_escalation
- attack.t1068
पूर्ण Sigma नियम और Sysmon कॉन्फ़िगरेशन (SHA-256 हैश द्वारा Event ID 6 + रजिस्ट्री कुंजी द्वारा Event ID 13) docs/detection/ पर उपलब्ध है।
| दस्तावेज़ | विवरण |
|---|---|
| मूल कारण विश्लेषण |
यह अनुसंधान मेरी साइबर सुरक्षा में मास्टर थीसिस (UCAM — Campus Internacional de Ciberseguridad) का हिस्सा है, जो विभिन्न वातावरणों में N-Day भेद्यताओं का विश्लेषण करता है।
यह CVE थीसिस के भीतर Windows कर्नेल ड्राइवर / BYOVD वेक्टर का प्रतिनिधित्व करता है, जो प्रदर्शित करता है:
ZwOpenProcess अनुपस्थित; वास्तविक तंत्र ObOpenObjectByPointer(KernelMode) है)कीवर्ड: BYOVD · Kernel Driver · IOCTL · Ghidra · Process Termination ·
File Deletion · SectionObjectPointer · ObOpenObjectByPointer · Defense Evasion ·
CVE-2024-51324
Annais Molina (devianntsec) — साइबर सुरक्षा में मास्टर छात्र
MIT लाइसेंस — LICENSE देखें
यह रिपॉजिटरी केवल शैक्षिक और सुरक्षा अनुसंधान उद्देश्यों के लिए प्रदान की गई है, जो एक शैक्षणिक मास्टर थीसिस का भाग है। सभी परीक्षण अलग-थलग वर्चुअल मशीनों पर बिना किसी नेटवर्क एक्सपोज़र के किए गए। कमजोर ड्राइवर (BdApiUtil64.sys) इस रिपॉजिटरी में वितरित नहीं किया गया है — इसे स्वतंत्र रूप से प्राप्त किया जाना चाहिए। केवल उन सिस्टमों पर उपयोग करें जिनके आप मालिक हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित प्राधिकरण है। सिस्टमों के खिलाफ अनधिकृत उपयोग अवैध है और इसके परिणामस्वरूप आपराधिक मुकदमा चल सकता है।
| पहलू | विवरण |
|---|
| तकनीकी सुधार | ZwOpenProcess आयात तालिका से अनुपस्थित है; वास्तविक तंत्र PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode) है, जो बिना शर्त SeAccessCheck को बायपास करता है |
| तीन दस्तावेज़ीकृत प्रिमिटिव | प्रोसेस समाप्ति (0x800024B4), मनमानी फ़ाइल हटाना (0x80002648), और SectionObjectPointer बायपास के साथ उपयोग में फ़ाइल हटाना (0x8000264C) — अंतिम दो का कोई पूर्व सार्वजनिक दस्तावेज़ीकरण नहीं है |
| चार संचालन मोड | LOADER, KILLER, SCANNER, और CLEANUP — पूर्ण जीवनचक्र प्रबंधन |
| SHA-256 सत्यापन | किसी भी लोड प्रयास से पहले ड्राइवर हैश सत्यापित किया गया |
| PPL अनुभवजन्य परीक्षण | प्रति प्रक्रिया श्रेणी 10 प्रयास जो PPL को एकमात्र रनटाइम शमन के रूप में पुष्टि करते हैं |
| फोरेंसिक विश्लेषण | सफाई के बाद Event ID 7045 स्थिरता; Event ID 1102 स्वयं-अभियोगी लॉग-साफ़ कलाकृति के रूप में |
| डिटेक्शन नियम | Sigma नियम और Sysmon कॉन्फ़िगरेशन (हैश द्वारा Event ID 6 + रजिस्ट्री कुंजी द्वारा Event ID 13) |
| CVSS पुनर्मूल्यांकन | आधिकारिक NVD स्कोर (3.8 निम्न) और शोधकर्ता-मूल्यांकित स्थानीय शोषण गंभीरता (7.8 उच्च) के बीच दस्तावेज़ीकृत विसंगति |
| मोड | कमांड | विशेषाधिकार | विवरण |
|---|
| SCANNER | --scan | कोई भी उपयोगकर्ता | सिस्टम और ड्राइवर स्थिति जानकारी |
| LOADER | --load | प्रशासक | कर्नेल सेवा निर्माण के माध्यम से ड्राइवर लोड करें |
| KILLER | --kill / --pid | कोई भी उपयोगकर्ता | IOCTL के माध्यम से प्रक्रियाओं को समाप्त करें |
| CLEANUP | --cleanup | प्रशासक | ड्राइवर सेवा को रोकें और हटाएं |
| IOCTL | हैंडलर | प्रिमिटिव | पूर्व दस्तावेज़ीकरण |
|---|
0x800024B4 | FUN_000152b0 | प्रक्रिया समाप्ति | आंशिक (तंत्र गलत) |
0x80002648 | FUN_00013bb0 | मनमानी फ़ाइल हटाना | कोई नहीं |
0x8000264C | FUN_00013850 | उपयोग में फ़ाइल हटाना (SectionObjectPointer बायपास) | कोई नहीं |
| प्रक्रिया | PPL सक्रिय | समाप्त करने योग्य | कारण |
|---|
notepad.exe | नहीं | ✅ 10/10 | कोई सुरक्षा नहीं |
regedit.exe | नहीं | ✅ 10/10 | कोई सुरक्षा नहीं |
spoolsv.exe | नहीं | ✅ 9/10 | 1 मामले में SCM पुनरारंभ |
MsMpEng.exe | नहीं (परीक्षण वातावरण में कोई PPL नहीं) | ✅ 8/10 | हल्की समय भिन्नता |
lsass.exe | नहीं (RunAsPPL अनुपस्थित) | ✅ 6/10 | स्थिति भिन्नता |
csrss.exe | हाँ (बिना शर्त PPL) | ❌ 0/10 | STATUS_ACCESS_DENIED |
| उपस्थित | अनुपस्थित |
|---|
PsLookupProcessByProcessId | ZwOpenProcess |
ObOpenObjectByPointer | SeAccessCheck |
ZwTerminateProcess | SePrivilegeCheck |
PsGetCurrentProcess | |
IoGetRequestorProcess |
| परिदृश्य | लक्ष्य | प्रभाव |
|---|
| EDR/AV समाप्ति | MsMpEng.exe, SentinelAgent.exe | रक्षा चोरी |
| EDR बाइनरी हटाना (उपयोग में) | डिस्क पर EDR निष्पादन योग्य | समाप्ति के बाद पुनरारंभ रोकें |
| ऑडिट लॉग विघटन | EventLog सेवा | फोरेंसिक के साथ छेड़छाड़ |
| संरक्षित प्रक्रिया बायपास | lsass.exe (RunAsPPL के बिना) | क्रेडेंशियल एक्सेस सुविधाकर्ता |
| रैनसमवेयर पूर्व-एन्क्रिप्शन तैयारी | सुरक्षा एजेंट | पूर्ण रक्षा चोरी श्रृंखला |
| कलाकृति | सफाई के बाद की स्थिति |
|---|
| SCM में सेवा | हटा दी गई |
driverquery में ड्राइवर | हटा दिया गया |
| डिवाइस ऑब्जेक्ट | दुर्गम |
| रजिस्ट्री कुंजी | हटा दी गई |
| Event ID 7045 | बनी रहती है — sc delete द्वारा नहीं हटाई जा सकती |
| System |
| — |
wevtutil cl System | Event ID 1102 उत्पन्न | Security | स्थायी |
IRP_MJ_DEVICE_CONTROL हैंडलर में लापता पहुंच नियंत्रण |
| ड्राइवर विश्लेषण | पूर्ण Ghidra RE, तीन IOCTL प्रिमिटिव, PPL परीक्षण, आयात तालिका विश्लेषण |
| CVE समयरेखा | खोज, प्रकटीकरण, और पैच कालक्रम |