UEFI で OS 起動前の環境を保護する

Microsoft が行ったセキュア ブート実装の方法についていくつかコメントがありましたが、残念ながら想定とは異なるシナリオを扱ったものだったので、この投稿を利用して、UEFI が可能にする安全なブートと、PC 製造元が利用できるオプションについてもう少しご説明したいと思います。最もご理解いただきたいのは、私たちが導入しようとしている機能が、妥協のないセキュリティを求めるユーザーに対してその提供を可能にするものであること、そして同時に、PC は引き続き完全に制御可能であり続けるという点です。この記事は、エコシステム担当チームの Tony Mangefeste が執筆しました。--Steven

要点のまとめ

  • UEFI ではファームウェアがセキュリティ ポリシーを設定することができる
  • セキュア ブートは UEFI のプロトコルであって Windows 8 の機能ではない
  • UEFI セキュア ブートは Windows 8 のセキュア ブート アーキテクチャの一部である
  • Windows 8 は OS 起動前の環境の安全性を確保するためにセキュア ブートを活用する
  • セキュア ブートはオペレーティング システムのローダーを "締め出す" ものではなく、ファームウェアによるコンポーネントの信頼性の検証を許可するポリシーである
  • OEM は、使用するプラットフォームにおける証明書およびポリシーの管理のレベルをカスタマイズすることにより、ユーザーのニーズに応じてファームウェアをカスタマイズすることができる
  • PC のファームウェアにおける、Windows 以外のオペレーティング システムからのセキュア ブートを制御または有効化する設定を、Microsoft が指示または左右することはない

全体像: 妥協のないセキュリティ

UEFI のセキュア ブート プロトコルは、プラットフォームおよびファームウェアのセキュリティに対する、アーキテクチャ面で中立的なアプローチの基礎となっています。ファームウェアの実行を許可する前にファームウェア イメージの検証を行う公開キー基盤 (PKI) プロセスにより、セキュア ブートはブート ローダー攻撃のリスク低減に貢献します。Windows 8 では、このプロトコルによってユーザーに提供するプラットフォーム セキュリティの向上を図っています。

Windows 8 のプラットフォーム整合性アーキテクチャを示す図: 1. セキュア ブートによって未知の OS ローダーの実行が阻止される。2. カーネルがまず Early Launch Anti-Malware (ELAM) ドライバーを起動し、これらのドライバーがサードパーティのドライバーやアプリに対するポリシー適用を行う。3. ブート中に、システム開始時のステータスの計測結果が TPM に記録されている。4. マルウェア対策ソフトウェアは TPM の計測記録を外部の検証サービスに提出することによってクライアントの正常性を保証することができる。
図 1 – プラットフォーム整合性アーキテクチャ

Microsoft では、パートナー企業と協力して、セキュア ブートによってユーザーに優れたセキュリティを提供できるよう作業を進めています。セキュリティ証明書をだれが管理するか、どのようにしてユーザーがこれらの証明書のインポートと管理を行い、セキュア ブートを管理できるようにするかという点で柔軟性を確保できるよう、OEM をサポートしています。システムの管理方法をユーザーが決められるようにするこの柔軟性は、重要な点だと考えています。

Windows ユーザーに対しては、Windows 認定プログラムを使用して、Windows 8 をプレインストールされたシステムでは既定でセキュア ブートが有効になっていること、セキュア ブートへのプログラム的な制御をファームウェアが許可しないこと (マルウェアがファームウェアのセキュリティ ポリシーを無効化するのを防ぐため)、そしてシステムの整合性を損なう可能性のある許可のないファームウェアの更新を OEM が防ぐことを徹底します。

これらのポリシーの多くは UEFI で新しく導入されるわけではなく、現在も多くの PC でなんらかの形のファームウェア検証が行われています。BIOS パスワードのような既存のレガシー サポートでさえ一種のセキュア ブートであり、何年もの間 OEM とエンド ユーザーの制御下に置かれていました。しかし、セキュア ブートと UEFI の導入により、業界と Microsoft は協力して基準を引き上げ、システムの整合性と正常性を改善すると共に、危険性を増している一連の脅威に対抗して、より強力なレベルの保護をユーザーに提供しようとしています。

UEFI とは

UEFI (Unified Extensible Firmware Interface) は、チップセット、ハードウェア、システム、ファームウェア、およびオペレーティング システムの各ベンダーの集合体である UEFI Forum によって管理されています。UEFI Forum は多くの UEFI PC に共通して使用される仕様、テスト ツール、リファレンス実装などを管理する団体で、Microsoft はこの団体の主幹事企業の一つです。また、この団体には個人または企業が無料で自由に参加することができます。

UEFI では PC のための次世代ファームウェア インターフェイスを策定しています。当初はアセンブリ言語で書かれ、入出力にソフトウェア割り込みを利用していた BIOS (基本入出力システム) ファームウェアは、登場以来 PC のエコシステムを定義付けてきましたが、コンピューティングを取り巻く状況の変化により、次の世代のタブレットやデバイスの先がけとなるような "近代的" ファームウェアの策定が求められています。

UEFI の趣旨は、ブート プロセス中にオペレーティング システムがプラットフォーム ファームウェアとやり取りするための、標準化された方法を定義することにあります。UEFI の登場以前、ブート プロセス中にハードウェアとやり取りを行う主なメカニズムは、ソフトウェア割り込みでした。近代的な PC では、ハードウェアとソフトウェアの間でもっと高速で効率的なブロック I/O が可能になっており、UEFI ではこういった PC のハードウェア性能を完全に引き出す設計が可能となります。

UEFI ではモジュール式のファームウェア設計が可能で、これによってハードウェアおよびソフトウェアの設計者は、近代的なコンピューティング環境の厳しい要求に適した、柔軟なファームウェアの設計を行うことができます。従来は I/O がソフトウェア割り込みという枠に制限されていましたが、UEFI ではイベント ベースの、アーキテクチャ的に中立なコーディング標準を推進することができます。

セキュア ブートとは

UEFI には、セキュア ブートと呼ばれるファームウェア検証プロセスがあり、これは UEFI 2.3.1 仕様の第 27 節で定義されています。セキュア ブートは、セキュリティ証明書、ファームウェアの検証、およびファームウェアとオペレーティング システムとの間のインターフェイス (プロトコル) を、プラットフォーム ファームウェアが管理する方法を規定するものです。

Microsoft のプラットフォーム整合性アーキテクチャは、UEFI のセキュア ブートとファームウェアに格納された証明書を使用して、プラットフォーム ファームウェアで信頼のルートを作成するものです。マルウェアによるエクスプロイトの進化の中で増加しているのが、攻撃ルートとしてブート パスを標的にするパターンです。この種類の攻撃では、悪意のあるソフトウェアによりマルウェア対策製品のロードそのものが妨害されてしまい、起動できないため、防御が非常に困難でした。Windows 8 では、セキュア ブート アーキテクチャと信頼のルートの確立により、オペレーティング システムの起動前には、安全であることが証明された署名済みのコードとブート ローダーしか実行できないようになり、ユーザーはブート パスにおける悪意のあるコードの実行から保護されます。

今日の多くの PC の OS 起動前の環境は、ブート ローダー ハンドオフを悪意を持つ可能性のあるローダーへとリダイレクトする攻撃に対して脆弱です。こういったローダーは、オペレーティング システムのセキュリティ対策やマルウェア対策ソフトウェアから検知することができません。

既存のブート プロセス: BIOS > 任意の OS ローダー コード > OS 起動
図 2 - 従来の BIOS ブート パス

Windows 8 では UEFI のセキュア ブートによってこの脆弱性に対処し、ファームウェア内に存在するポリシーと証明書を使用して、適切に署名および認証されたコンポーネント以外は実行が許可されないようにすることができます。

Windows 8 のセキュア ブート: ネイティブ UEFI 2.3.1 > 検証済み OS ローダーのみ > OS 起動
図 3 - UEFI によるセキュアなブート パス

セキュア ブートは、Windows 8 におけるプラットフォーム整合性への取り組みの一部でしかありません。UEFI 以外にも、利用可能なハードウェアに対する全体的なアプローチにより、プラットフォームのセキュリティ向上に向けた努力が行われています。

背景: セキュア ブートのしくみ

PC の電源を入れると、オペレーティング システム実行を準備するため、プロセッサ、メモリ、および周辺機器の構成を行うコードの実行が開始されます。このプロセスは、基盤となる「シリコン」部分のアーキテクチャ (x86、ARM 等) を問わず、すべてのプラットフォームで共通です。

システムの電源が入ってから間もなく、OS ローダーへのハンドオフが行われるよりも前に、ネットワーク カード、記憶装置、ビデオ カードなどの周辺機器上にあるファームウェア コードを、システムのファームウェアがチェックします。このデバイス コードはオプション ROM と呼ばれ、周辺機器がオペレーティング システムにハンドオフ可能な状態になっていることを確認して、構成のプロセスを続行します。

ブート プロセスのこの段階で、ファームウェアは、ファームウェア モジュール内に埋め込まれている署名をチェックします。これはアプリケーションの場合とよく似ています。署名がファームウェア内の署名のデータベースと一致すれば、そのモジュールの起動が許可されます。署名はファームウェア内のデータベースに格納されていますが、データベースは "許可" リストと "不許可" リストの 2 つがあり、これによってブート プロセスを続行してよいかどうかが判断されます。

KEK およびプラットフォーム キー証明書によって制御される許可リストと不許可リスト (マルウェア ハッシュのリスト) を示した図
図 4 - 証明書のセキュリティ データベース

この図は、セキュア ブートを組み込んだシステムにおける署名とキーの階層構造を示したものです。プラットフォームのセキュリティ確保は、OEM が製造段階でファームウェアにインストールするプラットフォーム キーを通じて行われます。これは、UEFI か従来の BIOS かを問わず、今日の多くのシステムの出荷プロセスで採用されている手法です (ファームウェア更新ユーティリティなどのアプリケーションは、ファームウェア イメージの保護にプラットフォーム キーを使用します)。ファームウェア実行の許可/不許可を決定するキーの格納先データベースへのアクセス保護には、セキュア ブートは他のキーを使用します。

"許可" データベースには信頼済みのファームウェア コンポーネントを表すキーが格納されますが、さらに重要であるのは、信頼済みのオペレーティング システムのローダーを表すキーが格納されていることです。別のデータベースには、マルウェアおよびファームウェアのハッシュが格納されており、マルウェア コンポーネントの実行をブロックします。これらのポリシーの強度は、Authenticode および公開キー基盤 (PKI) を使ったファームウェアへの署名に基づきます。PKI は、情報の交換において信頼を確立する証明書を作成、管理、および取り消しする方法として、既に普及しているプロセスです。PKI はセキュア ブートのセキュリティ モデルの中核を担っています。

セキュア ブートに必要なもの

セキュア ブートには、UEFI 2.3.1 またはそれ以上を満たすファームウェアが必要です。UEFI Forum が承認した最新の改訂では第 27 節のポリシーが更新され、時刻認証の変数、より強力な暗号化キー、および証明書の格納方法の詳細の追加により、既存のセキュア ブート プロトコルが改善されています。

この機能は、PC を購入したユーザーにとっては透過的なものとなりますが、提供されるシステムでは、上でご説明したような、オペレーティング システムそのものが読み込まれる前の段階の脆弱性を標的とする、ブートキットおよびルートキット攻撃への対策が強化されています。

制御権を持つのは

最終的には、PC の制御権は所有者であるユーザーにあります。まずユーザーに最良のエクスペリエンスを提供し、それからユーザー自身に決定をしてもらうのが、Microsoft の哲学です。この柔軟性をユーザーに提供するため、私たちは OEM のエコシステムと協力して作業を進めていきます。UEFI がセキュア ブートで実現するセキュリティにより、大多数のユーザーに対してはブートローダー攻撃からの保護が提供されます。一方で従来型のオペレーティング システムを利用したいと考える上級者は、そのためのオプションを利用することができます。

この制御性は、//BUILD/ 参加者に提供された、Windows 8 Developer Preview をインストール済みの Samsung 製タブレットで確認することができます。下のスクリーンショットでご覧いただけるように、ファームウェアはセキュア ブートを無効化できる設計になっています。ただし無効化にはリスクも伴います。OEM はこのサポートをどのように提供するかを自由に選ぶことができ、上でご説明したパラメーターをさらにカスタマイズしてユーザーに独自の価値提案をすることもできます。Windows としては、一般ユーザーであるか企業ユーザーであるかを問わず、多くの人にとって有効と思われるシナリオに対する OS 側からの強力なサポートを提供しているだけということになります。

TPM 構成オプションを表示したコンソールの画像: 仮想化 [有効]、CSM サポート [無効]、セキュア ブートの試行 [有効]、リビジョン情報を表示する - Intel UEFI...
図 5 - Samsung 製 PC のセキュア ブート設定

Tony Mangefeste
エコシステム担当チーム