TPM ベースの構成証明を使用して保護されたホストを承認するAuthorize guarded hosts using TPM-based attestation

適用対象: windows server 2019、Windows Server (半期チャネル)、Windows Server 2016Applies to: Windows Server 2019, Windows Server (Semi-Annual Channel), Windows Server 2016

TPM モードでは、TPM 識別子 (プラットフォーム識別子または保証キー EKpub とも呼ばれます) を使用し [ ] て、特定のホストが "保護された" として承認されているかどうかを判断します。TPM mode uses a TPM identifier (also called a platform identifier or endorsement key [EKpub]) to begin determining whether a particular host is authorized as "guarded." このモードの構成証明では、セキュアブートとコード整合性の測定を使用して、特定の Hyper-v ホストが正常な状態であり、信頼されたコードのみが実行されていることを確認します。This mode of attestation uses Secure Boot and code integrity measurements to ensure that a given Hyper-V host is in a healthy state and is running only trusted code. 構成証明によってとが正常でないことを確認するには、次の成果物を取得する必要があります。In order for attestation to understand what is and is not healthy, you must capture the following artifacts:

  1. TPM 識別子 (EKpub)TPM identifier (EKpub)

    • この情報は、各 Hyper-v ホストに固有です。This information is unique to each Hyper-V host
  2. TPM ベースライン (ブート測定)TPM baseline (boot measurements)

    • これは、同じクラスのハードウェア上で実行されるすべての Hyper-v ホストに適用されます。This is applicable to all Hyper-V hosts that run on the same class of hardware
  3. コード整合性ポリシー (許可されているバイナリの許可リスト)Code integrity policy (an allowlist of allowed binaries)

    • これは、共通のハードウェアとソフトウェアを共有するすべての Hyper-v ホストに適用されます。This is applicable to all Hyper-V hosts that share common hardware and software

「参照ホスト」からベースラインポリシーと CI ポリシーをキャプチャすることをお勧めします。これは、データセンター内の Hyper-v ハードウェア構成の一意のクラスを表します。We recommend that you capture the baseline and CI policy from a "reference host" that is representative of each unique class of Hyper-V hardware configuration within your datacenter. Windows Server バージョン1709以降では、サンプル CI ポリシーは C:\Windows\schemas\CodeIntegrity\ExamplePolicies. に含まれています。Beginning with Windows Server version 1709, sample CI policies are included at C:\Windows\schemas\CodeIntegrity\ExamplePolicies.

バージョン管理された構成証明ポリシーVersioned attestation policies

Windows Server 2019 では、 v2 構成 証明と呼ばれる構成証明の新しい方法が導入されています。この方法では、EKPUB を HGS に追加するために TPM 証明書が存在している必要があります。Windows Server 2019 introduces a new method for attestation, called v2 attestation, where a TPM certificate must be present in order to add the EKPub to HGS. Windows Server 2016 で使用されている v1 構成証明方法では、Add-HgsAttestationTpmHost または他の TPM 構成証明書のコマンドレットを実行してアーティファクトをキャプチャするときに-Force フラグを指定することで、この安全性チェックを無効にできました。The v1 attestation method used in Windows Server 2016 allowed you to override this safety check by specifying the -Force flag when you run Add-HgsAttestationTpmHost or other TPM attestation cmdlets to capture the artifacts. Windows Server 2019 以降では、v2 構成証明が既定で使用されるため、証明書なしで TPM を登録する必要がある場合に Add-HgsAttestationTpmHost を実行するときに-PolicyVersion v1 フラグを指定する必要があります。Beginning with Windows Server 2019, v2 attestation is used by default and you need to specify the -PolicyVersion v1 flag when you run Add-HgsAttestationTpmHost if you need to register a TPM without a certificate. -Force フラグは、v2 構成証明では機能しません。The -Force flag does not work with v2 attestation.

ホストは、すべてのアーティファクト (EKPub + TPM ベースライン + CI ポリシー) が同じバージョンの構成証明を使用しているかどうかのみを証明できます。A host can only attest if all artifacts (EKPub + TPM baseline + CI Policy) use the same version of attestation. V2 構成証明が最初に試行され、それが失敗した場合は v1 構成証明が使用されます。V2 attestation is tried first, and if that fails, v1 attestation is used. つまり、v1 構成証明を使用して TPM 識別子を登録する必要がある場合は、-PolicyVersion v1 フラグを指定して、TPM ベースラインをキャプチャし、CI ポリシーを作成するときに v1 構成証明を使用する必要があります。This means if you need to register a TPM identifier by using v1 attestation, you need to also specify the -PolicyVersion v1 flag to use v1 attestation when you capture the TPM baseline and create the CI policy. V2 構成証明を使用して TPM ベースラインと CI ポリシーを作成した後で、TPM 証明書を使用せずに保護されたホストを追加する必要がある場合は、-PolicyVersion v1 フラグを使用して各成果物を再作成する必要があります。If the TPM baseline and CI policy were created by using v2 attestation and then later you need to add a guarded host without a TPM certificate, you need to re-create each artifact with the -PolicyVersion v1 flag.

各ホストの TPM 識別子 (プラットフォーム識別子または EKpub) をキャプチャするCapture the TPM identifier (platform identifier or EKpub) for each host

  1. ファブリックドメインで、各ホストの TPM が使用できる状態であることを確認します。つまり、TPM が初期化され、所有権が取得されます。In the fabric domain, make sure the TPM on each host is ready for use - that is, the TPM is initialized and ownership obtained. Tpm の状態を確認するには、tpm 管理コンソール (tpm .msc) を開くか、管理者特権の Windows PowerShell ウィンドウで Get tpm を実行します。You can check the status of the TPM by opening the TPM Management Console (tpm.msc) or by running Get-Tpm in an elevated Windows PowerShell window. TPM が 準備完了 状態でない場合は、初期化し、その所有権を設定する必要があります。If your TPM is not in the Ready state, you will need to initialize it and set its ownership. これを行うには、TPM 管理コンソールを使用するか、または 初期化-tpm を実行します。This can be done in the TPM Management Console or by running Initialize-Tpm.

  2. 保護された各ホストで、管理者特権の Windows PowerShell コンソールで次のコマンドを実行して、EKpub を取得します。On each guarded host, run the following command in an elevated Windows PowerShell console to obtain its EKpub. では <HostName> 、一意のホスト名を、このホストを識別するのに適した名前に置き換えます。これは、ホスト名またはファブリックインベントリサービスによって使用される名前 (使用可能な場合) になります。For <HostName>, substitute the unique host name with something suitable to identify this host - this can be its hostname or the name used by a fabric inventory service (if available). 便宜上、ホストの名前を使用して出力ファイルに名前を指定します。For convenience, name the output file using the host's name.

    (Get-PlatformIdentifier -Name '<HostName>').InnerXml | Out-file <Path><HostName>.xml -Encoding UTF8
    
  3. 保護されたホストになる各ホストに対して上記の手順を繰り返します。各 XML ファイルに一意の名前を付けます。Repeat the preceding steps for each host that will become a guarded host, being sure to give each XML file a unique name.

  4. 結果の XML ファイルを HGS 管理者に提供します。Provide the resulting XML files to the HGS administrator.

  5. HGS ドメインで、HGS サーバー上の管理者特権の Windows PowerShell コンソールを開き、次のコマンドを実行します。In the HGS domain, open an elevated Windows PowerShell console on an HGS server and run the following command. 各 XML ファイルに対してコマンドを繰り返します。Repeat the command for each of the XML files.

    Add-HgsAttestationTpmHost -Path <Path><Filename>.xml -Name <HostName>
    

    注意

    信頼されていない保証キー証明書 (EKCert) に関する TPM 識別子を追加するときにエラーが発生した場合は、 信頼された tpm ルート証明書が HGS ノードに追加され ていることを確認します。If you encounter an error when adding a TPM identifier regarding an untrusted Endorsement Key Certificate (EKCert), ensure that the trusted TPM root certificates have been added to the HGS node. また、一部の TPM ベンダーは EKCerts を使用しません。Additionally, some TPM vendors do not use EKCerts. EKCert がないかどうかを確認するには、メモ帳などのエディターで XML ファイルを開き、EKCert が見つからなかったことを示すエラーメッセージがないかどうかを確認します。You can check if an EKCert is missing by opening the XML file in an editor such as Notepad and checking for an error message indicating no EKCert was found. この場合、コンピューターの TPM が本物であることを信頼している場合は、パラメーターを使用して、 -Force ホスト id を HGS に追加できます。If this is the case, and you trust that the TPM in your machine is authentic, you can use the -Force parameter to add the host identifier to HGS. Windows Server 2019 では、を使用するときにもパラメーターを使用する必要があり -PolicyVersion v1 -Force ます。In Windows Server 2019, you need to also use the -PolicyVersion v1 parameter when using -Force. これにより、Windows Server 2016 の動作と一貫性のあるポリシーが作成され、 -PolicyVersion v1 CI ポリシーと TPM のベースラインも登録するときにを使用する必要があります。This creates a policy consistent with the Windows Server 2016 behavior and will require you to use -PolicyVersion v1 when registering the CI policy and the TPM baseline as well.

コード整合性ポリシーを作成して適用するCreate and apply a code integrity policy

コード整合性ポリシーを使用すると、ホスト上で実行する信頼できる実行可能ファイルのみを実行できるようになります。A code integrity policy helps ensure that only the executables you trust to run on a host are allowed to run. 信頼できる実行可能ファイルの外部にあるマルウェアおよびその他の実行可能ファイルは実行できません。Malware and other executables outside the trusted executables are prevented from running.

保護された各ホストには、シールドされた Vm を TPM モードで実行するために、コード整合性ポリシーが適用されている必要があります。Each guarded host must have a code integrity policy applied in order to run shielded VMs in TPM mode. 信頼する正確なコード整合性ポリシーを指定するには、それらを HGS に追加します。You specify the exact code integrity policies you trust by adding them to HGS. コードの整合性ポリシーは、ポリシーを適用したり、ポリシーに準拠していないソフトウェアをブロックしたり、単に監査 (ポリシーに定義されていないソフトウェアが実行されたときにイベントをログに記録) するように構成できます。Code integrity policies can be configured to enforce the policy, blocking any software that does not comply with the policy, or simply audit (log an event when software not defined in the policy is executed).

Windows Server バージョン1709以降では、サンプルコードの整合性ポリシーは C:\Windows\schemas\CodeIntegrity\ExamplePolicies. の Windows に含まれています。Starting with Windows Server version 1709, sample code integrity policies are included with Windows at C:\Windows\schemas\CodeIntegrity\ExamplePolicies. Windows Server には、次の2つのポリシーをお勧めします。Two policies are recommended for Windows Server:

  • Allowmicrosoft: microsoft によって署名されたすべてのファイルを許可します。AllowMicrosoft: Allows all files signed by Microsoft. このポリシーは、SQL や Exchange などのサーバーアプリケーションや、Microsoft によって発行されたエージェントによってサーバーが監視されている場合に推奨されます。This policy is recommended for server applications such as SQL or Exchange, or if the server is monitored by agents published by Microsoft.
  • DefaultWindows_Enforced: Windows に付属しているファイルのみを許可し、Office など、Microsoft がリリースした他のアプリケーションを許可しません。DefaultWindows_Enforced: Allows only files that shipped in Windows and doesn't permit other applications released by Microsoft, such as Office. このポリシーは、組み込みのサーバーの役割と、Hyper-v などの機能のみを実行するサーバーに推奨されます。This policy is recommended for servers that run only built-in server roles and features such as Hyper-V.

まず、監査 (ログ) モードで CI ポリシーを作成して、何かが欠落していないかどうかを確認してから、ホストの運用ワークロードにポリシーを適用することをお勧めします。It is recommended that you first create the CI policy in audit (logging) mode to see if it's missing anything, then enforce the policy for host production workloads.

新しい-cipolicyコマンドレットを使用して独自のコード整合性ポリシーを生成する場合は、使用するルールレベルを決定する必要があります。If you use the New-CIPolicy cmdlet to generate your own code integrity policy, you will need to decide the rule levels to use. プライマリレベルの パブリッシャー では、 ハッシュ にフォールバックすることをお勧めします。これにより、CI ポリシーを変更することなく、ほとんどのデジタル署名されたソフトウェアを更新できます。We recommend a primary level of Publisher with fallback to Hash, which allows most digitally signed software to be updated without changing the CI policy. 同じ発行元によって作成された新しいソフトウェアは、CI ポリシーを変更せずにサーバーにインストールすることもできます。New software written by the same publisher can also be installed on the server without changing the CI policy. デジタル署名されていない実行可能ファイルはハッシュされます。これらのファイルを更新するには、新しい CI ポリシーを作成する必要があります。Executables that are not digitally signed will be hashed -- updates to these files will require you to create a new CI policy. 使用可能な CI ポリシーの規則レベルの詳細については、「 コードの整合性ポリシーの展開: ポリシー規則とファイル規則 」および「コマンドレットのヘルプ」を参照してください。For more information about the available CI policy rule levels, see Deploy code integrity policies: policy rules and file rules and cmdlet help.

  1. 参照ホストで、新しいコード整合性ポリシーを生成します。On the reference host, generate a new code integrity policy. 次のコマンドは、フォールバックにフォールバックして、パブリッシャー レベルでポリシーを 作成します。The following commands create a policy at the Publisher level with fallback to Hash. 次に、XML ファイルをバイナリファイル形式に変換し、HGS は CI ポリシーを適用して測定する必要があります。It then converts the XML file to the binary file format Windows and HGS need to apply and measure the CI policy, respectively.

    New-CIPolicy -Level Publisher -Fallback Hash -FilePath 'C:\temp\HW1CodeIntegrity.xml' -UserPEs
    
    ConvertFrom-CIPolicy -XmlFilePath 'C:\temp\HW1CodeIntegrity.xml' -BinaryFilePath 'C:\temp\HW1CodeIntegrity.p7b'
    

    注意

    上記のコマンドは、監査モードでのみ CI ポリシーを作成します。The above command creates a CI policy in audit mode only. 承認されていないバイナリがホストで実行されるのをブロックすることはありません。It will not block unauthorized binaries from running on the host. 運用環境では、強制されたポリシーのみを使用する必要があります。You should only use enforced policies in production.

  2. コード整合性ポリシーファイル (XML ファイル) は、簡単に見つけられるように保存しておいてください。Keep your Code Integrity policy file (XML file) where you can easily find it. このファイルを後で編集して、CI ポリシーを適用するか、システムに加えられた今後の更新からの変更をマージする必要があります。You will need to edit this file later to enforce the CI policy or merge in changes from future updates made to the system.

  3. 参照ホストに CI ポリシーを適用します。Apply the CI policy to your reference host:

    1. 次のコマンドを実行して、CI ポリシーを使用するようにコンピューターを構成します。Run the following command to configure the machine to use your CI policy. また、 グループポリシー または System Center Virtual Machine Managerを使用して CI ポリシーを展開することもできます。You can also deploy the CI policy with Group Policy or System Center Virtual Machine Manager.

      Invoke-CimMethod -Namespace root/Microsoft/Windows/CI -ClassName PS_UpdateAndCompareCIPolicy -MethodName Update -Arguments @{ FilePath = "C:\temp\HW1CodeIntegrity.p7b" }
      
    2. ポリシーを適用するには、ホストを再起動してください。Restart the host to apply the policy.

  4. 一般的なワークロードを実行して、コード整合性ポリシーをテストします。Test the code integrity policy by running a typical workload. これには、実行中の Vm、ファブリック管理エージェント、バックアップエージェント、またはコンピューター上のトラブルシューティングツールが含まれる場合があります。This may include running VMs, any fabric management agents, backup agents, or troubleshooting tools on the machine. コード整合性違反があるかどうかを確認し、必要に応じて CI ポリシーを更新します。Check if there are any code integrity violations and update your CI policy if necessary.

  5. 更新された CI ポリシー XML ファイルに対して次のコマンドを実行して、CI ポリシーを強制モードに変更します。Change your CI policy to enforced mode by running the following commands against your updated CI policy XML file.

    Set-RuleOption -FilePath 'C:\temp\HW1CodeIntegrity.xml' -Option 3 -Delete
    
    ConvertFrom-CIPolicy -XmlFilePath 'C:\temp\HW1CodeIntegrity.xml' -BinaryFilePath 'C:\temp\HW1CodeIntegrity_enforced.p7b'
    
  6. 次のコマンドを使用して、CI ポリシーをすべてのホスト (同一のハードウェアとソフトウェアの構成) に適用します。Apply the CI policy to all of your hosts (with identical hardware and software configuration) using the following commands:

    Invoke-CimMethod -Namespace root/Microsoft/Windows/CI -ClassName PS_UpdateAndCompareCIPolicy -MethodName Update -Arguments @{ FilePath = "C:\temp\HW1CodeIntegrity.p7b" }
    
    Restart-Computer
    

    注意

    ホストに CI ポリシーを適用する場合や、これらのコンピューター上のソフトウェアを更新する場合は注意してください。Be careful when applying CI policies to hosts and when updating any software on these machines. CI ポリシーに準拠していないカーネルモードドライバーは、コンピューターの起動を妨げている可能性があります。Any kernel mode drivers that are non-compliant with the CI Policy may prevent the machine from starting up.

  7. HGS 管理者にバイナリファイル (この例では HW1CodeIntegrity _ . p7b) を指定します。Provide the binary file (in this example, HW1CodeIntegrity_enforced.p7b) to the HGS administrator.

  8. HGS ドメインで、コード整合性ポリシーを HGS サーバーにコピーし、次のコマンドを実行します。In the HGS domain, copy the code integrity policy to an HGS server and run the following command.

    <PolicyName>では、適用するホストの種類を示す CI ポリシーの名前を指定します。For <PolicyName>, specify a name for the CI policy that describes the type of host it applies to. ベストプラクティスとしては、コンピューターのメーカー/モデルの後に名前を指定し、それを実行する特別なソフトウェア構成を指定することをお勧めします。A best practice is to name it after the make/model of your machine and any special software configuration running on it.
    <Path>では、コード整合性ポリシーのパスとファイル名を指定します。For <Path>, specify the path and filename of the code integrity policy.

    Add-HgsAttestationCIPolicy -Path <Path> -Name '<PolicyName>'
    

ハードウェアの一意のクラスごとに TPM ベースラインをキャプチャするCapture the TPM baseline for each unique class of hardware

データセンターファブリック内のハードウェアの一意のクラスごとに TPM ベースラインが必要です。A TPM baseline is required for each unique class of hardware in your datacenter fabric. もう一度 "参照ホスト" を使用します。Use a "reference host" again.

  1. 参照ホストで、Hyper-v の役割と Host Guardian Hyper-v のサポート機能がインストールされていることを確認します。On the reference host, make sure that the Hyper-V role and the Host Guardian Hyper-V Support feature are installed.

    警告

    Host Guardian Hyper-v サポート機能を使用すると、一部のデバイスと互換性のない、コードの整合性を仮想化ベースで保護できます。The Host Guardian Hyper-V Support feature enables Virtualization-based protection of code integrity that may be incompatible with some devices. この機能を有効にする前に、ラボでこの構成をテストすることを強くお勧めします。We strongly recommend testing this configuration in your lab before enabling this feature. そうしないと、データ損失やブルー スクリーン エラー (Stop エラーとも呼ばれます) などを含む予期しないエラーが発生することがあります。Failure to do so may result in unexpected failures up to and including data loss or a blue screen error (also called a stop error).

    Install-WindowsFeature Hyper-V, HostGuardian -IncludeManagementTools -Restart
    
  2. ベースラインポリシーをキャプチャするには、管理者特権の Windows PowerShell コンソールで次のコマンドを実行します。To capture the baseline policy, run the following command in an elevated Windows PowerShell console.

    Get-HgsAttestationBaselinePolicy -Path 'HWConfig1.tcglog'
    

    注意

    参照ホストでセキュアブートが有効になっていない場合、IOMMU が有効になっている場合、仮想化ベースのセキュリティが有効で実行中の場合、またはコード整合性ポリシーが適用されている場合は、 -skipvalidation フラグを使用する必要があります。You will need to use the -SkipValidation flag if the reference host does not have Secure Boot enabled, an IOMMU present, Virtualization Based Security enabled and running, or a code integrity policy applied. これらの検証は、ホストでシールドされた VM を実行するための最小要件を認識するように設計されています。These validations are designed to make you aware of the minimum requirements of running a shielded VM on the host. -SkipValidation フラグを使用しても、コマンドレットの出力は変わりません。エラーをないだけです。Using the -SkipValidation flag does not change the output of the cmdlet; it merely silences the errors.

  3. TPM ベースライン (TCGlog ファイル) を HGS 管理者に提供します。Provide the TPM baseline (TCGlog file) to the HGS administrator.

  4. HGS ドメインで、TCGlog ファイルを HGS サーバーにコピーし、次のコマンドを実行します。In the HGS domain, copy the TCGlog file to an HGS server and run the following command. 通常、ポリシーには、それが表すハードウェアのクラス (たとえば、"製造元のモデルのリビジョン") の後に名前を指定します。Typically, you will name the policy after the class of hardware it represents (for example, "Manufacturer Model Revision").

    Add-HgsAttestationTpmPolicy -Path <Filename>.tcglog -Name '<PolicyName>'
    

次の手順Next step