UEFI サブミッションのサブミッション事前テスト

1 はじめに

今回の記事では、UEFI モジュールを Microsoft UEFI CA の署名取得に提出する前に、テスト署名と検証を実施する方法を説明します。今回紹介するガイドラインに従って、Windows デベロッパー センターのハードウェア ダッシュボードを使って UEFI ドライバーまたはアプリを署名する前に、これらをテスト署名し、検証してください。これによって、UEFI ドライバーまたはアプリが署名可能かどうか、署名後も動作するかどうかを事前に判断できます。

Microsoft UEFI CA による署名に先立って QA を実施することで、サブミッションを何度も提出する必要がなくなり、Windows デベロッパー センターのハードウェア ダッシュボードによる署名の審査期間を短縮できます。

注: テスト署名済みの UEFI モジュールをダッシュボードに提出しないでください。署名済みモジュールが提出された場合は不合格になります。

2 UEFI モジュールをテスト署名および検証する

Microsoft UEFI CA による署名の前に、以下の手順に従って UEFI 製品をテストしてください。

1.独自の証明書 (またはテスト証明書) で製品に署名します。
2.この証明書をセキュア ブート データベースに追加します。

3 Windows HCK を使って UEFI モジュールをテスト署名および検証する

Windows を実行するデバイス上で Windows HCK を使用するには、以下の手順に従ってください。

1. テスト システムを準備します。

2. UEFI モジュールにテスト署名します。

3. "Lost" テスト証明書をセキュア ブート許可データベースにインストールします。

4. テスト署名済みの UEFI モジュールが正常に読み込まれ、実行されることを検証します。

3.1 テスト システムを準備する

"Lost CA" を含むテスト証明書を UEFI セキュア ブート システムにインストールして、テスト署名済みの UEFI モジュールをテストするためのシステムを準備する必要があります。以下の手順に従ってください。

1. UEFI セキュア ブートに対応したテスト用システムを入手します。ファームウェアが UEFI 2.3.1 Errata C 以上に準拠している必要があります。

2. BIOS 構成でセキュア ブート カスタム モードを有効化し、セキュア ブート キーおよび証明書をすべて消去します。ファームウェアによっては、オプションの ROM など特定のイメージ パスの認証を無視するものがあります。これらのイメージ パスをテストする場合は、再度有効化が必要になります。

3. UefiSecureBootManualTests.zip を USB ドライブに解凍します (このファイルは、本ブログ記事より入手できます)。既に Windows HCK がインストールされている場合、このファイルは C:\Program Files (x86)\Windows Kits \8.0\Hardware Certification Kit\Tests\amd64\secureboot\UefiSecureBootManualTests.zip にあります。

4. テスト システムで Windows を起動し、管理者権限で Powershell を起動して、Set-ExecutionPolicy Bypass –forceを実行します。

5. ManualTests\tests\00-EnableSecureBoot\EnableSecureBoot.ps1 を実行してシステムを再起動します。これによって、テスト KEK を使用したセキュア ブートが可能になります。この KEK は、"Lost" テスト キーをデータベースにインストールするために後で使用されます。

3.2 UEFI モジュールにテスト署名する

Lost 証明書チェーンを使用して UEFI モジュールに署名するには、ManualTests\generate\TestCerts\Lost\signApps.bat の例に従ってください。

  • Lost 証明書を使用して署名するには、システム クロックを 2012 年 1 月 1 日に戻す必要があります (C:\WINDOWS\system32>date 1-1-12)。
  • Lost*.cer の証明書ストアへのインポートが必要になる場合があります。これを実行するには、エクスプローラーで ManualTests\generate\TestCerts\Lost\ に移動して各 .cer ファイルを右クリックし、[インストール] をクリックします。
  • signtool.exe を入手します (signtool.exe は Windows SDK に含まれています)。
  • signtool.exe sign /fd sha256 /a /f "ManualTests\generate\TestCerts\Lost\Lost.pfx" <your_module.efi> を実行します。

署名する際は、Windows 8 または Windows 8.1 が実行されているコンピューターの使用を推奨します。Windows Vista 以前の Windows オペレーティング システムを実行するシステムの場合、signtool.exe がインストールされている SDK ディレクトリから signtool.exe を実行する必要があります。また、signtool.exe が使用する、同じディレクトリにあるマニフェストと DLL によっては、/fd オプションが正常に機能しない場合があります。

セキュア ブートが有効化されていることを確認する: 前述の「テスト システムを準備する」の手順が完了すると、セキュア ブートが有効になっているはずです。ただし Lost キーはこの時点でデータベースにインストールされておらず、テスト署名済みの UEFI ドライバーまたはアプリを読み込もうとすると、このドライバーまたはアプリの実行はブロックされます。その際、BIOS システムによっては警告メッセージを表示するものがありますが、それ以外では警告が表示されずに失敗します。実行がブロックされた場合は、モジュールの読み込みパス上でセキュア ブートが有効化されています。テスト署名済みの UEFI が実行された場合は、セキュア ブートが正常に有効化されていません。

3.3 Lost テスト証明書をセキュア ブート許可データベースにインストールする

管理者権限で PowerShell を起動して、以下のコマンドを実行します。

ManualTests\tests\01-AllowNewCertificate\append_LostCA_db.ps1

 

これによって "Lost" テスト証明書チェーンが許可データベースに追加されます。システムが正常に構成されているかどうかを検証するには、HCK で UEFI シェル経由で UEFI テスト モジュールを実行します。たとえば ManualTests\apps\<ARCH>\pressanykey1.efi の場合、正常に構成されていれば、テストの名前が表示され、キーボードの任意のキーを押すよう求めるメッセージが表示されます。

3.4 テスト署名済みの UEFI モジュールが正常に読み込まれ、実行されることを検証する

テスト証明書を信頼するセキュア ブート システムが構成され、テスト対象の UEFI モジュールがテスト証明書によって署名されることを確認したら、テストを始めるための準備は完了です。UEFI モジュールをインストールし、再起動して、モジュールが正常に読み込まれ、実行されるかどうか確認します。ハードウェア用の UEFI ドライバーをテストする場合は、これらをオプションの ROM にインストールするか、DRIVER#### UEFI 変数を使用します。

4 その他のツールを使用する

その他の役に立つリンクを以下に紹介します。

Sourceforge - SecurityPkg

Signing UEFI Applications and Drivers for UEFI Secure Boot

BIOS 内のセキュア ブートを消去した後に、Linux を起動するか (Linux ツールを実行する場合)、shim および MokManager UI を使用する (これにより、システムが SetupMode の場合にデータベース設定が可能になります) 必要がある点にご注意ください。

UefiSecureBootManualTests.zip