Il firmware per tutte le istanze Confidential VM è UEFI e si basa sul progetto Open Virtual Machine Firmware. Il firmware è gestito da Google per garantire sicurezza, prestazioni e stabilità.
Il firmware gestito da Google garantisce anche la coerenza dei valori archiviati nei registri di misurazione nella radice di attendibilità per un'istanza Confidential VM. In questo modo, i carichi di lavoro Confidential Computing non vengono bloccati dalla verifica dell'attestazione quando viene aggiornato il firmware di un'istanza Confidential VM.
Per contribuire a stabilire che l'istanza VM confidenziale viene eseguita su un firmware gestito da Google autentico, puoi svolgere le seguenti attività:
Recupera un launch endorsement firmato da Google sulle istanze di Confidential VM con AMD SEV-SNP o Intel TDX abilitato. Un'approvazione di avvio contiene misure precalcolate e firmate relative al firmware.
Verifica l'approvazione del lancio confrontandola con le misurazioni specifiche dell'architettura.
Verifica che il binario UEFI sia approvato da Google e non modificato.
Oltre all'attestazione remota, puoi includere la verifica del firmware come parte della tua policy di sicurezza che determina se un'istanza Confidential VM deve avere accesso alle risorse protette.
Recuperare le approvazioni del lancio
Puoi recuperare le approvazioni di lancio utilizzando gli strumenti Google o i tuoi.
Recuperare le approvazioni di lancio con gli strumenti Google
Per recuperare un'approvazione di avvio da un'istanza Confidential VM AMD SEV-SNP o Intel TDX utilizzando gli strumenti Google:
Utilizza SSH per connetterti alla tua istanza Confidential VM.
Utilizza Go-TPM-Tools (AMD SEV-SNP o Intel TDX) o SEV Guest (AMD SEV-SNP) per recuperare un report di attestazione e i certificati associati.
Utilizza
gcetcbendorsement
per estrarre l'approvazione UEFI dall'attestazione e archiviarla in un file. Puoi quindi verificare che l'approvazione sia radicata in Google e che la misurazione del report di attestazione sia tra le misurazioni firmate.
Recuperare le approvazioni di lancio con i tuoi strumenti
Per recuperare un'approvazione del lancio utilizzando i tuoi strumenti, segui queste istruzioni.
AMD SEV-SNP
Invia una richiesta di ospite estesa al processore sicuro AMD per recuperare un report di attestazione.
Estrai la misurazione a 384 bit del report memorizzata all'offset
90h
. Per maggiori informazioni, consulta SEV Secure Nested Paging Firmware ABI Specification, capitolo 7.3, tabella 22.Utilizza la misurazione a 384 bit per scaricare un'approvazione di avvio di riferimento serializzata dal seguente bucket Cloud Storage:
gs://gce_tcb_integrity/ovmf_x64_csm/sevsnp/384_BIT_MEASUREMENT.binarypb
Decodifica il file BINARYPB con uno strumento come protoc, utilizzando la definizione del messaggio
VMLaunchEndorsement
:message VMLaunchEndorsement { bytes serialized_uefi_golden = 1; bytes signature = 2; }
Altre località di approvazione del lancio
L'approvazione dell'avvio potrebbe essere resa disponibile anche in una tabella GUID nel meccanismo di distribuzione dei certificati AMD SEV-SNP. Ha il seguente GUID:
9f4116cd-c503-4f5a-8f6f-fb68882f4ce2
La tabella GUID è documentata nella specifica del blocco di comunicazione dell'hypervisor ospite AMD, nella sezione Richiesta ospite estesa SNP.
Potrebbero essere presenti anche riferimenti a posizioni locali e remote dell'approvazione dell'avvio nel log eventi del client PC del Trusted Computing Group, disponibile nell'evento SP800-155 come documentato nella TCG PC Client Platform Firmware Profile Specification Version 1.06 Revision 52.
Intel TDX
Crea una voce configfs-tsm report:
name=/sys/kernel/config/tsm/report/report0 mkdir "${name}" cat "${your_nonce_file}" > "${name}/inblob" cat "${name}/outblob" > "${your_quote_destination}"
Estrai la misurazione del dominio attendibile MRTD a 384 bit della citazione memorizzata all'offset
b8h
(per il modulo TDX 1.5). Per ulteriori informazioni, consulta la libreria di preventivi TDX DCAP.Utilizza la misurazione a 384 bit per scaricare un'approvazione di avvio di riferimento serializzata dal seguente bucket Cloud Storage:
gs://gce_tcb_integrity/ovmf_x64_csm/tdx/384_BIT_MEASUREMENT.binarypb
Decodifica l'approvazione del lancio con uno strumento come protoc, utilizzando la definizione del messaggio
VMLaunchEndorsement
:message VMLaunchEndorsement { bytes serialized_uefi_golden = 1; bytes signature = 2; }
Esempio di lancio di un consiglio
Un'approvazione del lancio è simile al seguente esempio:
VMLaunchEndorsement:
serialized_uefi_golden: "SERIALIZED_BYTES"
signature: "LAUNCH_ENDORSEMENT_SIGNATURE_BYTES"
Misurazioni di riferimento UEFI
Il campo serialized_uefi_golden
contiene una versione serializzata di più valori, come definito dal seguente buffer di protocollo:
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;
}
Il campo VMSevSnp
nel messaggio VMGoldenMeasurement
è definito dal
seguente buffer di protocollo:
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;
}
Il campo VMTdx
nel messaggio VMGoldenMeasurement
è definito dal
seguente buffer di protocollo:
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;
}
Per estrarre e decodificare questi valori da serialized_uefi_golden field
con
i tuoi strumenti, completa i seguenti passaggi:
Alloca un nuovo messaggio
VMGoldenMeasurement
.Esegui l'unmarshal di
serialized_uefi_golden
nel messaggio.
In alternativa, puoi utilizzare il comando
gcetcbendorsement inspect
.
Verificare le approvazioni del lancio
Dopo aver recuperato un'approvazione di avvio, verifica la relativa firma e integra le relative misurazioni nella tua norma di sicurezza, se opportuno.
Verificare la firma di approvazione del lancio
Puoi verificare la firma di un'approvazione di lancio includendo il certificato della chiave radice della base di calcolo attendibile di Compute Engine Confidential Computing nei tuoi trust anchor.
Il campo cert
di VMGoldenMeasurement
nell'approvazione del lancio contiene
un certificato X.509v3 con codifica DER della chiave pubblica della chiave di firma dell'approvazione.
Il certificato è firmato dalla chiave radice.
Puoi utilizzare
gcetcbendorsement
per mostrare quali comandi openssl
eseguire per verificare la firma. Ad esempio, se
esegui questo comando:
gcetcbendorsement verify --show LAUNCH_ENDORSEMENT_FILENAME.binarypb
Dovresti ricevere una risposta simile al seguente esempio:
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")
Se preferisci utilizzare i tuoi strumenti, puoi sostituire i
comandi gcetcbendorsement inspect
utilizzati nella risposta con la tua logica di estrazione
del buffer del protocollo per i campi denominati del messaggio
VMGoldenMeasurement
deserializzato.
Verificare le misurazioni dell'approvazione del lancio
Il codice campione per la creazione di un'approvazione del lancio è disponibile nel
repository GitHub gce-tcb-verifier
.
Puoi utilizzare queste informazioni per capire in che modo Google ha derivato le misurazioni dall'UEFI e per incorporare le misurazioni pertinenti nelle tue norme di sicurezza.
Ad esempio, potresti verificare che il firmware sia firmato dal fornitore del firmware e confrontare le misurazioni specifiche dell'architettura con i valori precalcolati e firmati forniti nel messaggio VMLaunchEndorsement
.
Sebbene il firmware virtuale di Compute Engine venga aggiornato al ripristino, il valore PCR0 non cambia. Per questo motivo, il valore svn
del firmware
nella misurazione firmata potrebbe differire dal valore EV_S_CRTM_VERSION
misurato
in PCR0 e l'evento EV_POST_CODE
nel digest del blob del firmware viene ignorato.
Verifica il binario UEFI di un'istanza Confidential VM
Da un endorsement di lancio, decomprimi il valore
serialized_uefi_golden
in unVMGoldenMeasurement
. Per esempi, consulta l' implementazione in Go o la compilazione protoc diendorsement.proto
per un altro linguaggio che supporta i protocol buffer.Recupera il valore del digest da
VMGoldenMeasurement
. Questo è il digest SHA-384 del binario UEFI su cui è in esecuzione l'istanza Confidential VM.Utilizza il digest SHA-384 per scaricare il binario del firmware dal seguente bucket Cloud Storage:
gs://gce_tcb_integrity/ovmf_x64_csm/UEFI_BINARY_DIGEST.fd
Se si tratta di un URL valido e il firmware viene scaricato, esegui un hash SHA-384 sul file binario del firmware. Se corrisponde al digest della misurazione di riferimento, il firmware in esecuzione sull'istanza Confidential VM è in esecuzione senza modifiche.