
CVE-2022-34302를 시연한다. 이는 New Horizon Datasys가 서명한 부트로더의 내장 커스텀 PE/COFF 로더가 서명되지 않은 UEFI 애플리케이션을 실행함으로써 발생하는 Secure Boot 우회 취약점이다.
New Horizon Datasys Reboot Restore 부트 로더 - 취약한 UEFI 애플리케이션 직접 가져오기(BYOVUA) - 서명된 부트로더에 내장된 커스텀 PE/COFF 로더를 통해 서명되지 않은 UEFI 애플리케이션을 로드하여 Secure Boot를 우회합니다.
이 저장소는 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이 지적했듯이, 이 우회는 내장되어 있고 완전히 은밀하며 화면에 어떠한 시각적 표시도 남기지 않습니다 - 따라서 모니터가 있는 시스템에서도 보이지 않고, 서버나 산업 장비와 같은 헤드리스 시스템에서는 탐지할 수 없습니다.
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 |
| CVE | CVE-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과 근본적으로 다릅니다. 여기서는 우회가 자동적이고 은밀하게 이루어집니다 - 사용자 상호작용도, 가시적인 출력도, 셸 프롬프트도 없습니다.
서명된 shdloader.efi는 자체적인 PE/COFF 이미지 로더 구현을 포함하고 있습니다. Security Architectural Protocols를 호출하고 Secure Boot 데이터베이스에 대해 이미지의 서명을 검증하는 펌웨어의 LoadImage() 부트 서비스를 호출하는 대신, 이 부트로더는 다음과 같이 동작합니다:
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL을 사용하여 \EFI\Boot\shdmgr.ef_를 엽니다.reloc 섹션을 처리하고 기본 재배치를 적용합니다이 과정의 어느 시점에서도 로더는 이미지의 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_");
// 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);
}
---
<div id='LoadImageVsCustomLoader'/>
### ***LoadImage vs 커스텀 로더***