El firmware de todas las instancias de Confidential VM es UEFI y se basa en el proyecto Open Virtual Machine Firmware. Google administra el firmware para mantener la seguridad, el rendimiento y la estabilidad.
El firmware administrado por Google también garantiza la coherencia de los valores almacenados en los registros de medición de la raíz de confianza para una instancia de VM confidencial. Esto ayuda a evitar que las cargas de trabajo de Confidential Computing se bloqueen por la verificación de la certificación cuando se actualiza el firmware de una instancia de Confidential VM.
Para ayudar a establecer que tu instancia de Confidential VM se ejecuta en un firmware genuino administrado por Google, puedes realizar las siguientes tareas:
Recupera una aprobación de inicio firmada por Google en instancias de Confidential VM con AMD SEV-SNP o Intel TDX habilitados. Una aprobación de lanzamiento contiene mediciones precalculadas y firmadas relacionadas con el firmware.
Verifica la aprobación del lanzamiento comparando las mediciones específicas de la arquitectura.
Verifica que el objeto binario de la UEFI esté avalado por Google y no se haya modificado.
Además de la certificación remota, puedes incluir la verificación del firmware como parte de tu política de seguridad, que determina si una instancia de Confidential VM debe tener acceso a los recursos protegidos.
Recupera las recomendaciones de lanzamiento
Puedes recuperar las recomendaciones de lanzamiento con las herramientas de Google o las tuyas propias.
Recupera las recomendaciones de lanzamiento con las herramientas de Google
Para recuperar una certificación de inicio de una instancia de Confidential VM de AMD SEV-SNP o Intel TDX con las herramientas de Google, haz lo siguiente:
Usa Go-TPM-Tools (AMD SEV-SNP o Intel TDX) o SEV Guest (AMD SEV-SNP) para recuperar un informe de certificación y los certificados asociados.
Usa
gcetcbendorsement
para extraer la aprobación de la UEFI de la certificación y almacenarla en un archivo. Luego, puedes verificar que la confirmación se base en Google y que la medición del informe de certificación se encuentre entre las mediciones firmadas.
Recupera las recomendaciones de lanzamiento con tus propias herramientas
Para recuperar una recomendación de lanzamiento con tus propias herramientas, completa las siguientes instrucciones.
AMD SEV-SNP
Realiza una solicitud de invitado extendida al procesador seguro de AMD para recuperar un informe de certificación.
Extrae la medición de 384 bits del informe almacenada en el desplazamiento
90h
. Para obtener más información, consulta SEV Secure Nested Paging Firmware ABI Specification, capítulo 7.3, tabla 22.Usa la medición de 384 bits para descargar una refrendación de lanzamiento de referencia serializada del siguiente bucket de Cloud Storage:
gs://gce_tcb_integrity/ovmf_x64_csm/sevsnp/384_BIT_MEASUREMENT.binarypb
Decodifica el archivo BINARYPB con una herramienta como protoc, usando la definición del mensaje
VMLaunchEndorsement
:message VMLaunchEndorsement { bytes serialized_uefi_golden = 1; bytes signature = 2; }
Ubicaciones alternativas para la aprobación del lanzamiento
Es posible que la aprobación del lanzamiento también esté disponible en una tabla de GUID en el mecanismo de entrega de certificados de AMD SEV-SNP. Tiene el siguiente GUID:
9f4116cd-c503-4f5a-8f6f-fb68882f4ce2
La tabla de GUID se documenta en la especificación del bloque de comunicación del hipervisor invitado de AMD, en la sección Solicitud extendida del invitado de SNP.
También puede haber referencias a ubicaciones locales y remotas de la aprobación del lanzamiento en el registro de eventos del cliente de PC de Trusted Computing Group, que se encuentra en el evento SP800-155, como se documenta en TCG PC Client Platform Firmware Profile Specification Version 1.06 Revision 52.
Intel TDX
Crea una entrada de informe de configfs-tsm:
name=/sys/kernel/config/tsm/report/report0 mkdir "${name}" cat "${your_nonce_file}" > "${name}/inblob" cat "${name}/outblob" > "${your_quote_destination}"
Extrae la medición MRTD del dominio de confianza de 384 bits de la cita almacenada en el desplazamiento
b8h
(para el módulo 1.5 de TDX). Para obtener más información, consulta la biblioteca de citas de DCAP de TDX.Usa la medición de 384 bits para descargar una refrendación de lanzamiento de referencia serializada del siguiente bucket de Cloud Storage:
gs://gce_tcb_integrity/ovmf_x64_csm/tdx/384_BIT_MEASUREMENT.binarypb
Decodifica la aprobación de lanzamiento con una herramienta como protoc, usando la definición del mensaje
VMLaunchEndorsement
:message VMLaunchEndorsement { bytes serialized_uefi_golden = 1; bytes signature = 2; }
Ejemplo de recomendación de lanzamiento
Un respaldo del lanzamiento es similar al siguiente ejemplo:
VMLaunchEndorsement:
serialized_uefi_golden: "SERIALIZED_BYTES"
signature: "LAUNCH_ENDORSEMENT_SIGNATURE_BYTES"
Mediciones doradas de UEFI
El campo serialized_uefi_golden
contiene una versión serializada de varios valores, como se define en el siguiente búfer de protocolo:
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;
}
El campo VMSevSnp
del mensaje VMGoldenMeasurement
se define con el siguiente búfer de protocolo:
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;
}
El campo VMTdx
del mensaje VMGoldenMeasurement
se define con el siguiente búfer de protocolo:
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;
}
Para desempaquetar y decodificar estos valores del serialized_uefi_golden field
con tus propias herramientas, completa los siguientes pasos:
Asigna un mensaje
VMGoldenMeasurement
nuevo.Deserializa
serialized_uefi_golden
en el mensaje.
Como alternativa, puedes usar el comando
gcetcbendorsement inspect
.
Verifica las recomendaciones de lanzamiento
Después de recuperar una certificación de lanzamiento, verifica su firma y, luego, integra sus mediciones en tu política de seguridad cuando corresponda.
Verifica la firma de aprobación del lanzamiento
Puedes verificar la firma de una certificación de lanzamiento si incluyes el certificado de clave raíz de la base de procesamiento confiable de Confidential Computing de Compute Engine en tus anclajes de confianza.
El campo cert
del objeto VMGoldenMeasurement
en la aprobación del lanzamiento contiene un certificado X.509v3 codificado en DER de la clave pública de la clave de firma de la aprobación.
El certificado está firmado por la clave raíz.
Puedes usar gcetcbendorsement para mostrar qué comandos de openssl
ejecutar para verificar la firma. Por ejemplo, si ejecutas el siguiente comando:
gcetcbendorsement verify --show LAUNCH_ENDORSEMENT_FILENAME.binarypb
Deberías recibir una respuesta similar a la del siguiente ejemplo:
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")
Si prefieres usar tus propias herramientas, puedes reemplazar los comandos gcetcbendorsement inspect
que se usan en la respuesta por tu propia lógica de extracción de búferes de protocolo para los campos con nombre del mensaje VMGoldenMeasurement
deserializado.
Verifica las mediciones de la certificación de lanzamiento
El código de muestra para crear una recomendación de lanzamiento está disponible en el repositorio de GitHub gce-tcb-verifier
.
Puedes usar esta información para comprender cómo Google derivó las mediciones del UEFI y para incorporar las mediciones pertinentes en tu política de seguridad.
Por ejemplo, puedes verificar que el proveedor del firmware haya firmado el firmware y comparar las mediciones específicas de la arquitectura con los valores precomputados y firmados que se proporcionan en el mensaje VMLaunchEndorsement
.
Aunque el firmware virtual de Compute Engine se actualiza durante el restablecimiento, el valor de PCR0 no cambia. Por este motivo, el valor svn
del firmware en la medición firmada podría diferir del EV_S_CRTM_VERSION
medido en PCR0, y se omite el evento EV_POST_CODE
en el resumen del blob del firmware.
Verifica el objeto binario de UEFI de una instancia de Confidential VM
En una aprobación de lanzamiento, desempaqueta el valor
serialized_uefi_golden
en unVMGoldenMeasurement
. Para ver ejemplos, consulta la implementación en Go o la compilación de protoc deendorsement.proto
para otro lenguaje que admita búferes de protocolo.Recupera el valor de resumen de
VMGoldenMeasurement
. Es el resumen SHA-384 del archivo binario de UEFI en el que se ejecuta la instancia de Confidential VM.Usa el resumen SHA-384 para descargar el objeto binario del firmware del siguiente bucket de Cloud Storage:
gs://gce_tcb_integrity/ovmf_x64_csm/UEFI_BINARY_DIGEST.fd
Si es una URL válida y se descarga el firmware, realiza un hash SHA-384 en el binario del firmware. Si coincide con el resumen de la medición de referencia, el firmware que se ejecuta en tu instancia de Confidential VM se ejecuta sin modificaciones.