
CVE-2022-34302を実演します。これはNew Horizon Datasys署名済みブートローダーを介したSecure Bootバイパスであり、その組み込みカスタムPE/COFFローダーが未署名のUEFIアプリケーションを実行します。
New Horizon Datasys Reboot Restore ブートローダー - Bring Your Own Vulnerable UEFI Application (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 ローダーを実装しており、ファームウェアの LoadImage() 関数を使用せず、かつ署名検証を一切行わずに、セカンドステージバイナリ (shdmgr.ef_) をロードします。攻撃者は shdmgr.ef_ を互換性のある任意の UEFI アプリケーションに置き換えるだけで、Secure Boot が有効な状態で任意のコード実行を達成できます。
これは「One Bootloader to Load Them All」の研究で公表された 3 つの脆弱性の中で最も危険なものです。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 が有効と報告されたまま、そのアプリケーションが完全なハードウェアアクセスで実行されます。
これは CVE-2022-34301 および CVE-2022-34303 とは根本的に異なります。これらの脆弱性では、攻撃者は UEFI Shell と対話し、gSecurity2 を手動で破壊して検証を無効化する必要があります。ここでは、バイパスは自動的かつサイレントです - ユーザー操作も、目に見える出力も、シェルプロンプトもありません。
署名済みの shdloader.efi は、PE/COFF イメージローダーの独自実装を含んでいます。ファームウェアの LoadImage() ブートサービスを呼び出すと、Security Architectural Protocols が呼び出され、イメージの署名が Secure Boot データベースに対して検証されますが、このブートローダーは代わりに以下の処理を行います:
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 とカスタムローダー***