Secure Bootとは?――コンピューターの起動と「信頼の連鎖」

本記事は、世間で騒がれた「Secure Boot」について調べた内容を、筆者が高校時代に授業で習った事や、就職してからの経験した事を踏まえて出来るだけ分かりやすく書いた(つもりの)文章です。

まずは「Secure Boot」そのものについてのご説明をさせていただき、続く別記事にてUSiZEで行っている「Secure Boot」の対応についてご説明させていただこうと考えております。

■Secure Bootとは?

Secure Bootとは、パソコンやサーバーの起動時に、動かそうとしているプログラムが「信頼できる正規のものか」を確認する仕組みです。

パソコンの電源を入れると、いきなりWindowsが動き出すわけではありません。最初に、Windowsを起動するための小さなプログラムが実行されます。

Secure Bootは、そのプログラムに付けられた「電子署名」を確認します。

〇 正規の署名があり、使用を許可されている → 実行を許可する
× 署名がない、信頼できない、または使用を禁止されている → 実行を拒否する

社員証を確認し、登録された社員なら中へ通します。社員証がなかったり、使用禁止になった社員証だったりすれば、中へは通しません。

Secure Bootも同じように、あらかじめ登録された証明書や署名情報を使って、起動プログラムを確認しています。

■なぜSecure Bootが必要なのか?

Windowsが起動する前に不正なプログラムが動き始めると、Windowsやウイルス対策ソフトから発見するのが難しくなります。

それどころか、不正なプログラムがWindowsよりも先に動作することで、自分自身を隠したり、Windowsやウイルス対策ソフトの動作を妨害したりする可能性もあります。

Secure Bootは、このように起動時に入り込む「ブートキット」などのマルウェアを防ぐための仕組みです。

ただし、Secure Bootですべてのウイルスや不正アクセスを防げるわけではありません。Secure Bootが守っているのは、主に「Windowsが起動するまでの過程」です。

Windowsの起動後に侵入するマルウェアなどについては、Windows Update、ウイルス対策ソフト、EDR、ファイアウォールなど、別の対策が必要です。

■コンピューターはどのように起動するのか?

現在の多くのコンピューターは、「ノイマン型」と呼ばれる基本構造を採用しています。

ノイマン型コンピューターの特徴の一つが「プログラム内蔵方式」です。実行するプログラムをメモリへ読み込み、CPUがそこに書かれた命令を順番に実行します。

しかし、電源を入れた直後のメモリには、WindowsなどのOSはまだ読み込まれていません。

そこで、パソコンには電源投入直後に動作する最初のプログラムとして、BIOSやUEFIと呼ばれるファームウェアがあらかじめ組み込まれています。

BIOSやUEFIがOSの起動プログラムをメモリへ読み込み、その起動プログラムがさらに次のプログラムを読み込むことで、最終的にOSが起動します。

このように、小さなプログラムが次のプログラムを順番に読み込み、コンピューター全体を起動していく仕組みを「ブートストラップ」と呼びます。

ただし、次に読み込むプログラムが改ざんされていた場合、そのまま実行すると、OSよりも先に不正なプログラムが動き始めてしまいます。

このようなプログラムを段階的に読み込む仕組みでは、最初の段階で不正なプログラムが入り込むと、それ以降の処理も信頼できなくなります。そこで必要になるのがSecure Bootです。

■従来のBIOSによる起動

従来のPCには、「BIOS」と呼ばれるファームウェアが搭載されていました。

BIOSを使用したPCでは、概ね次の順番でOSを起動していました。

ブートセクタ内のプログラムが改ざんされていても、従来のBIOSには、それが正規のプログラムかどうかを電子署名で確認する仕組みがありませんでした。

そのため、改ざんされたブートセクタのプログラムが、OSよりも先に実行される可能性がありました。かつて「ブートセクタウイルス」と呼ばれるマルウェアが存在したのも、この仕組みを悪用できたためです。

■コンピューターウイルスとの攻防

1980年代から1990年代初めには、現在とは少し趣の異なるコンピューターウイルスが存在しました。

例えば、MS-DOS上で感染を広げた「Cascade(カスケード)」は、感染した実行ファイルを起動すると、画面上の文字が上から崩れ落ち、画面の下へ積み重なっていくという特徴的な動作をしました。


※Cascadeに感染し、画面上の文字が崩れ落ちる様子を表現したイメージ画像です。実際の感染画面を撮影したものではありません。

筆者自身も、MS-DOSを使用していた当時、実際にCascadeへ感染した経験があります(感染源は先輩でした)。パソコン(98Note NS/E)から駆除したあとも、感染したフロッピーディスクは外部へ持ち出さないよう隔離して保管していました。「Cascade飼ってんねん」と周囲に話しては、白い目で見られていましたが……。

見た目にはいたずらのようなウイルスでしたが、実際には実行ファイルへ自分自身のコードを書き込んで感染を広げ、さらに自身のコードを暗号化して発見されにくくする機能も持っていました。

Cascadeそのものは、実行ファイルへ感染する「ファイル感染型」のウイルスです。一方、同じ時代には、フロッピーディスクのブートセクタへ感染し、OSよりも先に実行される「ブートセクタウイルス」も存在しました。

このように、コンピューターの機能が増えると、それを悪用する方法も現れます。そして新しい脅威が登場するたびに、ウイルス対策ソフト、OSのアクセス制御、電子署名、ハードウェア側の保護機能など、セキュリティ技術も発展してきました。

しかし、OSよりも先に不正なプログラムが動き始めると、OS上で動作するウイルス対策ソフトだけでは対処が難しくなります。

そこで現在では、起動プログラムを実行する前に電子署名を確認するSecure Bootが利用されています。

■現在のUEFIによる起動

現在の多くのPCでは、従来のBIOSに代わって「UEFI」が使われています。

UEFI方式では、通常、ディスク先頭のブートセクタに置かれた小さなプログラムを起点としてOSを起動するのではありません。

ディスク上に「EFIシステムパーティション」という専用領域があり、その中に通常のファイルとして起動プログラムが置かれています。

Windowsの場合、代表的な起動プログラムは「bootmgfw.efi」というWindows Boot Managerです。

UEFIを使用したWindows PCでは、概ね次の順番で起動します。

■Secure Bootが働く場所

Secure Bootを有効にすると、UEFIファームウェアはWindows Boot Managerを読み込んだあと、すぐには実行しません。

まず、Windows Boot Managerに付けられた電子署名を確認します。

従来のBIOSと、UEFI+Secure Bootの違いを整理すると、次のようになります。

比較する項目 従来のBIOS UEFI + Secure Boot
最初に読み込む起動プログラム ディスク先頭のブートセクタ EFIシステムパーティション内のEFIファイル
読み込み後の処理 署名検証機構はない 実行前に電子署名を確認
改ざんされていた場合 改ざんされたプログラムでも実行する可能性がある 信頼できないプログラムとして実行を拒否

簡単にいえば、従来のBIOSが「所定の形式で読み込めたプログラムを、電子署名で検証せずに実行する」という考え方だったのに対し、UEFIのSecure Bootは「読み込めたうえで、身元を確認できたプログラムだけを実行する」という考え方です。

■一度確認して終わりではない

Secure Bootは、最初のプログラムだけを確認すれば、あとは何を実行してもよいという仕組みではありません。

最初に信頼できるプログラムを確認し、そのプログラムが次に実行するプログラムを確認することで、「信頼の連鎖」を作ります。

最初にUEFIファームウェアが Secure Boot の DB/DBX を参照して Windows Boot Manager の署名を検証。正規のWindows Boot Managerが次のローダーを検証します。さらにWindows側のコード整合性機能が、カーネルや起動時ドライバーを検証します。

それぞれが次に実行するプログラムの身元を確認することで、Windowsが起動するまでの処理全体をつなげて守っています。

Secure Bootそのものがすべての段階を直接検証しているというより、次のような構造です。

「UEFIが最初の信頼できるプログラムを選び、以降は信頼されたプログラムが次のプログラムを検証する」

■PK・KEK・DB・DBXはどこで使われるのか?

Secure Bootでは、PK、KEK、DB、DBXという情報によって、起動プログラムの信頼関係と、その情報を更新する権限を管理しています。

UEFIが起動プログラムを実行してよいか判断するとき、直接参照するのは主にDBとDBXです。

PK、KEK、DB、DBXの役割は次のとおりです。

項目 名称・意味 主な役割
DB Signature Database 実行を許可する証明書や署名情報などを保持する
DBX Forbidden Signature Database 実行を禁止する証明書、署名、プログラムのハッシュ値などを保持する
KEK Key Exchange Key DBやDBXなどを正規に更新するための認証に使用する
PK Platform Key KEKなど、Secure Boot設定の管理権限を支える最上位のキー

信頼関係の階層を簡単に表すと、次のようになります。

PKやKEKが、起動プログラムを一つずつ直接検査しているわけではありません。

実行可否の判定に直接関係するのは主にDBとDBXであり、PKとKEKは、その許可情報や禁止情報を誰が更新できるかという信頼関係を管理しています。

Microsoft社は、Secure Bootで使用されてきた2011年版証明書から、2023年版証明書への移行を進めています。
USiZEの一部のVMware仮想マシンでは、この移行に先立って、仮想UEFIへWindows OEM Devices PKを登録する作業が必要です。対象となる環境や作業内容については、別記事「USiZEにおけるSecure BootのPK更新について」で説明します。

■まとめ

Secure Bootは、Windowsが起動する前に起動プログラムの電子署名を確認し、不正なプログラムの実行を防ぐ仕組みです。

コンピューターは、小さなプログラムが次のプログラムを順番に読み込む「ブートストラップ」によって起動します。その最初の段階で不正なプログラムが実行されると、それ以降の処理も信頼できなくなるため、UEFIが最初の起動プログラムを実行する前に身元を確認します。

今回の証明書更新では、2011年版のSecure Boot証明書から2023年版証明書への移行が行われます。

 

■コラム:そもそも「ノイマン型」って何?

本文では、現在の多くのコンピューターが「ノイマン型」と呼ばれる基本構造を採用していると説明しました。では、そもそも「ノイマン」とは誰で、なぜ現在のコンピューターにその名前が残っているのでしょうか。最後に少し寄り道して、ENIACから現在のコンピューターへつながる歴史を紹介します。

「ノイマン型コンピューター」の名前になっているノイマンとは、ハンガリー出身の数学者ジョン・フォン・ノイマンのことです。

ノイマンは数学だけでなく、物理学、量子力学、経済学、ゲーム理論、気象学、核兵器開発、そしてコンピューターなど、非常に幅広い分野へ大きな影響を与えました。

幼い頃から驚異的な記憶力と計算能力を示した人物として知られ、しばしば「人類史上でも屈指の天才」と評されます。ただし、彼の超人的な暗算や記憶力に関する話には、同僚などによる回想や逸話として伝わっているものも多く、すべてを客観的に確認できるわけではありません。

その能力を象徴する有名な話として、ノイマンが6歳の頃、父親と8桁の数の割り算を暗算で行っていた、電話帳を数ページ眺めただけで内容を暗唱できた、といった逸話があります。

もっとも、コンピューターの歴史における彼の重要性は、単に計算が速かったことではありません。

ノイマンは、巨大な計算機を「どのような構造にすれば、さまざまな計算へ柔軟に利用できるのか」という考え方を整理し、世界へ広めた人物です。

■ENIACが抱えていた問題

1940年代、アメリカでは大砲の弾道計算などを高速化するため、ENIACという巨大な電子計算機が開発されていました。

ENIACは約18,000本の真空管を使用し、重量は約30トンに達した巨大な装置です。それまでの計算機と比較して非常に高速でしたが、初期のENIACには大きな問題がありました。

計算内容を変更するには、装置のパネル間をケーブルで接続し直したり、多数のスイッチを設定したりする必要があったのです。

現在のパソコンでいえば、新しいソフトウェアを実行するたびに、パソコンの内部配線を変更するようなものです。

つまり、ENIACは電子的に高速な計算ができましたが、異なる計算へ切り替える作業には大変な手間がかかりました。

■プログラムもメモリへ入れてしまう

ENIACの開発中、後継機としてEDVACという新しいコンピューターが計画されました。

ノイマンはENIAC開発チームとの議論に参加し、1945年に、その考え方を次の報告書としてまとめました。

『First Draft of a Report on the EDVAC』
(EDVACに関する報告書の第一草稿)

この報告書で示された重要な考え方が、計算に使用するデータだけでなく、コンピューターへ実行させる命令、つまりプログラムもメモリへ格納するという方式です。

CPUはメモリから命令を読み出し、原則として順番に実行します。分岐命令があれば別の場所へ移動し、同じ処理を繰り返したり、条件によって異なる処理を選んだりします。

これが「プログラム内蔵方式」です。

プログラムを交換するために機械の配線を変更するのではなく、メモリへ異なるプログラムを読み込めば、同じコンピューターで別の仕事ができるようになりました。

現在のパソコンが、文書作成ソフト、Webブラウザー、ゲームなどを、ソフトウェアの切り替えだけで実行できるのも、この考え方の延長線上にあります。

■ノイマン型コンピューターの基本構造

一般にノイマン型コンピューターは、次の要素によって構成されます。

構成要素 役割
入力装置 プログラムやデータを取り込む
記憶装置 プログラムとデータを保存する
制御装置 命令を読み出し、各装置の動作を制御する
演算装置 計算や論理演算を行う
出力装置 計算結果を外部へ出す

現在では、制御装置と演算装置をまとめてCPUと呼ぶのが一般的です。

ノイマン型の重要な特徴は、単に「命令を順番に実行する」ことだけではありません。

「プログラムとデータを、読み書き可能な同じ記憶装置へ格納し、CPUがそこから命令を取り出して実行する」

という点にあります。

■本当にノイマン一人の発明なのか?

ここには、少し複雑な歴史があります。

プログラム内蔵方式の考え方は、ノイマンが一人で突然思いついたものではありません。ENIACやEDVACを設計したJ・プレスパー・エッカート、ジョン・モークリーをはじめ、開発チーム内ですでに議論されていました。

ノイマンの報告書も、そうしたチーム内の議論やアイデアを基礎にしたものです。

ところが、配布された『EDVACに関する報告書の第一草稿』にはノイマンの名前だけが記載されていました。さらに、その報告書が広く読まれたため、そこで説明されたコンピューター構造が「ノイマン型」と呼ばれるようになりました。

したがって、

「ノイマンが現在のコンピューターを一人で発明した」

という説明は正確ではありません。

より正確には、

「ENIAC・EDVAC開発チームで生まれた考え方を、ノイマンが論理的なコンピューター構造として整理し、広く知られるきっかけを作った」

と考えるのがよいでしょう。

■EDVACからUNIVACへ

EDVACはプログラム内蔵方式を採用する後継機として開発されましたが、完成は1952年まで遅れました。

その間にも、EDVACの設計思想やノイマンの報告書に影響を受けたコンピューターが各地で開発されました。1948年にはイギリスのManchester Babyがプログラムを実行し、1949年にはEDSACが実用的な計算サービスを開始しています。

一方、ENIACを設計したエッカートとモークリーは会社を設立し、商用コンピューターの開発を進めました。

その成果が、1951年にアメリカ国勢調査局へ納入されたUNIVAC Iです。UNIVACは「UNIVersal Automatic Computer」の略で、アメリカで最初に商業販売されたコンピューターとして知られています。

流れを簡略化すると、次のようになります。

ENIAC
配線とスイッチを変更してプログラムを設定
↓
EDVACの構想
プログラムをメモリへ格納する方式を検討
↓
ノイマンが報告書として構造を整理
↓
各国でプログラム内蔵式コンピューターが開発
↓
UNIVACなどの商用コンピューターへ発展

ただし、UNIVACがEDVACそのものの完成版になったわけではありません。ENIAC、EDVACの開発経験や、エッカートとモークリーらの技術が、その後の商用コンピューターへつながったと捉える方が正確です。

■ノイマン型とSecure Bootの関係

ノイマン型コンピューターでは、メモリへ読み込んだプログラムをCPUが実行します。

ところが、電源を入れた直後のメモリには、まだOSも起動プログラムも読み込まれていません。

そこで、最初にBIOSやUEFIが動作し、ディスクから起動プログラムをメモリへ読み込みます。そのプログラムが次のプログラムを読み込み、最終的にWindowsを起動します。

この柔軟性は、現在のコンピューターを成立させている大きな利点です。

しかし、読み込まれたプログラムが正規のものか、改ざんされたものかをCPU自身が自動的に判断してくれるわけではありません。命令として与えられれば、不正なプログラムであっても実行できてしまいます。

そこでUEFIは、起動プログラムを実行する前に電子署名を確認します。

「プログラムをメモリへ読み込んで実行する」というコンピューターの基本構造に対し、「そのプログラムを本当に実行してよいのか」を確認する仕組みがSecure Bootです。

ノイマン型コンピューターがもたらした高い汎用性と、その汎用性を安全に利用するために発展したセキュリティ技術。その歴史の延長線上に、今回のSecure Boot証明書更新があります。

×
タイトルとURLをコピーしました