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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2022-34302 — CVE-2022-34302를 시연한다. 이는 New Horizon Datasys가 서명한 부트로더의 내장 커스텀 PE/COFF 로더가 서명되지 않은 UEFI 애플리케이션을 실행함으로써 발생하는 Secure Boot 우회 취약점이다. | Kitploit
도구/GitHubGitHub/themalwareguardian/cve-2022-34302
Embedded Systems SecurityPersistence MechanismsVulnerability AnalysisExploitationReverse EngineeringHardware SecurityPapers & ResearchPayload DevelopmentFirmware Analysis

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
Binary Exploitation
GitHubthemalwareguardian/cve-2022-34302

CVE-2022-34302

CVE-2022-34302를 시연한다. 이는 New Horizon Datasys가 서명한 부트로더의 내장 커스텀 PE/COFF 로더가 서명되지 않은 UEFI 애플리케이션을 실행함으로써 발생하는 Secure Boot 우회 취약점이다.

저장소 보기
10시간 5분 전아직 검토되지 않음

🕷️ CVE-2022-34302 - New Horizon Datasys 부트 로더 취약점

New Horizon Datasys Reboot Restore 부트 로더 - 취약한 UEFI 애플리케이션 직접 가져오기(BYOVUA) - 서명된 부트로더에 내장된 커스텀 PE/COFF 로더를 통해 서명되지 않은 UEFI 애플리케이션을 로드하여 Secure Boot를 우회합니다.




📑 목차

  • 개요
  • 배경
    • 취약한 UEFI 애플리케이션 직접 가져오기
    • 서명된 부트로더
    • 취약점
    • 커스텀 PE/COFF 로더
    • LoadImage vs 커스텀 로더
    • PE/COFF 호환성 요구사항
    • 커널 BYOVD와의 유사점
  • 동작 방식
    • 1단계 - 서명된 부트로더 부팅
    • 2단계 - 커스텀 PE 로더 활성화
    • 3단계 - 서명되지 않은 코드 실행
    • 4단계 - 지속성
  • 익스플로잇
  • 실습 환경 구성
  • 참고 자료



개요

이 저장소는 New Horizon Datasys 부트 로더의 Secure Boot 우회 취약점인 CVE-2022-34302를 악용하여 BYOVUA (Bring Your Own Vulnerable UEFI Application) 기법을 시연합니다.

UEFI Shell 기반 취약점(CVE-2022-34301 및 CVE-2022-34303)과 달리, 이 부트로더는 UEFI Shell을 노출하지 않습니다. 대신 shdloader.efi는 자체적인 커스텀 PE/COFF 로더를 구현하여 2단계 바이너리(shdmgr.ef_)를 펌웨어의 LoadImage() 함수를 사용하지 않고, 어떠한 서명 검증도 수행하지 않은 채 로드합니다. 공격자는 shdmgr.ef_를 호환되는 임의의 UEFI 애플리케이션으로 교체하기만 하면 Secure Boot가 활성화된 상태에서 임의 코드 실행을 달성할 수 있습니다.

이는 "One Bootloader to Load Them All" 연구에서 공개된 세 가지 취약점 중 가장 위험한 것입니다. Eclypsium이 지적했듯이, 이 우회는 내장되어 있고 완전히 은밀하며 화면에 어떠한 시각적 표시도 남기지 않습니다 - 따라서 모니터가 있는 시스템에서도 보이지 않고, 서버나 산업 장비와 같은 헤드리스 시스템에서는 탐지할 수 없습니다.




도구 다운로드
배경

취약한 UEFI 애플리케이션 직접 가져오기

BYOVUA는 커널 수준에서 사용되는 BYOVD(Bring Your Own Vulnerable Driver) 기법의 UEFI 버전입니다. 취약점이 있는 서명된 커널 드라이버를 가져오는 대신, 공격자는 Secure Boot를 무력화할 수 있는 기능을 포함한 서명된 UEFI 애플리케이션을 가져옵니다.

shdloader.efi는 Microsoft가 신뢰하는 인증서로 서명되어 있기 때문에 Secure Boot에서 의심 없이 허용되며, 이 인증서를 Secure Boot 데이터베이스(db)에 포함하는 모든 시스템 - 지난 10년간 출시된 거의 모든 UEFI 지원 PC - 에서 신뢰됩니다. 일단 실행되면, 내장된 커스텀 PE 로더는 공격자에게 운영체제가 로드되기 전에 임의의 서명되지 않은 코드를 로드하고 실행할 수 있는 능력을 제공하며, 이 환경에서는 현대적인 보안 제어(ASLR, DEP, 커널 보호)가 존재하지 않습니다.


서명된 부트로더

shdloader.efi는 New Horizon Datasys의 시스템 복원 및 복구 제품(Reboot Restore Rx, RollBack Rx)의 일부로 배포되는 UEFI 부트 로더입니다. 정상적인 부팅 체인에서의 역할은 운영체제가 시작되기 전에 스냅샷 및 복원 작업을 처리하는 사전 OS 관리 구성 요소(shdmgr.ef_)를 로드하는 것입니다.

속성값
파일shdloader.efi = EFI/Boot/bootx64.efi
제조사New Horizon Datasys Inc
제품Reboot Restore Rx / RollBack Rx
CVECVE-2022-34302
서명Microsoft Windows UEFI Driver Publisher → Microsoft Corporation UEFI CA 2011
발견Eclypsium (Mickey Shkatov, Jesse Michael) - 2022년 8월
발표DEF CON 30 - "One Bootloader to Load Them All"
폐기Microsoft KB5012170을 통해 DBX에 추가됨 (2022년 8월)

취약점

이 취약점은 부트 로더 아키텍처의 설계 결함입니다. Secure Boot 서명 검증을 강제하는 펌웨어의 LoadImage() 및 StartImage() 부트 서비스를 사용하는 대신, shdloader.efi는 자체적인 커스텀 PE/COFF 로더를 구현하여 원시 디스크 바이트에서 shdmgr.ef_를 직접 읽고, 재배치하고, 실행함으로써 펌웨어의 보안 검사를 완전히 우회합니다.

핵심 문제: Secure Boot에서 신뢰하는 서명된 바이너리가 서명을 검증하지 않는 자체 이미지 로더를 포함하고 있습니다. 펌웨어는 shdloader.efi를 서명된 것으로 검증하지만, 일단 실행되면 shdmgr.ef_를 어떠한 검증도 없이 로드합니다. shdmgr.ef_를 임의의 UEFI 애플리케이션으로 교체하면 해당 애플리케이션이 전체 하드웨어 접근 권한으로 실행되며, Secure Boot는 활성화된 것으로 보고됩니다.

이는 공격자가 UEFI Shell과 상호작용하고 검증을 비활성화하기 위해 gSecurity2를 수동으로 손상시켜야 하는 CVE-2022-34301 및 CVE-2022-34303과 근본적으로 다릅니다. 여기서는 우회가 자동적이고 은밀하게 이루어집니다 - 사용자 상호작용도, 가시적인 출력도, 셸 프롬프트도 없습니다.


커스텀 PE/COFF 로더

서명된 shdloader.efi는 자체적인 PE/COFF 이미지 로더 구현을 포함하고 있습니다. Security Architectural Protocols를 호출하고 Secure Boot 데이터베이스에 대해 이미지의 서명을 검증하는 펌웨어의 LoadImage() 부트 서비스를 호출하는 대신, 이 부트로더는 다음과 같이 동작합니다:

  1. EFI_SIMPLE_FILE_SYSTEM_PROTOCOL을 사용하여 \EFI\Boot\shdmgr.ef_를 엽니다
  2. 원시 파일 내용을 메모리 버퍼로 읽습니다
  3. PE/COFF 헤더(MZ 시그니처, PE 시그니처, Optional Header)를 파싱합니다
  4. 임의의 주소에 메모리를 할당합니다
  5. 섹션 테이블에 따라 섹션을 복사합니다
  6. .reloc 섹션을 처리하고 기본 재배치를 적용합니다
  7. 진입점 주소를 확인합니다
  8. 진입점으로 점프합니다

이 과정의 어느 시점에서도 로더는 이미지의 Authenticode 서명을 검증하거나, Secure Boot 데이터베이스(db/dbx)를 확인하거나, EFI_SECURITY2_ARCH_PROTOCOL을 호출하지 않습니다. 이미지는 순전히 PE/COFF 구조적 유효성만을 기준으로 로드됩니다.```c // Pseudocode of what shdloader.efi does internally // // NOTE: This is a simplified representation. The actual // implementation was derived from reverse engineering.

EFI_STATUS LoadShdmgr(VOID) { // Step 1: Open the file File = OpenFile(L"\EFI\Boot\shdmgr.ef_");

root@kitploit:~
// Step 2: Read raw bytes (no signature check)
ReadFile(File, &Buffer, &Size);

// Step 3: Parse PE/COFF headers
DosHeader = (EFI_IMAGE_DOS_HEADER *)Buffer;
PeHeader  = (EFI_IMAGE_NT_HEADERS *)(Buffer + DosHeader->e_lfanew);

// Step 4: Allocate memory and copy sections
ImageBase = AllocatePages(...);
CopySections(ImageBase, Buffer, PeHeader);

// Step 5: Apply base relocations from .reloc
Delta = ImageBase - PeHeader->OptionalHeader.ImageBase;
ApplyRelocations(ImageBase, PeHeader, Delta);

// Step 6: Jump to entry point
//         NO SIGNATURE VERIFICATION ANYWHERE
EntryPoint = ImageBase + PeHeader->OptionalHeader.AddressOfEntryPoint;
((EFI_IMAGE_ENTRY_POINT)EntryPoint)(ImageHandle, SystemTable);

}

root@kitploit:~
---

<div id='LoadImageVsCustomLoader'/>

### ***LoadImage vs 커스텀 로더***

펌웨어의 `LoadImage()`와 커스텀 로더 간의 차이는 핵심적인 보안 격차입니다:```
┌─────────────────────────────────────────────────────────────────────────┐
│  Firmware LoadImage() - How legitimate boot chains work                 │
│                                                                         │
│  bootx64.efi ──> LoadImage("shdmgr.ef_")                                │
│                      │                                                  │
│                      ├── Parse PE/COFF headers                          │
│                      ├── Verify Authenticode signature                  │
│                      ├── Check signature against db (allowed)           │
│                      ├── Check hash against dbx (revoked)               │
│                      ├── Call gSecurity2->FileAuthenticationState()     │
│                      │       │                                          │
│                      │       ├── Signature valid? ── YES ──> Load image │
│                      │       └── Signature invalid? ── NO ──> REJECT    │
│                      └── StartImage()                                   │
│                                                                         │
├─────────────────────────────────────────────────────────────────────────┤
│  Custom PE Loader - What shdloader.efi does                             │
│                                                                         │
│  shdloader.efi ──> OpenFile("shdmgr.ef_")                               │
│                      │                                                  │
│                      ├── ReadFile() into buffer                         │
│                      ├── Parse PE/COFF headers                          │
│                      ├── Allocate memory                                │
│                      ├── Copy sections                                  │
│                      ├── Apply .reloc relocations                       │
│                      ├── *** NO SIGNATURE CHECK ***                     │
│                      └── Jump to EntryPoint                             │
│                                                                         │
│  Result: ANY valid PE/COFF EFI application runs, signed or not          │
└─────────────────────────────────────────────────────────────────────────┘

PE/COFF 호환성 요구 사항

사용자 정의 PE 로더는 단순화된 구현이며 특정 PE/COFF 레이아웃을 기대합니다. 이를 준수하지 않는 바이너리는 오류와 함께 거부됩니다:``` Reloc table overflows binary Relocation failed Invalid entry point

root@kitploit:~
이 중 하나라도 누락된 바이너리는 커스텀 로더에 의해 거부됩니다.

| 필드 | 필수 값 | 이유 |
|-------|---------------|--------|
| *Machine* | `0x8664` (x64) | 로더는 x86-64 이미지만 지원합니다 |
| *Subsystem* | `10` (EFI Application) | EFI Application이어야 합니다 |
| *.reloc 섹션* | 유효한 기본 재배치 항목이 있는 `.reloc`이 존재해야 함 | 로더가 자체적으로 이미지 재배치를 수행합니다. .reloc이 없으면 "Reloc table overflows binary" 오류와 함께 실패합니다 |
| *Relocation Directory* | `VirtualAddress` != 0, Size != 0 (DATA_DIRECTORY[5]) | 디렉터리 항목이 유효한 재배치 데이터를 가리켜야 합니다 |

배포 전 호환성 확인을 위한 검증 스크립트(Scripts/VerifyPE.py)가 제공됩니다.

---

<div id='BYOVD'/>

### ***커널 BYOVD와의 병렬성***

UEFI BYOVUA와 커널 BYOVD 사이의 구조적 병렬성은 정확히 일치합니다. 다만 CVE-2022-34302는 가장 직접적인 형태를 나타냅니다 - 서명된 구성 요소 **자체**가 검증을 비활성화하는 프리미티브를 제공하는 것이 아니라, 서명되지 않은 코드를 로드합니다:```
┌──────────────────────────────────────────────────────────────┐
│  UEFI BYOVUA - CVE-2022-34302 (Custom PE Loader)             │
│                                                              │
│  Signed Bootloader ──> Custom PE Loader ──> Load unsigned    │
│  (trusted by            (no sig check)       UEFI apps       │
│   Secure Boot)                                               │
├──────────────────────────────────────────────────────────────┤
│  UEFI BYOVUA - CVE-2022-34301/34303 (Shell + gSecurity2)     │
│                                                              │
│  Signed Shell ─ mm ─> gSecurity2 = NULL ─> Load unsigned     │
│  (trusted by          (Security2 Protocol)   UEFI apps       │
│   Secure Boot)                                               │
├──────────────────────────────────────────────────────────────┤
│  Kernel BYOVD (DSE Bypass)                                   │
│                                                              │
│  Signed Driver ─ IOCTL ─> g_CiOptions = 0 ─> Load unsigned   │
│  (trusted by              (CI.dll)            kernel drivers │
│   DSE / CI)                                                  │
└──────────────────────────────────────────────────────────────┘

CVE-2022-34302는 우회가 부트로더 설계 자체에 내재되어 있어 공격자가 보안 메커니즘을 손상시켜야 하는 중간 단계가 존재하지 않기 때문에 가장 위험한 변종입니다. 서명된 구성 요소가 정상 동작의 일환으로 서명되지 않은 코드를 직접 로드합니다.




작동 방식


1단계 - 서명된 부트로더 부팅

서명된 shdloader.efi가 기본 부트 로더로 EFI 시스템 파티션(ESP)에 배치됩니다. Microsoft의 UEFI 드라이버 게시자 인증서로 서명되어 있기 때문에 Secure Boot가 문제없이 검증하고 로드합니다.``` EFI System Partition (ESP) └── EFI/ └── Boot/ └── bootx64.efi (shdloader.efi) ← Signed by Microsoft Windows UEFI Driver Publisher └── shdmgr.ef_ (PAYLOAD) ← Unsigned, loaded by shdloader's custom PE loader

root@kitploit:~
시스템이 부팅되면, 펌웨어는 다음을 수행합니다:
1. ESP에서 `bootx64.efi`를 읽습니다
2. `LoadImage()`를 호출하여 Secure Boot 데이터베이스에 대해 Authenticode 서명을 검증합니다
3. 서명이 `db`의 Microsoft UEFI CA 2011 인증서와 일치함 → 이미지가 수락됨
4. `StartImage()`를 호출하여 실행을 `shdloader.efi`로 이전합니다

---

<div id='Phase2'/>

### ***Phase 2 - 사용자 정의 PE 로더 활성화***

`shdloader.efi`가 제어권을 획득하면, 진단 메시지를 출력하고 즉시 사용자 정의 PE/COFF 로더를 활성화합니다:```
Booting in insecure mode

부트로더는 그런 다음:

  1. 파일 시스템 프로토콜을 사용하여 \EFI\Boot\shdmgr.ef_를 연다
  2. 전체 파일을 메모리 버퍼로 읽어들인다
  3. PE/COFF 헤더를 파싱하여 섹션 레이아웃과 재배치 데이터를 추출한다
  4. 임의의 물리 주소에 실행 가능한 메모리를 할당한다
  5. 각 PE 섹션(.text, , 등)을 할당된 메모리에 복사한다
.data
.reloc
  • 재배치 델타(LoadAddress - ImageBase)를 계산하고 .reloc 섹션의 모든 기본 재배치를 적용한다
  • LoadAddress + AddressOfEntryPoint를 실행 대상으로 결정한다
  • 이 과정의 어느 시점에서도 서명 검증은 발생하지 않는다. 로더는 LoadImage()를 호출하지 않고, gSecurity2->FileAuthenticationState()를 호출하지 않으며, db 또는 dbx 데이터베이스를 확인하지 않는다. 파일은 순전히 구조적 유효성만을 기준으로 로드된다.

    파일을 찾을 수 없는 경우, 부트로더는 다음을 보고한다:``` Failed to open \EFI\Boot\shdmgr.ef_ - 800000000000000E Failed to load image

    root@kitploit:~
    ---
    
    <div id='Phase3'/>
    
    ### ***Phase 3 - 서명되지 않은 코드 실행***
    
    커스텀 로더가 `shdmgr.ef_`의 진입점으로 점프합니다. 이제 서명되지 않은 UEFI 애플리케이션이 다음과 같은 환경에서 실행됩니다:
    
    - 전체 하드웨어 접근 (직접 메모리, I/O 포트, PCI, MMIO)
    - 운영체제가 아직 로드되지 않음
    - ASLR, DEP 또는 커널 보호 기능 없음
    - EDR 또는 엔드포인트 보안 모니터링 없음
    - 이후의 모든 OS 쿼리에 Secure Boot가 **활성화됨**으로 보고됨
    
    이 공격은 완전히 은밀합니다. 눈에 보이는 UEFI Shell 프롬프트를 표시하는 CVE-2022-34301 및 CVE-2022-34303과 달리, 이 익스플로잇은 "Booting in insecure mode" 메시지 외에는 어떠한 시각적 출력도 생성하지 않습니다 (이 메시지는 정상적인 시스템에서는 잠시 나타났다가 빠르게 OS 부팅 화면으로 대체됩니다). 헤드리스 시스템(서버, IoT, 산업 장비)에서는 어떠한 징후도 없습니다.
    
    ---
    
    <div id='Phase4'/>
    
    ### ***Phase 4 - 지속성***
    
    이 공격은 기본적으로 지속적입니다. `shdloader.efi`가 `\EFI\Boot\bootx64.efi`에 남아 있고 공격자의 페이로드가 ESP의 `\EFI\Boot\shdmgr.ef_`에 남아 있는 한, 서명되지 않은 페이로드가 매 부팅 시 실행됩니다.
    
    `startup.nsh` 스크립트가 필요하지 않습니다. 펌웨어 업데이트 전반에 걸쳐 gSecurity2 주소를 재계산할 필요도 없습니다. 커스텀 PE 로더는 발견한 `shdmgr.ef_`를 무조건 로드합니다.
    
    시스템은 계속해서 Secure Boot를 "활성화됨"으로 보고합니다 - 오직 부트로더 수준에서만 신뢰 체인이 깨진 것입니다. 이로 인해 이 공격은 OS 수준의 Secure Boot 상태 쿼리와 Secure Boot 증명에 의존하는 모든 보안 소프트웨어에 보이지 않게 됩니다.
    
    > **중요:** 지속성은 `shdloader.efi`에 대한 폐기 항목(KB5012170)으로 DBX가 업데이트될 때만 깨집니다. 이 경우 커스텀 로더가 활성화되기 전에 펌웨어가 `shdloader.efi` 자체를 거부하게 됩니다.
    
    
    
    ---
    ---
    ---
    
    
    
    <div id='Exploit'/>
    
    ## ***익스플로잇***
    
    `Exploit/` 디렉터리에는 호환되는 `shdmgr.ef_`를 빌드하는 데 필요한 모든 것이 포함되어 있습니다:```
    Exploit/
    |
    ├── README.md                           ← Build guide and PE/COFF requirements
    |
    ├── PayloadShdmgr/
    |   |
    │   ├── ForceReloc.nasm                 ← Force .reloc section generation
    │   ├── shdmgr.ef_.c                    ← UEFI application source (EDK2)
    │   ├── shdmgr.ef_.inf                  ← EDK2 module definition
    │   ├── shdmgr.ef_.dsc                  ← EDK2 platform build configuration
    │   └── shdmgr.ef_.dec                  ← EDK2 package declaration
    |
    └── Scripts/
        └── VerifyPE.py                    ← PE/COFF compatibility verifier
    



    랩 환경 구성

    DBX (금지된 서명 데이터베이스)

    서명된 부트로더는 KB5012170(2022년 8월)을 통해 Microsoft의 DBX 폐기 목록에 추가되었습니다. 업데이트된 시스템에서는 커스텀 PE 로더가 활성화되기 전에 Secure Boot에 의해 부트로더가 거부됩니다.

    랩 환경을 위해서는 다음 조건을 충족하는 시스템이 필요합니다:

    • 해당 부트로더에 대한 폐기 항목이 DBX에 업데이트되지 않은 경우
    • 또는 DBX가 비어 있는 경우 (기본 Secure Boot 키가 있는 새 VM)
    • 또는 커스텀 Secure Boot 키 등록이 가능한 QEMU/OVMF 환경을 사용하는 경우

    QEMU UEFI Research Environment에서 이를 위한 자동화된 설정을 제공합니다.

    Shell 기반 CVE와의 비교

    CVE-2022-34302는 CVE-2022-34301 및 CVE-2022-34303보다 악용하기 더 간단합니다:

    측면CVE-2022-34302 (커스텀 로더)CVE-2022-34301/34303 (Shell)
    기법shdmgr.ef_를 페이로드로 교체mm 명령으로 gSecurity2 손상
    상호작용없음 (완전 자동)수동 shell 명령 또는 startup.nsh
    가시성은밀함 ("Booting in insecure mode")UEFI Shell 프롬프트 노출
    펌웨어 의존성없음 (페이로드가 자체 포함)gSecurity2 주소가 펌웨어 빌드마다 변경됨
    복잡도낮음 (파일 교체)중간 (메모리 스캔 및 패칭)
    은닉성높음 (헤드리스에서 시각적 출력 없음)낮음 (화면에 shell 노출)



    참고 자료

    직접 관련

    • Awesome Bring Your Own Vulnerable UEFI Application - 알려진 취약한 서명된 UEFI 애플리케이션 모음

    Eclypsium 연구

    • One Bootloader to Load Them All - CVE-2022-34301, CVE-2022-34302, CVE-2022-34303을 공개한 Eclypsium의 원본 연구
    • DEF CON 30 - One Bootloader to Load Them All - Mickey Shkatov와 Jesse Michael의 발표

    벤더

    • New Horizon Datasys (Horizon DataSys) - Reboot Restore Rx 및 RollBack Rx의 벤더
    • Reboot Restore Rx Pro v12 Release Notes - 재설계된 pre-OS EFI 부트로더와 새로운 코드 서명 인증서 문서화

    UEFI 사양

    • UEFI Specification - LoadImage() - Secure Boot 검증을 강제하는 펌웨어 부트 서비스
    • UEFI PI Specification - Security Architectural Protocols - 커스텀 로더가 우회하는 Security2 Architectural Protocol의 공식 정의

    권고

    • CERT/CC - VU#309662
    • NVD - CVE-2022-34302

    부트로더 카탈로그

    • Bootloaders.io - shdloader.efi - 폐기된 New Horizon Datasys 부트로더에 대한 YARA 규칙, Sigma 탐지, 샘플 해시

    관련 기법

    • CVE-2022-34301 - Eurosoft 서명 UEFI Shell 우회 (esdiags.efi)
    • CVE-2022-34303 - CryptoPro Secure Disk 서명 UEFI Shell 우회 (Shell_Full.efi)
    • CVE-2024-7344 - 커스텀 PE 로더가 포함된 Howyar SysReturn 서명 부트로더 (CVE-2022-34302와 유사한 기법)