Share via


Windows 10 IoT Core でセキュア ブート、BitLocker、Device Guard を有効にする

Windows 10 IoT Core には、UEFI セキュア ブート、BitLocker によるデバイスの暗号化、Device Guard などのセキュリティ機能オファリングが含まれます。 これらにより、さまざまな種類の攻撃に対して回復力のある、完全にロックダウンされた Windows IoT デバイスをデバイス ビルダーで作成できます。 同時に、これらの機能には最適な保護機能も備わっており、不明なバイナリをロックアウトし、デバイスの暗号化を使用してユーザー データを保護する一方で、プラットフォームを定義された方法で起動できます。

ブート順序

IoT デバイス用のセキュリティで保護されたプラットフォームを提供する個々のコンポーネントを詳しく理解するには、その前に Windows 10 IoT Core デバイスでのブート順序について理解しておく必要があります。

IoT デバイスの電源がオンになってから、OS カーネルがインストールされているアプリケーションを読み込んで実行するまで、3 つの主要領域が実行されます。

  • プラットフォームのセキュア ブート
  • Unified Extensible Firmware Interface (UEFI) のセキュア ブート
  • Windows コード整合性

Boot Order

Windows 10 のブート プロセスについて詳しくは、こちらを参照してください。

IoT デバイスのロックダウン

Windows IoT デバイスをロックダウンするには、以下を考慮する必要があります。

プラットフォームのセキュア ブート

デバイスの電源を初めてオンにしたとき、ブート プロセス全体の最初の手順は、ファームウェア ブート ローダーを読み込んで実行することです。これにより、デバイス上のハードウェアが初期化され、緊急フラッシュ機能が用意されます。 次に、UEFI 環境が読み込まれ、制御が渡されます。

これらのファームウェア ブート ローダーは SoC 固有です。そのため、これらのブート ローダーをデバイスで作成するために、適切なデバイスの製造元と連携する必要があります。

UEFI セキュア ブート

UEFI セキュア ブートは、最初のポリシー適用ポイントであり、UEFI に配備されています。 この制限により、システムは、ファームウェア ドライバー、オプションの ROM、UEFI ドライバーまたはアプリケーション、UEFI ブート ローダーなど、指定の機関が署名したバイナリの実行しか許可しません。 この機能により、不明なコードがプラットフォームで実行できなくなり、コードによって、プラットフォームのセキュリティが低下する可能性を排除できます。 セキュア ブートを使用すると、ルートキットなど、デバイスに対するブート前のマルウェア攻撃のリスクが軽減されます。

OEM として、製造時に IoT デバイスに UEFI セキュア ブート データベースを配備する必要があります。 これらのデータベースには、署名データベース (db)、失効した署名データベース (dbx)、キー登録キー データベース (KEK) が含まれます。 これらのデータベースは、デバイスのファームウェア不揮発性 RAM (NV-RAM) に格納されます。

  • 署名データベース (db): これには、デバイスで読み込むことが許可されているオペレーティング システム ローダー、UEFI アプリケーション、UEFI ドライバーの署名者またはイメージ ハッシュがリストされます

  • 失効した署名データベース (dbx): これには、信頼できなくなり、デバイスで読み込むことが許可されなくなったオペレーティング システム ローダー、UEFI アプリケーション、UEFI ドライバーの署名者またはイメージ ハッシュがリストされます

  • キー登録キー データベース (KEK): 署名データベースと失効した署名データベースを更新するために使用できる署名キーのリストが格納されます。

これらのデータベースが作成され、デバイスに追加された後、OEM はファームウェアを編集できないようにロックし、プラットフォーム署名キー (PK) を生成します。 このキーは、KEK の更新プログラムに署名するため、または UEFI セキュア ブートを無効にするために使用できます。

UEFI セキュア ブートで実行される手順を次に示します。

  1. デバイスの電源がオンになった後、プラットフォーム署名キー (PK) を照合するために署名データベースがそれぞれチェックされます。
  2. ファームウェアが信頼されていない場合、UEFI ファームウェアは OEM 固有の復元を開始して、信頼されたファームウェアを復元します。
  3. Windows ブート マネージャーを読み込むことができない場合、ファームウェアは Windows ブート マネージャーのバックアップ コピーをブートしようとします。 これも失敗した場合、UEFI ファームウェアは OEM 固有の修復を開始します。
  4. Windows ブート マネージャーが実行され、Windows カーネルのデジタル署名が検証されます。 Windows カーネルが信頼されている場合、Windows ブート マネージャーは Windows カーネルに制御を渡します。

セキュア ブートの詳細については、およびキーの作成と管理のガイダンスについては、こちらを参照してください。

Windows コード整合性

Windows コード整合性 (WCI) により、ドライバーまたはアプリケーションがメモリに読み込まれるたびに整合性が検証されるため、オペレーティング システムのセキュリティが向上します。 CI には、カーネル モード コード整合性 (KMCI) とユーザー モード コード整合性 (UMCI) という 2 つの主要コンポーネントが含まれます。

構成可能なコード整合性 (CCI) は Windows 10 の機能であり、これにより、デバイス ビルダーはデバイスをロックダウンでき、デバイスで署名され信頼されたコードのみ実行されるようにすることができます。 これを行うために、デバイス ビルダーは、"ゴールデン" デバイス (ハードウェアとソフトウェアの最終リリース バージョン) でコード整合性ポリシーを作成し、その後、製造現場のすべてのデバイスをセキュリティで保護し、それらのデバイスにこのポリシーを適用できます。

コード整合性ポリシーのデプロイ、監査、適用について詳しくは、こちらの最新の TechNet ドキュメントを参照してください。

Windows コード整合性で実行される手順を次に示します。

  1. Windows カーネルが、他のすべてのコンポーネントを、読み込み前に署名データベースと照合して検証します。 これには、ドライバー、スタートアップ ファイル、ELAM (起動時マルウェア対策) が含まれます。
  2. Windows カーネルは、スタートアップ プロセスで信頼されているコンポーネントを読み込み、信頼されていないコンポーネントの読み込みを禁止します。
  3. インストールされているアプリケーションと共に、Windows 10 IoT Core オペレーティング システムが読み込まれます。

BitLocker によるデバイスの暗号化

Windows 10 IoT Core は、BitLocker によるデバイスの暗号化の軽量バージョンも実装しており、これにより、オフライン攻撃から IoT デバイスが保護されます。 この機能は、必要な測定を行う UEFI の必須プレ OS プロトコルなど、プラットフォームでの TPM の存在に強く依存します。 これらのプレ OS 測定により、OS がどのように起動されたかについて後で明確に記録できます。ただし、実行制限は適用されません。

ヒント

Windows 10 IoT Core で BitLocker 機能を使用すると、NTFS ベースの OS ボリュームを自動的に暗号化でき、その一方で、使用可能なすべての NTFS データ ボリュームをその OS ボリュームにバインドできます。 このために、EFIESP ボリュームの GUID が C12A7328-F81F-11D2-BA4B-00A0C93EC93B に設定されていることを確認する必要があります。

Windows IoT Core の Device Guard

ほとんどの IoT デバイスは、固定機能デバイスとしてビルドされています。 これは、デバイス ビルダーが、特定のデバイスで実行する必要があるファームウェア、オペレーティング システム、ドライバー、アプリケーションを正確に知っていることを意味します。 この情報を使用して、既知の信頼できるコードの実行のみを許可することにより、IoT デバイスを完全にロックダウンできます。 Windows 10 IoT Core の Device Guard は、ロックダウンされたデバイスで不明または信頼できない実行可能コードを実行できないようにすることにより、IoT デバイスを保護するのに役立ちます。

IoT Core のターンキー セキュリティ

IoT Core デバイスで主要なセキュリティ機能を簡単に有効化できるようにするために、Microsoft はターンキー セキュリティ パッケージを提供しています。このパッケージにより、デバイス ビルダーは、完全にロックダウンされた IoT デバイスをビルドできます。 このパッケージは次の場合に役立ちます。

  • セキュア ブート キーをプロビジョニングし、サポートされている IoT プラットフォームで機能を有効化する
  • BitLocker を使用したデバイス暗号化の設定と構成
  • 署名されたアプリケーションとドライバーの実行のみを許可するようにデバイス ロックダウンを開始する

次の手順で、ターンキー セキュリティ パッケージを使用してロックダウン イメージを作成するプロセスについて説明します

Create lockdown image

前提条件

  • Windows 10 Enterprise を実行する PC (他の Windows バージョンは、用意されているスクリプトではサポートされません)
  • Windows 10 SDK - 証明書の生成に必要
  • Windows 10 ADK - CAB の生成に必要
  • 参照プラットフォーム - 最終的なロックダウンのために、配布ファームウェア、OS、ドライバー、アプリケーションを備えたリリース ハードウェアが必要

開発 IoT デバイス

Windows 10 IoT Core は、数百のデバイスで使用されているさまざまなシリコンで動作します。 推奨される IoT 開発デバイスのうち、以下がセキュア ブート、メジャー ブート、BitLocker、Device Guard 機能と共に、すぐに使用できるファームウェア TPM 機能を備えています。

  • Qualcomm DragonBoard 410c

    セキュア ブートを有効にするために、RPMB をプロビジョニングする必要がある場合があります。 Windows 10 IoT Core で eMMC がフラッシュされた後 (手順については、こちらを参照)、電源を入れるときにデバイスで [Power] + [Vol+] + [Vol-] を同時に押し、BDS メニューから [Provision RPMB]\(RPMB のプロビジョニング\) を選択します。 これは元に戻すことができない手順であるため注意してください。

  • Intel MinnowBoardMax

    Intel の MinnowBoard Max では、ファームウェアのバージョンは 0.82 以上である必要があります (最新のファームウェアを入手してください)。 TPM 機能を有効にするには、キーボードとディスプレイが接続されたボードの電源を入れ、F2 キーを押して UEFI セットアップに入ります。 [デバイス マネージャー] -> [システム設定] -> [セキュリティの構成] -> [PTT] に移動し、これを <[有効]> に設定します。 F10 キーを押して変更内容を保存し、引き続きプラットフォームを再起動します。

Note

Raspberry Pi 2 と 3 では TPM がサポートされていないため、ロックダウン シナリオは構成できません。

ロックダウン パッケージを生成する

次の 2 つのリンクの指示に従います。

ロックダウン パッケージをテストする

ここで生成されたセキュリティ パッケージは、YOUR_IOT_ADD_ON_WORKSPACE<>\Build<ARCH><OEM_NAME>でテストできます。Security.* .cab>ロック解除されたデバイスに手動でインストールする手順を次に示します。

  1. ロックされていないイメージ (前の手順でスキャンのために使用したイメージ) を使用してデバイスをフラッシュします。

  2. SSH または PowerShell を使用してデバイスに接続します

  3. 次の .cab ファイルをデバイスのディレクトリ (c:\OemInstall など) にコピーします

    • OEM.Custom.Cmd.cab
    • OEM.Security.BitLocker.cab
    • OEM.Security.SecureBoot.cab
    • OEM.Security.DeviceGuard.cab
  4. 次のコマンドを発行して、生成されたパッケージのステージングを開始します

    applyupdate -stage c:\OemInstall\OEM.Custom.Cmd.cab
    

    カスタム イメージを使用する場合、このファイルをスキップし、Output\OEMCustomization\OEMCustomization.cmd ファイルで使用できる内容を使用して c:\windows\system32\oemcustomization.cmd を手動で編集する必要があります

    applyupdate -stage c:\OemInstall\OEM.Security.BitLocker.cab
    applyupdate -stage c:\OemInstall\OEM.Security.SecureBoot.cab
    applyupdate -stage c:\OemInstall\OEM.Security.DeviceGuard.cab
    
    
  5. 最後に、以下を使用してパッケージをコミットします

    applyupdate -commit
    
  6. デバイスが再起動して更新 OS となり (歯車が表示されます)、パッケージがインストールされ、再び再起動して MainOS となります。 デバイスが再起動して MainOS に戻ると、セキュア ブートが有効になり、SIPolicy がエンゲージされます。

  7. デバイスを再び再起動して、BitLocker 暗号化をアクティブにします。

  8. セキュリティ機能をテストします

    • SecureBoot: bcdedit /debug on を試します。値がセキュア ブート ポリシーによって保護されていることを示すエラーが表示されます
    • BitLocker: start /wait sectask.exe -waitencryptcomplete:1 を実行します。ERRORLEVEL が -2147023436 (ERROR_TIMEOUT) の場合、暗号化は完了していません。 .cmd ファイルから sectask.exe を実行する場合、start /wait は省略します。
    • DeviceGuard: 署名なしのバイナリ、または SIPolicy リストにない証明書で署名されたバイナリを実行し、その実行が失敗することを確認します。

ロックダウン イメージを生成する

前に定義した設定に従ってロックダウン パッケージが動作することを確認した後、以下の手順に従って、これらのパッケージをイメージに含めることができます。 カスタム イメージの作成手順については、IoT 製造ガイドに関するページを参照してください。

  1. ワークスペース ディレクトリで、上記の生成された出力ディレクトリにある次のファイルを更新します

    • SecureBoot: Copy ..\Output\SecureBoot\*.bin ..\Workspace\Common\Packages\Security.SecureBoot
      • SetVariable_db.bin
      • SetVariable_kek.bin
      • SetVariable_pk.bin
    • BitLocker: Copy ..\Output\Bitlocker\*.* ..\Workspace\Common\Packages\Security.Bitlocker
      • DETask.xml
      • Security.Bitlocker.wm.xml
      • setup.bitlocker.cmd
    • DeviceGuard: Copy ..\Output\DeviceGuard\*.* ..\Workspace\Common\Packages\Security.DeviceGuard
      • SIPolicyOn.p7b
      • SIPolicyOff.p7b
  2. ロックダウン パッケージ機能 ID が付加された ProductName ディレクトリの下位に RetailOEMInput.xml と TestOEMInput.xml を追加します

    • <Feature>SEC_BITLOCKER</Feature>
    • <Feature>SEC_SECUREBOOT</Feature>
    • <Feature>SEC_DEVICEGUARD</Feature>
  3. イメージを再生成します

    • buildpkg all (これにより、上記のポリシー ファイルに基づいて新しいロックダウン パッケージが生成されます)
    • buildimage ProductName test(or)retail (これにより、新しい Flash.ffu が生成されます)
  4. この新しい Flash. ffu を使用してデバイスをフラッシュし、セキュリティ機能を検証します。

ロックダウン Dragon Board 構成の例として、SecureSample に関するページを参照してください。

CodeSigning 強制を有効にして開発する

パッケージが生成され、ロックダウンがアクティブ化された後、開発中にイメージに導入されたバイナリに適切に署名する必要があります。 ユーザー モード バイナリがキー *.\Keys\ **-UMCI.pfx で署名されていることを確認します。 ドライバーなどのカーネル モード署名の場合は、独自の署名キーを指定する必要があります。また、それらの署名キーが上記の SIPolicy にも含まれている必要があります。

暗号化されたドライブのロック解除

開発およびテスト中に、暗号化されたデバイスからコンテンツをオフラインで読み取る場合 (たとえば、SD カードから MinnowBoardMax を読み取る場合や、USB 大容量記憶装置モードで DragonBoard の eMMC を読み取る場合)、ドライブ文字を MainOS およびデータ ボリュームに割り当てるために "diskpart" を使用できます (MainOS の場合は v:、データの場合は w: とします)。 ボリュームはロックされているように見え、手動でロックを解除する必要があります。 これは、OEM-DRA.pfx 証明書 (DeviceLockDown サンプルに含まれています) がインストールされているマシンで実行できます。 PFX をインストールし、管理 CMD プロンプトから次のコマンドを実行します。

  • manage-bde -unlock v: -cert -cf OEM-DRA.cer
  • manage-bde -unlock w: -cert -cf OEM-DRA.cer

コンテンツにオフラインで頻繁にアクセスする必要がある場合、最初のロック解除後に、次のコマンドを使用してボリュームに対して BitLocker の自動ロック解除を設定できます。

  • manage-bde -autounlock v: -enable
  • manage-bde -autounlock w: -enable

BitLocker の無効化

BitLocker を一時的に無効にする必要がある場合、IoT デバイスとのリモート PowerShell セッションを開始し、次のコマンドを実行します: sectask.exe -disable

Note

スケジュールされた暗号化タスクが無効になっていない限り、以降のデバイス ブート時にデバイスの暗号化が再び有効になります。