Как сравнивать несопоставимые на первый взгляд проекты
Корпус объединяет драйверный rootkit, несколько загрузочных цепочек и неоднородный каркас с заглушками. Поэтому общий рейтинг «мощности» был бы малоинформативен. Сравнение начинается с исходных полномочий и конкретного изменяемого объекта. Затем отдельно рассматриваются продолжение исполнения, повторная активация и доступные наблюдения.
В таблицах ниже «не доказано» означает отсутствие достаточного свидетельства в рамках этого статического исследования. Это не синоним «невозможно» и не сообщение об успешной блокировке. Динамических испытаний образцов на одинаковом стенде не проводилось.
Плоскость исполнения
| Проект | Первый исследованный контекст | Основной изменяемый объект | Поздняя стадия |
|---|---|---|---|
| Abyss | UEFI application; отдельный DXE runtime driver | Загрузчик Windows, CI-путь, runtime services | Условный mapper и отдельный SetVariable-канал |
| Benthic | Windows kernel driver | Списки объектов и результаты IO, filter callbacks | Функции сокрытия и сетевых запросов |
| BlackIris | EFI entry → ExitBootServices hook | Копия функции и локальные UEFI-структуры | Связность Windows/runtime-обещаний не доказана |
| bootdoor | EFI-контекст уже получен | Таблицы UEFI и загруженный ACPI.SYS | Переданная kernel-нагрузка |
| bootlicker | EFI-контекст в заявленном VMware-сценарии | Boot driver и callback-путь | Kernel → APC → пользовательская стадия |
| Insomnia | UEFI application | Ранний образ ядра и syscall-путь | Обработчик, использующий пользовательские данные |
| Antarctic | UEFI application → GRUB | Декомпрессор и распакованное ядро Linux | Попытка изменить проверку подписи модулей |
Основание таблицы — просмотренные точки входа и переходы, перечисленные в соответствующих досье. E01 E09 E10 E20 E31 E36 E40 E45
Предпосылки и незакрытые вопросы
| Проект | Ключевая предпосылка | Основная зависимость | Что не следует из кода |
|---|---|---|---|
| Abyss | Уже исполняемый EFI и подходящая конфигурация | Версия winload, сигнатуры, runtime lifecycle | Универсальный обход HVCI |
| Benthic | Исполнение драйвера в ядре | Layout EPROCESS, NSI и стек устройств | Первичный обход загрузочной политики |
| BlackIris | Уже исполняемый EFI | Несогласованные контракты и заглушки | Готовый SMM/runtime/C2-комплекс |
| bootdoor | Контроль EFI-стадии | PE-сигнатуры и виртуальная карта | Произвольный первый запуск при Secure Boot |
| bootlicker | Доступ к соответствующему firmware-сценарию | Boot layout, callback и незаданный target hash | Работа независимо от всех настроек защиты |
| Insomnia | Допуск EFI к исполнению | Ширина адреса, ABI, внутренние таблицы | Поддержка произвольного выпуска Windows |
| Antarctic | Допуск EFI и ожидаемый GRUB-путь | Zstd, машинные сигнатуры и ABI | Отключение всех Linux-механизмов защиты |
Указанные ограничения привязаны к конкретным функциям, а не к общей репутации проекта. E02 E13 E25 E30 E37 E39 E44
Резидентность и закрепление
Резидентность означает сохранение исполняемого состояния в текущем сеансе. Закрепление требует повторной активации после завершения этого сеанса. Код может быть написан для runtime memory и всё же не иметь доказанного источника повторного запуска. Обратная ситуация тоже возможна: файл постоянно лежит на носителе, но его запуск заблокирован.
| Носитель или механизм | Что он способен объяснить | Что нужно проверить дополнительно |
|---|---|---|
| EFI-файл в ESP | Потенциальную загрузочную стадию | Допуск, путь запуска и фактическое исполнение |
| Изменённый firmware image VM | Возврат раннего компонента при старте VM | Какой субъект контролировал образ |
| Runtime pages | Память после смены фазы | Права, отображение, владельцев указателей |
| Kernel callback | Поздний вызов в текущем сеансе | Регистрацию, lifetime и возможность выгрузки |
| Driver service | Повторную попытку загрузки драйвера | Подпись, политику и успешный старт |
Это общая классификация носителей, а не заявление, что каждый проект реализует каждый вариант. В досье отдельно отмечено, где анализ начинается уже после получения начального исполнения.
Что видит Blue
| Техника | Возможный независимый ориентир | Почему одного индикатора мало |
|---|---|---|
| DKOM | Другие связи объектов и потоков | Списки меняются конкурентно |
| NSI-фильтрация | Внешний сетевой журнал | Требуется согласовать время и адреса |
| Minifilter | Другой путь доступа, образ носителя | Разные операции имеют разные semantics |
| Изменение boot driver | Объяснение entrypoint и содержимого RAM | Релокации и легитимные изменения дают различия |
| Runtime hook | Принадлежность указателей и memory map | Firmware содержит законные расширения |
| Изменение декомпрессированного ядра | Достоверное позднее измерение | Хеш раннего файла не покрывает позднее состояние |
Ориентиры — аналитические гипотезы, выведенные из устройства образцов. Они не являются измеренными detection rates. Для каждого ещё нужно указать доверенный источник данных и отрицательные примеры, на которых сигнал не должен срабатывать.
Что проверяет Red
Содержательный эксперимент не начинается с попытки получить самый низкий уровень привилегий любой ценой. Он начинается с ограниченной гипотезы: например, может ли изменённый результат перечисления убедить конкретный датчик в отсутствии объекта, или охватывает ли выбранное измерение позднюю модификацию памяти.
Тогда результат можно описать точно. «Источник A перестал видеть объект, источник B сохранил его» — проверяемое утверждение. «Rootkit невидим» — неопределённое. «В конфигурации X изменился путь функции» — полезно. «Все защиты бесполезны» — не следует из такого наблюдения.
Как аппаратные механизмы соотносятся с таблицей
TPM помогает формировать и защищать определённые свидетельства; TEE ограничивает доступ к конкретному исполнению; seL4 даёт формальные гарантии механизма в обозначенной конфигурации; гипервизор может обеспечивать отдельную границу контроля. Их нужно связывать с защищаемым объектом и моментом времени, а не расставлять как универсальные галочки напротив названий bootkit.
Например, если изолированный анализатор получает только подменённый список от гостевой ОС, его защищённая память не исправляет качество входа. Если подписан ранний файл, это не обязательно свидетельство о поздней RAM. Если proof предполагает доверенный DMA, реальная конфигурация устройств должна соответствовать предпосылке. Эти случаи связывают все исследования выпуска в единую модель доверия.
Приоритеты дальнейшей проверки
Для каждого образца прежде всего нужен воспроизводимый паспорт: хеш бинарного файла, конфигурация, версия ОС и firmware, состояние защит, первоначальные права и последняя подтверждённая стадия. Затем — независимое свидетельство эффекта. Только после этого имеют смысл устойчивость при повторениях и сравнение обнаружения.
Такая последовательность позволяет получить полезный отрицательный результат. Если не совпала сигнатура, обнаружен дефект ABI или не был разрешён первый EFI-запуск, это конкретное объяснение. Оно не требует ни преувеличивать возможности образца, ни выдавать непроверенную конфигурацию за абсолютную защиту.
Источники и исходники
Ссылки E ведут к свидетельствам по локальному коду; S — к первичным внешним публикациям. Диапазон относится к оригинальному файлу. Статическое исследование, без запуска образцов.
E01 / Abyss-main/AbyssBootkitPkg/Bootkit1_Boot_UEFIApplication/AbyssBootkit1UEFIApplication.c
Строки 115–307 · Конфигурация, отдельная runtime-ветвь, условный LoadImage hook и продолжение загрузки.
Локальный снимок · файл: 314 строк · ссылка на публичный commit не установлена.
SHA-256 1da000a7e64bc718fbe3f2114ef07ef43e74635749c2c4a2fdbd8002ad0b14f0
E09 / Abyss-main/AbyssBootkitPkg/Bootkit2_Runtime_DXERuntimeDriver/Functions/Hooks/Hooks01RuntimeServices.c
Строки 378–424 · Командная ветвь SetVariable; часть проверок формы запроса без доказательства авторизации.
Локальный снимок · файл: 680 строк · ссылка на публичный commit не установлена.
SHA-256 a1cc7b2f9fe84dd171831dfd28f26b0b00b1d428d55ac90fc75dad86db4ffd1b
E10 / Benthic-main/BenthicRootkit/BenthicZone02_KernelModeDriver/Main_Driver.c
Строки 86–254 · Последовательное присоединение компонентов и неполная симметрия cleanup.
Локальный снимок · файл: 259 строк · ссылка на публичный commit не установлена.
SHA-256 8112dd3602999a5f968c572626780c9b43043e238a9d82f34084239c9bb59993
E20 / BlackIris-main/src/Boot/DXEHook.c
Строки 11–31 · Фиксированное копирование тела функции и вызов без параметра SystemTable.
Локальный снимок · файл: 31 строк · ссылка на публичный commit не установлена.
SHA-256 71307a623e9089577d029ee1b058aa43261e6f638de816905dfe56e556d115b5
E31 / bootdoor-master/OslArchTransferToKernel.c
Строки 36–113 · ACPI.SYS как переход к исполнению в ядре; модификация entrypoint и секции в памяти.
Локальный снимок · файл: 113 строк · ссылка на публичный commit не установлена.
SHA-256 562ed3f9bc1003658cffdd798d19e1fb3eb042e51fb43dc699bf2a180b68eae3
E36 / bootlicker-master/kernel/KernelMain.c
Строки 33–81 · Thread notification callback через участок загруженного драйвера.
Локальный снимок · файл: 81 строк · ссылка на публичный commit не установлена.
SHA-256 8179ae360927cab68ab351872abf4c4e170b55039a210d48058f4e4a2e6b6951
E40 / Insomnia-main/Bootkit/ExitBootServices.cpp
Строки 3–95 · Поиск winload/ядра и изменение таблицы системных служб до старта ядра.
Локальный снимок · файл: 95 строк · ссылка на публичный commit не установлена.
SHA-256 bd199edae4ea0d52a513ff9a28f168f22468980ab79009dc2038ea517fe1fa0b
E45 / Antarctic-main/AntarcticBootkitPkg/Modules/Module1_Boot/Hooks/Hooks03Linux02Vmlinuz.c
Строки 181–362 · Анализ распакованного буфера, целевая правка проверки модулей, изменение строки версии.
Локальный снимок · файл: 367 строк · ссылка на публичный commit не установлена.
SHA-256 3ebaddd50373aa9577cb2b85998a92f02b20e3f0b6bf650551d6d99d87e709a7
E02 / Abyss-main/AbyssBootkitPkg/Bootkit1_Boot_UEFIApplication/Modules/Module1_BootWindows0_Hookings/Functions/Functions02PatchHookWindowsOSLoader.c
Строки 95–345 · Поиск секций и двух внутренних функций winload; зависимость от сигнатур.
Локальный снимок · файл: 351 строк · ссылка на публичный commit не установлена.
SHA-256 bdd55213712a181c7631d195a8c16f99fb50202b195813128b924547fb0811a6
E13 / Benthic-main/BenthicRootkit/BenthicZone02_KernelModeDriver/Functions/Techniques/DirectKernelObjectManipulation.c
Строки 60–195 · Фиксированные offsets и разрыв ActiveProcessLinks; отдельный список скрытых объектов.
Локальный снимок · файл: 511 строк · ссылка на публичный commit не установлена.
SHA-256 60bda2f1e3a03196e110ea5b6515a3ab0ff781478d53624d1eb34c77da6f76cd
E25 / BlackIris-main/src/Shared/SyscallBridge.c
Строки 19–33 · SMI-функция явно placeholder; отдельный локальный массив патча слишком мал.
Локальный снимок · файл: 52 строк · ссылка на публичный commit не установлена.
SHA-256 28fe6edcb56e8b47cbea1f48fb34e2bd48b800a235a3466472a123cb7451bdcb
Посмотреть фрагмент исходника · строки 19–22
19 BOOLEAN InstallSMIHandler(VOID* HandlerFunc) {
20 LogInfo(L"SMI Handler installed (placeholder).");
21 return TRUE;
22 }E30 / bootdoor-master/SetVirtualAddressMap.c
Строки 21–51 · Пересчёт адреса своей копии по дескрипторам виртуальной карты.
Локальный снимок · файл: 51 строк · ссылка на публичный commit не установлена.
SHA-256 a1ba49c77e6a21accddfa520eec8f28bd089d1de0a4f5fa5dab301d80a8222f1
E37 / bootlicker-master/kernel/ThreadNotifyRoutine.c
Строки 119–183 · Фильтрация процесса, нулевой целевой hash в снимке, постановка APC.
Локальный снимок · файл: 190 строк · ссылка на публичный commit не установлена.
SHA-256 0aef1e26340d9e247c1dc880cad912c64fc9df5e38634edaf4518af014e8ef8b
E39 / Insomnia-main/Bootkit/main.cpp
Строки 9–46 · 32-битная переменная передаётся как EFI_PHYSICAL_ADDRESS*.
Локальный снимок · файл: 46 строк · ссылка на публичный commit не установлена.
SHA-256 e810b61617191c5e2e7a2ca57edf1e3cf88827704a0cae4ba33b6891c8ff8ef2
Посмотреть фрагмент исходника · строки 19–23
19 uint32_t new_location = 0;
20 uint32_t pages_count = EFI_SIZE_TO_PAGES(global::ImageSize);
21
22 /* allocate new pages */
23 if (global::BootServices->AllocatePages(AllocateAnyPages, EfiLoaderCode, pages_count, (EFI_PHYSICAL_ADDRESS*)&new_location) == EFI_SUCCESS)E44 / Antarctic-main/AntarcticBootkitPkg/Modules/Module1_Boot/Hooks/Hooks03Linux01Grub.c
Строки 101–315 · Достижимая ветвь поиска Zstd decompressor и возврат к GRUB.
Локальный снимок · файл: 320 строк · ссылка на публичный commit не установлена.
SHA-256 dc6202e46b0b263989d4122f05f9ebdb6b04272f6c9bbb93646c961c2fadc78c