wolfBootを使用したMeasured Boot
wolfBootはTrusted Platform Module(TPM)を使用してシステムブートプロセスの状態を記録し追跡する方法として、簡略化されたMeasured Bootの実装を提供しています。
この記録は、Platform Configuration Register(PCR)と呼ばれるTPM内の特別なレジスタによって改ざん防止しています。 その後、ファームウェアアプリケーション、RTOS、リッチOS(Linux)はTPMのPCRを読み取ることで、その情報のログにアクセスできます。
wolfBootはwolfTPMと統合可能であるおかげで、TPM2.0チップと連携できます。 wolfTPMはMicrosoft WindowsとLinuxをネイティブにサポートしており、スタンドアロンまたはwolfBootと併せて使用できます。 wolfBootとwolfTPMの組み合わせにより、開発者はブート中およびブート後のシステム保護のための改ざん防止セキュアストレージを得ることができます。
コンセプト
一般的に、システムはセキュアブートを使用して署名を検証することで、正しく本物のファームウェアがブートされることを保証します。 しかし、そのあとはシステム側でその情報を把握することはできません。 つまり、アプリケーションはシステムが既知の良好な状態で起動したかどうかを知りません。 場合によっては、この保証がファームウェア自体に必要です。 そのようなメカニズムを提供するために、Measured Bootの概念が存在します。
Measured Bootは、設定やユーザー情報(ユーザーパーティション)を含む、あらゆるスタートアップコンポーネントをチェックするために使用できます。 チェックの結果は、PCRと呼ばれる特別なレジスタに保存されます。 このプロセスはPCR拡張と呼ばれ、TPM測定として参照されます。 PCRレジスタはTPM電源投入時にのみリセットできます。
TPM測定があることで、WindowsやLinuxなどのファームウェアまたはオペレーティングシステム(OS)は、システム制御を獲得する前にロードされたソフトウェアが信頼でき、変更されていないことを知ることができます。
wolfBootでは、この概念は単一のコンポーネント、つまり主要なファームウェアイメージを測定することに簡略化しています。 ただし、これは簡単に複数のPCRレジスタを使用して拡張できます。
設定
Measured Bootを有効にするには、wolfBootの設定にMEASURED_BOOT=1
を追加します。
また、測定が保存されるPCR(インデックス)を選択する必要があります。
選択はMEASURED_BOOT_PCR_A=[index]
設定を使用して行われます。
この設定をwolfBootの設定に追加し、[index]
を0から23までの数字に置き換えてください。
以下に、PCRインデックスを選択するためのガイドラインを示します。
すべてのTPMには最低24のPCRレジスタがあります。 それらの一般的な使用法は以下の通りです。
インデックス | 一般的な使用法 | 推奨される使用対象 |
---|---|---|
0 | コアRoot of Trust および/または BIOS測定 | ベアメタル、RTOS |
1 | プラットフォーム構成データの測定 | ベアメタル、RTOS |
2-3 | オプションROMコードの測定 | ベアメタル、RTOS |
4-5 | マスターブートレコードの測定 | ベアメタル、RTOS |
6 | 状態遷移 | ベアメタル、RTOS |
7 | ベンダー固有 | ベアメタル、RTOS |
8-9 | パーティション測定 | ベアメタル、RTOS |
10 | ブートマネージャーの測定 | ベアメタル、RTOS |
11 | 一般的にMicrosoft Bitlockerによって使用される | ベアメタル、RTOS |
12-15 | 任意の用途に利用可能 | ベアメタル、RTOS、Linux、Windows |
16 | デバッグ | テスト目的でのみ使用 |
17 | DRTM | 信頼されたブートローダー |
18-22 | 信頼されたOS | 信頼された実行環境(TEE) |
23 | アプリケーション | 一時的な測定にのみ使用 |
PCRインデックスを選択するための推奨事項:
- 開発中は、テスト目的のためのPCR16を使用することをお勧めします。
- 本番環境では、ベアメタルファームウェアまたはRTOSを実行している場合、DRTM信頼されたOS(PCR17-23)を除くほとんどすべてのPCR(PCR0-15)を使用できます。
- LinuxまたはWindowsを実行している場合、Linux IMAやMicrosoft Bitlockerなど、Linux内からPCRを使用している他のソフトウェアとの競合を避けるために、本番環境対応のファームウェアにはPCR12-15を選択できます。
以下は開発中のwolfBoot .config
の一部の例です。
MEASURED_BOOT?=1
MEASURED_PCR_A?=16
コード
wolfBootは、すぐに使える解決策を提供します。
Measured Bootを使用するためにwolfBootコードを変更する必要は全くありません。
コードをチェックしたい場合は、src/image.c
、特にmeasure_boot()
関数をご参照ください。
そこには、wolfTPMへのいくつかのTPM2ネイティブAPIコールが見つかります。
wolfTPMについての詳細情報は、GitHubリポジトリに掲載しています。