
2026/02/08 23:40
署名付きブートローダーを悪用してUEFIセキュアブートを回避する方法
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
主旨:
現代のPCはUEFI Secure Bootを利用して署名されていないコードの実行をブロックしますが、特別に設計された2つの起動ディスクによってこれらの制限を回避し、Secure Boot を有効にしたまま任意のEFIバイナリを実行できます。仕組み:
Super UEFIinSecureBoot は署名済みのshimローダー、署名チェックを無効化する改変PreLoader、およびカスタムGRUB2を組み合わせています。初回起動時にユーザーはMokManager経由で証明書を選択し、その後ディスクはSecure Boot が無効になったシステムと同様に振る舞い、任意の署名されていない .efi やカーネルをロードできるようになります。
Silent UEFIinSecureBoot は Kaspersky Rescue Disk 18 をベースにしており、署名済みのKasperskyローダーがモジュールをメモリ上で自己ロードし、UEFI LoadImage/StartImage を回避して GRUB が信頼できないコードを静かに実行できるようにします。背景:Secure Boot は 2013 年に導入されました。ほとんどのマザーボードは Microsoft キーのみを信用するため、ベンダーは Microsoft に署名されたブートローダーを取得しなければなりません。Linux ディストリビューションは shim + PreLoader を使用しますが、GRUB は GPLv3 の下で署名できないためです。Red Hat は危険な機能をブロックしつつ shim で検証されたファイルのみを許可するよう GRUB2 をパッチしました。
影響:これらのディスクは救援ユーティリティやマルチブートオプションなど合法的なメンテナンスツールを提供しますが、起動キットの可能性などセキュリティリスクも伴います。記事では Microsoft が Windows Update を通じて Kaspersky 証明書を取り消すことができると指摘しており、その場合は静かなブート方式に影響が出ます。ユーザーや企業はこれらの機能を認識し、失効リストを監視する必要があります。
本文
読み込み時間 6 分
リーチと読者数 53K
この記事のロシア語版。
現代PCマザーボードのファームウェアは2010年以降UEFI仕様に準拠しています。
2013年には「Secure Boot」と呼ばれる新技術が登場し、ブートキット(起動時に侵入して実行される悪意あるコード)のインストールと実行を防ぐことを目的としていました。Secure Bootは署名されていないまたは信頼できないプログラムコード(.efi プログラム、オペレーティングシステムのブートローダー、ビデオカードやネットワークアダプタのOPROM など)を実行しないようにします。
Secure Boot は任意のリテールマザーボードで無効化できますが、その状態を変更するにはユーザーが物理的にコンピュータにいることが必須です。UEFI 設定は起動時に入力されるため、初めて Secure Boot の設定を変える場合も同様です。
ほとんどのマザーボードは Microsoft キーのみを信頼対象としており、その結果ブート可能ソフトウェアベンダーは自社のブートローダーに Microsoft 署名を求める必要があります。このプロセスにはコード監査手順と、グローバルに信頼されたキーで署名する正当性の説明が含まれます。ディスクや USB フラッシュドライブを Secure Boot モードで動作させたい場合、各コンピュータに手動でキーを追加しない限り、Microsoft から署名を受ける必要があります。
Linux ディストリビューション、ハイパーバイザー、アンチウイルス起動ディスク、コンピュータ回復ソフトウェアの作者も全て Microsoft にブートローダーを署名してもらう必要があります。
Secure Boot で動作する USB 起動ドライブを作る
署名されたブートローダー
Secure Boot が有効な状態で Linux を起動するには、署名済みのブートローダーが必要です。Microsoft は tivoization 制限により GPLv3 ライセンス付きソフトウェアの署名を禁止しているため、GRUB は署名できません。
この問題に対処するため Linux Foundation は PreLoader をリリースし、Matthew Garrett は shim(小型ブートローダー)を開発しました。これらは単一ファイルの署名またはハッシュを検証して実行します。PreLoader と shim は UEFI の db 証明書ストアを使用せず、許可されたハッシュ(PreLoader)や証明書(shim)のデータベースを実行可能ファイル内に組み込みます。
両プログラムは信頼できるファイルを自動的に実行し、Secure Boot モードで以前は不審だったプログラムを起動できますが、ユーザーの物理的存在が必要です。初回実行時には GUI インタフェースから証明書またはハッシュ化対象ファイルを選択し、そのデータはマザーボード上の特別な NVRAM 変数に追加されます。この変数はロードされた OS からアクセスできません。ファイルは PreLoader / shim のみで信頼され、一般的な Secure Boot ではなく、PreLoader や shim が無ければ起動できません。
shim を使った不審ソフトウェアの最初のブート
すべての主要 Linux ディストリビューションは証明書サポートがあるため shim を採用しており、ユーザーの介入なしにメインブートローダー(GRUB2)を更新できます。shim は主に GRUB2 を実行するために使われます。
Red Hat が GRUB2 に適用したパッチ
悪意ある目的で署名済みブートローダーを乱用されないよう、Red Hat は Secure Boot 有効時に「危険な」機能をブロックするパッチを GRUB2 に導入しました。
/insmodrmmodappleloader
(linux
に置き換え)linuxefimultibootxnumemrwiorw
chainloader モジュールは任意の .efi ファイルをロードするために独自の内部 PE ローダーを導入し、UEFI の LoadImage/StartImage 関数を使わず shim で検証します。これにより UEFI の観点では信頼されていないが shim によって許可されたファイルはロード可能です。この方法の利点は不明ですが、UEFI は検証関数をフックできるため PreLoader と同様の仕組みであり、shim の機能も存在しますがデフォルトでは無効化されています。
署名済み GRUB を使うだけでは要件を満たせません。すべての実行ファイルにキーを追加せずに動作する汎用 USB 起動ドライブを作るには、次の二つの方法があります。
- デジタル署名検証やモジュール制限なしで内部 EFI ローダーを持つ改造 GRUB を使用。
- UEFI ファイル検証関数(
、EFI_SECURITY_ARCH_PROTOCOL.FileAuthenticationState
)をフックするカスタムプリローダーを使用。EFI_SECURITY2_ARCH_PROTOCOL.FileAuthentication
後者の方法が好ましいです。実行されるソフトウェアは他のプログラムをロード・起動できるため、UEFI シェルでも任意のプログラムを実行できます。一方前者では GRUB のみが任意ファイルを実行可能です。そのため PreLoader を不要な機能削除と検証コードパッチで修正し、すべてを許可する形にします。
ディスクアーキテクチャ
______ ______ ______ ╱│ │ ╱│ │ ╱│ │ /_│ │ → /_│ │ → /_│ │ │ │ → │ │ → │ │ │ EFI │ → │ EFI │ → │ EFI │ │_______│ │_______│ │_______│ BOOTX64.efi grubx64.efi grubx64_real.efi (shim) (FileAuthentication override)
起動フローは次の通りです。
(キー登録ツール)が初回起動時に自動で呼び出され、証明書を選択します。MokManager.efi- その後 Secure Boot が無効化されたかのように機能し、GRUB は任意の unsigned .efi ファイルや Linux カーネルをロードできます。実行中の EFI プログラムは他の不審な実行ファイルやドライバも自由にロードできます。
ディスクには次が含まれます。
- Super Grub Disk(ブートローダーが壊れていても OS を検索・起動するスクリプト)
- GRUB Live ISO Multiboot(ISO から直接 Linux ライブディストリビューションをロードするスクリプト)
- One File Linux(カーネル+initrd が一つのファイルにまとめられたシステム復旧用)
- 複数の UEFI ユーティリティ
UEFI で Secure Boot を無効化した状態でも、また BIOS の古い PC でも動作します。
初回起動時のキー登録をバイパスする方法
shim を通じて初回起動時のキー登録を迂回できるか疑問に思いました。実際に期待以上に柔軟なローダーが存在します。その一例として Kaspersky Rescue Disk 18(アンチウイルス起動ディスク)があります。GRUB は
insmod でモジュールをロードできますが、GRUB のモジュールは実行可能コードです。ディスク上のプリローダーはカスタムです。
単に GRUB を使って不審なコードをロードすることはできません。GRUB が UEFI の
LoadImage/StartImage を使用しないように改造し、.efi ファイルをメモリへ自前でロードし、PE ヘッダー解析・再配置・エントリポイントへのジャンプを行う必要があります。このコードは Red Hat の GRUB Secure Boot リポジトリにほぼ揃っており、PE ヘッダーパーサだけが欠けています。GRUB は shim や PreLoader を介してヘッダー解析を実装できます。
この方法で Silent UEFIinSecureBoot Disk が作成されました。最終的なディスクアーキテクチャは次の通りです。
______ ______ ______ ╱│ │ ╱│ │ ╱│ │ /_│ │ /_│ │ → /_│ │ │ │ │ │ → │ │ │ EFI │ │ EFI │ → │ EFI │ │_______│ │_______│ │_______│ BOOTX64.efi grubx64.efi grubx64_real.efi (Kaspersky Loader) (FileAuthentication override)
fde_ld.efi + custom chain.mod(Kaspersky GRUB2)。
結論
Microsoft キーで署名された信頼できるブートローダーが十分にないことを実証しました。署名済み Kaspersky Rescue Disk のファイルを使用することで、Secure Boot が有効な状態でも任意の不審 .efi ファイルをサイレント起動できます。これは UEFI db や shim MOK に証明書を追加せずに実現されます。
これらのファイルは USB フラッシュドライブから安全に起動するためにも、また悪意あるブートキットを所有者の同意なしにインストールするためにも利用可能です。Kaspersky のブートローダー署名は長く存続しない可能性が高く、Windows 10 の Windows Update を通じて UEFI 証明書失効リストに追加されると Kaspersky Rescue Disk 18 と Silent UEFIinSecureBoot Disk は動作しなくなります。
-
Super UEFIinSecureBoot Disk ダウンロード:
https://github.com/ValdikSS/Super-UEFIinSecureBoot-Disk -
Silent UEFIinSecureBoot Disk ダウンロード(ZeroNet Git Center ネットワーク):
http://127.0.0.1:43110/1KVD7PxZVke1iq4DKb4LNwuiHS4UzEAdAv/About%20ZeroNet
ZeroNet について
ZeroNet は分散型・分散型ダイナミックウェブサイトとサービスの強力なシステムです。ユーザーは訪問時にウェブサイトデータをダウンロードし、シーディングします(BitTorrent の原理)。他の類似システムとは異なり、ZeroNet はコメント付きブログ、フォーラム、ビデオホスティング、ウィキ、チャット、メール、Git などフル機能を持つサイトを作成できます。
ZeroNet はデータとコードを分離し、.json ファイルに保存されたデータを SQLite データベースへ統合します。これにより開いている全ウェブサイトをミリ秒単位でローカル検索でき、リアルタイム RSS ライクな更新ストリームも可能です。OAuth 類似の標準化認証、NAT および Tor サポートを備え、速く使いやすく、すべてのサイトに対してグローバルな昼夜テーマ切替機能付きモダン UI を提供します。
ZeroNet は過小評価されていると考えており、サイレント版ディスクを ZeroNet Git にアップロードしたのは新規ユーザー獲得のためです。