BYOVD и уязвимые драйверы: как злоупотребляют доверенным kernel-кодом и что может сделать защитник

Суть техники BYOVD​


BYOVD (Bring Your Own Vulnerable Driver) — техника, при которой атакующий загружает в ядро Windows легитимный, криптографически подписанный драйвер, содержащий известную уязвимость. Поскольку драйвер подписан доверенным сертификатом, операционная система загружает его без дополнительных проверок. После загрузки атакующий эксплуатирует уязвимость внутри драйвера для получения произвольного доступа к памяти ядра, отключения механизмов защиты или повышения привилегий.

Ключевой парадокс: система доверяет драйверу на основании подписи, но не проверяет, содержит ли он уязвимости, позволяющие злоупотребить его функциональностью. Это делает BYOVD одним из наиболее устойчивых векторов обхода EDR и антивирусных продуктов.

Модель доверия, которую эксплуатирует BYOVD​


Windows требует, чтобы все драйверы режима ядра были подписаны сертификатом, прошедшим проверку через программу Windows Hardware Compatibility (WHQL) или Attestation Signing. Это создаёт бинарную модель доверия: драйвер либо подписан и загружается, либо нет.

Проблема в том, что подпись подтверждает происхождение драйвера, но не его безопасность. Драйвер, подписанный пять лет назад, может содержать уязвимость, обнаруженную позже. Пока Microsoft не отзовёт сертификат или не добавит драйвер в блок-лист, система продолжит его загружать.

Типичные классы уязвимостей, которые эксплуатируются через BYOVD:

  • Произвольная запись в память ядра — позволяет патчить структуры ядра, отключать механизмы защиты.
  • Произвольное чтение памяти ядра — используется для извлечения чувствительных данных или обхода ASLR.
  • Неконтролируемый доступ к MSR и портам ввода-вывода — даёт возможность манипулировать аппаратными регистрами.
  • Уязвимости в IOCTL-обработчиках — пользовательский процесс отправляет специально сформированный запрос к драйверу и получает привилегированную операцию.

Как это выглядит с точки зрения защитника​


В контексте MITRE ATT&CK техника BYOVD отображается в нескольких тактиках:

ТактикаТехникаID
Privilege EscalationExploitation for Privilege EscalationT1068
Defense EvasionImpair Defenses: Disable or Modify ToolsT1562.001
Defense EvasionSubvert Trust ControlsT1553

Атакующий, получивший доступ к ядру через уязвимый драйвер, может:

  1. Отключить или модифицировать callbacks EDR (PsSetCreateProcessNotifyRoutine, ObRegisterCallbacks и другие).
  2. Патчить Driver Signature Enforcement (DSE), чтобы загружать неподписанные драйверы.
  3. Манипулировать объектами Windows Filtering Platform (WFP) для перехвата или блокировки сетевого трафика защитных агентов.
  4. Скрывать процессы, файлы и сетевые соединения от мониторинга.

Из Evidence известно, что через BYOVD атакующие патчат DSE для загрузки модифицированных версий легитимных драйверов (например, WinDivert), которые затем используются для перехвата и фильтрации трафика через WFP. Модифицированный драйвер не детектируется стандартными инструментами мониторинга WFP, такими как WFPExplorer.

Механизмы защиты Windows​


Microsoft Vulnerable Driver Blocklist​


Microsoft поддерживает список известных уязвимых драйверов, которые блокируются при загрузке. Этот механизм работает на уровне ядра и не зависит от антивирусного продукта.

Как включить:

  • Windows 11: блок-лист активен по умолчанию при включённой функции Core Isolation (Memory Integrity). Проверить статус: Параметры → Конфиденциальность и безопасность → Безопасность Windows → Безопасность устройства → Изоляция ядра.
  • Windows 10: блок-лист доступен начиная с определённых обновлений. Активируется через групповую политику или реестр.

Через групповую политику:

Код:
Computer Configuration → Administrative Templates → System → Device Guard
"Turn on Virtualization Based Security" → Enabled
"Platform Security Level" → Secure Boot

Через реестр (для сред без GPO):

Код:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity]
"Enabled"=dword:00000001

Ограничение: блок-лист покрывает только известные уязвимые драйверы. Новые уязвимости в подписанных драйверах попадают в него с задержкой — от нескольких дней до месяцев.

HVCI (Hypervisor-protected Code Integrity)​


HVCI использует гипервизор для проверки целостности кода ядра. Даже если атакующий получит произвольную запись в память ядра, HVCI не позволит выполнить неподписанный код или модифицировать уже загруженные страницы кода.

HVCI не предотвращает загрузку уязвимого драйвера как таковую, но существенно ограничивает последствия эксплуатации: атакующий не сможет патчить код ядра или загружать произвольные модули.

Важно: HVCI требует аппаратной поддержки виртуализации (VT-x/AMD-V) и может быть несовместим с некоторыми legacy-драйверами. Перед массовым включением рекомендуется тестирование в пилотной группе.

WDAC (Windows Defender Application Control)​


WDAC позволяет создать политику, разрешающую загрузку только драйверов из утверждённого списка. Это наиболее радикальный подход: вместо блокировки известных плохих драйверов разрешаются только известные хорошие.

Код:
## Создание базовой политики WDAC (пример для аудита)
New-CIPolicy -Level Publisher -ScanPath C:\Windows\System32\drivers\ -UserPEs -FilePath .\DriverPolicy.xml

## Перевод в бинарный формат
ConvertFrom-CIPolicy -XmlFilePath .\DriverPolicy.xml -BinaryFilePath .\DriverPolicy.cip

## Применение в режиме аудита (не блокирует, только логирует)
CiTool --update-policy .\DriverPolicy.cip

Режим аудита позволяет оценить, какие драйверы будут заблокированы, до перевода политики в enforce-режим.

Детектирование попыток BYOVD​


Полностью предотвратить загрузку уязвимого драйвера без HVCI и WDAC невозможно, но можно детектировать попытку:

Мониторинг загрузки драйверов​


Событие 7045 в журнале System фиксирует установку новой службы (включая драйверы). Для драйверов, загружаемых через CreateService + StartService, это основной источник телеметрии.

Код:
## Поиск недавно загруженных драйверов
Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045} -MaxEvents 50 |
    Where-Object { $_.Message -match 'driver' } |
    Select-Object TimeCreated, Message

Контроль целостности драйверов на диске​


Если атакующий модифицирует драйвер на диске перед загрузкой, хеш файла изменится. Сравнение хешей загруженных драйверов с эталонными значениями из каталога Windows позволяет выявить подмену.

Код:
## Получение хешей загруженных драйверов
Get-WmiObject Win32_SystemDriver | ForEach-Object {
    $path = $_.PathName -replace '\\\?\\', ''
    if (Test-Path $path) {
        [PSCustomObject]@{
            Name = $_.Name
            Hash = (Get-FileHash $path -Algorithm SHA256).Hash
        }
    }
}

Мониторинг WFP-объектов​


Если атакующий использует драйвер для манипуляций с Windows Filtering Platform, это можно обнаружить через перечисление активных фильтров и callout-драйверов. Утилита WFPExplorer позволяет просмотреть зарегистрированные объекты WFP и выявить аномальные записи.

Поведенческие индикаторы​


  • Процесс EDR внезапно прекращает отправку телеметрии.
  • Появляются правила файрвола, блокирующие исходящие соединения агентов защиты (например, блокировка порта 443 для процессов MsMpEng.exe, MsSense.exe, SenseCncProxy.exe).
  • В памяти ядра обнаруживаются патчи структур, связанных с callback-механизмами.

Практический чек-лист для защитника​


  1. Включите Memory Integrity (HVCI) на всех конечных точках, где это совместимо с оборудованием и драйверами. Это наиболее эффективная единичная мера против последствий BYOVD.
  2. Убедитесь, что Microsoft Vulnerable Driver Blocklist активен. На Windows 11 он включён по умолчанию при активной изоляции ядра; на Windows 10 проверьте политику вручную.
  3. Ограничьте список разрешённых драйверов через WDAC, если инфраструктура позволяет. Начните с режима аудита.
  4. Настройте алерты на событие 7045 для драйверов, не входящих в утверждённый список.
  5. Мониторьте исходящие соединения агентов EDR — их блокировка является индикатором активной атаки.
  6. Регулярно обновляйте Windows — Microsoft добавляет новые уязвимые драйверы в блок-лист с обновлениями безопасности.
  7. Проведите инвентаризацию сторонних драйверов в среде. Каждый драйвер от стороннего вендора — потенциальная точка входа для BYOVD. Если драйвер не нужен, удалите его.

Ограничения защиты​


Ни один механизм не закрывает BYOVD полностью:

  • Блок-лист реагирует только на известные уязвимости. Zero-day в подписанном драйвере обойдёт его.
  • HVCI защищает от модификации кода ядра, но не от всех типов эксплуатации (например, чтение памяти или манипуляция данными).
  • WDAC в enforce-режиме может нарушить работу специфического оборудования.
  • Атакующий с физическим доступом или доступом к firmware может обойти все программные механизмы.

Защита от BYOVD — это многослойная стратегия, где каждый механизм снижает вероятность успеха атаки, но не гарантирует абсолютную защиту. Комбинация HVCI + блок-лист + мониторинг загрузки драйверов закрывает большинство известных сценариев.

Источники​


 
Назад
Верх Низ