
Исследование для магистерской диссертации по CVE-2024-51324 (BYOVD). Продвинутый эксплойт с 4 режимами работы (SCANNER, LOADER, KILLER, CLEANUP), верификацией драйвера по SHA-256 и полной академической документацией. Портфолио-проект охватывает безопасность драйверов ядра Windows, реверс-инжиниринг IOCTL и эксплуатацию Bring Your Own Vulnerable Driver.
Bring Your Own Vulnerable Driver (BYOVD) — антивирус Baidu,
BdApiUtil64.sys
Три недокументированных примитива ядра: завершение процессов, произвольное удаление файлов и удаление используемых файлов в обходSectionObjectPointer
Затрагиваемое ПО: Baidu Antivirus v5.2.3.116083 (BdApiUtil64.sys)
Загрузка уязвимого драйвера в ядро (режим LOADER)
Этот репозиторий содержит моё исследование в рамках магистерской диссертации по
CVE-2024-51324 — уязвимости класса Bring Your Own Vulnerable Driver (BYOVD)
в драйвере ядра BdApiUtil64.sys антивируса Baidu.
Запись NVD присваивает базовую оценку CVSS v3.1 3.8 (Low) с вектором
AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:L/A:N и CWE-269 (Improper Privilege Management).
Эта оценка не отражает реальную картину локальной атаки, задокументированную в данном
исследовании: после того как драйвер загружен администратором (одноразовый шаг,
достижимый с помощью социальной инженерии или любой локальной эскалации привилегий),
любой последующий процесс — включая процессы в песочнице или процессы стандартного
пользователя — может отправлять IOCTL без дополнительных проверок прав. Оценка
CVSS v3.1, присвоенная исследователем, — 7.8 (High) с вектором
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 показывает, что внутренний механизм более серьёзен, чем описано ранее:
драйвер использует PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode)
вместо ZwOpenProcess, полностью обходя SeAccessCheck. Были полностью
охарактеризованы три IOCTL-примитива, два из которых не имеют предшествующей
публичной документации.
| Аспект | Описание |
|---|---|
| Техническая корректировка | ZwOpenProcess отсутствует в таблице импорта; фактический механизм — PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode), что безусловно обходит SeAccessCheck |
| Три задокументированных примитива | Завершение процессов (0x800024B4), произвольное удаление файлов (0x80002648) и удаление используемых файлов в обход SectionObjectPointer (0x8000264C) — последние два не имеют предшествующей публичной документации |
| Четыре режима работы | LOADER, KILLER, SCANNER и CLEANUP — управление полным жизненным циклом |
| Проверка SHA-256 | Хэш драйвера проверяется перед любой попыткой загрузки |
| Эмпирическое тестирование PPL | 10 попыток на каждую категорию процессов, подтверждающих, что PPL — единственное средство защиты времени выполнения |
| Криминалистический анализ | Событие с ID 7045 сохраняется после очистки; событие с ID 1102 — самоизобличающий артефакт очистки журналов |
| Правила обнаружения | Sigma-правило и конфигурация Sysmon (событие с ID 6 по хэшу + событие с ID 13 по ключу реестра) |
| Пересмотр CVSS | Задокументированное расхождение между официальной оценкой NVD (3.8 Low) и оценкой серьёзности локальной эксплуатации, присвоенной исследователем (7.8 High) |
CVE-2024-51324/
├── README.md
├── LICENSE
│
├── drivers/
│ └── BdApiUtil64.sys # Driver (not distributed)
│
├── exploit/
│ ├── exploit-explanation.md
│ └── byovd_killer.py # Main exploit — 4 operational modes
│
└── 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 # Full Ghidra RE, three primitives, PPL testing
└── 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
| Режим | Команда | Права | Описание |
|---|---|---|---|
| SCANNER | --scan | Любой пользователь | Информация о состоянии системы и драйвера |
| LOADER | --load | Администратор | Загрузка драйвера через создание сервиса ядра |
| KILLER | --kill / --pid | Любой пользователь | Завершение процессов через IOCTL |
| CLEANUP | --cleanup | Администратор | Остановка и удаление сервиса драйвера |






