Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
EfiGuard — 부팅 시 PatchGuard 및 Driver Signature Enforcement를 비활성화합니다. | Kitploit
도구/GitHubGitHub/mattiwatti/efiguard
Defensive ToolsExploitationReverse EngineeringBinary Analysis
GitHubmattiwatti/efiguard

EfiGuard

부팅 시 PatchGuard 및 Driver Signature Enforcement를 비활성화합니다.

저장소 보기
2.5k4092개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

개요

EfiGuard는 부팅 시 Windows 부팅 관리자, 부트 로더, 커널을 패치하여 PatchGuard 및 DSE(Driver Signature Enforcement)를 비활성화하는 휴대용 x64 UEFI 부트킷입니다.

EfiGuard를 시험해보고 싶다면 사용법으로 건너뛰세요.

기능

  • 현재 Vista SP1부터 Windows 11까지 출시된 모든 EFI 호환 Windows x64 버전을 지원합니다.

  • 사용하기 쉬움: 자동으로 Windows를 찾아 부팅하는 로더를 통해 USB 스틱 또는 Windows EFI 파티션에서 부팅할 수 있습니다. 드라이버는 UEFI 셸 또는 로더를 사용하여 수동으로 로드 및 구성할 수도 있습니다.

  • Zydis 디스어셈블러 라이브러리를 광범위하게 사용하여 빠른 런타임 명령어 디코딩을 통해 시그니처 매칭보다 더 강력한 분석을 지원하며, 시그니처 매칭은 새로운 OS 업데이트마다 변경이 필요한 경우가 많습니다.

  • 수동적으로 작동: 드라이버는 Windows 부팅 관리자를 로드하거나 시작하지 않습니다. 대신 펌웨어 부팅 관리자가 부팅 선택 메뉴 또는 로더와 같은 EFI 애플리케이션을 통해 bootmgfw.efi를 로드할 때 반응합니다. 비 Windows OS가 부팅되면 드라이버는 자동으로 언로드됩니다.

  • bootmgfw.efi가 winload.efi 대신 bootmgr.efi를 시작할 때 4단계 패치를 지원합니다. 이는 WIM 파일을 로드하여 WinPE, Windows 설치 또는 Windows 복구 모드를 부팅할 때 발생합니다.

  • 우아한 복구: 패치 실패 시 드라이버는 오류 정보를 표시하고 ESC를 눌러 계속 부팅하거나 재부팅하라는 메시지를 표시합니다. 최종 커널 패치 단계에서도 마찬가지입니다. 마지막 패치 단계는 ExitBootServices가 호출되기 전에 발생하기 때문입니다. 많은 UEFI Windows 부트킷은 OslArchTransferToKernel을 후킹하는데, 이 함수는 패턴 매칭으로 찾기 쉽지만 ExitBootServices 이후 보호 모드에서 실행됩니다. 즉, 문제가 발생했을 때 사용자에게 알릴 부트 서비스가 없습니다. bsod

    오류 정보가 포함된 시뮬레이션된 패치 실패

  • 디버깅 가능: 커널 패치 단계에서 커널 디버거와 화면(버퍼링됨)으로 메시지를 출력할 수 있으며, 부트 관리자 및 부트 로더 패치 단계에서는 직렬 포트 또는 버퍼링되지 않은 화면으로 출력할 수 있습니다. 드라이버가 PDB 디버그 정보와 함께 컴파일된 경우, 가상 DXE 드라이버 베이스를 지정하고 일반 NT 드라이버처럼 디버깅하여 HAL 초기화 후 언제든지 디버그 심볼을 로드할 수 있습니다.

  • DSE 우회: 부팅 시 간단한 UPGDSED 스타일의 DSE 비활성화 또는 SetVariable() EFI 런타임 서비스 후크로 사용 가능합니다. 후자는 Windows에서 NtSetSystemEnvironmentValueEx를 사용하여 호출할 수 있는 임의의 커널 모드 읽기/쓰기 백도어 역할을 하며, g_CiEnabled/g_CiOptions를 원하는 값으로 설정할 수 있습니다. 이를 수행하는 데 사용할 수 있는 EfiDSEFix.exe라는 작은 DSEFix 스타일 애플리케이션이 제공됩니다. 또한 DSE를 활성화하고 PatchGuard만 비활성화하는 것도 가능합니다. 로더는 기본적으로 SetVariable 후크 방법을 사용합니다. 일부 안티치트 및 안티바이러스 프로그램이 치트나 악성코드와 셀프 서명 드라이버의 차이를 이해하지 못하고 UPGDSED 수정을 대상으로 삼기 때문입니다.

  • 모든 단계에서 ImgpValidateImageHash 및 ImgpFilterValidationFailure를 패치하여 디스크 상의 수정된 커널 및 부트 로더를 지원합니다. ImgpFilterValidationFailure는 일부 위반 클래스를 TPM 또는 SI 로그 파일에 조용히 알릴 수 있습니다.

  • Windows 7에서 Secure Boot가 작동하도록 허용합니다(농담이 아닙니다!). Windows 7 자체는 Secure Boot를 지원하지 않으므로 이를 인식하지 못하거나 (공식적으로) CSM 없이 부팅하는 것조차 지원하지 않습니다. 이는 WHQL Secure Boot가 필요한 잠금 장치에서 Windows 7을 사용하려는 사람들에게 유용합니다. 작동 방법에 대한 위키 항목은 여기에 있습니다. win7_secureboot

    WinObjEx64 - Secure Boot가 활성화된 Windows 7

문제 및 제한 사항

  • EfiGuard는 HVCI(Hypervisor-enforced Code Integrity, HyperGuard)가 더 높은 권한 수준에서 실행되므로 HVCI를 비활성화할 수 없습니다. EfiGuard는 HVCI와 공존할 수 있으며 일반 커널에서 PatchGuard를 성공적으로 비활성화하기도 하지만, 실질적으로는 유용하지 않습니다. HVCI가 PatchGuard가 이전에 수행했던 작업을 잡아내기 때문입니다. 두 유형의 DSE 우회 모두 HVCI에 의해 무용지물이 됩니다: 부트 타임 패치는 커널이 무결성 검사를 위해 보안 커널에 위임하기 때문에 효과가 없으며, SetVariable 후크를 g_CiOptions에 쓰는 데 사용하면 SECURE_KERNEL_ERROR 버그체크가 발생합니다.
  • Checked 커널은 지원되지 않습니다. 최적화 비활성화와 추가된 어설트로 인한 PatchGuard 및 DSE 초기화 코드의 차이 때문이며, checked 커널의 PatchGuard에 추가 변경 사항이 있기 때문입니다. Checked 커널은 일반적으로 커널 디버거가 연결되지 않으면 유용하지 않으며, 커널 디버거는 PatchGuard를 비활성화하므로 이는 문제가 되지 않아야 합니다.

사용법

EfiGuard를 사용하는 두 가지 방법이 있습니다: 로더 애플리케이션을 부팅하면 드라이버를 로드하고 Windows를 시작합니다. 또는 드라이버를 UEFI 드라이버 항목으로 설치하여 펌웨어가 자동으로 로드하도록 하는 것입니다.

드라이버 설치는 멀티 부팅과 같은 일부 고급 구성에서 선호될 수 있지만, 로더가 사용하기 가장 쉽고 모든 구성에서 잘 작동해야 합니다. 두 방법의 가장 중요한 차이점은 아래 표를 참조하십시오. 확실하지 않은 경우 로더 애플리케이션을 선택하십시오.

위치설치건너뛰기 가능?부팅되는 OS
UEFI 드라이버 항목ESP에 있어야 함UEFI 셸을 통해❌이전과 동일
로더아무 곳이나필요 없음✔️

로더와 UEFI 드라이버 항목 비교

로더 부팅

  1. EfiGuard를 다운로드하고 EFI/Boot/Loader.efi의 이름을 bootx64.efi로 바꿉니다.
  2. 파일을 FAT32로 포맷된 USB 스틱(물리적 머신용) 또는 ISO/가상 디스크(VM용)와 같은 부팅 드라이브에 배치합니다. 드라이브 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를 실행하여 전체 옵션 목록을 확인하십시오.

로더에 별도의 드라이브를 사용할 필요가 없습니다. 가능하다면 Windows가 이미 설치된 ESP에 EfiGuard를 설치할 수 있습니다. 그러나 로더에 대한 UEFI 부팅 항목을 추가해야 하므로 다소 복잡합니다.

이렇게 하려면 mountvol X: /S를 사용하여 ESP를 X:에 마운트하고 위 단계를 따르되 로더의 이름을 바꾸지 말고 두 파일을 X:/EFI/Boot에 복사하십시오. 그런 다음 UEFI 셸에서 bcfg boot addp 0 Loader.efi "EfiGuard"를 사용하거나 efibootmgr(Linux), EasyUEFI(Windows) 등을 사용하여 수동으로 UEFI 부팅 항목을 추가해야 합니다.

드라이버 설치

  1. mountvol X: /S를 사용하여 ESP를 X:에 마운트합니다.
  2. EfiGuardDxe.efi를 X:/EFI/Boot/EfiGuardDxe.efi로 복사합니다.
  3. UEFI 셸로 부팅하고 UEFI 드라이버 항목을 추가합니다: bcfg driver add 0 EfiGuardDxe.efi "EfiGuardDxe"
  4. 이제 Windows가 부팅되어야 하며 부팅 중 EfiGuard 메시지가 표시됩니다.
  5. SetVariable 후크(기본값)로 부팅한 경우, 부팅 후 관리자 명령 프롬프트에서 EfiDSEFix.exe -d를 실행하여 DSE를 비활성화하거나 EfiDSEFix.exe를 실행하여 전체 옵션 목록을 확인하십시오.

참고: 펌웨어에 따라 3단계에서 "add" 대신 "addp"를 사용해야 할 수도 있습니다. VirtualBox는 이를 필요로 하는 것으로 알려져 있으며, 일부 마더보드 펌웨어도 마찬가지일 수 있습니다.

참고: 매우 오래되었거나 비준수하는 펌웨어는 이 설치 방법을 전혀 지원하지 않을 수 있습니다. 이러한 시스템에서는 로더를 사용하는 것 외에는 선택의 여지가 없습니다.

컴파일

EfiGuardDxe 및 로더 컴파일

EfiGuard를 빌드하려면 EDK2가 필요합니다. EDK2가 설치되어 있지 않으면 먼저 EDK2 시작하기의 단계를 따르십시오. EDK2 빌드 시스템은 설정이 상당히 복잡하기 때문입니다. 이 섹션에서는 WORKSPACE 환경 변수가 가리키는 workspace 디렉토리가 있고 workspace/edk2에 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를 자신의 툴체인으로 대체합니다.

그러면 workspace/Build/EfiGuard/RELEASE_VS2019/X64에 EfiGuardDxe.efi 및 Loader.efi가 생성됩니다.

EfiDSEFix 컴파일

EfiDSEFix를 빌드하려면 Visual Studio가 필요합니다.

  1. EfiGuard.sln을 열고 솔루션을 빌드합니다.

출력 바이너리 EfiDSEFix.exe는 Application/EfiDSEFix/bin에 있습니다.

Visual Studio 솔루션에는 VisualUefi와 함께 사용할 수 있는 EfiGuardDxe.efi 및 Loader.efi 프로젝트도 포함되어 있지만, 추가 코드 없이는 링크되지 않기 때문에 기본적으로 빌드되지 않으며 빌드 출력이 EDK2에서 생성된 것보다 열등합니다(더 큼). Loader.efi는 VisualUefi에 UefiBootManagerLib가 없어 전혀 링크되지 않습니다. 따라서 이러한 프로젝트 파일은 개발 보조용으로만 의미가 있으며 EFI 파일은 여전히 EDK2로 컴파일해야 합니다. 이 목적을 위해 VisualUefi를 설정하려면 저장소를 workspace/VisualUefi에 클론하고 EfiGuard.sln을 엽니다.

아키텍처

architecture EfiGuard는 UEFI 부트킷이지만 처음부터 그렇게 시작된 것은 아닙니다. EfiGuard는 원래 NT에서 실행되는 온-디스크 패터(UPGDSED와 유사)로서, PDB 심볼과 버전별 시그니처를 사용하는 대신 디스어셈블러 기반 접근 방식의 실행 가능성을 테스트하기 위해 고안되었습니다. PatchNtoskrnl.c는 여전히 이 원래 설계와 매우 유사합니다. 이 접근 방식이 성공적임이 입증되어 1년 이상의 Windows 업데이트 동안 코드 수정이 필요 없게 된 후에야 UEFI가 기능과 사용 편의성을 더욱 향상시키는 방법으로 등장했습니다.

부트킷 접근 방식이 제공하는 이점 중 일부는 다음과 같습니다:

  • 커널 또는 부트로더에 대한 온-디스크 수정이 필요하지 않습니다.
  • bcdedit을 사용하여 부트 구성 저장소를 수정할 필요가 없습니다.
  • ImgpValidateImageHash를 패치할 필요가 없습니다(선택적으로 수행되지만).
  • 역설적이게도 부트킷을 사용하면 Platform Key를 소유하고 개인 인증서를 db 저장소에 추가할 수 있는 경우 Secure Boot를 활성화할 수 있습니다.

부트킷으로서 EfiGuard의 초기 구현체는 dude719의 UEFI-Bootkit을 최신 Windows 10 버전에서 작동시키려는 시도였습니다. UEFI-Bootkit이 구식이 되어 최신 버전에서 더 이상 작동하지 않았기 때문입니다(UPGDSED와 마찬가지로 종종 버전에 민감한 패턴 스캔으로 인해 발생). 결국 작동하게는 했지만, 위에서 언급한 대로 OslArchTransferToKernel을 후킹하는 선택 때문에 결과에 만족하지 못했습니다. 이 함수는 보호 모드에서 그리고 ExitBootServices가 호출된 후에 실행됩니다. 이 외에도 Windows 10의 일부 버전만 패치할 수 있다는 점에 만족하지 않았습니다. 지금까지 출시된 모든 EFI 호환 Windows x64 버전에서 부트킷이 작동하기를 원했습니다. 이 때문에 다음 목표로 부트킷을 처음부터 다시 작성했습니다:

  • 부팅의 모든 단계(커널 패치 포함)에서 패치 정보를 제공합니다.
  • 현재 작성 시점의 모든 EFI 호환 Windows 버전을 지원합니다.
  • 부트킷의 지연 인스턴스화와 선택적 커널 백도어를 가능하게 하며, 이는 EFI 시스템 테이블 후크를 통해 달성됩니다.

최종 EfiGuard 부트 흐름의 큰 그림 개요는 위 다이어그램에 나와 있습니다. 개별 구성 요소별 후크 및 패치는 소스 파일의 EfiGuardDxe/PatchXxx.c를 참조하십시오. 드라이버 초기화/언로드 및 EFI 부트 및 런타임 서비스 후크는 EfiGuardDxe.c를 참조하십시오.

크레딧

  • UPGDSED - hfiref0x 및 Fyyre
  • Zydis - zyantific
  • Uninformed - Skywing의 PatchGuard v1, v2 및 v3 기사
  • UEFI-Bootkit - dude719
  • ReactOS

라이선스

EfiGuard는 GPLv3에 따라 라이선스가 부여됩니다. EfiGuardDxe/Zydis 서브모듈의 파일은 MIT 라이선스에 따라 라이선스가 부여됩니다.

도구 다운로드
Windows