El firmware de todas las instancias de VM confidenciales es UEFI y se basa en el proyecto Open Virtual Machine Firmware. Google gestiona el firmware para mantener la seguridad, el rendimiento y la estabilidad.
El firmware gestionado por Google también asegura la coherencia de los valores almacenados en los registros de medición de la raíz de confianza de 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 máquina virtual confidencial.
Para comprobar que tu instancia de VM confidencial se ejecuta en firmware auténtico gestionado por Google, puedes realizar las siguientes tareas:
Recupera una confirmación de lanzamiento firmada por Google en instancias de VM confidencial con AMD SEV-SNP o Intel TDX habilitados. Una confirmación de lanzamiento contiene mediciones precalculadas y firmadas relacionadas con el firmware.
Verifica la aprobación del lanzamiento comparándola con las mediciones específicas de la arquitectura.
Verifica que el archivo binario UEFI esté aprobado por Google y no se haya modificado.
Además de la atestación remota, puedes incluir la verificación del firmware como parte de tu política de seguridad, que determina si una instancia de máquina virtual confidencial debe tener acceso a recursos protegidos.
Recuperar aprobaciones de lanzamiento
Puedes obtener las aprobaciones de lanzamiento con las herramientas de Google o con las tuyas.
Recuperar aprobaciones de lanzamiento con herramientas de Google
Para obtener una certificación de lanzamiento de una instancia de máquina virtual confidencial de AMD SEV-SNP o Intel TDX mediante las herramientas de Google, sigue estos pasos:
Usa Go-TPM-Tools (AMD SEV-SNP o Intel TDX) o SEV Guest (AMD SEV-SNP) para obtener un informe de atestación y los certificados asociados.
Usa
gcetcbendorsement
para extraer la aprobación de UEFI de la certificación y almacenarla en un archivo. A continuación, puede verificar que la firma se ha originado en Google y que la medición del informe de certificación se encuentra entre las mediciones firmadas.
Recuperar las recomendaciones de lanzamiento con tus propias herramientas
Para obtener una recomendación de lanzamiento con tus propias herramientas, sigue estas instrucciones.
AMD SEV-SNP
Haz una solicitud de invitado ampliada al procesador seguro de AMD para obtener 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 la especificación de la ABI del firmware de paginación anidada segura de SEV, capítulo 7.3, tabla 22.Usa la medición de 384 bits para descargar un lanzamiento de referencia serializado endorsement del siguiente segmento 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 de la confirmación del lanzamiento
La aprobación del lanzamiento también puede estar disponible en una tabla GUID en el mecanismo de entrega de certificados de AMD SEV-SNP. Tiene el siguiente GUID:
9f4116cd-c503-4f5a-8f6f-fb68882f4ce2
La tabla GUID se describe en la sección "SNP Extended Guest Request" de la especificación del bloque de comunicación entre el hipervisor invitado de AMD.
También puede haber referencias a ubicaciones locales y remotas de la confirmación de inicio en el registro de eventos del cliente de PC de Trusted Computing Group, que se encuentra en el evento SP800-155, tal como se documenta en la especificación del perfil de firmware de la plataforma del cliente de PC de TCG, versión 1.06, revisión 52.
Intel TDX
Crea una entrada de informe 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 TDX 1.5). Para obtener más información, consulta la biblioteca de generación de citas de DCAP de TDX.Usa la medición de 384 bits para descargar un lanzamiento de referencia serializado endorsement del siguiente segmento de Cloud Storage:
gs://gce_tcb_integrity/ovmf_x64_csm/tdx/384_BIT_MEASUREMENT.binarypb
Decodifica la confirmació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 lanzamiento de recomendación
Una recomendación de 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, tal 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 mediante 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 mediante 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, sigue estos pasos:
Asigna un mensaje
VMGoldenMeasurement
nuevo.Deserializa
serialized_uefi_golden
en el mensaje.
También puedes usar el comando
gcetcbendorsement inspect
.
Verificar las recomendaciones de lanzamiento
Después de recuperar una confirmación de lanzamiento, verifica su firma e integra sus mediciones en tu política de seguridad cuando sea necesario.
Verificar la firma de una confirmación de lanzamiento
Puedes verificar la firma de una certificación de lanzamiento incluyendo el certificado de la clave raíz de la base de computación de confianza de Computación Confidencial de Compute Engine en tus anclajes de confianza.
El campo cert
del VMGoldenMeasurement
de la aprobación de inicio 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 sustituir los comandos gcetcbendorsement inspect
que se usan en la respuesta por tu propia lógica de extracción de búfer de protocolo para los campos con nombre del mensaje VMGoldenMeasurement
deserializado.
Verificar las mediciones de la recomendación de lanzamiento
El código de ejemplo sobre cómo se crea una confirmación de lanzamiento está disponible en el repositorio de GitHub gce-tcb-verifier
.
Puedes usarlo para saber cómo ha obtenido Google las mediciones de la UEFI e incorporar las mediciones pertinentes a tu política de seguridad.
Por ejemplo, puede comprobar que el firmware esté firmado por el proveedor del firmware y comparar las mediciones específicas de la arquitectura con los valores precalculados y firmados que se proporcionan en el mensaje VMLaunchEndorsement
.
Aunque el firmware virtual de Compute Engine se actualiza al restablecerse, el valor de PCR0 no cambia. Por este motivo, el valor svn
del firmware de la medición firmada puede ser diferente del valor EV_S_CRTM_VERSION
medido en PCR0, y se omite el evento EV_POST_CODE
del digest del blob del firmware.
Verificar el archivo binario UEFI de una instancia de VM confidencial
Desde una confirmación de lanzamiento, desempaqueta el valor de
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 digest SHA-384 del archivo binario de UEFI en el que se ejecuta la instancia de VM confidencial.Usa el digest SHA-384 para descargar el archivo binario del firmware del siguiente segmento de Cloud Storage:
gs://gce_tcb_integrity/ovmf_x64_csm/UEFI_BINARY_DIGEST.fd
Si es una URL válida y el firmware se descarga, realiza un hash SHA-384 en el archivo binario del firmware. Si coincide con el resumen de la medición de referencia, el firmware que se ejecuta en tu instancia de VM confidencial no se ha modificado.