Когда привыкаешь работать на уровне ring 0, кажется - глубже только голое железо. А потом обнаруживаешь, что между последней инструкцией ядра и первым тактом процессора лежит целый пласт кода, который большинство пентестеров никогда не трогали: UEFI firmware, DXE-драйверы, загрузчик ОС и EFI System Partition. Именно там в последние годы прочно обосновались буткиты - малварь, которая получает контроль ещё до инициализации операционной системы. Ниже ОС, ниже EDR, ниже всего, что ты привык мониторить.
В 2023 году ESET опубликовала подробный анализ BlackLotus - первого публично задокументированного буткита, который обходит UEFI Secure Boot на полностью обновлённой Windows 11. Чуть раньше «Касперский» описал CosmicStrand, живущий прямо в SPI-флеше материнской платы. Два семейства, две принципиально разные точки входа, одна цель - persistence ниже уровня ОС, невидимый для классических EDR.
Здесь - практический разбор: где именно в цепочке загрузки находятся точки атаки, как BlackLotus и CosmicStrand их эксплуатируют, и что ты можешь сделать руками, чтобы обнаружить или предотвратить компрометацию на уровне прошивки. Все команды и инструменты проверены на лабораторном стенде с QEMU/OVMF и на физическом железе.
Цепочка загрузки UEFI: где именно живут буткиты
Прежде чем препарировать конкретную малварь, нужно понимать boot flow. UEFI разделяет загрузку на несколько фаз - по спецификации UEFI Forum последовательность такая:- SEC (Security Phase) - процессор выходит из reset vector, переключается из real mode в protected mode, инициализирует временную RAM через CPU cache.
- PEI (Pre-EFI Initialization) - настройка контроллера памяти, включение DRAM, инициализация чипсета.
- DXE (Driver Execution Environment) - самая длинная фаза: загрузка всех DXE-драйверов, инициализация остального оборудования, настройка SMM, создание таблиц BootServices и RuntimeServices.
- BDS (Boot Device Selection) - выбор загрузочного устройства, запуск загрузчика ОС из EFI System Partition.
- TSL (Transient System Load) - передача управления загрузчику ОС (
bootmgfw.efi→winload.efi).
Буткиты атакуют разные звенья цепочки. Классификация по точке внедрения (на основе анализа Binarly):
| Буткит | Точка внедрения | Тип компонента | Переживает переустановку ОС | Переживает замену диска |
|---|---|---|---|---|
| BlackLotus | ESP (EFI System Partition) | UEFI Application | Да | Нет |
| CosmicStrand | SPI Flash (DXE-драйвер) | DXE Driver | Да | Да |
| MoonBounce | SPI Flash (DxeCore) | Modified DxeCore | Да | Да |
| ESPecter | ESP | UEFI Application | Да | Нет |
| Bootkitty | ESP (замена GRUB) | UEFI Application | Да | Нет |
Принципиальная разница: ESP-буткиты (BlackLotus, ESPecter) живут на FAT32-разделе диска - теоретически до них можно добраться. SPI-буткиты (CosmicStrand, MoonBounce) записаны в микросхему прошивки на материнской плате. Переустановка ОС, замена жёсткого диска - им всё равно. Они уже дома.
BlackLotus буткит: обход Secure Boot через
Ссылка скрыта от гостей
Суть атаки
BlackLotus - первый публично подтверждённый in-the-wild UEFI буткит, способный обойти Secure Boot на полностью обновлённых системах Windows 11. По данным ESET (Martin Smolár, WeLiveSecurity, март 2023), он продавался на подпольных форумах с октября 2022 года за $5000. Пять тысяч баксов - и Secure Boot перестаёт существовать.Ключевой механизм - эксплуатация CVE-2022-21894 (Secure Boot Security Feature Bypass Vulnerability). По NVD:
- CVSS: 4.4 (MEDIUM)
- Вектор: CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:N/I:H/A:N
- CWE:
Ссылка скрыта от гостей
AV:L), требует высоких привилегий (PR:H), действие пользователя не нужно (UI:N), зато полный контроль над целостностью (I:H). Формально CVSS-оценка «средняя» - и вот тут начинается самое интересное. PR:H значит, что атакующему нужен admin/SYSTEM. Но если ты его уже получил через фишинг, BYOVD или эксплойт ядра, эта «средняя» уязвимость открывает дверь к абсолютной persistence. Лично я считаю, что CVSS здесь сильно недооценивает реальный импакт - контекст атаки всё меняет.Microsoft выпустила патч в январе 2022 года, но вот незадача: подписанные уязвимые бинарники не были добавлены в UEFI revocation list (
dbx). BlackLotus приносит с собой собственные копии легитимных, но уязвимых загрузчиков - классическая Downgrade Attack (T1562.010, Defense Evasion по MITRE ATT&CK). Патч есть, а толку нет.Цепочка установки
По анализу ESET, установка BlackLotus идёт в несколько этапов:Шаг 0 - Инициализация. Инсталлятор проверяет локаль системы. Если
ru-RU, uk-UA, be-BY, hy-AM, kk-KZ, ro-MD или ru-MD - установка прерывается. Типичный маркер пост-советского crimeware - «своих не трогаем».Шаг 1 - Развёртывание файлов. На ESP размещаются: уязвимый подписанный загрузчик Windows, самоподписанный MOK (Machine Owner Key), вспомогательные файлы.
Шаг 2 - Отключение HVCI. Hypervisor-protected Code Integrity вырубается до перезагрузки, чтобы убрать проверку целостности кода на уровне гипервизора.
Шаг 3 - Отключение BitLocker. Снимается защита тома - буткиту нужен доступ к загрузочным компонентам без шифрования.
Шаг 4 - Эксплуатация CVE-2022-21894 и установка persistence. Через уязвимый загрузчик (техника «Baton Drop») буткит регистрирует собственный MOK в NVRAM. При следующей загрузке Secure Boot считает буткит доверенным. Code Signing Policy Modification (T1553.006) в чистом виде.
Шаг 5 - После перезагрузки. Буткит стартует как загрузчик, разворачивает kernel-mode драйвер и HTTP-загрузчик (работает в контексте
winlogon.exe). Драйвер защищает файлы буткита на ESP от удаления - попытка закрыть файловые хэндлы приводит к BSOD. Грубо, но работает.Что отключает BlackLotus
После установки BlackLotus вырубает:- Windows Defender - деактивация основного процесса
- HVCI - отключение гипервизорной проверки целостности кода
- BitLocker - снятие защиты тома
- UAC - обход контроля учётных записей
CosmicStrand малварь: буткит в SPI-флеше
Если BlackLotus - буткит «на диске», то CosmicStrand - firmware implant, записанный в SPI flash материнской платы. Разница между ними определяет всё: подход к обнаружению, удалению и вообще шансы на успех.Точка внедрения
CosmicStrand модифицирует DXE-драйвер в прошивке UEFI. При каждой загрузке скомпрометированный драйвер получает управление на фазе DXE - задолго до того, как Secure Boot проверяет загрузчик ОС. Почему? Потому что DXE-код - часть самой прошивки и считается доверенным по определению. Secure Boot защищает от внешних угроз, а тут враг уже внутри крепости.По данным Kaspersky и Binarly, CosmicStrand использует hooking таблицы BootServices: подменяет указатели функций на собственные обработчики. Для поиска функции
OslArchTransferToKernel в памяти применяется 4-байтовая сигнатура 0x41106A56 - буткит сканирует память, находит нужное место и подставляет inline hook, перехватывая момент передачи управления ядру Windows.Это техника System Firmware (T1542.001, Persistence / Defense Evasion) - persistence непосредственно в прошивке.
Почему это опаснее ESP-буткитов
| Критерий | BlackLotus (ESP) | CosmicStrand (SPI Flash) |
|---|---|---|
| Переживает замену диска | Нет | Да |
| Переживает переустановку ОС | Да | Да |
| Обнаружение стандартными AV | Теоретически возможно (FAT32) | Практически невозможно |
| Требует физического доступа для удаления | Нет | Часто да (перепрошивка) |
| Сложность установки | Средняя (нужен admin) | Высокая (нужен доступ к SPI) |
Чтобы убить CosmicStrand, нужна перепрошивка UEFI с чистым образом от производителя. Переустановка Windows, форматирование диска, замена SSD - ничего из этого не поможет. Малварь живёт в чипе на плате - и ей плевать на твои диски.
Атаки на цепочку загрузки: общие техники
Binarly провели сравнительный анализ нескольких семейств и выявили общие паттерны поведения. Для тех, кто строит generic-детектирование - это золото.Сброс бита Write Protect в CR0
Все современные буткиты (CosmicStrand, ESPecter, BlackLotus, MoonBounce) сбрасывают бит WP в регистре CR0. Снимают защиту записи с read-only страниц памяти, после чего спокойно патчат PE-заголовки ядра, меняют entry point, правят права секций. В легитимных UEFI-приложениях такое поведение - редкость. Если видишь сброс WP в CR0 на этапе загрузки - это красный флаг.Shellcode-подобный парсинг PE
Буткиты сами парсят PE-заголовки загруженных образов (ядро Windows, загрузчик) - без штатных API прошивки. Ручной обход таблицы экспорта, поиск функций по хешам имён - поведение, знакомое любому, кто анализировал шеллкод. Binarly отмечает: в легитимных UEFI-приложениях такой паттерн практически не встречается.Inline hooking OslArchTransferToKernel
Четыре из шести исследованных Binarly буткитов (MoonBounce, CosmicStrand, ESPecter, BlackLotus) перехватывают функциюOslArchTransferToKernel - критическую точку передачи управления от загрузчика ядру. Но каждый использует свою сигнатуру поиска и свои инструкции для патча. Так что единую сигнатуру написать не получится - придётся ловить по поведению.UEFI rootkit анализ: практическое обнаружение
Ладно, хватит теории. Переходим к тому, ради чего вы это читаете - конкретные команды и инструменты.Проверка состояния Secure Boot
Стандартная проверка черезmokutil недостаточна - она показывает состояние, которое ОС считает актуальным, а буткит может его подделать. Проверяем из нескольких источников:
Bash:
# Проверка из ОС (может быть скомпрометирована буткитом)
mokutil --sb-state
# Проверка через UEFI-переменные напрямую
efivar -l | grep SecureBoot
efivar -p -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-SecureBoot
# Чтение dbx (revocation list) - проверяем, обновлён ли
efivar -p -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-dbx | head -20
mokutil --sb-state говорит «SecureBoot enabled», а efivar для SecureBoot возвращает 00 - поздравляю, это прямой индикатор компрометации. Буткит врёт операционке, а та радостно передаёт враньё тебе.Аудит конфигурации UEFI с CHIPSEC
CHIPSEC - open-source фреймворк от Intel для аудита безопасности прошивки. На физическом железе он позволяет проверить критические настройки защиты SPI-флеша:
Bash:
# Установка (требует Linux, kernel headers, доступ к /dev/mem)
pip install chipsec
# Проверка защиты записи SPI-флеша
sudo chipsec_main -m common.spi_lock
# Проверка защиты BIOS Region
sudo chipsec_main -m common.bios_wp
# Проверка SMRAM (защита System Management RAM)
sudo chipsec_main -m common.smrr
# Полный аудит безопасности прошивки
sudo chipsec_main
common.spi_lock- FAILED означает, что SPI-флеш можно перезаписать программно. Дверь для имплантов типа CosmicStrand открыта.common.bios_wp- проверяет битыBWE,BLE,PRx. Если защита не активирована - прошивку можно модифицировать прямо из ОС. На одном тесте я видел FAILED на обоих модулях у свежего серверного железа из коробки. Вендор просто не включил защиту.
Извлечение и анализ прошивки
Чтобы найти вредоносные DXE-драйверы, нужно снять дамп прошивки и разобрать каждый модуль:
Bash:
# Дамп прошивки через CHIPSEC
sudo chipsec_util spi dump firmware.bin
# Извлечение модулей через UEFITool (GUI) или UEFIExtract (CLI)
UEFIExtract firmware.bin all
# Поиск аномалий в DXE-модулях через binwalk
binwalk -e firmware.bin
# Быстрая проверка энтропии (зашифрованные/упакованные модули подозрительны)
binwalk -E firmware.bin
Мониторинг EFI System Partition
ESP-буткиты (BlackLotus, ESPecter) оставляют артефакты на FAT32-разделе. Вот как их искать:
Bash:
# Монтирование ESP
sudo mount /dev/sda1 /mnt/esp
# Вычисление хешей всех EFI-файлов
find /mnt/esp -name "*.efi" -exec sha256sum {} \;
# Сравнение с эталонными хешами загрузчиков Microsoft
# bootmgfw.efi должен совпадать с подписанной версией из текущего обновления
# Поиск подозрительных файлов (BlackLotus размещает ~80 КБ бинарник)
find /mnt/esp -name "*.efi" -size +50k -size -100k -ls
# Проверка подписей EFI-файлов
pesign --show-signature -i /mnt/esp/EFI/Microsoft/Boot/bootmgfw.efi
UEFI Memory Forensics
Исследователи (публикация на arXiv, 2025) разработали фреймворк для анализа памяти UEFI на этапе pre-OS. Два компонента:- UefiMemDump - DXE-драйвер или UEFI shell-приложение для снятия дампа памяти во время работы прошивки, до передачи управления ОС.
- UEFIDumpAnalysis - набор модулей анализа: обнаружение hooking указателей функций в таблицах BootServices/RuntimeServices, детектирование inline hooking, извлечение загруженных UEFI-образов.
Secure Boot уязвимости: проблема revocation
Ключевая проблема, которую эксплуатирует BlackLotus, - не сама CVE-2022-21894, а сломанный механизм отзыва. Microsoft выпустила патч, но не добавила уязвимые подписанные загрузчики вdbx (UEFI revocation list). Причина по данным ESET: уязвимость затрагивает сотни легитимных загрузчиков, которые до сих пор используются. Массовый отзыв может привести к невозможности загрузки на миллионах машин.Это системная проблема Secure Boot, и она выглядит как замкнутый круг:
- Microsoft подписывает сторонние загрузчики (shim для Linux, загрузчики OEM-вендоров) своим UEFI CA ключом.
- Если любой из этих загрузчиков оказывается уязвимым - его нужно добавить в
dbx. - Добавление в
dbxсломает загрузку всех систем, использующих этот загрузчик. - Поэтому отзыв не происходит - и уязвимость остаётся эксплуатируемой.
Аналогичная история с LogoFAIL - уязвимостью в библиотеках обработки BMP-изображений внутри UEFI-прошивок. По данным Binarly Research, буткит Bootkitty использовал LogoFAIL для добавления своего самоподписанного сертификата в список доверенных, обходя Secure Boot без ручного вмешательства оператора. Уязвимость затрагивала прошивки ноутбуков Acer, HP, Fujitsu и Lenovo. Через картинку с логотипом. Серьёзно.
Защита от буткитов: что реально работает
Intel Boot Guard
Единственный механизм, который переносит root-of-trust в неизменяемое оборудование. При включённом Boot Guard ключи верификации зашиты в фьюзы процессора - программная модификация невозможна. По данным Binary Defense, на момент написания не существует in-the-wild буткитов, обходящих Boot Guard. Были утечки ключей, но рабочих эксплойтов в дикой природе не зафиксировано.Как проверить:
Bash:
# Через CHIPSEC
sudo chipsec_main -m common.secureboot.variables
sudo chipsec_main -m common.bios_ts
Обновление dbx
Регулярно обновляйте UEFI revocation list. Microsoft публикует обновленияdbx через Windows Update, но на Linux это нужно делать вручную:
Bash:
# Загрузка актуального dbx от UEFI Forum
# https://uefi.org/revocationlistfile
# Применение через fwupd
fwupdmgr get-updates
fwupdmgr update
# Или вручную через efi-updatevar (осторожно - можно окирпичить загрузку!)
# efi-updatevar -f dbx-update.bin dbx
Мониторинг ESP на изменения
Настройте регулярное сканирование EFI System Partition. Любое изменение файлов в/boot/efi/EFI/ вне штатного обновления ОС - повод для расследования:
Bash:
# Создание эталонного снимка
find /boot/efi -type f -exec sha256sum {} \; > /root/esp_baseline.txt
# Периодическая проверка (cron)
find /boot/efi -type f -exec sha256sum {} \; | diff /root/esp_baseline.txt -
Measured Boot и TPM Attestation
TPM (Trusted Platform Module) фиксирует хеши каждого компонента цепочки загрузки в PCR-регистрах (Platform Configuration Registers). При наличии remote attestation сервера можно автоматически обнаружить подмену загрузчика:
Bash:
# Чтение текущих значений PCR
tpm2_pcrread sha256:0,1,2,3,4,5,6,7
# PCR[0] - firmware code
# PCR[4] - загрузчик
# PCR[7] - Secure Boot state
Таблица маппинга ATT&CK для буткит-атак
| Техника MITRE ATT&CK | Тактика | Применение в буткитах |
|---|---|---|
|
Ссылка скрыта от гостей
| Persistence, Defense Evasion | BlackLotus, ESPecter, Bootkitty |
| System Firmware (T1542.001) | Persistence, Defense Evasion | CosmicStrand, MoonBounce |
| Rootkit (T1014) | Defense Evasion | Kernel-mode драйвер BlackLotus |
| Code Signing Policy Modification (T1553.006) | Defense Evasion | Регистрация MOK в BlackLotus |
| Downgrade Attack (T1562.010) | Defense Evasion | Подмена загрузчиков уязвимыми версиями |
| Compromise Hardware Supply Chain (T1195.003) | Initial Access | Заражение прошивки на этапе производства |
| Inhibit System Recovery (T1490) | Impact | Отключение BitLocker в BlackLotus |
Практический чеклист: обнаружение UEFI буткитов
Пошаговый алгоритм для проверки системы на firmware-угрозы - делай раз, делай два, делай три:Шаг 1 - Проверь конфигурацию Secure Boot. Сравни вывод
mokutil --sb-state с прямым чтением UEFI-переменных через efivar. Проверь список установленных MOK-ключей через mokutil --list-enrolled. Неизвестные сертификаты - красный флаг.Шаг 2 - Аудит защиты SPI-флеша. Запусти
chipsec_main и проверь модули spi_lock, bios_wp, smrr. Любой FAILED означает, что прошивку можно перезаписать программно - система уязвима для SPI-имплантов.Шаг 3 - Проверь целостность ESP. Смонтируй раздел, вычисли хеши всех
.efi-файлов, сравни с эталонными значениями. Обрати внимание на файлы размером 50-100 КБ с нестандартными именами.Шаг 4 - Сними дамп прошивки.
chipsec_util spi dump, затем разбери дамп через UEFITool или UEFIExtract. Сравни GUID и количество DXE-модулей с эталонным образом от производителя.Шаг 5 - Проверь PCR-значения TPM. Если в организации настроена remote attestation - сравни текущие PCR с базовыми значениями. Без attestation - зафиксируй PCR после чистой установки и отслеживай расхождения.
Шаг 6 - Проверь binwalk-энтропию модулей прошивки. Аномально высокая энтропия отдельных DXE-модулей может указывать на зашифрованную или упакованную вредоносную нагрузку.
Заключение
UEFI буткиты - не теоретическая страшилка из презентаций. BlackLotus продаётся за $5000 и работает на актуальных системах. CosmicStrand показал, что SPI-флеш - тоже не безопасная зона. По данным Positive Technologies, 27 семейств буткитов применяются в реальных атаках, 14 из них - инструменты APT-группировок.Классический периметр «ОС + EDR» не покрывает firmware-уровень. Точка. Защита Secure Boot критически зависит от актуальности revocation list (
dbx), целостности SPI-флеша и наличия аппаратного root-of-trust (Intel Boot Guard). Проверка mokutil --sb-state - необходимый, но недостаточный шаг: буткит уровня BlackLotus подделает ответ ОС и сохранит иллюзию безопасности.Запустите CHIPSEC на своём железе, проверьте целостность ESP, внедрите TPM attestation. Самый глубокий persistence всегда живёт там, куда большинство защитников никогда не заглядывает. Может, пора заглянуть?