Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
EfiGuard — Отключение PatchGuard и принудительной подписи драйверов во время загрузки | Kitploit
Инструменты/GitHubGitHub/mattiwatti/efiguard
Оборонительные ИнструментыЭксплуатацияОбратная инженерияАнализ Бинарных Файлов
GitHubmattiwatti/efiguard

EfiGuard

Отключение PatchGuard и принудительной подписи драйверов во время загрузки

Репозиторий
2.5k4092 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Обзор

EfiGuard — это портативный x64 UEFI буткит, который патчит диспетчер загрузки Windows, загрузчик и ядро во время загрузки для отключения PatchGuard и Driver Signature Enforcement (DSE).

Если вы просто хотите попробовать EfiGuard, перейдите к разделу Использование.

Возможности

  • На данный момент поддерживает все EFI-совместимые версии Windows x64, когда-либо выпущенные, от Vista SP1 до Windows 11.

  • Простота в использовании: можно загрузить с USB-накопителя или EFI-раздела Windows с помощью загрузчика, который автоматически находит и загружает Windows. Драйвер также можно загрузить и настроить вручную с помощью UEFI shell или загрузчика.

  • Активно использует библиотеку дизассемблера Zydis для быстрого декодирования инструкций во время выполнения, что обеспечивает более надежный анализ, чем при сопоставлении сигнатур, которое часто требует изменений с выходом новых обновлений ОС.

  • Работает пассивно: драйвер не загружает и не запускает диспетчер загрузки Windows. Вместо этого он реагирует на загрузку bootmgfw.efi диспетчером загрузки прошивки через меню выбора загрузки или EFI-приложение, например загрузчик. Если загружается ОС, отличная от Windows, драйвер автоматически выгружается.

  • Поддерживает четырехэтапное патчирование для случаев, когда bootmgfw.efi запускает bootmgr.efi вместо winload.efi. Это происходит, когда загружается WIM-файл для загрузки WinPE, установки Windows или режима восстановления Windows.

  • Восстановление без сбоев: в случае неудачного патча драйвер отобразит информацию об ошибке и предложит продолжить загрузку или перезагрузиться, нажав ESC. Это справедливо даже для финального этапа патча ядра, так как последний этап происходит до вызова ExitBootServices. Многие UEFI-буткиты для Windows перехватывают OslArchTransferToKernel, который, хотя и легко находится по сигнатуре, является функцией, выполняющейся в защищенном режиме после ExitBootServices. Это означает, что службы загрузки недоступны для оповещения пользователя о проблеме. bsod

    Имитация сбоя патча с информацией об ошибке

  • Отладка: может выводить сообщения в отладчик ядра и на экран (буферизованно) на этапе патча ядра, а также на последовательный порт или без буферизации на экран на этапах патча диспетчера загрузки и загрузчика. Если драйвер скомпилирован с отладочной информацией PDB, можно загрузить отладочные символы в любой момент после инициализации HAL, указав виртуальную базу DXE-драйвера и отлаживая его как обычный NT-драйвер.

  • Обход DSE: доступен либо как прямое отключение DSE в стиле UPGDSED во время загрузки, либо как перехват EFI-службы времени выполнения SetVariable(). Последний служит произвольным бэкдором чтения/записи в режиме ядра, который можно вызвать из Windows с помощью NtSetSystemEnvironmentValueEx и позволяет установить g_CiEnabled/g_CiOptions в желаемое значение. Предоставляется небольшое приложение в стиле DSEFix с именем EfiDSEFix.exe, которое можно использовать для этого. Также можно оставить DSE включенным и отключить только PatchGuard. Загрузчик по умолчанию будет использовать метод перехвата SetVariable, поскольку некоторые античит и антивирусные программы не понимают разницы между читами или вредоносным ПО и самоподписанными драйверами в целом и нацелены на исправление UPGDSED.

  • Поддерживает модифицированные на диске ядра и загрузчики, патча ImgpValidateImageHash на каждом этапе, а также ImgpFilterValidationFailure, который может молчаливо сообщать о некоторых нарушениях в TPM или журнал SI.

  • Позволяет Secure Boot работать с Windows 7 (это не шутка!). Сама Windows 7 не поддерживает Secure Boot, и (официально) даже не может загружаться без CSM. Это полезно для тех, кто хочет использовать Windows 7 на защищенном устройстве, требующем WHQL Secure Boot. Запись в вики о том, как это настроить, здесь. win7_secureboot

    WinObjEx64 на Windows 7 с включенным Secure Boot

Проблемы и ограничения

  • EfiGuard не может отключить Hypervisor-enforced Code Integrity (HVCI или HyperGuard), поскольку HVCI работает на более высоком уровне привилегий. EfiGuard может сосуществовать с HVCI и даже успешно отключает PatchGuard в обычном ядре, но это бесполезно на практике, так как HVCI перехватывает то, что ранее делал PatchGuard. Оба типа обхода DSE становятся бесполезными из-за HVCI: патч во время загрузки не действует, потому что ядро делегирует проверки целостности безопасному ядру, а перехват SetVariable вызовет ошибку SECURE_KERNEL_ERROR при попытке записи в g_CiOptions.
  • Checked-ядра не поддерживаются из-за различий в коде инициализации PatchGuard и DSE, вызванных отключенной оптимизацией и добавленными утверждениями, а также дополнительных изменений PatchGuard в checked-ядрах. Это не должно быть проблемой, так как checked-ядра обычно бесполезны без подключенного отладчика ядра, который отключает PatchGuard.

Использование

Существует два способа использования EfiGuard: загрузка приложения-загрузчика, которое загрузит драйвер и запустит Windows, или установка драйвера в качестве записи UEFI-драйвера, чтобы он загружался автоматически прошивкой.

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

РасположениеУстановкаМожно пропустить?Какая ОС загружается?
UEFI Driver EntryДолжен быть на ESPЧерез UEFI Shell

Сравнение загрузчика и записи UEFI-драйвера

Загрузка через загрузчик

  1. Скачайте EfiGuard и переименуйте EFI/Boot/Loader.efi в bootx64.efi.
  2. Поместите файлы на загрузочный диск, например USB-накопитель, отформатированный в FAT32 (для физических машин), или ISO/виртуальный диск (для ВМ). Предположим, диск X:, пути для двух файлов теперь должны быть X:/EFI/Boot/{bootx64|EfiGuardDxe}.efi
  3. Загрузите машину с диска, который вы использовали на шаге 2. Большинство прошивок предоставляют меню загрузки для этого через F8/F10/F11/F12. Если нет, вам нужно будет настроить BIOS на загрузку с нового диска.
  4. Теперь Windows должна загрузиться, и вы должны увидеть сообщения EfiGuard во время загрузки.
  5. Если вы загрузились с перехватом SetVariable (по умолчанию), запустите EfiDSEFix.exe -d в командной строке от имени администратора после загрузки, чтобы отключить DSE, или запустите EfiDSEFix.exe для просмотра полного списка опций.

Обратите внимание, что вам не нужно использовать отдельный диск для загрузчика. При желании вы можете установить EfiGuard на ESP, на котором уже установлена Windows. Однако это несколько сложнее, так как вам нужно будет добавить запись UEFI-загрузки для загрузчика.

Чтобы сделать это, смонтируйте ESP в X: с помощью mountvol X: /S и выполните шаги выше, но не переименовывайте загрузчик, а просто скопируйте оба файла в X:/EFI/Boot. После этого вам нужно будет вручную добавить запись UEFI-загрузки из UEFI Shell с помощью bcfg boot addp 0 Loader.efi "EfiGuard", или альтернативно с помощью efibootmgr (Linux), EasyUEFI (Windows) или подобных.

Установка драйвера

  1. Смонтируйте ESP в X: с помощью mountvol X: /S.
  2. Скопируйте EfiGuardDxe.efi в X:/EFI/Boot/EfiGuardDxe.efi.
  3. Загрузитесь в UEFI Shell и добавьте запись UEFI-драйвера: bcfg driver add 0 EfiGuardDxe.efi "EfiGuardDxe".
  4. Теперь Windows должна загрузиться, и вы должны увидеть сообщения EfiGuard во время загрузки.
  5. Если вы загрузились с перехватом SetVariable (по умолчанию), запустите EfiDSEFix.exe -d в командной строке от имени администратора после загрузки, чтобы отключить DSE, или запустите EfiDSEFix.exe для просмотра полного списка опций.

Примечание: в зависимости от вашей прошивки вам может потребоваться использовать "addp" на шаге 3 вместо "add". Известно, что VirtualBox требует этого, и, возможно, некоторые прошивки материнских плат тоже.

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

Компиляция

Компиляция EfiGuardDxe и загрузчика

EfiGuard требует EDK2 для сборки. Если у вас не установлен EDK2, сначала следуйте шагам из Getting Started with EDK2, так как система сборки EDK2 довольно сложна в настройке. В этом разделе предполагается, что у вас есть каталог workspace, на который указывает переменная окружения WORKSPACE, с копией EDK2, проверенной в workspace/edk2. Поддерживаемые компиляторы: MSVC, Clang, GCC и ICC.

  1. Клонируйте репозиторий EfiGuard в workspace/edk2/EfiGuardPkg.
  2. Откройте приглашение или оболочку, которая устанавливает переменные окружения для EDK2.
  3. Запустите build -a X64 -t VS2019 -p EfiGuardPkg/EfiGuardPkg.dsc -b RELEASE, заменив VS2019 на ваш набор инструментов.

Это создаст EfiGuardDxe.efi и Loader.efi в workspace/Build/EfiGuard/RELEASE_VS2019/X64.

Компиляция EfiDSEFix

EfiDSEFix требует Visual Studio для сборки.

  1. Откройте EfiGuard.sln и соберите решение.

Выходной бинарный файл EfiDSEFix.exe будет в Application/EfiDSEFix/bin.

Решение Visual Studio также включает проекты для EfiGuardDxe.efi и Loader.efi, которые можно использовать с VisualUefi, но эти проекты не собираются по умолчанию, так как они не будут линковаться без дополнительного кода, а выходные данные будут хуже (больше), чем то, что производит EDK2. Loader.efi вообще не будет линковаться из-за отсутствия UefiBootManagerLib в VisualUefi. Таким образом, эти файлы проектов предназначены только для помощи в разработке, и EFI-файлы все равно следует компилировать с помощью EDK2. Чтобы настроить VisualUefi для этой цели, клонируйте репозиторий в workspace/VisualUefi и откройте EfiGuard.sln.

Архитектура

architecture Хотя EfiGuard является UEFI-буткитом, он начинался не как таковой. Изначально EfiGuard был патчером на диске, работающим на NT (похожим на UPGDSED), предназначенным для проверки жизнеспособности подхода на основе дизассемблера, в отличие от использования PDB-символов и версионно-зависимых сигнатур. PatchNtoskrnl.c до сих пор очень похож на этот оригинальный дизайн. Только после того, как этот подход оказался успешным, и за более чем год обновлений Windows не потребовалось никаких изменений кода, UEFI появился как способ дальнейшего улучшения возможностей и простоты использования.

Некоторые преимущества, предоставляемые подходом буткита, включают:

  • Не требуется модификаций ядер или загрузчиков на диске.
  • Не нужно изменять хранилище конфигурации загрузки с помощью bcdedit.
  • Не нужно патчить ImgpValidateImageHash (хотя это все еще делается опционально).
  • Иронично, но использование буткита позволяет включить Secure Boot, при условии, что вы владеете Platform Key и можете добавить свой личный сертификат в хранилище db.

Первая инкарнация EfiGuard в качестве буткита была попыткой заставить UEFI-Bootkit от dude719 работать с последними версиями Windows 10, так как он устарел и больше не работает на новейших версиях (как и UPGDSED, часто из-за версионно-чувствительных поисков по сигнатурам). Хотя в итоге мне удалось заставить его работать, я был недоволен результатом, в основном из-за выбора перехвата OslArchTransferToKernel, который, как указано выше, выполняется в защищенном режиме и после вызова ExitBootServices. Кроме того, меня не устраивало, что я мог патчить только некоторые версии Windows 10; я хотел, чтобы буткит работал на каждой EFI-совместимой версии Windows x64, выпущенной на сегодняшний день. Из-за этого я переписал буткит с нуля со следующими целями:

  • Предоставлять информацию о патче на каждом этапе загрузки, включая сам патч ядра.
  • Поддерживать все EFI-совместимые версии Windows (на момент написания).
  • Обеспечить ленивую инициализацию буткита и опционально бэкдора в ядре, достигаемую с помощью перехвата EFI System Table.

Обзорная схема конечного потока загрузки EfiGuard показана на диаграмме выше. Для конкретных для компонентов перехватов и патчей смотрите EfiGuardDxe/PatchXxx.c в исходных файлах. Для инициализации/выгрузки драйвера и перехватов EFI Boot и Runtime Services смотрите EfiGuardDxe.c.

Авторство

  • UPGDSED от hfiref0x и Fyyre
  • Zydis от zyantific
  • Статьи Uninformed о PatchGuard v1, v2 и v3 от Skywing
  • UEFI-Bootkit от dude719
  • ReactOS

Лицензия

EfiGuard лицензирован под GPLv3. Файлы в подмодуле EfiGuardDxe/Zydis лицензированы под лицензией MIT.

Скачать инструмент
❌
Та же, что и раньше
LoaderГде угодноНе требуется✔️Windows