Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2024-51324 — Исследование для магистерской диссертации по CVE-2024-51324 (BYOVD). Продвинутый эксплойт с 4 режимами работы (SCANNER, LOADER, KILLER, CLEANUP), верификацией драйвера по SHA-256 и полной академической документацией. Портфолио-проект охватывает безопасность драйверов ядра Windows, реверс-инжиниринг IOCTL и эксплуатацию Bring Your Own Vulnerable Driver. | Kitploit
Инструменты/GitHubGitHub/devianntsec/cve-2024-51324
Оборонительные ИнструментыАнализ уязвимостейЭксплуатацияОбратная инженерияФорензикаТестирование на ПроникновениеСтатьи и ИсследованияОбучение и ОбразованиеRed Teaming

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Эксплуатация Бинарных Файлов
GitHubdevianntsec/cve-2024-51324

CVE-2024-51324

Репозиторий
13 месяцев назадЕщё не проверено

Описание

Исследование для магистерской диссертации по CVE-2024-51324 (BYOVD). Продвинутый эксплойт с 4 режимами работы (SCANNER, LOADER, KILLER, CLEANUP), верификацией драйвера по SHA-256 и полной академической документацией. Портфолио-проект охватывает безопасность драйверов ядра Windows, реверс-инжиниринг IOCTL и эксплуатацию Bring Your Own Vulnerable Driver.

Поделиться

CVE-2024-51324 — BYOVD: BdApiUtil64.sys · Исследование в рамках магистерской диссертации

Platform Language License: MIT Research CVSS

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-примитива, два из которых не имеют предшествующей публичной документации.

Мой вклад


Структура репозитория

root@kitploit:~
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

Быстрый старт

Предварительные требования

  • Windows 10/11 (любая сборка)
  • Python 3.6+
  • BdApiUtil64.sys (SHA-256: 47EC51B5F0EDE1E70BD66F3F0152F9EB536D534565DBB7FCC3A05F542DBE4428)
  • Учётная запись администратора (только для режимов LOADER и CLEANUP)
  • Для режима KILLER достаточно учётной записи стандартного пользователя после загрузки драйвера

Шаг 1 — Сканирование системы

root@kitploit:~
python exploit/byovd_killer.py --scan
python exploit/byovd_killer.py --scan --target lsass.exe

Шаг 2 — Загрузка драйвера (требуются права администратора)

root@kitploit:~
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

Шаг 3 — Завершение процессов (права администратора не требуются)

root@kitploit:~
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

Шаг 4 — Очистка (требуются права администратора)

root@kitploit:~
python exploit/byovd_killer.py --cleanup
python exploit/byovd_killer.py --cleanup --service-name MyService

Режимы работы


Демонстрации

Режим SCANNER — Информация о системе

Режим SCANNER

Режим SCANNER — Поиск целевого процесса

SCANNER: целевой процесс

Режим LOADER — Загрузка драйвера

Режим LOADER

Режим LOADER — Пользовательский путь и имя сервиса

LOADER: пользовательские параметры

Режим KILLER — Завершение по имени процесса

Завершение по имени

Режим KILLER — Завершение по PID

Завершение по PID

Режим KILLER — Ограничение количества экземпляров

Ограничение экземпляров

Режим KILLER — Пробный запуск (симуляция)

Пробный запуск

Режим CLEANUP — Выгрузка драйвера

Режим CLEANUP


Технический обзор

Поверхность атаки IOCTL — три примитива

Реверс-инжиниринг BdApiUtil64.sys с помощью Ghidra 11.0.3 выявил более широкую поверхность атаки, чем описано в любом предшествующем публичном источнике:

Примитив 1 — Завершение процессов (0x800024B4)

Цепочка диспетчеризации имеет три уровня:

root@kitploit:~
IOCTL 0x800024B4
  └─ FUN_00028630  (IRP_MJ_DEVICE_CONTROL dispatcher)
       └─ FUN_00015230  (wrapper: validates IOCTL code and buffer size = 4 bytes)
            └─ FUN_000152b0  (kill handler — vulnerability locus)

Восстановленный обработчик (Ghidra):

root@kitploit:~
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  ← bypasses SeAccessCheck
        local_res18
    );
    ZwTerminateProcess(local_res18[0], 0);
}

Почему режим KernelMode обходит SeAccessCheck:

root@kitploit:~
ZwOpenProcess path:
  NtOpenProcess → ObOpenObjectByName → SeAccessCheck
                                        (checks DACL, caller token, integrity level)
                                        can return STATUS_ACCESS_DENIED

ObOpenObjectByPointer(KernelMode) path:
  SeAccessCheck  ← NOT invoked
  → PROCESS_ALL_ACCESS handle granted unconditionally

ZwOpenProcess отсутствует в таблице импорта драйвера. Описание, основанное на ZwOpenProcess и присутствующее в предшествующих источниках, технически некорректно.

Примитив 2 — Произвольное удаление файлов (0x80002648)

Обработчик FUN_00013bb0 принимает путь в формате Unicode, проверяет InputBufferLength ≥ 0x208 и делегирует выполнение функции FUN_00013c10. Вложенный обработчик открывает файл в режиме ядра (без SeAccessCheck по токену вызывающего процесса) и отправляет IRP IRP_MJ_SET_INFORMATION с FileInformationClass = 0xD (FileDispositionInformation), помечая файл для удаления. Любой файл, доступный ядру, может быть удалён независимо от разрешений NTFS.

Примитив 3 — Удаление используемых файлов (0x8000264C)

Обработчик FUN_000139d0 обращается к FileObject->SectionObjectPointer (смещение 0x28 в FILE_OBJECT) и временно обнуляет два поля перед отправкой IRP на удаление:

root@kitploit:~
plVar1 = FileObject->SectionObjectPointer;
plVar1[2] = 0;  // DataSectionObject  → NULL
plVar1[0] = 0;  // ImageSectionObject → NULL

IofCallDriver(device, irp);
KeWaitForSingleObject(...);

// Restore after completion
plVar1[2] = DataSectionObject_backup;
plVar1[0] = ImageSectionObject_backup;

IopDeleteFile проверяет эти указатели перед обработкой FileDispositionInformation. Обнуляя их, обработчик делает файл «неотображённым», обходя защиту от удаления используемых файлов. Этот примитив позволяет удалить бинарный файл работающего EDR-агента с диска без предварительного завершения процесса.

Полная цепочка устранения EDR:

root@kitploit:~
1. Terminate EDR process     (IOCTL 0x800024B4)
2. Delete EDR binary on disk (IOCTL 0x8000264C) ← works even if memory-mapped
3. Prevent restart           ← executable no longer exists on disk

Эмпирическое тестирование

Устойчивость к PPL (10 попыток на каждую категорию процессов)

PPL (Protected Process Light — облегчённый защищённый процесс) — единственное средство защиты времени выполнения, которое противостоит завершению на основе ObOpenObjectByPointer(KernelMode) через этот драйвер.

Анализ таблицы импорта


Сценарии пост-эксплуатации


Криминалистические артефакты

Что остаётся после --cleanup

Событие с ID 7045 — единственный артефакт, который переживает полный цикл атаки с очисткой. Оно содержит имя сервиса, ImagePath (полный путь к бинарному файлу), тип сервиса и отметку времени создания.

Очистка журналов самоизобличающа

Выполнение wevtutil cl System для удаления события с ID 7045 порождает событие с ID 1102 в канале Security, фиксирующее, кто и когда очистил журнал. Это делает подделку журналов обнаружимой, даже если исходный артефакт уничтожен.

Действие атакующегоРезультирующий артефактКаналСохранность
wevtutil cl System

Правила обнаружения

Sigma-правило

root@kitploit:~
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 (событие с ID 6 по хэшу SHA-256 + событие с ID 13 по ключу реестра) доступны в docs/detection/.


Техническая документация

ДокументОписание
Анализ первопричины

Академический контекст

Это исследование является частью моей магистерской диссертации по кибербезопасности (UCAM — Campus Internacional de Ciberseguridad), в рамках которой анализируются N-Day-уязвимости в различных средах.

Данная CVE представляет вектор драйвер ядра Windows / BYOVD в рамках диссертации и демонстрирует:

  • Анализ поверхности атаки драйвера ядра через полное перечисление IOCTL
  • Техническую корректировку предшествующих публичных описаний (ZwOpenProcess отсутствует; фактический механизм — ObOpenObjectByPointer(KernelMode))
  • Обнаружение двух ранее не задокументированных примитивов (IOCTL удаления файлов)
  • Эмпирическую характеристику устойчивости к PPL
  • Анализ криминалистических артефактов на протяжении полного цикла с очисткой
  • Критику оценки CVSS: задокументированный разрыв между официальной оценкой NVD и серьёзностью локальной эксплуатации

Ключевые слова: BYOVD · Kernel Driver · IOCTL · Ghidra · Process Termination · File Deletion · SectionObjectPointer · ObOpenObjectByPointer · Defense Evasion · CVE-2024-51324


Автор

Annais Molina (devianntsec) — магистрант по кибербезопасности

GitHub LinkedIn Email


Благодарности

  • NVD / NIST — запись CVE и оценка
  • loldrivers.io — поддерживаемый сообществом каталог уязвимых драйверов
  • BlackSnufkin — исходный PoC-референс
  • Cisco Talos — анализ BYOVD в программе-вымогателе DeadLock (декабрь 2025)

Лицензия

Лицензия MIT — см. LICENSE


Правовое уведомление

Этот репозиторий предоставлен исключительно в образовательных целях и для исследований в области безопасности в рамках академической магистерской диссертации. Все тесты выполнялись на изолированных виртуальных машинах без доступа к сети. Уязвимый драйвер (BdApiUtil64.sys) не распространяется в этом репозитории — его необходимо получить самостоятельно. Используйте только на системах, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Несанкционированное использование против систем незаконно и может повлечь уголовное преследование.

© 2026 Annais Molina · Магистерская диссертация по кибербезопасности
UCAM Universidad Católica San Antonio de Murcia · Campus Internacional de Ciberseguridad
Скачать инструмент
АспектОписание
Техническая корректировкаZwOpenProcess отсутствует в таблице импорта; фактический механизм — PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode), что безусловно обходит SeAccessCheck
Три задокументированных примитиваЗавершение процессов (0x800024B4), произвольное удаление файлов (0x80002648) и удаление используемых файлов в обход SectionObjectPointer (0x8000264C) — последние два не имеют предшествующей публичной документации
Четыре режима работыLOADER, KILLER, SCANNER и CLEANUP — управление полным жизненным циклом
Проверка SHA-256Хэш драйвера проверяется перед любой попыткой загрузки
Эмпирическое тестирование PPL10 попыток на каждую категорию процессов, подтверждающих, что PPL — единственное средство защиты времени выполнения
Криминалистический анализСобытие с ID 7045 сохраняется после очистки; событие с ID 1102 — самоизобличающий артефакт очистки журналов
Правила обнаруженияSigma-правило и конфигурация Sysmon (событие с ID 6 по хэшу + событие с ID 13 по ключу реестра)
Пересмотр CVSSЗадокументированное расхождение между официальной оценкой NVD (3.8 Low) и оценкой серьёзности локальной эксплуатации, присвоенной исследователем (7.8 High)
РежимКомандаПраваОписание
SCANNER--scanЛюбой пользовательИнформация о состоянии системы и драйвера
LOADER--loadАдминистраторЗагрузка драйвера через создание сервиса ядра
KILLER--kill / --pidЛюбой пользовательЗавершение процессов через IOCTL
CLEANUP--cleanupАдминистраторОстановка и удаление сервиса драйвера
IOCTLОбработчикПримитивПредшествующая документация
0x800024B4FUN_000152b0Завершение процессовЧастичная (механизм указан неверно)
0x80002648FUN_00013bb0Произвольное удаление файловОтсутствует
0x8000264CFUN_00013850Удаление используемых файлов (обход SectionObjectPointer)Отсутствует
ПроцессPPL активенМожно завершитьПричина
notepad.exeНет✅ 10/10Защита отсутствует
regedit.exeНет✅ 10/10Защита отсутствует
spoolsv.exeНет✅ 9/10SCM перезапускает в 1 случае
MsMpEng.exeНет (в тестовой среде PPL отсутствует)✅ 8/10Небольшая вариативность по времени
lsass.exeНет (RunAsPPL отсутствует)✅ 6/10Изменчивость состояния
csrss.exeДа (безусловный PPL)❌ 0/10STATUS_ACCESS_DENIED
ПрисутствуетОтсутствует
PsLookupProcessByProcessIdZwOpenProcess
ObOpenObjectByPointerSeAccessCheck
ZwTerminateProcessSePrivilegeCheck
PsGetCurrentProcess
IoGetRequestorProcess
СценарийЦельВоздействие
Завершение EDR/AVMsMpEng.exe, SentinelAgent.exeОбход защиты
Удаление бинарного файла EDR (используемого)Исполняемый файл EDR на дискеПредотвращение перезапуска после завершения
Нарушение работы журналов аудитаСлужба EventLogФальсификация криминалистических данных
Обход защищённых процессовlsass.exe (без RunAsPPL)Содействие получению учётных данных
Подготовка к шифрованию перед атакой программы-вымогателяАгенты безопасностиПолная цепочка обхода защиты
АртефактСостояние после очистки
Сервис в SCMУдалён
Драйвер в driverqueryУдалён
Объект устройстваНедоступен
Ключ реестраУдалён
Событие с ID 7045Сохраняется — не может быть удалено через sc delete
Событие с ID 7045 удалено
System
—
wevtutil cl SystemСгенерировано событие с ID 1102SecurityПостоянно
Отсутствие контроля доступа в обработчике IRP_MJ_DEVICE_CONTROL
Анализ драйвераПолный реверс-инжиниринг в Ghidra, три IOCTL-примитива, тестирование PPL, анализ таблицы импорта
Хронология CVEХронология обнаружения, раскрытия и исправления