Rootkit и драйверы Windows: риски уязвимых или неподписанных модулей и защитные механизмы загрузки

Почему драйверы — критическая точка атаки​


Драйвер в Windows выполняется в режиме ядра (Ring 0). Это означает полный доступ к физической памяти, таблицам страниц, структурам ядра и аппаратным прерываниям. Если злоумышленник получает возможность загрузить произвольный драйвер, он фактически контролирует всю систему: может скрывать процессы, файлы, сетевые соединения и перехватывать системные вызовы.

Исторически Windows не требовала подписи для драйверов в 32-битных версиях. С переходом на 64-битную архитектуру Microsoft ввела обязательную проверку подписи — Driver Signature Enforcement (DSE). Однако атакующие нашли обходные пути, и сегодня основная угроза связана не с загрузкой неподписанного кода напрямую, а с эксплуатацией легитимных, но уязвимых драйверов.

Механизм DSE и его ограничения​


Driver Signature Enforcement — это политика, при которой ядро Windows отказывается загружать драйвер, если он не подписан доверенным сертификатом. Для получения подписи разработчик должен:

  • Зарегистрироваться в программе Windows Hardware Compatibility Program.
  • Пройти проверку кода через Microsoft.
  • Оплатить сертификат (стоимость начинается от ~150 долларов).

DSE активна по умолчанию на 64-битных системах. Её можно отключить через:

  • Загрузку в режиме Test Signing (bcdedit /set testsigning on).
  • Загрузку с отключённой проверкой подписи (через меню дополнительных параметров загрузки).
  • Эксплуатацию уязвимостей в уже подписанных драйверах.

Первые два варианта требуют физического доступа или прав администратора и оставляют видимые следы (водяной знак на рабочем столе, записи в журнале загрузки). Третий путь — основной вектор для rootkit-операторов.

Атака BYOVD: Bring Your Own Vulnerable Driver​


BYOVD — техника, при которой атакующий загружает легитимный подписанный драйвер, содержащий известную уязвимость. Поскольку драйвер подписан, DSE не блокирует его загрузку. После загрузки уязвимость эксплуатируется для получения произвольного доступа к памяти ядра или MSR-регистрам.

Механика атаки выглядит так:

  1. Атакующий выбирает драйвер из списка известных уязвимых модулей.
  2. Драйвер загружается стандартным способом (через CreateService + StartService или через утилиту загрузки драйверов), поскольку подпись валидна.
  3. Через IOCTL-запросы к уязвимому драйверу атакующий получает примитив произвольного чтения/записи в физическую или виртуальную память ядра.
  4. С помощью этого примитива загружается целевой rootkit-модуль — либо путём отключения DSE и загрузки неподписанного драйвера, либо путём внедрения кода в уже загруженный модуль ядра.

Типичные уязвимости в драйверах, используемых для BYOVD:

Тип уязвимостиЧто даёт атакующему
Произвольная запись в физическую памятьПерезапись структур ядра, отключение DSE, внедрение кода
Произвольное чтение физической памятиИзвлечение секретов, обход ASLR
Доступ к MSR-регистрамМодификация LSTAR, перехват системных вызовов
Доступ к портам ввода-выводаПрямое взаимодействие с оборудованием в обход защиты

Известные примеры драйверов, которые использовались в BYOVD-атаках: RTCore64.sys (MSI Afterburner), DBUtil_2_3.sys (Dell), gdrv.sys (Gigabyte), AsIO64.sys (ASUS). Microsoft ведёт список заблокированных уязвимых драйверов и обновляет его через Windows Update.

Что делает rootkit после загрузки в ядро​


Получив выполнение в Ring 0, rootkit может реализовать набор функций, которые крайне сложно обнаружить из пользовательского режима:

  • Скрытие процессов. Удаление или модификация записей в списке активных процессов (EPROCESS), перехват NtQuerySystemInformation.
  • Скрытие файлов. Перехват IRP-запросов к файловой системе, фильтрация результатов NtQueryDirectoryFile.
  • Скрытие сетевых соединений. Перехват запросов к стеку TCP/IP, удаление записей из таблиц соединений.
  • Защита собственных компонентов. Установка kernel callbacks (ObRegisterCallbacks, PsSetCreateProcessNotifyRoutine) для блокировки попыток завершения процессов или удаления файлов.
  • Перехват системных вызовов. Модификация SSDT (System Service Descriptor Table) или MSR LSTAR для перенаправления вызовов.
  • Манипуляция kernel callbacks. Удаление или подмена зарегистрированных callback-функций, которые используют антивирусы и EDR-решения.
  • Модификация PP/PPL. Изменение уровня защиты процесса (Protected Process / Protected Process Light), что позволяет rootkit-процессу получить привилегии, недоступные обычным процессам, или снять защиту с системных процессов.

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


Secure Boot​


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

HVCI (Hypervisor-protected Code Integrity)​


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

Kernel Patch Protection (PatchGuard)​


PatchGuard защищает критические структуры ядра от модификации: SSDT, IDT, GDT, MSR-регистры, списки callback-функций. Если rootkit пытается модифицировать эти структуры, PatchGuard вызывает BSOD. Это не предотвращает загрузку rootkit, но ограничивает его возможности по перехвату системных вызовов.

Windows Defender Application Control (WDAC)​


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

Блокировка уязвимых драйверов​


Microsoft поддерживает список заблокированных драйверов (Microsoft Vulnerable Driver Blocklist). Он обновляется через Windows Update и может быть включён через групповую политику или WDAC. При включении HVCI этот список применяется автоматически.

Диагностика: как обнаружить подозрительный драйвер​


Проверка подписи​


Код:
Get-WindowsDriver -Online | ForEach-Object {
    $sig = Get-AuthenticodeSignature $_.OriginalFileName -ErrorAction SilentlyContinue
    if ($sig.Status -ne 'Valid') {
        [PSCustomObject]@{
            Driver = $_.Driver
            File = $_.OriginalFileName
            Status = $sig.Status
        }
    }
}

Эта команда выводит драйверы с невалидной или отсутствующей подписью. На продакшн-системах таких быть не должно.

Анализ загруженных модулей ядра​


Код:
driverquery /v /fo csv | ConvertFrom-Csv | Select-Object "Display Name", "Start Mode", "Path" | Format-Table -AutoSize

Обращайте внимание на:

  • Драйверы, загруженные из нестандартных путей (не C:\Windows\System32\drivers\).
  • Драйверы без описания или с подозрительным именем.
  • Драйверы, загруженные в режиме System или Boot, которые не относятся к известному оборудованию.

Проверка через Sysinternals​


Утилита Sigcheck из пакета Sysinternals позволяет проверить подпись конкретного файла:

Bash:
sigcheck -i C:\Windows\System32\drivers\suspicious.sys

Флаг -i выводит подробную информацию о сертификате и цепочке доверия.

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


Для обнаружения попыток загрузки уязвимых драйверов в реальном времени можно использовать:

  • Sysmon (Event ID 6 — драйвер загружен). Настройте правило для логирования всех загружаемых драйверов и сверяйте хеши с базой известных уязвимых модулей.
  • EDR-решения с функцией мониторинга загрузки драйверов.

Пример правила Sysmon для логирования загрузки драйверов:

XML:
<Sysmon schemaversion="4.90">
  <EventFiltering>
    <DriverLoad onmatch="include">
      <Hashes condition="contains">SHA256=</Hashes>
    </DriverLoad>
  </EventFiltering>
</Sysmon>

На практике чаще используют режим логирования всех загрузок драйверов с последующей фильтрацией по хешам из Microsoft Vulnerable Driver Blocklist.

Практические меры защиты​


МераЭффективность против BYOVDСложность внедрения
Включение HVCIВысокаяСредняя (требует совместимости оборудования)
WDAC с whitelist-политикойОчень высокаяВысокая (требует аудита всех драйверов)
Microsoft Vulnerable Driver BlocklistСредняяНизкая
Secure BootНизкая (защищает только цепочку загрузки)Низкая
Отключение загрузки неподписанных драйверов через GPOСредняяНизкая

Рекомендуемый минимум​


  1. Убедитесь, что Secure Boot активен (Confirm-SecureBootUEFI в PowerShell).
  2. Включите HVCI через групповую политику: Computer Configuration → Administrative Templates → System → Device Guard → Turn On Virtualization Based Security.
  3. Активируйте Microsoft Vulnerable Driver Blocklist. При включённой HVCI он применяется автоматически.
  4. Для критичных серверов разверните WDAC-политику, разрешающую только драйверы из утверждённого списка.
  5. Настройте Sysmon на логирование Event ID 6 и создайте правило алертинга для драйверов с неизвестным хешем.

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


Ни один механизм не даёт абсолютной гарантии:

  • HVCI может быть обойдена через уязвимости в самом гипервизоре или через DMA-атаки (если не включена защита IOMMU).
  • WDAC требует постоянного обновления whitelist при добавлении нового оборудования или ПО.
  • PatchGuard защищает структуры ядра, но не предотвращает загрузку вредоносного драйвера как такового.
  • Атакующий с физическим доступом может обойти Secure Boot через модификацию UEFI-прошивки (при отсутствии аппаратной защиты прошивки).
  • Microsoft Vulnerable Driver Blocklist покрывает только известные уязвимые драйверы. Новые уязвимости в подписанных драйверах появляются регулярно, и между публикацией уязвимости и добавлением в блок-лист проходит время.

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

Источники​


 
Да, на свежих установках Windows 11 по умолчанию включена связка HVCI + Microsoft Vulnerable Driver Blocklist, поэтому известные уязвимые драйверы блокируются. Но есть важные нюансы, зависящие от того, как была установлена система.

Что включено по умолчанию​


  • Secure Boot — включён на всех сертифицированных OEM-устройствах. На собранных вручную ПК может быть отключён в UEFI, но Windows 11 требует его для установки.
  • HVCI (Memory Integrity / Core Isolation) — включён по умолчанию на чистых установках Windows 11 (начиная с версии 22H2) и на новых OEM-устройствах. На системах, обновлённых с Windows 10, он часто остаётся выключенным из-за несовместимых драйверов.
  • Microsoft Vulnerable Driver Blocklist — автоматически активируется, когда включён HVCI. Поскольку HVCI включён по умолчанию на новых системах, блокировка известных уязвимых драйверов также активна.
  • PatchGuard (KPP) — всегда активен на 64-битных системах, независимо от настроек.
  • DSE (Driver Signature Enforcement) — всегда активен на 64-битных системах.

Критический нюанс: апгрейд с Windows 10​


Если система была обновлена с Windows 10, HVCI не включается автоматически. Microsoft отключает его при обнаружении несовместимых драйверов, чтобы не вызвать BSOD. В этом случае блок-лист уязвимых драйверов тоже неактивен.

Проверить текущее состояние можно командой:

Код:
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard | Select-Object VirtualizationBasedSecurityStatus, SecurityServicesRunning

Значения:

  • VirtualizationBasedSecurityStatus = 2 означает, что VBS включён.
  • SecurityServicesRunning содержит список запущенных служб. Если там есть 2 (HVCI), значит Memory Integrity активна.

Также можно проверить через Windows Security:

Код:
Get-MpComputerStatus | Select-Object IsVirtualMachine, IsTamperProtected, VulnerableDriverBlocklist

Свойство VulnerableDriverBlocklist показывает, активен ли блок-лист.

Ограничения блок-листа​


Даже при включённом HVCI и активном блок-листе защита не абсолютна:

  • Блок-лист покрывает только известные уязвимые драйверы. Новые уязвимости в подписанных драйверах появляются регулярно, и между публикацией и добавлением в список проходит время.
  • Пользователь с правами администратора может отключить Memory Integrity через интерфейс Windows Security, что автоматически отключит блок-лист.
  • Некоторые драйверы, которые Microsoft не считает уязвимыми, но которые могут использоваться для BYOVD, могут отсутствовать в списке.

Практическая рекомендация​


Для систем, обновлённых с Windows 10, проверьте статус HVCI и включите его вручную, если оборудование поддерживает:

Код:
[HEADING=1]Проверка поддержки[/HEADING]
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard | Select-Object AvailableSecurityProperties

Если в AvailableSecurityProperties есть значение 2 (HVCI доступен), включите его через групповую политику или реестр:

Код:
HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity
"Enabled" = dword:00000001

После включения перезагрузите систему. Это закроет основной вектор BYOVD-атак на вашей системе.
 

Похожие темы

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