TPM 기반의 증명을 사용하여 보호된 호스트에 권한 부여

적용 대상: Windows Server 2022, Windows Server 2019, Windows Server 2016

TPM 모드는 TPM 식별자(플랫폼 식별자 또는 인증 키 [EKpub]라고도 함)를 사용하여 특정 호스트에 "보호됨"으로 권한이 부여되었는지 여부를 확인하기 시작합니다. 이 증명 모드는 보안 부팅 및 코드 무결성 측정을 사용하여 지정된 Hyper-V 호스트가 정상 상태이고 신뢰할 수 있는 코드만 실행 중인지 확인합니다. 증명이 무엇이고 정상이 아닌지 이해하려면 다음 아티팩트를 캡처해야 합니다.

  1. TPM 식별자(EKpub)

    • 이 정보는 각 Hyper-V 호스트에 고유합니다.
  2. TPM 기준(부팅 측정)

    • 동일한 하드웨어 클래스에서 실행되는 모든 Hyper-V 호스트에 적용됩니다.
  3. 코드 무결성 정책(허용된 이진 파일의 허용 목록)

    • 이는 공통 하드웨어 및 소프트웨어를 공유하는 모든 Hyper-V 호스트에 적용됩니다.

데이터 센터 내의 각 고유한 Hyper-V 하드웨어 구성 클래스를 나타내는 "참조 호스트"에서 기준 및 CI 정책을 캡처하는 것이 좋습니다. Windows Server 버전 1709부터 샘플 CI 정책은 C:\Windows\schemas\CodeIntegrity\ExamplePolicies에 포함됩니다.

버전이 지정된 증명 정책

Windows Server 2019는 EKPub를 HGS에 추가하기 위해 TPM 인증서가 있어야 하는 v2 증명이라는 새로운 증명 방법을 도입했습니다. Windows Server 2016에서 사용되는 v1 증명 방법을 사용하면 Add-HgsAttestationTpmHost 또는 다른 TPM 증명 cmdlet을 실행하여 아티팩트를 캡처할 때 -Force 플래그를 지정하여 이 안전 검사 재정의할 수 있었습니다. Windows Server 2019부터 v2 증명은 기본적으로 사용되며 인증서 없이 TPM을 등록해야 하는 경우 Add-HgsAttestationTpmHost를 실행할 때 -PolicyVersion v1 플래그를 지정해야 합니다. -Force 플래그는 v2 증명에서 작동하지 않습니다.

호스트는 모든 아티팩트(EKPub + TPM 기준 + CI 정책)가 동일한 버전의 증명을 사용하는 경우에만 증명할 수 있습니다. V2 증명이 먼저 시도되고 실패하면 v1 증명이 사용됩니다. 즉, v1 증명을 사용하여 TPM 식별자를 등록해야 하는 경우 TPM 기준을 캡처하고 CI 정책을 만들 때 v1 증명을 사용하도록 -PolicyVersion v1 플래그도 지정해야 합니다. V2 증명을 사용하여 TPM 기준 및 CI 정책을 만든 다음 나중에 TPM 인증서 없이 보호된 호스트를 추가해야 하는 경우 -PolicyVersion v1 플래그를 사용하여 각 아티팩트를 다시 만들어야 합니다.

각 호스트에 대한 TPM 식별자(플랫폼 식별자 또는 EKpub) 캡처

  1. 패브릭에서 기본 각 호스트의 TPM을 사용할 준비가 되었는지 확인합니다. 즉, TPM이 초기화되고 소유권이 획득됩니다. TPM 관리 콘솔(tpm.msc)을 열거나 관리자 권한 Windows PowerShell 창에서 Get-Tpm을 실행하여 TPM의 상태 검사 수 있습니다. TPM이 준비 상태가 아닌 경우 TPM을 초기화하고 소유권을 설정해야 합니다. TPM 관리 콘솔에서 또는 Initialize-Tpm을 실행 하여 이 작업을 수행할 수 있습니다.

  2. 보호된 각 호스트에서 관리자 권한 Windows PowerShell 콘솔에서 다음 명령을 실행하여 해당 EKpub를 가져옵니다. 예를 <HostName>들어 고유한 호스트 이름을 이 호스트를 식별하는 데 적합한 이름으로 대체합니다. 호스트 이름 또는 패브릭 인벤토리 서비스에서 사용하는 이름(사용 가능한 경우)일 수 있습니다. 편의를 위해 호스트 이름을 사용하여 출력 파일의 이름을 지정합니다.

    (Get-PlatformIdentifier -Name '<HostName>').InnerXml | Out-file <Path><HostName>.xml -Encoding UTF8
    
  3. 각 XML 파일에 고유한 이름을 지정하여 보호된 호스트가 될 각 호스트에 대해 이전 단계를 반복합니다.

  4. 결과 XML 파일을 HGS 관리자에게 제공합니다.

  5. HGS do기본 HGS 서버에서 관리자 권한 Windows PowerShell 콘솔을 열고 다음 명령을 실행합니다. 각 XML 파일에 대해 명령을 반복합니다.

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

    참고 항목

    신뢰할 수 없는 EKCert(인증 키 인증서)에 대한 TPM 식별자를 추가할 때 오류가 발생하는 경우 신뢰할 수 있는 TPM 루트 인증서가 HGS 노드에 추가 되었는지 확인합니다. 또한 일부 TPM 공급업체는 EKCert를 사용하지 않습니다. 메모장 같은 편집기에서 XML 파일을 열고 EKCert를 찾을 수 없음을 나타내는 오류 메시지를 검사 EKCert가 누락되었는지 검사 수 있습니다. 이 경우 컴퓨터의 TPM이 인증된 것으로 신뢰하는 경우 매개 변수를 -Force 사용하여 HGS에 호스트 식별자를 추가할 수 있습니다. Windows Server 2019에서는 사용할 때-Force도 매개 변수를 -PolicyVersion v1 사용해야 합니다. 이렇게 하면 Windows Server 2016 동작과 일치하는 정책이 생성되며 CI 정책 및 TPM 기준도 등록할 때 사용해야 -PolicyVersion v1 합니다.

코드 무결성 정책 만들기 및 적용

코드 무결성 정책은 호스트에서 실행하기 위해 신뢰할 수 있는 실행 파일만 실행할 수 있도록 하는 데 도움이 됩니다. 신뢰할 수 있는 실행 파일 외부의 맬웨어 및 기타 실행 파일을 실행할 수 없습니다.

보호된 각 호스트는 TPM 모드에서 보호된 VM을 실행하기 위해 코드 무결성 정책을 적용해야 합니다. HGS에 추가하여 신뢰할 수 있는 정확한 코드 무결성 정책을 지정합니다. 정책을 적용하거나 정책을 준수하지 않는 소프트웨어를 차단하거나 감사(정책에 정의되지 않은 소프트웨어가 실행될 때 이벤트 기록)하도록 코드 무결성 정책을 구성할 수 있습니다.

Windows Server 버전 1709부터 샘플 코드 무결성 정책이 Windows의 C:\Windows\schemas\CodeIntegrity\ExamplePolicies에 포함됩니다. Windows Server에는 다음 두 가지 정책이 권장됩니다.

  • AllowMicrosoft: Microsoft에서 서명한 모든 파일을 허용합니다. 이 정책은 SQL 또는 Exchange와 같은 서버 애플리케이션 또는 Microsoft에서 게시한 에이전트에서 서버를 모니터링하는 경우에 권장됩니다.
  • DefaultWindows_Enforced: Windows에서 제공된 파일만 허용하며 Office와 같이 Microsoft에서 릴리스한 다른 응용 프로그램을 허용하지 않습니다. 이 정책은 기본 제공 서버 역할 및 Hyper-V와 같은 기능만 실행하는 서버에 권장됩니다.

먼저 감사(로깅) 모드에서 CI 정책을 만들어 누락된 항목이 있는지 확인하고 호스트 프로덕션 워크로드에 대한 정책을 적용하는 것이 좋습니다.

New-CIPolicy cmdlet을 사용하여 고유한 코드 무결성 정책을 생성하는 경우 사용할 규칙 수준을 결정해야 합니다. CI 정책을 변경하지 않고 대부분의 디지털 서명된 소프트웨어를 업데이트할 수 있도록 해시로 대체되는 기본 게시자 수준을 사용하는 것이 좋습니다. CI 정책을 변경하지 않고 동일한 게시자가 작성한 새 소프트웨어를 서버에 설치할 수도 있습니다. 디지털 서명되지 않은 실행 파일은 해시됩니다. 이러한 파일에 업데이트 새 CI 정책을 만들어야 합니다. 사용 가능한 CI 정책 규칙 수준에 대한 자세한 내용은 코드 무결성 정책 배포: 정책 규칙 및 파일 규칙 및 cmdlet 도움말을 참조하세요.

  1. 참조 호스트에서 새 코드 무결성 정책을 생성합니다. 다음 명령은 해시로 대체하여 게시자 수준에서 정책을 만듭니다. 그런 다음 XML 파일을 Windows와 HGS가 각각 CI 정책을 적용하고 측정해야 하는 이진 파일 형식으로 변환합니다.

    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 정책을 만듭니다. 권한이 없는 이진 파일이 호스트에서 실행되는 것을 차단하지 않습니다. 프로덕션 환경에서만 적용된 정책을 사용해야 합니다.

  2. 쉽게 찾을 수 있는 코드 무결성 정책 파일(XML 파일)을 유지합니다. 나중에 이 파일을 편집하여 CI 정책을 적용하거나 향후 업데이트의 변경 내용을 시스템에 병합해야 합니다.

  3. 참조 호스트에 CI 정책을 적용합니다.

    1. 다음 명령을 실행하여 CI 정책을 사용하도록 컴퓨터를 구성합니다. 그룹 정책 또는 System Center Virtual Machine Manager를 사용하여 CI 정책을 배포할 수도 있습니다.

      Invoke-CimMethod -Namespace root/Microsoft/Windows/CI -ClassName PS_UpdateAndCompareCIPolicy -MethodName Update -Arguments @{ FilePath = "C:\temp\HW1CodeIntegrity.p7b" }
      
    2. 호스트를 다시 시작하여 정책을 적용합니다.

  4. 일반적인 워크로드를 실행하여 코드 무결성 정책을 테스트합니다. 여기에는 VM 실행, 패브릭 관리 에이전트, 백업 에이전트 또는 컴퓨터의 문제 해결 도구가 포함될 수 있습니다. 코드 무결성 위반이 있는지 확인하고 필요한 경우 CI 정책을 업데이트합니다.

  5. 업데이트된 CI 정책 XML 파일에 대해 다음 명령을 실행하여 CI 정책을 적용 모드로 변경합니다.

    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 정책을 적용합니다.

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

    참고 항목

    호스트에 CI 정책을 적용할 때와 이러한 컴퓨터의 소프트웨어를 업데이트할 때는 주의해야 합니다. CI 정책을 준수하지 않는 커널 모드 드라이버는 머신이 시작되지 않을 수 있습니다.

  7. 이진 파일(이 예제에서는 HW1CodeIntegrity_enforced.p7b)을 HGS 관리자에게 제공합니다.

  8. HGS do기본 코드 무결성 정책을 HGS 서버에 복사하고 다음 명령을 실행합니다.

    의 경우 <PolicyName>적용되는 호스트 유형을 설명하는 CI 정책의 이름을 지정합니다. 모범 사례는 컴퓨터의 메이크/모델과 컴퓨터에서 실행되는 특수 소프트웨어 구성의 이름을 지정하는 것입니다. 의 경우 <Path>코드 무결성 정책의 경로 및 파일 이름을 지정합니다.

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

    참고 항목

    서명된 코드 무결성 정책을 사용하는 경우 동일한 정책의 서명되지 않은 복사본을 HGS에 등록합니다. 코드 무결성 정책의 서명은 정책 업데이트를 제어하는 데 사용되지만 호스트 TPM으로 측정되지 않으므로 HGS에서 확인할 수 없습니다.

각 고유한 하드웨어 클래스에 대한 TPM 기준 캡처

TPM 기준은 데이터 센터 패브릭의 각 고유한 하드웨어 클래스에 필요합니다. "참조 호스트"를 다시 사용합니다.

  1. 참조 호스트에서 Hyper-V 역할 및 호스트 보호 Hyper-V 지원 기능이 설치되어 있는지 확인합니다.

    Warning

    호스트 보호 Hyper-V 지원 기능을 사용하면 일부 디바이스와 호환되지 않을 수 있는 코드 무결성의 가상화 기반 보호를 사용할 수 있습니다. 이 기능을 사용하도록 설정하기 전에 랩에서 이 구성을 테스트하는 것이 좋습니다. 이렇게 하지 않으면 데이터 손실 또는 파란색 화면 오류(중지 오류라고도 함)까지 예기치 않은 오류가 발생할 수 있습니다.

    Install-WindowsFeature Hyper-V, HostGuardian -IncludeManagementTools -Restart
    
  2. 기준 정책을 캡처하려면 관리자 권한 Windows PowerShell 콘솔에서 다음 명령을 실행합니다.

    Get-HgsAttestationBaselinePolicy -Path 'HWConfig1.tcglog'
    

    참고 항목

    참조 호스트에 보안 부팅이 활성화되어 있지 않거나, IOMMU가 있거나, 가상화 기반 보안이 활성화되고 실행 중이거나, 코드 무결성 정책이 적용된 경우 -SkipValidation 플래그를 사용해야 합니다. 이러한 유효성 검사는 호스트에서 보호된 VM을 실행하는 최소 요구 사항을 인식하도록 설계되었습니다. -SkipValidation 플래그를 사용하면 cmdlet의 출력이 변경되지 않습니다. 그것은 단지 오류를 침묵.

  3. HGS 관리자에게 TPM 기준(TCGlog 파일)을 제공합니다.

  4. HGS do기본 TCGlog 파일을 HGS 서버에 복사하고 다음 명령을 실행합니다. 일반적으로 정책 이름을 나타내는 하드웨어 클래스(예: "제조업체 모델 수정 버전")의 이름을 지정합니다.

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

다음 단계