
baton drop (CVE-2022-21894): Secure Boot セキュリティ機能バイパスの脆弱性
Windows ブートアプリケーションは、truncatememory 設定を使用して、メモリマップからシリアライズされたデータの「永続的」な範囲を含むメモリブロックを削除することを許可し、セキュアブートのバイパスにつながります。
truncatememory BCD要素は、指定された物理アドレスより上のすべてのメモリをメモリマップから削除します。bootdebug、testsigning、nointegritychecks)が使用可能になり、セキュアブートが破られます。この問題は2つの異なる変更で修正されました:
bootmgrでない場合、ブートアプリケーションの初期化は失敗します。VERSIONINFOリソースにOriginalFilenameが含まれている場合、そのファイル名がブロックリスト(bootmgr.exeとhvloader.exeを含む;Nickelではhvloader.efiが追加されたが、バックポートされなかった)に含まれていると、ロードは失敗します。
hvloader.exeはwinloadのブロックリストに含まれていません - 元々含まれていたため、Hyper-Vのロードが壊れていました!flightedbootmgr要素と共に使用され、ディスクからbootmgrをロードする)、OriginalFilenameは必須でbootmgr.exeである必要があります。攻撃者は、シリアライズされたセキュアブートポリシーが既知の物理アドレスより上に割り当てられるようにする必要があります。
osdeviceがBitLockerで暗号化されたパーティションであり、VMKがTPMを使用して導出された場合、再割り当てされます。
avoidlowmemory要素を使用すると、物理メモリのすべての割り当てが指定された物理アドレスより上にあることを保証できます:
bootmgrをロードし、カスタムBCDパス(bcdfilepath要素、別名custom:22000023を使用)を指定することで、これをバイパスできます。bootmgrを使用して一度攻撃を実行し、VBSを無効にしてから元のブートローダーに戻すことも可能です。
bootmgrはWindows 10以降のシステムでVMKのアンシールに失敗します。hvloader.efiはnointegritychecks要素を使用してロードでき、自己署名されたmcupdate.dllをロードします。そのエントリポイントはExitBootServicesの前に呼び出されます。
あるいは、非AMD64システムでは、TH2より前のwinload.efiをtestsigning要素と共に使用できます。これにより、証明書にszOID_NT5_CRYPTO EKUを持つ自己署名バイナリが許可されます。
ARMv7システムでは、mcupdate.dllへのインポートを含むパッチ済みの自己署名hal.dllをロードしてコード実行を得る必要があります。
x86およびAMD64システムでは、mcupdate.dllとしてロードされるファイルはmcupdate_*.dllという名前でなければなりません。ここで*はCPUIDの製造元文字列(GenuineIntel、AuthenticAMDなど)です。
ARM64システムでは、利用可能な最も初期のプロダクション署名済みビルドがRS2のWinPEであるため、このテクニックは使用できません。したがって、現在は(bootdebugを使用した)テザリングされたコード実行のみが可能です。
このリポジトリには以下のファイルが含まれています:
mcupdate.dllはページングが有効な仮想アドレスで実行されるため、EFI関数を直接呼び出すことはできません(EFI関数を呼び出すにはページングを無効にする必要があり、ページングがオフの状態で仮想アドレスに戻っても良い結果にはなりません)。
BlImgLoadPEImageExまたはBlImgLoadPEImageFromSourceBufferを呼び出し、追加のペイロードを物理アドレスと仮想アドレスが1:1でマッピングされた場所にロードする必要があります。
BlImgAllocateImageBufferを呼び出し、物理アドレスと仮想アドレスが1:1でマッピングされたメモリを割り当て、その後自分でペイロードをロードする(または自分自身をそこに再マッピングする)こともできます。bootmgfwとTH1 RTMのhvloaderを使用してAMD64でこの問題を悪用するISO。
hvloaderの関数を使用して画面にメッセージを表示し、その後無限ループします。bootmgrとTH1 RTMのhvloaderを使用してAMD64でこの問題を悪用するISO。bootmgrとTH1 RTMのhvloaderを使用してAMD64でこの問題を悪用するISO。この問題は、BitLockerキー(セキュアブートが整合性検証に使用されている場合)をダンプするために使用できます。
この問題に対する修正は、CVEを持たない別の問題も修正しました。
bootmgrはメモリ内に既存のBitLockerキーテーブルを無視し、新しいものを割り当てますが、古いものを消去しません。
bootmgrからRS2+のbootmgrをロードし(セキュアブートが整合性検証に使用される任意のosdeviceを指定)、WinPEにブートし、既知の脆弱なドライバをロードし、それを使用して物理メモリ内の既存のBitLockerキーテーブルを検索およびダンプできます。既知の脆弱なブートアプリケーションはまだ失効されていません。
bootmgrが自身の署名をチェックするために発生します。不完全な失効が発生し、別のCVE(CVE-2023-24932)が発行されました。依然として失効されていない脆弱なbootmgfwが存在し、さらに追加のパッチはbootmgrがbootmgrをロードするケースのみを修正しています。MSが動くには、貼り付けられたブートキットが必要だっただけです ;)
もしあなたが十分に創造的であれば、2000以上のbootmgfwファイルの失効を回避する方法を見つけるでしょう ;)