BYOVD (Bring Your Own Vulnerable Driver): как работает атака через уязвимые драйверы и как защититься

BYOVD (Bring Your Own Vulnerable Driver): как работает атака через уязвимые драйверы и как защититься

BYOVD (Bring Your Own Vulnerable Driver): как работает атака через уязвимые драйверы и как защититься

BYOVD расшифровывается как Bring Your Own Vulnerable Driver, то есть «принеси свой уязвимый драйвер». В этой схеме злоумышленнику не нужна свежая брешь нулевого дня в Windows. Хакер приносит вполне себе легитимный подписанный драйвер, но зачастую устаревший и уязвимый, а затем заставляет систему его загрузить.

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

BYOVD редко бывает «первым шагом». Чаще к нему приходят после фишинга, кражи учётных данных или эксплуатации уязвимости, которая уже дала права администратора. Установка драйвера почти всегда требует повышенных привилегий, и атакующие это учитывают, выстраивая цепочку так, чтобы BYOVD стал ускорителем во второй половине атаки.

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

Далее рассматривается, почему BYOVD работает, как выглядит типовая цепочка атаки и какие меры реально снижают риск. В конце есть ссылки на ресурсы, которые помогают держать руку на пульсе.

Почему уязвимый драйвер открывает дверь в ядро

Драйвер ядра выполняется в ring 0 и взаимодействует с внутренними структурами Windows. Если в драйвере есть небезопасная обработка управляющих кодов IOCTL, он может по запросу из пользовательского режима делать то, что обычной программе недоступно. Фактически пользовательский процесс получает «пульт управления» к опасным операциям, которые задуманы для обслуживания железа, диагностики или администрирования.

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

Подпись драйвера добавляет веса атаке. Windows блокирует неподписанные компоненты, а BYOVD использует доверие к подписи как транспорт. Драйвер может входить в состав утилит для мониторинга железа, прошивки устройств, низкоуровневой диагностики, и потому выглядит как фон. Особенно в среде, где сотрудники любят «полезные тулзы», а ИТ отделу проще закрыть глаза, чем каждый раз спорить.

Ещё один практический плюс для атакующего: уязвимость в драйвере часто стабильнее, чем уязвимость в самой ОС. Драйвер годами не меняется, продолжает принимать опасные IOCTL, и одинаково хорошо работает на разных версиях Windows. Это делает BYOVD приятным инструментом для масштабирования атак, когда нужен предсказуемый результат, а не сложная комбинация условий.

В итоге атакующий получает воспроизводимый способ уйти в kernel. Для вымогателей и операторов вредоносов это прагматика: меньше сложной эксплуатации, больше контроля над машиной и больше шансов тихо выключить защиту до того, как она успеет «пожаловаться» в консоль.

Как выглядит атака BYOVD шаг за шагом

На машину попадает драйвер и небольшой пользовательский компонент, который общается с ним через IOCTL. Затем драйвер регистрируется как служба и загружается стандартными средствами Windows. Иногда это делается в открытую, иногда маскируется под установку легитимного ПО, иногда просто прячется в нетипичном каталоге с именем, похожим на что-то системное.

Ключевой момент для детекта — загрузка драйвера. До перехода в ring 0 защитникам проще реагировать: видны создание службы драйвера, появление нового .sys, попытки загрузки, события целостности кода. В этот момент многие EDR ещё способны остановить развитие атаки или хотя бы оставить заметный след в телеметрии.

Дальше злоумышленник использует уязвимость, чтобы выполнить операции в ядре. Типовые цели: выключить или ослепить EDR/AV, снять защитные флаги, подменить права процесса, подготовить скрытую загрузку другого драйвера или закрепление. Отдельно неприятный сценарий — когда уязвимый драйвер используется как трамплин, а затем в систему заносится уже откровенно вредоносный драйвер, который без этой подготовки не смог бы закрепиться.

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

Схема чаще всего укладывается в короткую последовательность:

  1. Получение прав администратора.
  2. Доставка и регистрация уязвимого подписанного драйвера.
  3. Эксплуатация IOCTL для операций в режиме ядра.
  4. Отключение защиты и дальнейшие действия (шифрование, кража данных, устойчивость).

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

Где берут уязвимые драйверы и как защититься

Первый источник — публичные каталоги и исследования. Проект LOLDrivers собирает известные уязвимые и вредоносные драйверы и даёт материалы для детекта, а каталог драйверов удобен для поиска по имени и хэшам. Для расширения кругозора полезен разбор Cisco Talos.

Второй источник — анализ популярного софта. Драйвер может иметь опасные IOCTL просто потому, что разработчик когда-то сделал «удобный» интерфейс к железу. Для атакующего это почти готовая библиотека функций ядра, без необходимости писать свой драйвер с нуля. И да, это тот случай, когда «удобно» и «безопасно» оказываются по разные стороны баррикад.

Самая практичная защита — блокирование известных проблемных драйверов. Майкрософт развивает Microsoft Vulnerable Driver Blocklist и регулярно обновляет файл DriverSiPolicy.p7b. Начать стоит с документации по рекомендованным правилам блокировки драйверов, а также со справки, как управлять блоклистом через Windows Security: KB5020779.

Поверх блоклистов важна «гигиена прав»: меньше локальных администраторов, контроль установки драйверов, включённая изоляция ядра и HVCI, мониторинг нетипичных запусков sc.exe и pnputil.exe. Если ради совместимости блоклист отключали, лучше фиксировать исключения и пересматривать их регулярно, а не жить в режиме «потом разберёмся».

Для мониторинга полезны признаки, которые не зависят от имени драйвера:

  • создание службы драйвера и последующая загрузка нового .sys;
  • драйвер в нестандартном каталоге или с «одноразовым» именем;
  • серия завершений процессов EDR/AV или отключение их компонентов;
  • события Code Integrity, связанные с блокировкой или попыткой загрузки драйвера.

Для общего понимания контекста пригодятся разборы. У Elastic описана логика BYOVD и типовые сценарии применения. А у Майкрософт есть материал про центр отчётности по уязвимым и вредоносным драйверам, который помогает экосистеме быстрее реагировать.

Заключение

BYOVD (Bring Your Own Vulnerable Driver): как работает атака через уязвимые драйверы и как защититься

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

Поэтому защита должна быть скучной и системной: обновления Windows, включённый блоклист уязвимых драйверов, контроль администраторов и установка драйверов по правилам. Чем меньше в инфраструктуре «левых» утилит, которым нужен драйвер ради удобства, тем сложнее атакующему найти подходящую отмычку.

И последний практический вывод: новая служба драйвера или попытка загрузки неизвестного .sys файла заслуживает такого же внимания, как запуск подозрительного .exe. В эпоху BYOVD это часто один и тот же инцидент, просто на разных этажах системы, и лучше поймать его до того, как он станет заголовком отчёта об очередном «внезапном шифровании».

BYOVD Bring Your Own Vulnerable Driver уязвимый драйвер атака через драйвер
Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.

«УСТАВ ООН — ТУАЛЕТНАЯ БУМАГА»

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

Дэни Хайперосов

Блог об OSINT, электронике, играх и различных хакерских инструментах