この文書では、セキュア ブートと、そのLinux(特にRHEL7)への拡張方法について説明します。また、Linuxの「トラステッド カーネル ブート」についての洞察を提供し、ユーザー スペース アプリケーションにも影響を与えます。
セキュア ブートは、ルート キットがオプションROMやMBRなどのメカニズムを使用して起動時にメモリーにインストールされ、OSにロードされることを防止するように設計されています。また、ルート キットがシステム制御を乗っ取り、マルウェア対策プログラムから見つかりにくい場所に潜伏することがないよう設計されています。 この問題は時間の経過とともに増加しているため、データの損失や破損、盗難を防止する点で、重要な役割を果たすようになりました。マルウェアは、BIOSとOSローダーの間に侵入する可能性があります。OSローダーとOSの間にも侵入する可能性があります。
UEFIは、最新のサーバー プラットフォーム向けのハードウェア/ソフトウェア インターフェイスの新しい標準です。UIFIでデバイス ドライバーを開発するためにIHV向けの豊富なUI、モジュール性、標準インターフェイスを備えており、開発されたデバイス ドライバーは従来のBIOS環境よりも柔軟性の高いプリブート環境でシームレスに動作します。各種のオペレーティング システムとプラットフォームにまたがるUEFIの導入は増え続けており、主要なクライアントおよびサーバーOSバージョンの多くでサポートされています。
Microsoftの主導により、UEFI標準の本文では、起動時にマルウェア ルートキットがインストールされることを防止する方法が特定されています。この方法では、変更がされておらず、プラットフォームで既知のバイナリーをロードおよび実行するメカニズムが使用されます。このメカニズムはセキュア ブートと呼ばれます。Microsoftの情報については、『Microsoft way of Secure boot』を参照してください。同様に、さまざまなOSベンダーがセキュア ブートを実現するためにさまざまな方法を採用しています。
セキュリティ保護されたUEFIプラットフォームでは、オプションのROMドライバー、ブート ローダー、OSローダーなど、変更されておらず、プラットフォームによって信頼されているソフトウェア ドライバーのみをロードします。 UEFI仕様では、セキュア ブートのメカニズムについて詳しく説明しています。
UEFI仕様では、セキュア ブートに必要なインフラストラクチャが定義されています。セキュア ブートで使用される用語について簡単に紹介します。これらは、より詳細に理解したいと考えているお客様に役立ちます。
セキュア ブートでは、実行中のシステムとそのデータは保護されません。起動プロセスで認証されていないコンポーネントがある場合、潜伏しているマルウェアをシステムが実行しないようにするために、セキュア ブートはOSの起動を停止します。
以下のキー ワードは、セキュア ブートの基本となるものです。これらのキー ワードの詳細については、『UEFI Specification』を参照してください。これらの仕様では、バイナリーに署名する方法について詳しく説明しています。特にセクション28を参照してください。
認証済みの変数:UEFIは認証済みの変数と呼ばれるサービスを提供します。これは、認定済みモジュールまたは認証済みコード モジュールのみが書き込み可能、すなわち、キー証明書を持つコード モジュールのみが書き込むことができることを意味します。ただし、これらの変数は任意の関係者が読み取ることができます。
プラットフォーム キー(PK):プラットフォーム キーは、プラットフォームの所有者と、プラットフォームの製造元によってNVMにインストールされているファームウェアの間の信頼関係を確立します。
KEK:キー交換キーは、オペレーティング システムとプラットフォーム ファームウェアの間の信頼関係を確立します。KEKは、プラットフォーム ファームウェアと通信しようとするOSおよび/またはサード パーティーのコンポーネントによってプラットフォームにインストールされます。
DB:プラットフォーム ファームウェアとのやり取りが許可されているコード モジュールの公開キーと証明書を保持する権限のあるデータベース。
DBX:ブラック リストに登録されているDB。これらの証明書に一致するコード モジュールは、ロードの開始を許可されません。
署名:署名は、署名されるバイナリーのプライベート キーとハッシュによって生成されます。
証明書:イメージの署名に使用されているプライベート キーに対応する公開キーを含むAuthenticode証明書
UEFIプラットフォーム ファームウェアは、証明機関(CA)によって署名されたサード パーティー製ドライバー、optionROMS、およびOSローダー(この場合はMicrosoft)をロードします。任意のハードウェア ベンダーが、UEFI BIOSでドライバーを記述し、Microsoftにより署名されてUEFIプラットフォーム上で動作するようにできます。 OEMは、プラットフォームDBにキーの公開部分をインストールし、UEFIローダー プロトコル サービスは、認証されたDBに対してバイナリーの署名を検証してから、プラットフォームでの実行を許可します。この認証チェーンは、UEFIからOSローダーおよびOSまで続きます。
要約すると、UEFIは署名済みで、そのキーがDBに存在するOSローダーの実行を許可します。このキー メカニズムを使用すると、OSローダーまたはオプションROMが認証されていて、任意の関係者によって変更されていない場合にのみ、実行できるようになります。
図1:UEFIプラットフォーム ファームウェア