O firmware de todas as instâncias de VM confidencial é UEFI e é baseado no projeto Open Virtual Machine Firmware. O firmware é gerenciado pelo Google para manter a segurança, o desempenho e a estabilidade.
O firmware gerenciado pelo Google também garante a consistência dos valores armazenados nos registros de medição na raiz de confiança de uma instância de VM confidencial. Isso ajuda a evitar que as cargas de trabalho de Computação confidencial sejam bloqueadas pela verificação de atestado quando o firmware de uma instância de VM confidencial é atualizado.
Para ajudar a estabelecer que a instância de VM confidencial está sendo executada em um firmware genuíno gerenciado pelo Google, execute as seguintes tarefas:
Recupere uma aprovação de lançamento assinada pelo Google em instâncias de VM confidenciais com AMD SEV-SNP ou Intel TDX ativados. Uma autorização de lançamento contém medições pré-calculadas e assinadas relacionadas ao firmware.
Verifique a aprovação de lançamento comparando com medições específicas da arquitetura.
Verifique se o binário UEFI é aprovado pelo Google e não foi modificado.
Além do atestado remoto, é possível incluir a verificação de firmware como parte da política de segurança que determina se uma instância de VM confidencial precisa ter acesso a recursos protegidos.
Extrair endossos de lançamento
Você pode recuperar as recomendações de lançamento usando ferramentas do Google ou suas próprias ferramentas.
Extrair endossos de lançamento com ferramentas do Google
Para recuperar uma autorização de lançamento de uma instância de VM confidencial AMD SEV-SNP ou Intel TDX usando ferramentas do Google:
Use o Go-TPM-Tools (AMD SEV-SNP ou Intel TDX) ou SEV Guest (AMD SEV-SNP) para extrair um relatório de atestado e certificados associados.
Use
gcetcbendorsement
para extrair a assinatura do UEFI do atestado e armazená-la em um arquivo. Em seguida, verifique se o endosso está vinculado ao Google e se a medição do relatório de atestado está entre as medições assinadas.
Extrair endossos de lançamento com suas próprias ferramentas
Para recuperar uma recomendação de lançamento usando suas próprias ferramentas, siga estas instruções.
AMD SEV-SNP
Faça uma solicitação de convidado estendida para o processador seguro AMD e extraia um relatório de atestado.
Extraia a medição de 384 bits do relatório armazenada no deslocamento
90h
. Para mais informações, consulte a especificação ABI do firmware de paginação aninhada segura do SEV (link em inglês), capítulo 7.3, tabela 22.Use a medição de 384 bits para fazer o download de uma recomendação de lançamento de referência serializada do seguinte bucket do Cloud Storage:
gs://gce_tcb_integrity/ovmf_x64_csm/sevsnp/384_BIT_MEASUREMENT.binarypb
Decodificar o arquivo BINARYPB com uma ferramenta como protoc, usando a definição de mensagem
VMLaunchEndorsement
:message VMLaunchEndorsement { bytes serialized_uefi_golden = 1; bytes signature = 2; }
Locais alternativos de lançamento
A aprovação de lançamento também pode ser disponibilizada em uma tabela GUID no mecanismo de entrega de certificados AMD SEV-SNP. Ele tem o seguinte GUID:
9f4116cd-c503-4f5a-8f6f-fb68882f4ce2
A tabela GUID está documentada na especificação de bloco de comunicação do convidado-hipervisor AMD, na seção "Solicitação de convidado estendida do SNP".
Também pode haver referências a locais locais e remotos da aprovação de lançamento no registro de eventos do cliente do Grupo de Computação Confiável para PC, encontrado no evento SP800-155, conforme documentado na especificação do perfil de firmware da plataforma de cliente do Grupo de Computação Confiável para PC, versão 1.06, revisão 52.
Intel TDX
Faça uma entrada configfs-tsm report:
name=/sys/kernel/config/tsm/report/report0 mkdir "${name}" cat "${your_nonce_file}" > "${name}/inblob" cat "${name}/outblob" > "${your_quote_destination}"
Extraia a medida de domínio de confiança de 384 bits da citação MRTD armazenada no deslocamento
b8h
(para o Módulo TDX 1.5). Para mais informações, consulte a biblioteca de cotações DCAP da TDX.Use a medição de 384 bits para fazer o download de uma recomendação de lançamento de referência serializada do seguinte bucket do Cloud Storage:
gs://gce_tcb_integrity/ovmf_x64_csm/tdx/384_BIT_MEASUREMENT.binarypb
Decodificar a autorização de lançamento com uma ferramenta como protoc, usando a definição de mensagem
VMLaunchEndorsement
:message VMLaunchEndorsement { bytes serialized_uefi_golden = 1; bytes signature = 2; }
Exemplo de recomendação de lançamento
Uma recomendação de lançamento é semelhante ao exemplo abaixo:
VMLaunchEndorsement:
serialized_uefi_golden: "SERIALIZED_BYTES"
signature: "LAUNCH_ENDORSEMENT_SIGNATURE_BYTES"
Medições douradas da UEFI
O campo serialized_uefi_golden
contém uma versão serializada de vários
valores, conforme definido pelo seguinte buffer 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;
}
O campo VMSevSnp
na mensagem VMGoldenMeasurement
é definido pelo
seguinte buffer 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;
}
O campo VMTdx
na mensagem VMGoldenMeasurement
é definido pelo
seguinte buffer 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 descompactar e decodificar esses valores do serialized_uefi_golden field
com
sua própria ferramenta, siga estas etapas:
Aloque uma nova mensagem
VMGoldenMeasurement
.Desempacote
serialized_uefi_golden
na mensagem.
Como alternativa, use o comando
gcetcbendorsement inspect
.
Verificar recomendações de lançamento
Depois de extrair uma assinatura de lançamento, verifique a assinatura e integre as medições à sua política de segurança, quando apropriado.
Verificar uma assinatura de endosso de lançamento
É possível verificar a assinatura de um endosso de lançamento incluindo o certificado de chave raiz de computação de computação confidencial do Compute Engine nas suas âncoras de confiança.
O campo cert
do VMGoldenMeasurement
no endosso de lançamento contém
um certificado X.509v3 codificado em DER da chave pública da chave de assinatura de endosso.
O certificado é assinado pela chave raiz.
Use
gcetcbendorsement
para mostrar quais comandos openssl
executar para verificar a assinatura. Por exemplo, se
você executar o seguinte comando:
gcetcbendorsement verify --show LAUNCH_ENDORSEMENT_FILENAME.binarypb
Você receberá uma resposta semelhante ao seguinte exemplo:
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 você preferir usar suas próprias ferramentas, substitua os comandos
gcetcbendorsement inspect
usados na resposta pela sua própria lógica de extração de buffer
de protocolo para os campos nomeados da mensagem
VMGoldenMeasurement
desserializada.
Verificar as medições de recomendação de lançamento
O código de exemplo sobre como criar uma recomendação de lançamento está disponível no
repositório do GitHub gce-tcb-verifier
.
Você pode usar isso para entender como o Google extraiu as medições do
UEFI e incorporar medições relevantes à sua política de segurança.
Por exemplo, você pode verificar se o firmware foi assinado pelo fornecedor,
e comparar as medições específicas da arquitetura com os valores pré-calculados e
assinados fornecidos na mensagem VMLaunchEndorsement
.
Embora o firmware virtual do Compute Engine seja atualizado na redefinição,
o valor do PCR0 não muda. Por isso, o valor svn
do firmware
na medição assinada pode ser diferente do EV_S_CRTM_VERSION
medido para
PCR0, e o evento EV_POST_CODE
no resumo de blob do firmware é ignorado.
Verificar o binário UEFI de uma instância de VM confidencial
Em um endosso de lançamento, descompacte o valor
serialized_uefi_golden
em umVMGoldenMeasurement
. Para conferir exemplos, consulte a implementação em Go ou a compilação do protoc deendorsement.proto
para outro idioma que ofereça suporte a buffers de protocolo.Extraia o valor de resumo de
VMGoldenMeasurement
. Este é o resumo SHA-384 do binário UEFI em que a instância de VM confidencial está sendo executada.Use o resumo SHA-384 para fazer o download do binário do firmware do seguinte bucket do Cloud Storage:
gs://gce_tcb_integrity/ovmf_x64_csm/UEFI_BINARY_DIGEST.fd
Se for um URL válido e o firmware for transferido, execute um hash SHA-384 no binário do firmware. Se ele corresponder ao resumo da medição ideal, o firmware em execução na instância de VM confidencial não será modificado.