HN 日本語サマリー

← 一覧へ戻る
セキュリティ

Microsoft署名のShimを悪用して、企業ハードウェアのSecure Bootを侵害する

Borrowing a Microsoft-signed shim to abuse Secure Boot on corporate hardware (leosmith.wtf)

18 pointsby p4p12 コメント

要約

本記事は、Secure Bootの仕組みと、Microsoftが署名したサードパーティ製OS用のShim(ブートローダー)を悪用して、本来許可されていないOSを起動させる方法について解説しています。筆者は、企業環境で一般的に信頼されているMicrosoftの証明書を持つShimを流用し、独自のキーで署名したカーネルを起動させる手法を実演し、Secure Bootのセキュリティ上の盲点を明らかにしています。

全文翻訳

Not so secure boot

戻る / p4p1


作成日: 2026年11月8日(日)


[画像]


皆さん、こんにちは。このブログ記事は、数年前からこのブログで続いているp3ng0sシリーズの続編です。これは私が今年4月に行ったSecure Bootに関する最新の研究で、おそらく1年後にリリースされるp3ng0s V2の予告編です。

この記事を始める前に、簡単な説明をさせてください。今年の残りと来年初頭は、maldev academyの完成、PICマルウェアに関する短い研究論文の執筆、CRTO 1 + 2の受講に集中します。p3ng0sに多くの機能を追加したいのですが、まずは上記を完了させ、p3ng0s V2の作業中に精神的な distractions を避ける必要があります。OSの物理セキュリティ側を強化したいと考えており、素晴らしいアイデアがたくさんあります。ここで説明するSecure Bootの作業は、これと直接的に並行しています。V1開発の途中で思いついたアイデアでしたが、スコープクリープを避けるためにV2に延期しました。しかし、結局V2ブランチで実装することになりました。もしこの記事が気に入ったら、このテクニックを今すぐ使用できます。簡単なチュートリアルが記事の最後にこちらで紹介されています。

誤解

Secure Bootの詳細に入る前に、ここで一つ明確にしておきます。この研究を行う前、私はSecure Bootについて正確には何も知りませんでした。私にとって、それは新しいラップトップを購入したときにLinuxを起動するのを邪魔する、あの厄介なBIOSオプションに過ぎませんでした。Microsoftが推進しているものだと知っていたので、新しいハードウェアを購入してこの機能を無効にし、意図した通りにコンピュータを使用しなければならないことに、あまり満足していませんでした。この記事を読んでいる皆さんも、私のようにSecure Bootの知識が限られていた場合、少し時間を取って以下の質問について考えてみてください。Secure Bootとは何だと思いますか?この機能は何のためにあると思いますか?なぜ存在するのでしょうか?

さて、少し考えた後、詳細を調べる前の私の結論は、「マシンで実行されるOSをロックダウンすること」でした。OSを起動できるキーとできないキーがある、といった具合で、特定のキーが必要で、それらはMicrosoftによって管理されていると思っていました。この答えは近いですが、正確ではありません。Secure Bootが存在する本当の理由は、「起動するOSの整合性を確保すること」です。ここで使われている言葉遣いは非常に重要です。「整合性を確保すること」は、「1つのOSに起動を限定すること」と同じ意味でしょうか?(少なくとも、当時の私ならそう解釈するでしょう。)しかし、実際には全く違います。整合性を確保するとは、「はい、このOSの署名は受け入れられたOSのデータベースにあります。それだけです。」という意味なのです。

Microsoft Corporation UEFI CA 2011

一部の企業では、従業員がLinuxを実行することを許可していますよね?それは、それらの企業のCISO(最高情報セキュリティ責任者)が狂っていて、フリート全体でSecure Bootを無効にしているということでしょうか?それは完全に間違いです。Microsoft Corporation UEFI CA 2011というものがあり、これはMicrosoftのキーで動作するサードパーティ製OSに署名するために使用されます。これらのキーは、ほとんどのBIOSにインストールされています。つまり、Secure Bootは任意のキーで動作し、独自のキーを作成してBIOSに登録し、Linuxビルドに署名すれば、それが機能するということです。

[画像]

これは、Bazzite OSのチュートリアルで、BIOSに独自のキーを登録する方法を示したスクリーンショットです。さて、これで2つのことが理解できました。1. Microsoftは一部のLinuxディストリビューションのためにサードパーティキーを持っています。2. BIOSを操作できれば、独自のキーを登録できます。では、これがどのように安全なのでしょうか?独自のキーを登録できるなら、どうして安全なのでしょうか?実は、Secure Bootは一般消費者や物理的なマシンへのアクセスを対象としたものではなく、特定の攻撃、つまりEFIマルウェアを阻止するためだけのものでした。マルウェアがEFIレベルに存在し、Windowsがコンピュータのリセット時にEFIパーティションをワイプしない場合、「不死身」のマルウェアが存在することになります。すべてのパーティションをワイプすればこの問題は解決しますが、それはさておきです。

Shimmy Shimmy Yay

[画像]

MicrosoftがSecure Bootアクセス用にサードパーティ製OSに署名していることはわかりましたが、これらのOSは常に変化しており、キーはそれほど頻繁には変更されません。しかし、GRUBのバージョンやOSは常に進化しています。変更されない(または有効期限が切れない限り変更されない)キー1つで、その下のソフトウェアが常に変化し続けるのは、ブートチェーンの整合性を損なわないのでしょうか?はい、損ないます。ここで、ShimとMOK(Machine Owner Key)の登録というものが登場します!

[画像]

これはMOK登録の仕組みを示した図です。これに対して私が抱く問題点は見えますか?私には少し些細なことのように思えます。MOK登録中にキーを選択できるなら、なぜ自分のキーを選ばないのでしょうか?そこから先は大当たりです。Secure Bootが有効になっているハードウェアでOSを起動できます!前のチェーンについて、ここで何かを明確に説明します。BIOSにはMicrosoftのサードパーティキーがインストールされています。ShimはMicrosoftによって署名されたサードパーティ製です。もしGRUBイメージが認識されないキーで署名されている場合、Shimは失敗し、MOKソフトウェアに移行します。そこで、GRUBとLinuxの署名に一致するキーを選択できます。

Shimの借用

先ほど何度か言及しましたが、Microsoftのサードパーティ製プログラムとこれらのマジックキーは、一体誰が使っているのでしょうか?Ubuntu、Debian、FedoraなどのOSがいくつかあります。これらのオープンソースOSは、オープンソースなので、Shimを見つけて自分のOSをUbuntuとして偽装できないでしょうか?Opsec(運用上のセキュリティ)の観点からは、これは素晴らしいことです。私の「ハッキング」OSをSecure Bootチェーン上でUbuntuのように見せかけ、もしコンピュータ自体にこれらのサードパーティ証明書がインストールされていれば、私はターゲットのハードウェアでブートローダーやその他のものを起動できます。

[画像]

ここで私の新しいお気に入りのウェブサイトpkgs.orgを紹介します。これは複数のLinuxディストリビューションのパッケージを検索できるサイトです!そして、shimというパッケージを検索すると、面白いものが見つかります!shim-signedという名前のパッケージです。さて、これを使って何をしようとするでしょうか?その通り、借用します ;)

[画像]

必要なのは、私たちのクソ(ここではカスタムOSを指す)を登録するためのMOKソフトウェアと、Microsoftによって署名された実際のShimです。この例では、Microsoftによって署名されていることをどのように確認するかという重要な部分を省略しました。そのためのコマンドは sbverify --list you_shim_file.efi で、出力は以下のようなものになるはずです。

[画像]

Shimのインストール

これらはすべてブート関連のものですので、EFIパーティションを実際に操作し、どのように起動するかを理解する必要があります。注意点として、ここでミスをすると、ドライブ/USBが起動しなくなります。へへへ、私自身も何度か経験しました。それを通過儀礼と呼びましょう!さて、SHIMをインストールするには、EFIパーティションを取得してマウントする必要があります!そこから、以下のファイルが見えるはずです。

[画像]

まず、以下のコマンドで独自のキーを生成します。

openssl req -newkey rsa:4096 -nodes -keyout "./MOK.key" -new -x509 -sha256 -days 3650 -subj "/CN=some name/" -out "./MOK.crt"

キーを生成したら、キーでカーネルに署名してください。

sbsign --key "./MOK.key" --cert "./MOK.crt" --output /boot/vmlinuz-linux /boot/vmlinuz-linux

補足ですが、カーネルに署名するには、ライブUSB上では自分でビルドしない限り署名できません。p3ng0sの場合、ビルド中にこれを実行するフックを特別に追加しました。V2ブランチのファイル airootfs/etc/pacman.d/hooks/zzzz98-mok-signing.hook で確認できます。しかし、技術的には、例えばKali LinuxをUSBドライブに直接インストールし、そのドライブを起動してカーネルに署名し、ドライブを取り外して、そのUSBドライブ上でEFIの手順を実行すれば、Kali Linuxでも同じ技術が機能します。正直なところ、これを実行するには、このブログ記事全体をClaudeにコピー&ペーストして、チュートリアルを生成してもらい、彼と一緒に進めることをお勧めします!

次に、先ほど見つけたEFIファイルを「grubx64.efi」にリネームし、署名します。

mv ./BOOTx64.EFI ./grubx64.efi # リネーム
sbsign --key "/where_you_put_your_shim/MOK.key" --cert "/where_you_put_your_shim/MOK.crt" ./grubx64.efi --output ./grubx64.efi # grubに署名

その後、実際のShimを「BOOTx64.EFI」にリネームし、MOKソフトウェアを隣に配置します。

cp -r "/path_to_your_shim/shimx64.efi" ./BOOTx64.EFI
cp -r "/path_to_your_shim/mmx64.efi" ./mmx64.efi

その後、証明書をSecure Bootが受け入れられる形式に変換し、キーを後で簡単にアクセスできるようにEFIパーティションに配置します。

openssl x509 -in "./MOK.crt" -outform DER -out ./borrowed-mok.der

最終的にEFIパーティションのBOOTフォルダ内は以下のようになります。

[画像]

Secure Bootの悪用

[画像]

これで、新しく取得したMicrosoft署名済みShimで準備されたドライブができました!仕組みは簡単です。Secure Bootが有効で、Microsoftのサードパーティ証明書がプリインストールされているラップトップを用意します(ほとんどの場合、特に企業マシンでは、一部のソフトウェアがWindows上で必要とされるためです。しかし、HP Wolf Securityのように、インストールされている場合とそうでない場合がありました。カットオフは昨年か2年前で、それ以降有効にするのをやめました)。

この例では、現実的にするために、ドライブを接続し、「BOOT from other device」オプション(通常はF7ですが、モデルによって異なります)を選択します。(注意:このオプションにはBIOSパスワードは不要ですLOL)。ここで、新しく作成したドライブを選択し、Shimを起動してGRUB署名セクションで失敗させ、MOK登録ソフトウェアを表示させます。

[画像]

ここで「Enroll Key from disk」を選択し、前のステップでキーを配置したBOOT/フォルダに移動します!

[画像]

ここで、そのキーを登録したいことを「はい」と伝えます。

[画像]

これで、起動を続行できます。GRUBが表示されるはずです!はい、結局のところ、それほどSecure Bootではありませんでした…

p3ng0sでのこの技術の使用

p3ng0sでこれを使用したい場合は、archliveをクローンする際に、git checkoutでV2ブランチに切り替え、ビルドコマンドを実行する前に、ShimとMOKマネージャーをoverlay/airootfs/etc/p3ng0s/shimフォルダに配置する必要があります!Live ISO.pdfファイルを更新しました。このファイルには、Secure Bootの手順を含めてOSをビルドする方法が記載されています。V2を完全に公開し、公式ドキュメントを更新する前に、こちらで見つけることができます。


このちょっとしたブログ記事を楽しんでいただけたなら幸いです!ロックピッキングも少し取り上げることを考えています。サイド/下にあるリンクから私の素晴らしいグッズをRedbubbleで購入することで、ブログをサポートできます。すべて自作なので、ぜひ共有してください。私にはPRチームがいません。GitHub/LinkedIn/Twitterでのフォローも歓迎しますし、ブログのホームページから直接RSSフィードを使用することもできます。他のp3ng0sの記事もご覧ください。非常に良いものです。また、Hell's Gateに触発されて作成したEDRバイパス技術であるNTDLL-Reconstructionについても読むことができます。フィードバックがあれば、LinkedInで直接メッセージを送ってください。私のブログは有名ではないので、質問にはすべて答えています。