Семь проектов: сравнительная матрица механизмов

Точка входа, изменяемый объект, резидентность, наблюдаемость и качество свидетельств — без выдуманного рейтинга скрытности.

Как сравнивать несопоставимые на первый взгляд проекты

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

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

Плоскость исполнения

ПроектПервый исследованный контекстОсновной изменяемый объектПоздняя стадия
AbyssUEFI application; отдельный DXE runtime driverЗагрузчик Windows, CI-путь, runtime servicesУсловный mapper и отдельный SetVariable-канал
BenthicWindows kernel driverСписки объектов и результаты IO, filter callbacksФункции сокрытия и сетевых запросов
BlackIrisEFI entry → ExitBootServices hookКопия функции и локальные UEFI-структурыСвязность Windows/runtime-обещаний не доказана
bootdoorEFI-контекст уже полученТаблицы UEFI и загруженный ACPI.SYSПереданная kernel-нагрузка
bootlickerEFI-контекст в заявленном VMware-сценарииBoot driver и callback-путьKernel → APC → пользовательская стадия
InsomniaUEFI applicationРанний образ ядра и syscall-путьОбработчик, использующий пользовательские данные
AntarcticUEFI 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 mapFirmware содержит законные расширения
Изменение декомпрессированного ядраДостоверное позднее измерениеХеш раннего файла не покрывает позднее состояние

Ориентиры — аналитические гипотезы, выведенные из устройства образцов. Они не являются измеренными 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

← Предыдущий материалSony XCP: когда защита продукта ухудшает защиту компьютераСледующий материал →Как читать этот выпуск и проверять его выводы