Доверяете Microsoft Defender? Его собственный драйвер удаляет антивирус по первой просьбе атакующего

leer en español

8724
Доверяете Microsoft Defender? Его собственный драйвер удаляет антивирус по первой просьбе атакующего

От Windows 7 до Windows 11 25H2 — везде один и тот же протокол, один и тот же ключ, один и тот же результат.

image

Microsoft Defender можно заставить удалить собственные защитные компоненты с помощью штатного драйвера Windows. Техника работает в системах от Windows 7 до Windows 11 25H2 и не требует эксплуатации программной уязвимости или загрузки стороннего драйвера. Атакующему достаточно получить административные права с привилегией SeLoadDriverPrivilege, после чего встроенный BTR.sys позволяет выполнять операции с файлами и реестром из ядра Windows.

BTR.sys, или Boot Time Removal Tool, входит в состав Microsoft Defender и нужен для очистки компьютера во время загрузки системы. Антивирус прибегает к драйверу, когда не может удалить вредоносный файл или запись реестра в работающей Windows. Занятый процессом файл бывает заблокирован, поэтому Defender сохраняет задание, перезагружает компьютер и завершает удаление раньше, чем программы успевают снова занять нужные объекты.

Исследователи обнаружили, что штатный механизм принимает гораздо более широкий набор команд, чем требуется для обычной антивирусной очистки. Правильно сформированное задание позволяет BTR.sys удалять заблокированные файлы и каталоги, переносить файлы в произвольные места, включая System32\drivers, удалять разделы и параметры реестра и записывать в реестр новые значения любого типа. Все операции выполняются в Ring 0, то есть на уровне ядра Windows.

Обычная блокировка опасных драйверов здесь мало помогает. BTR.sys нужен самому Microsoft Defender, поэтому добавление компонента в список заблокированных уязвимых драйверов Microsoft нарушило бы работу антивируса. По той же причине проблематично запретить BTR.sys через механизм управления приложениями Windows, ранее известный как Windows Defender Application Control. Microsoft сейчас использует для него название «Управление приложениями для бизнеса».

К технике исследователей привёл разбор скомпрометированного компьютера. Часть телеметрии сначала напоминала действия вредоносной программы, однако проверка указала на обычную работу Microsoft Defender во время очистки системы. После этого специалисты начали изучать внутренний протокол, через который Defender передаёт BTR.sys задания для выполнения.

Протокол оказался закрытым и недокументированным. Конфигурация с командами шифруется алгоритмом RC4, причём 256-байтный ключ жёстко записан в секции .rdata каждого исследованного BTR.sys. Проверка 18 разных 64-битных версий показала один и тот же ключ во всех изученных выпусках начиная с Windows 7. Зная формат данных и ключ, можно самостоятельно подготовить транзакцию, которую драйвер примет за корректное задание.

Для проверки исследователи создали BTR_CLI. Программа сначала находит библиотеку MpEngine.dll среди файлов обновлений Microsoft Defender. Двоичный код BTR.sys находится внутри библиотеки в ресурсе BOOTTIMETOOL, поэтому приносить драйвер извне не требуется. BTR_CLI извлекает встроенный файл прямо из компонентов Defender, установленных на компьютере.

Затем программа формирует зашифрованный набор команд и регистрирует BTR.sys как драйверную службу прямой записью в ветку HKLM системного реестра. BTR_CLI задаёт параметры Type=1, Start=1 и Group="Boot Bus Extender". Диспетчер управления службами Windows при такой регистрации не используется.

Прямая запись в реестр оставляет меньше привычных следов в журналах. Windows обычно создаёт событие Event ID 7045 при установке службы через стандартный механизм, но BTR_CLI обходит диспетчер управления службами, поэтому запись с Event ID 7045 не появляется. Сам драйвер при этом получает необходимые параметры для загрузки.

После запуска BTR.sys читает подготовленное задание и выполняет команды от имени системного процесса с PID 4. Для средств мониторинга файловые операции поэтому выглядят как действия самой Windows, а не обычного пользовательского процесса.

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

BTR.sys запускается достаточно рано, чтобы воспользоваться этим промежутком. Драйвер может удалить WdFilter.sys, MsMpEng.exe и другие файлы Defender до полноценного запуска антивирусной защиты. Удаление выполняет подписанный компонент самой Microsoft с правами ядра, а не неизвестная программа из пользовательского режима.

Работу метода показали на полностью обновлённой Windows 11 25H2. На компьютере была включена функция «Защита от незаконного изменения», которая должна мешать программам отключать Microsoft Defender и менять защищённые параметры. BTR_CLI смог удалить компоненты антивируса и при включённой защите, поскольку операции выполнялись штатным драйвером во время ранней загрузки Windows.

Получить контроль над компьютером исключительно через BTR.sys нельзя. Для загрузки драйвера нужна административная учётная запись с SeLoadDriverPrivilege. BTR_CLI автоматически включает привилегию, если право уже назначено текущей учётной записи, но сам инструмент не предоставляет его обычному пользователю и не повышает привилегии.

Требование административного доступа определило позицию Microsoft после передачи информации в Microsoft Security Response Center. Компания не отнесла описанный механизм к уязвимостям, требующим немедленного исправления, поскольку атакующий должен заранее получить административные права и возможность загружать драйверы. В репозитории BTR_CLI разработчик указывает, что исправление не планируется, однако Microsoft публично такое решение не подтверждала.

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

BTR.sys уже находится внутри Microsoft Defender, имеет действительную подпись Microsoft и нужен антивирусу для штатной работы. Исследователи также не используют ошибку памяти, неправильную проверку прав или другую классическую уязвимость. Драйвер получает корректно сформированные инструкции через собственный протокол и выполняет операции, для которых изначально получил высокие привилегии.

Схожий принцип уже применяли против защитного ПО, хотя с другими компонентами Windows. Инструмент AvNeutralizer, связанный с группировкой FIN7, использовал системный драйвер ProcLaunchMon.sys вместе с драйвером Process Explorer для вмешательства в работу средств защиты конечных устройств. BTR.sys расширяет ту же идею: атакующему не обязательно приносить в систему заведомо уязвимый сторонний компонент, если нужные возможности уже есть у доверенного драйвера Windows.

Сам BTR.sys ранее попадал в исследования безопасности по другой причине. В феврале 2021 года в драйвере исправили CVE-2021-24092. Уязвимость позволяла локальному пользователю без административных прав перезаписывать произвольные файлы через жёсткую ссылку, размещённую по пути к журналу драйвера. Microsoft выпустила исправление 9 февраля 2021 года.

BTR.sys долго оставался малозаметным объектом для анализа из-за особенностей работы. Defender не обязан постоянно хранить драйвер на диске под одним именем. Защитное ПО извлекает компонент при необходимости, может присвоить файлу случайное имя, запускает очистку, а затем удаляет временный драйвер.

Признаков использования новой техники в реальных атаках исследователи пока не обнаружили. Проверка собранных образцов и телеметрии не показала случаев, где злоумышленники управляли BTR.sys описанным способом. Поэтому основное внимание сейчас уделяется поведенческим признакам, по которым защитные системы смогут заметить попытку применения BTR_CLI или похожего инструмента.

Первый заметный след оставляет альтернативный поток данных :changelist, куда записывается зашифрованная конфигурация. Sysmon Event ID 15 FileCreateStreamHash может зафиксировать имя, заканчивающееся на .sys:changelist. Такая последовательность указывает на создание дополнительного потока данных рядом с файлом драйвера.

Следующий признак появляется в реестре. События Sysmon Event ID 12 и 13 позволяют заметить создание ключа службы, где параметр Args содержит :changelist, а Group имеет значение Boot Bus Extender. Сочетание становится особенно подозрительным, если рядом нет Windows Event ID 7045, поскольку BTR_CLI регистрирует драйвер напрямую через HKLM и не обращается к диспетчеру управления службами.

BTR.sys также использует жёстко заданный путь \SystemRoot\Temp\BootClean.log. Драйвер создаёт журнал независимо от программы, инициировавшей запуск. Sysmon Event ID 11 и 23 могут показать быстрое создание и удаление BootClean.log системным процессом с PID 4.

Для непосредственного запуска в работающей Windows исследователи предлагают отслеживать ещё одну последовательность. Sysmon Event ID 6 фиксирует загрузку драйвера, после чего Event ID 23 может почти сразу зарегистрировать удаление файла процессом System с PID 4. Вместе события дают характерный след выполнения подготовленного задания на уровне ядра.

Основной мерой защиты исследователи считают ограничение SeLoadDriverPrivilege. Право позволяет загружать драйверы ядра и не должно назначаться административным учётным записям без необходимости. Без административного доступа и нужной привилегии использовать BTR.sys описанным способом нельзя.

Исходный код BTR_CLI опубликован на GitHub под лицензией MIT. В разделе выпусков доступны готовые версии для 64-битных и 32-битных систем. На момент публикации Microsoft не сообщала о планах менять архитектуру BTR.sys или выпускать отдельное исправление для описанной техники.