Firmware untuk semua instance Confidential VM adalah UEFI, dan didasarkan pada project Open Virtual Machine Firmware. Firmware dikelola oleh Google untuk menjaga keamanan, performa, dan stabilitas.
Firmware yang dikelola Google juga memastikan konsistensi nilai yang disimpan dalam register pengukuran di root of trust untuk instance Confidential VM. Hal ini membantu mencegah workload Confidential Computing diblokir oleh verifikasi pengesahan saat firmware instance Confidential VM diupdate.
Untuk membantu memastikan bahwa instance Confidential VM Anda berjalan di firmware asli yang dikelola Google, Anda dapat melakukan tugas berikut:
Mengambil pengesahan peluncuran yang ditandatangani Google di instance Confidential VM dengan AMD SEV-SNP atau Intel TDX diaktifkan. Pengesahan peluncuran berisi pengukuran yang telah dihitung sebelumnya dan ditandatangani yang terkait dengan firmware.
Verifikasi pengesahan peluncuran dengan membandingkan dengan pengukuran khusus arsitektur.
Memverifikasi bahwa biner UEFI disahkan oleh Google dan tidak dimodifikasi.
Selain pengesahan jarak jauh, Anda dapat menyertakan verifikasi firmware sebagai bagian dari kebijakan keamanan yang menentukan apakah instance Confidential VM harus memiliki akses ke resource yang dilindungi.
Mengambil pengesahan peluncuran
Anda dapat mengambil pengesahan peluncuran menggunakan alat Google, atau alat Anda sendiri.
Mengambil pengesahan peluncuran dengan alat Google
Untuk mengambil pengesahan peluncuran dari instance Confidential VM AMD SEV-SNP atau Intel TDX menggunakan alat Google:
Gunakan SSH untuk terhubung ke instance Confidential VM Anda.
Gunakan Go-TPM-Tools (AMD SEV-SNP atau Intel TDX) atau SEV Guest (AMD SEV-SNP) untuk mengambil laporan pengesahan dan sertifikat terkait.
Gunakan
gcetcbendorsementuntuk mengekstrak pengesahan UEFI dari pengesahan dan menyimpannya dalam file. Kemudian, Anda dapat memverifikasi bahwa pengesahan di-root ke Google dan bahwa pengukuran laporan pengesahan berada di antara pengukuran yang ditandatangani.
Mengambil pengesahan peluncuran dengan alat Anda sendiri
Untuk mengambil pengesahan peluncuran menggunakan alat Anda sendiri, selesaikan petunjuk berikut.
AMD SEV-SNP
Buat permintaan tamu yang diperluas ke AMD Secure Processor untuk mengambil laporan pengesahan.
Ekstrak pengukuran 384-bit laporan yang disimpan di offset
90h. Untuk mengetahui informasi selengkapnya, lihat Spesifikasi ABI Firmware Halaman Bersarang Aman SEV, bab 7.3, tabel 22.Gunakan pengukuran 384-bit untuk mendownload pengesahan peluncuran referensi serial dari bucket Cloud Storage berikut:
gs://gce_tcb_integrity/ovmf_x64_csm/sevsnp/384_BIT_MEASUREMENT.binarypbDekode file BINARYPB dengan alat seperti protoc, menggunakan definisi pesan
VMLaunchEndorsementmessage VMLaunchEndorsement { bytes serialized_uefi_golden = 1; bytes signature = 2; }
Lokasi pengesahan peluncuran alternatif
Pengesahan peluncuran mungkin juga tersedia dalam tabel GUID di mekanisme pengiriman sertifikat AMD SEV-SNP. Pengesahan ini memiliki GUID berikut:
9f4116cd-c503-4f5a-8f6f-fb68882f4ce2
Tabel GUID didokumentasikan dalam spesifikasi Blok Komunikasi Tamu-Hypervisor AMD, di bagian Permintaan Tamu yang Diperluas SNP.
Mungkin juga ada referensi ke lokasi lokal dan jarak jauh pengesahan peluncuran di log peristiwa klien PC Trusted Computing Group, yang ditemukan dalam peristiwa SP800-155 seperti yang didokumentasikan dalam Spesifikasi Profil Firmware Platform Klien PC TCG Versi 1.06 Revisi 52.
Intel TDX
Buat entri laporan configfs-tsm:
name=/sys/kernel/config/tsm/report/report0 mkdir "${name}" cat "${your_nonce_file}" > "${name}/inblob" cat "${name}/outblob" > "${your_quote_destination}"Ekstrak pengukuran domain kepercayaan 384-bit kutipan MRTD yang disimpan di offset
b8h(untuk Modul TDX 1.5). Untuk mengetahui informasi selengkapnya, lihat library kutipan DCAP TDX.Gunakan pengukuran 384-bit untuk mendownload pengesahan peluncuran referensi serial dari bucket Cloud Storage berikut:
gs://gce_tcb_integrity/ovmf_x64_csm/tdx/384_BIT_MEASUREMENT.binarypbDekode pengesahan peluncuran dengan alat seperti protoc, menggunakan
VMLaunchEndorsementdefinisi pesan:message VMLaunchEndorsement { bytes serialized_uefi_golden = 1; bytes signature = 2; }
Contoh pengesahan peluncuran
Pengesahan peluncuran terlihat mirip dengan contoh berikut:
VMLaunchEndorsement:
serialized_uefi_golden: "SERIALIZED_BYTES"
signature: "LAUNCH_ENDORSEMENT_SIGNATURE_BYTES"
Pengukuran golden UEFI
Kolom serialized_uefi_golden berisi versi serial dari beberapa nilai, seperti yang ditentukan oleh buffering protokol berikut:
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;
}
Kolom VMSevSnp dalam pesan VMGoldenMeasurement ditentukan oleh buffering protokol berikut:
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;
}
Kolom VMTdx dalam pesan VMGoldenMeasurement ditentukan oleh buffering protokol berikut:
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;
}
Untuk menguraikan dan mendekode nilai ini dari serialized_uefi_golden field dengan alat Anda sendiri, selesaikan langkah-langkah berikut:
Alokasikan pesan
VMGoldenMeasurementbaru.Batalkan serialisasi
serialized_uefi_goldenke dalam pesan.
Atau, Anda dapat menggunakan perintah
gcetcbendorsement inspect
.
Memverifikasi pengesahan peluncuran
Setelah mengambil pengesahan peluncuran, verifikasi tanda tangannya, dan lalu integrasikan pengukurannya ke dalam kebijakan keamanan Anda jika sesuai.
Memverifikasi tanda tangan pengesahan peluncuran
Anda dapat memverifikasi tanda tangan pengesahan peluncuran dengan menyertakan sertifikat kunci root basis komputasi tepercaya Confidential Computing Compute Engine di anchor kepercayaan Anda.
Kolom cert VMGoldenMeasurement dalam pengesahan peluncuran berisi sertifikat X.509v3 yang dienkode DER dari kunci publik kunci penandatanganan pengesahan.
Sertifikat ditandatangani oleh kunci root.
Anda dapat menggunakan
gcetcbendorsement
untuk menampilkan perintah openssl yang akan dijalankan untuk memverifikasi tanda tangan. Misalnya, jika Anda menjalankan perintah berikut:
gcetcbendorsement verify --show LAUNCH_ENDORSEMENT_FILENAME.binarypb
Anda akan menerima respons yang mirip dengan contoh berikut:
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")
Jika lebih suka menggunakan alat Anda sendiri, Anda dapat mengganti perintah gcetcbendorsement inspect yang digunakan dalam respons dengan logika ekstraksi buffering protokol Anda sendiri untuk kolom bernama pesan VMGoldenMeasurement yang dideserialisasi.
Memverifikasi pengukuran pengesahan peluncuran
Kode contoh untuk cara pembuatan pengesahan peluncuran tersedia di repositori GitHub
gce-tcb-verifier.
Anda dapat menggunakannya untuk memahami cara Google memperoleh pengukuran dari UEFI, dan untuk menggabungkan pengukuran yang relevan ke dalam kebijakan keamanan Anda.
Misalnya, Anda dapat memeriksa apakah firmware ditandatangani oleh vendor firmware, dan membandingkan pengukuran khusus arsitektur dengan nilai yang telah dihitung sebelumnya dan ditandatangani yang disediakan dalam pesan VMLaunchEndorsement.
Meskipun firmware virtual Compute Engine diupgrade saat direset, nilai PCR0 tidak akan berubah. Karena hal ini, nilai svn firmware dalam pengukuran yang ditandatangani mungkin berbeda dengan EV_S_CRTM_VERSION yang diukur ke PCR0, dan peristiwa EV_POST_CODE dalam ringkasan blob firmware akan dilewati.
Memverifikasi biner UEFI instance Confidential VM
Dari pengesahan peluncuran, uraikan
serialized_uefi_goldennilai ke dalamVMGoldenMeasurement. Untuk contohnya, lihat implementasi di Go, atau kompilasi protocendorsement.protountuk bahasa lain yang mendukung buffering protokol.Ambil nilai ringkasan dari
VMGoldenMeasurement. Ini adalah ringkasan SHA-384 dari biner UEFI yang dijalankan oleh instance Confidential VM.Gunakan ringkasan SHA-384 untuk mendownload biner firmware dari bucket Cloud Storage berikut:
gs://gce_tcb_integrity/ovmf_x64_csm/UEFI_BINARY_DIGEST.fdJika URL-nya valid dan firmware didownload, lakukan hash SHA-384 pada biner firmware. Jika cocok dengan ringkasan dari pengukuran golden, firmware yang berjalan di instance Confidential VM Anda akan berjalan tanpa dimodifikasi.