모든 컨피덴셜 VM 인스턴스의 펌웨어는 UEFI이며 개방형 가상 머신 펌웨어 프로젝트를 기반으로 합니다. 펌웨어는 보안, 성능, 안정성을 유지하기 위해 Google에서 관리합니다.
또한 Google 관리 펌웨어는 컨피덴셜 VM 인스턴스의 신뢰할 수 있는 루트의 측정 레지스터에 저장된 값의 일관성을 보장합니다. 이렇게 하면 컨피덴셜 VM 인스턴스의 펌웨어가 업데이트될 때 증명 인증으로 인해 컨피덴셜 컴퓨팅 워크로드가 차단되는 것을 방지할 수 있습니다.
컨피덴셜 VM 인스턴스가 정품 Google 관리 펌웨어에서 실행 중인지 확인하려면 다음 작업을 실행하세요.
AMD SEV-SNP 또는 Intel TDX가 사용 설정된 컨피덴셜 VM 인스턴스에서 Google이 서명한 출시 확인을 가져옵니다. 출시 인증에는 펌웨어와 관련하여 사전 계산되고 서명된 측정값이 포함됩니다.
아키텍처별 측정값과 비교하여 출시 확인을 확인합니다.
UEFI 바이너리가 Google에서 보증하고 수정되지 않았는지 확인합니다.
원격 증명 외에도 컨피덴셜 VM 인스턴스가 보호된 리소스에 액세스할 수 있는지 여부를 결정하는 보안 정책의 일부로 펌웨어 확인을 포함할 수 있습니다.
출시 승인 검색
Google 도구 또는 자체 도구를 사용하여 출시 추천을 검색할 수 있습니다.
Google 도구로 출시 인증 검색
Google 도구를 사용하여 AMD SEV-SNP 또는 Intel TDX 컨피덴셜 VM 인스턴스에서 출시 비준을 검색하려면 다음 단계를 따르세요.
Go-TPM-Tools(AMD SEV-SNP 또는 Intel TDX) 또는 SEV Guest (AMD SEV-SNP)를 사용하여 증명 보고서와 연결된 인증서를 가져옵니다.
gcetcbendorsement
를 사용하여 증명에서 UEFI 보증을 추출하고 파일에 저장합니다. 그런 다음 추천이 Google에 연결되어 있는지, 증명 보고서의 측정값이 서명된 측정값에 포함되어 있는지 확인할 수 있습니다.
자체 도구로 출시 인증 검색
자체 도구를 사용하여 출시 승인을 가져오려면 다음 안내를 완료하세요.
AMD SEV-SNP
AMD Secure Processor에 확장된 게스트 요청을 실행하여 증명 보고서를 가져옵니다.
오프셋
90h
에 저장된 보고서의 384비트 측정값을 추출합니다. 자세한 내용은 SEV 보안 중첩 페이징 펌웨어 ABI 사양 7.3장 표 22를 참고하세요.384비트 측정값을 사용하여 다음 Cloud Storage 버킷에서 직렬화된 참조 출시 확인을 다운로드합니다.
gs://gce_tcb_integrity/ovmf_x64_csm/sevsnp/384_BIT_MEASUREMENT.binarypb
VMLaunchEndorsement
메시지 정의를 사용하여 protoc와 같은 도구로 BINARYPB 파일을 디코딩합니다.message VMLaunchEndorsement { bytes serialized_uefi_golden = 1; bytes signature = 2; }
대체 출시 승인 위치
출시 승인은 AMD SEV-SNP 인증서 전송 메커니즘의 GUID 테이블에서도 사용할 수 있습니다. GUID는 다음과 같습니다.
9f4116cd-c503-4f5a-8f6f-fb68882f4ce2
GUID 테이블은 AMD 게스트-하이퍼바이저 커뮤니케이션 블록 사양의 SNP 확장 게스트 요청 섹션에 설명되어 있습니다.
TCG PC 클라이언트 플랫폼 펌웨어 프로필 사양 버전 1.06 버전 52에 설명된 대로 SP800-155 이벤트에 있는 신뢰할 수 있는 컴퓨팅 그룹 PC 클라이언트 이벤트 로그에 출시 인증의 로컬 및 원격 위치에 대한 참조가 있을 수도 있습니다.
Intel TDX
configfs-tsm 보고서 항목을 만듭니다.
name=/sys/kernel/config/tsm/report/report0 mkdir "${name}" cat "${your_nonce_file}" > "${name}/inblob" cat "${name}/outblob" > "${your_quote_destination}"
오프셋
b8h
에 저장된 인용의 384비트 트러스트 도메인 측정값 MRTD를 추출합니다 (TDX 모듈 1.5의 경우). 자세한 내용은 TDX DCAP 인용 라이브러리를 참고하세요.384비트 측정값을 사용하여 다음 Cloud Storage 버킷에서 직렬화된 참조 출시 확인을 다운로드합니다.
gs://gce_tcb_integrity/ovmf_x64_csm/tdx/384_BIT_MEASUREMENT.binarypb
VMLaunchEndorsement
메시지 정의를 사용하여 protoc와 같은 도구로 출시 승인을 디코딩합니다.message VMLaunchEndorsement { bytes serialized_uefi_golden = 1; bytes signature = 2; }
출시 승인 예시
출시 승인은 다음 예와 유사합니다.
VMLaunchEndorsement:
serialized_uefi_golden: "SERIALIZED_BYTES"
signature: "LAUNCH_ENDORSEMENT_SIGNATURE_BYTES"
UEFI 골드 측정값
serialized_uefi_golden
필드에는 다음 프로토콜 버퍼에 정의된 대로 여러 값의 직렬화된 버전이 포함됩니다.
message VMGoldenMeasurement {
google.protobuf.Timestamp timestamp = 1;
// The changelist number this UEFI was built from.
uint64 cl_spec = 2;
// DER format certificate of the key that signed this document.
bytes cert = 4;
// SHA-384 digest of the UEFI binary without TEE-specifics about launch.
bytes digest = 5;
// A sequence of PEM-encoded certificates of keys used in cert in Root ...
// final intermediate order. The last certificate will have a signed cert.
bytes ca_bundle = 6;
VMSevSnp sev_snp = 7;
VMTdx tdx = 8;
}
VMGoldenMeasurement
메시지의 VMSevSnp
필드는 다음 프로토콜 버퍼에 의해 정의됩니다.
message VMSevSnp {
// The Google-reported security version number of this UEFI on SEV-SNP.
uint32 svn = 1;
// Expected MEASUREMENT report field values given [key]-many VMSAs at launch.
map<uint32, bytes> measurements = 2; // bytes size 48
// A UUID that Google uses for its CVM UEFIs
bytes family_id = 3; // size 16
// A UUID to name this specific release of the UEFI image. This is randomly
// generated with each build.
bytes image_id = 4; // size 16
// The launch policy that verifiers should expect with this UEFI.
uint64 policy = 5;
// Optional. PEM-encoded certs for Identity..Author..Root. If a singleton,
// only an Id-key is used.
bytes ca_bundle = 6;
}
VMGoldenMeasurement
메시지의 VMTdx
필드는 다음 프로토콜 버퍼에 의해 정의됩니다.
message VMTdx {
message Measurement {
// The amount of RAM in GiB provided to the VM. This is relevant to the
// construction of the measured TDHOB page that includes memory region
// resource attributes.
uint32 ram_gib = 1;
// If true, EFI_UNACCEPTED_MEMORY not presented to guest.
// All memory is accepted by the firmware. Relevant to the TDHOB page
// since the resource attribute will include
// EFI_RESOURCE_ATTRIBUTE_NEEDS_EARLY_ACCEPT.
bool early_accept = 2;
// The SHA-384 digest of the measurement operations for the VM at launch.
bytes mrtd = 3;
}
// The Google-reported security version number of this UEFI on TDX.
uint32 svn = 1;
// Expected MRTD report field values given legal configurations.
repeated Measurement measurements = 2;
}
자체 도구를 사용하여 serialized_uefi_golden field
에서 이러한 값을 압축 해제하고 디코딩하려면 다음 단계를 완료하세요.
새
VMGoldenMeasurement
메시지를 할당합니다.serialized_uefi_golden
를 메시지로 Unmarshal합니다.
또는 gcetcbendorsement inspect
명령어를 사용할 수 있습니다.
출시 추천 확인
출시 승인을 검색한 후 서명을 확인하고 적절한 경우 측정값을 보안 정책에 통합합니다.
출시 승인 서명 확인
신뢰 앵커에 Compute Engine 기밀 컴퓨팅 신뢰할 수 있는 컴퓨팅 기반 루트 키 인증서를 포함하여 출시 비준의 서명을 확인할 수 있습니다.
출시 인증서의 VMGoldenMeasurement
의 cert
필드에는 인증서 서명 키의 공개 키에 관한 DER로 인코딩된 X.509v3 인증서가 포함되어 있습니다.
인증서는 루트 키로 서명됩니다.
gcetcbendorsement를 사용하여 서명을 확인하기 위해 실행할 openssl
명령어를 표시할 수 있습니다. 예를 들어 다음 명령어를 실행합니다.
gcetcbendorsement verify --show LAUNCH_ENDORSEMENT_FILENAME.binarypb
다음 예시와 비슷한 응답이 표시됩니다.
openssl verify -CAfile <(openssl x509 -outform pem -in <(curl https://pki.goog/cloud_integrity/GCE-cc-tcb-root_1.crt)) \
<(gcetcbendorsement inspect mask "LAUNCH_ENDORSEMENT_FILENAME.binarypb" --path=cert) \
&& \
openssl pkeyutl -verify -pkeyopt rsa_padding_mode:pss \
-pkeyopt rsa_pss_saltlen:32 -pkeyopt digest:sha256 -pkeyopt rsa_mgf1_md:sha256 -pubin \
-inkey <(openssl x509 -pubkey -nocert -outform pem -in <(gcetcbendorsement inspect mask "LAUNCH_ENDORSEMENT_FILENAME.binarypb" --path=cert)) \
-sigfile <(gcetcbendorsement inspect signature "LAUNCH_ENDORSEMENT_FILENAME.binarypb") -keyform PEM \
-in <(openssl dgst -sha256 -binary <(gcetcbendorsement inspect payload "LAUNCH_ENDORSEMENT_FILENAME.binarypb")
자체 도구를 사용하려면 응답에 사용된 gcetcbendorsement inspect
명령어를 역직렬화된 VMGoldenMeasurement
메시지의 이름이 지정된 필드에 대한 자체 프로토콜 버퍼 추출 로직으로 대체할 수 있습니다.
출시 확인 측정 확인
출시 추천을 만드는 방법에 관한 샘플 코드는 gce-tcb-verifier
GitHub 저장소에서 확인할 수 있습니다.
이를 통해 Google이 UEFI에서 측정값을 가져온 방법을 파악하고 관련 측정값을 보안 정책에 통합할 수 있습니다.
예를 들어 펌웨어가 펌웨어 공급업체에 의해 서명되었는지 확인하고 아키텍처별 측정값을 VMLaunchEndorsement
메시지에 제공된 사전 계산된 서명된 값과 비교할 수 있습니다.
Compute Engine 가상 펌웨어는 재설정 시 업그레이드되지만 PCR0 값은 변경되지 않습니다. 이로 인해 서명된 측정의 펌웨어 svn
값이 PCR0으로 측정된 EV_S_CRTM_VERSION
과 다를 수 있으며 펌웨어 blob 다이제스트의 EV_POST_CODE
이벤트가 건너뜁니다.
컨피덴셜 VM 인스턴스의 UEFI 바이너리 확인
출시 인증에서
serialized_uefi_golden
값을VMGoldenMeasurement
로 압축 해제합니다. 예를 보려면 Go의 구현 또는 프로토콜 버퍼를 지원하는 다른 언어의endorsement.proto
protoc 컴파일을 참고하세요.VMGoldenMeasurement
에서 다이제스트 값을 검색합니다. 컨피덴셜 VM 인스턴스가 실행 중인 UEFI 바이너리의 SHA-384 다이제스트입니다.SHA-384 다이제스트를 사용하여 다음 Cloud Storage 버킷에서 펌웨어 바이너리를 다운로드합니다.
gs://gce_tcb_integrity/ovmf_x64_csm/UEFI_BINARY_DIGEST.fd
유효한 URL이고 펌웨어가 다운로드되면 펌웨어 바이너리에서 SHA-384 해시를 실행합니다. 골드 측정 데이터의 다이제스트와 일치하면 컨피덴셜 VM 인스턴스에서 실행 중인 펌웨어가 수정되지 않은 상태로 실행 중인 것입니다.