Che cos'è la Shielded VM?

Questa pagina descrive i concetti chiave e la terminologia relativi alle Shielded VM. Per iniziare a utilizzare la Shielded VM, prova a consultare la guida rapida o consulta Modifica delle opzioni delle Shielded VM.

La Shielded VM offre integrità verificabile per le istanze VM di Compute Engine, per garantirti che le istanze non sono state compromesse da malware o rootkit a livello di avvio o di kernel.

L'integrità verificabile della Shielded VM viene raggiunta utilizzando le seguenti funzionalità:

Avvio protetto

L'avvio protetto garantisce che il sistema esegua solo software autentici verificando la firma digitale di tutti i componenti di avvio e interrompendo il processo di avvio in caso di mancata verifica della firma.

Le istanze VM schermate eseguono il firmware che è firmato e verificato utilizzando l'Autorità di certificazione di Google, assicurando che il firmware dell'istanza non sia modificato e stabilendo la radice di attendibilità per l'avvio protetto. Il firmware Unified Extensible Firmware Interface (UEFI) 2.3.1 gestisce in modo sicuro i certificati che contengono le chiavi utilizzate dai produttori di software per firmare il firmware di sistema, il bootloader di sistema e gli eventuali programmi binari caricati. Le istanze VM schermate utilizzano il firmware UEFI.

A ogni avvio, il firmware UEFI verifica la firma digitale di ogni componente di avvio in base all'archivio protetto delle chiavi approvate. Qualsiasi componente di avvio che non è firmato o non è firmato, non può essere eseguito.

In questo caso, il log della console seriale dell'istanza VM avrà una voce contenente le stringhe UEFI: Caricamento dell'immagine non riuscito e Stato: violazione della sicurezza, insieme a una descrizione dell'opzione di avvio che non è riuscita. Per risolvere l'errore, disattiva l'avvio protetto utilizzando le istruzioni in Modifica delle opzioni delle Shielded VM in modo da poter avviare l'istanza VM, diagnosticare e risolvere il problema, quindi riattivare l'avvio protetto.

Virtual Trusted Platform Module (vTPM)

Un vTPM è un modulo per la piattaforma attendibile virtualizzato, un chip di computer specializzato che puoi utilizzare per proteggere oggetti, come chiavi e certificati, che utilizzi per autenticare l'accesso al sistema. La vTPM della Shielded VM è completamente compatibile con la specifica della libreria TPM (Trusted Computing Group) 2.0 e utilizza la libreria BoringSSL. La libreria BoringSSL si basa sul modulo BoringCrypto. Per i dettagli relativi allo standard FIPS 140-2 per il modulo BoringCrypto, consulta il certificato 3678 del programma CMVP (Cryptographic Module Validation Program) del NIST.

La vTPM della Shielded VM consente l'avvio con misurazioni eseguendo le misurazioni necessarie per creare una solida base di avvio nota, chiamata base di riferimento per i criteri di integrità. La base dei criteri di integrità viene utilizzata per il confronto con le misurazioni dei successivi avvio delle VM, per determinare se sono state apportate modifiche.

Puoi inoltre utilizzare il vTPM per proteggere i secret tramite schermatura o sigillatura. Vedi il progetto Go-TPM su esempi di linguaggio GitHub per Go che illustrano come utilizzare un vTPM per questo scopo.

Avvio con misurazioni

Durante l'avvio con misurazioni, viene creato un hash di ogni componente (ad esempio, il firmware, il bootloader o il kernel) che viene caricato e poi concatenato, quindi sottoposto nuovamente ad hashing con tutti gli hash di eventuali componenti già caricati, come illustrato di seguito:

Diagramma del processo di avvio con misurazioni

Questa informazione identifica sia i componenti che sono stati caricati, sia il loro ordine di caricamento.

La prima volta che si avvia un'istanza VM, l'avvio con misurazioni crea la baseline dei criteri di integrità per il primo insieme di queste misurazioni e archivia in modo sicuro questi dati. Ogni volta che viene avviata l'istanza VM, queste misurazioni vengono riprese di nuovo e archiviate nella memoria sicura fino al successivo riavvio. Questi due set di misurazioni consentono il monitoraggio dell'integrità, che puoi utilizzare per determinare se sono state apportate modifiche alla sequenza di avvio di un'istanza VM.

Monitoraggio dell'integrità

Il monitoraggio dell'integrità consente di comprendere e prendere decisioni sullo stato delle istanze VM.

Il monitoraggio dell'integrità fa affidamento sulle misurazioni create da Avvio con misurazioni, che utilizza i registri di configurazione della piattaforma (PCR) per archiviare informazioni sui componenti e sull'ordine di caricamento dei componenti sia della baseline dei criteri di integrità (una sequenza di avvio nota), sia della sequenza di avvio più recente.

Il monitoraggio dell'integrità confronta le misurazioni di avvio più recenti con la base di riferimento sui criteri di integrità e restituisce una coppia di risultati pass/fail a seconda che corrispondano o meno, uno per la sequenza di avvio iniziale e uno per la sequenza di avvio in ritardo. L'avvio iniziale è la sequenza di avvio dall'inizio del firmware UEFI finché non passa il controllo al bootloader. L'avvio in ritardo è la sequenza di avvio dal bootloader, fino a quando non trasmette il controllo al kernel del sistema operativo. Se una delle parti della sequenza di avvio più recente non corrisponde alla base di riferimento, viene restituito un errore di convalida dell'integrità.

Se si tratta di un errore previsto, ad esempio se hai applicato un aggiornamento di sistema sull'istanza VM in questione, devi aggiornare la base di riferimento dei criteri di integrità. L'aggiornamento della base dei criteri di integrità imposta la base delle misurazioni acquisite dalla sequenza di avvio più recente. Se non è previsto, devi arrestare l'istanza VM e analizzare il motivo dell'errore.

Puoi visualizzare i rapporti sull'integrità in Cloud Monitoring e impostare avvisi sugli errori di integrità. Puoi esaminare i dettagli dei risultati del monitoraggio dell'integrità in Cloud Logging. Per ulteriori informazioni, consulta Monitoraggio dell'integrità sulle istanze VM schermate.

Eventi di monitoraggio dell'integrità

La VM schermata consente di creare voci di log per i seguenti tipi di eventi:

  • clearTPMEvent: indica se il vTPM è stato cancellato, eliminando così tutti i secret archiviati al suo interno. Ciò non influisce su alcun aspetto della Shielded VM, quindi ti interesserà solo se utilizzi il vTPM per proteggere i dati sensibili come descritto in Virtual Trusted Platform Module (vTPM).
  • earlyBootReportEvent: identifica se è stato superato il controllo dell'integrità della sequenza di avvio iniziale e fornisce dettagli sui valori PCR della base di riferimento e sulla sequenza di avvio più recente confrontata per effettuare tale determinazione.
  • lateBootReportEvent: identifica se è stato superato il controllo dell'integrità della sequenza di avvio in ritardo e fornisce dettagli sui valori PCR della base di riferimento e sulla sequenza di avvio più recente confrontata per effettuare tale determinazione.
  • setShieldedInstanceIntegrityPolicy: registrati ogni volta che aggiorni la base di riferimento sui criteri di integrità.
  • shutdownEvent: registrato ogni volta che l'istanza VM viene arrestata.
  • startupEvent: registrato ogni volta che viene avviata l'istanza VM. Le informazioni interessanti in questo evento sono il valore bootCounter, che identifica quante volte questa istanza è stata riavviata.
  • updateShieldedInstanceConfig: registrato ogni volta che attivi o disattivi una delle opzioni Shielded VM.

La progressione dell'evento tipica che vedi nei log è startupEvent, earlyBootReportEvent, lateBootReportEvent e infine shutdownEvent, tutti con lo stesso valore bootCounter per identificarli come descrizioni della stessa sequenza di avvio delle istanze VM.

Se aggiorni la base di riferimento dei criteri di integrità in risposta a un errore di integrità previsto in un'istanza VM, verranno visualizzati ulteriori eventi earlyBootReportEvent e lateBootReportEvent che descrivono le nuove misurazioni di base dei criteri di integrità. L'esempio seguente mostra la sequenza prevista:

  • startupEvent
  • earlyBootReportEvent che confronta la base di riferimento originale con la sequenza di avvio più recente (pass)
  • lateBootReportEvent che confronta la base di riferimento originale con la sequenza di avvio più recente (non riuscito)
  • setShieldedInstanceIntegrityPolicy quando aggiorni la base di riferimento del criterio di integrità, che imposta la base di riferimento alle misurazioni acquisite dall'ultima sequenza di avvio.
  • earlyBootReportEvent che confronta la nuova base di riferimento con la sequenza di avvio più recente (pass)
  • lateBootReportEvent che confronta la nuova base di riferimento con la sequenza di avvio più recente (pass)

Windows

earlyBootReportEvent

earlyBootReportEvent contiene le seguenti sezioni ed elementi:

  • actualMeasurements: contiene i valori relativi alla configurazione di piattaforma (PCR) per l'ultima sequenza di avvio. I valori PCR sono ciò che identifica i componenti di avvio e l'ordine di caricamento dei componenti utilizzati dalla sequenza di avvio più recente e che vengono confrontati con la base di criteri del livello di integrità (i cui valori sono acquisiti nella sezione policyMeasurements) per determinare se sono state apportate modifiche alla sequenza di avvio delle istanze VM. La sezione actualMeasurements contiene i seguenti elementi:

    • 0: contiene il valore per PCR0, che contiene informazioni sui componenti del firmware. Questa PCR non è implementata e contiene un valore statico. Non viene utilizzata durante la convalida della sequenza di avvio più recente rispetto alla base di riferimento sui criteri di integrità.
    • 1: contiene il valore per PCR4, che contiene informazioni sul codice boot manager UEFI e sui tentativi di avvio.
    • 2: contiene il valore per PCR5, che contiene informazioni sulla tabella delle partizioni GUID del disco. Non viene utilizzato durante la convalida della sequenza di avvio più recente rispetto alla baseline dei criteri di integrità.
    • 3: contiene il valore per PCR7, che contiene informazioni sul criterio di avvio protetto dell'istanza.
  • policyEvaluationPassed: indica se la sezione specificata della sequenza di avvio ha superato la verifica rispetto alla base di riferimento dei criteri di integrità.

  • policyMeasurements: contiene i valori PCR per la base di riferimento sulle norme di integrità La sezione policyMeasurements contiene i seguenti elementi:

    • 0: contiene il valore per PCR0, che contiene informazioni sui componenti del firmware. Questa PCR non è implementata e contiene un valore statico. Non viene utilizzata durante la convalida della sequenza di avvio più recente rispetto alla base di riferimento sui criteri di integrità.
    • 1: contiene il valore per PCR4, che contiene informazioni sul codice boot manager UEFI e sui tentativi di avvio.
    • 2: contiene il valore per PCR7, che contiene informazioni sul criterio di avvio protetto dell'istanza.

Per informazioni su come utilizzare i valori PCR di earlyBootReportEvent per diagnosticare un errore di convalida dell'integrità di avvio, consulta Determinare la causa dell'errore di convalida dell'integrità di avvio.

lateBootReportEvent

lateBootReportEvent contiene le seguenti sezioni ed elementi:

  • actualMeasurements: contiene i valori relativi alla configurazione di piattaforma (PCR) per l'ultima sequenza di avvio. I valori PCR sono ciò che identifica i componenti di avvio e l'ordine di caricamento dei componenti utilizzati dalla sequenza di avvio più recente e che vengono confrontati con la base di criteri del livello di integrità (i cui valori sono acquisiti nella sezione policyMeasurements) per determinare se sono state apportate modifiche alla sequenza di avvio delle istanze VM. La sezione actualMeasurements contiene i seguenti elementi:

    • 0: contiene il valore per PCR0, che contiene informazioni sui componenti del firmware. Questo PCR non è implementato e contiene invece un valore statico. Non viene utilizzato durante la convalida della sequenza di avvio più recente rispetto alla baseline dei criteri di integrità.
    • 1: contiene il valore per PCR4, che contiene informazioni sul codice boot manager UEFI e sui tentativi di avvio.
    • 2: contiene il valore per PCR5, che contiene informazioni sulla tabella delle partizioni GUID del disco. Non viene utilizzato durante la convalida della sequenza di avvio più recente rispetto alla baseline dei criteri di integrità.
    • 3: contiene il valore per PCR7, che contiene informazioni sul criterio di avvio protetto dell'istanza.
    • 4: contiene il valore per PCR11, che contiene informazioni sul controllo di accesso di BitLocker Drive Encryption.
    • 5: contiene il valore per PCR12, che contiene informazioni sugli eventi dati. Non viene utilizzato durante la convalida della sequenza di avvio più recente rispetto alla baseline dei criteri di integrità.
    • 6: contiene il valore per PCR13, che contiene informazioni sul kernel di Windows e i driver di avvio.
    • 7: contiene il valore per PCR14, che contiene informazioni sulle autorità di avvio di Windows.
  • policyEvaluationPassed: indica se la sezione specificata della sequenza di avvio ha superato la verifica rispetto alla base di riferimento dei criteri di integrità.

  • policyMeasurements: contiene i valori PCR per la base di riferimento sulle norme di integrità La sezione policyMeasurements contiene i seguenti elementi:

    • 0: contiene il valore per PCR0, che contiene informazioni sui componenti del firmware. Questa PCR non è implementata e contiene un valore statico. Non viene utilizzata durante la convalida della sequenza di avvio più recente rispetto alla base di riferimento sui criteri di integrità.
    • 1: contiene il valore per PCR4, che contiene informazioni sul codice boot manager UEFI e sui tentativi di avvio.
    • 2: contiene il valore per PCR7, che contiene informazioni sul criterio di avvio protetto dell'istanza.
    • 3: contiene il valore per PCR11, che contiene informazioni sul controllo di accesso di BitLocker Drive Encryption.
    • 4: contiene il valore per PCR13, che contiene informazioni sul kernel di Windows e i driver di avvio.
    • 5: contiene il valore per PCR14, che contiene informazioni sulle autorità di avvio di Windows.

Per informazioni su come utilizzare i valori PCR di lateBootReportEvent per diagnosticare un errore di convalida dell'integrità di avvio, consulta Determinare la causa dell'errore di convalida dell'integrità di avvio.

Linux

earlyBootReportEvent

earlyBootReportEvent contiene le seguenti sezioni ed elementi:

  • actualMeasurements: contiene i valori relativi alla configurazione di piattaforma (PCR) per l'ultima sequenza di avvio. I valori PCR sono ciò che identifica i componenti di avvio e l'ordine di caricamento dei componenti utilizzati dalla sequenza di avvio più recente e che vengono confrontati con la base di criteri del livello di integrità (i cui valori sono acquisiti nella sezione policyMeasurements) per determinare se sono state apportate modifiche alla sequenza di avvio delle istanze VM. La sezione actualMeasurements contiene i seguenti elementi:

    • 0: contiene il valore per PCR0, che contiene informazioni sui componenti del firmware. Questo PCR non è implementato e contiene invece un valore statico. Non viene utilizzato durante la convalida della sequenza di avvio più recente rispetto alla baseline dei criteri di integrità.
    • 1: contiene il valore per PCR4, che contiene informazioni sullo shim del sistema operativo.
    • 2: contiene il valore per PCR5, che contiene informazioni sulla tabella delle partizioni GUID del disco. Non viene utilizzato durante la convalida della sequenza di avvio più recente rispetto alla baseline dei criteri di integrità.
    • 3: contiene il valore per PCR7, che contiene informazioni sul criterio di avvio protetto dell'istanza.
  • policyEvaluationPassed: indica se la sezione specificata della sequenza di avvio ha superato la verifica rispetto alla base di riferimento sui criteri di integrità.

  • policyMeasurements: contiene i valori PCR per la base di riferimento sulle norme di integrità La sezione policyMeasurements contiene i seguenti elementi:

    • 0: contiene il valore per PCR0, che contiene informazioni sui componenti del firmware. Questa PCR non è implementata e contiene un valore statico. Non viene utilizzata durante la convalida della sequenza di avvio più recente rispetto alla base di riferimento sui criteri di integrità.
    • 1: contiene il valore per PCR4, che contiene informazioni sullo shim del sistema operativo.
    • 2: contiene il valore per PCR7, che contiene informazioni sul criterio di avvio protetto dell'istanza.

Per informazioni su come utilizzare i valori PCR di earlyBootReportEvent per diagnosticare un errore di convalida dell'integrità di avvio, consulta Determinare la causa dell'errore di convalida dell'integrità di avvio.

lateBootReportEvent

lateBootReportEvent contiene le seguenti sezioni ed elementi:

  • actualMeasurements: contiene i valori relativi alla configurazione di piattaforma (PCR) per l'ultima sequenza di avvio. I valori PCR sono ciò che identifica i componenti di avvio e l'ordine di caricamento dei componenti utilizzati dalla sequenza di avvio più recente e che vengono confrontati con la base di riferimento dei criteri di integrità (i cui valori sono acquisiti nella sezione policyMeasurements) per determinare se sono state apportate modifiche alla sequenza di avvio delle istanze VM. La sezione actualMeasurements contiene i seguenti elementi:

    • 0: contiene il valore per PCR0, che contiene informazioni sui componenti del firmware. Questa PCR non è implementata e contiene un valore statico. Non viene utilizzata durante la convalida della sequenza di avvio più recente rispetto alla base di riferimento sui criteri di integrità.
    • 1: contiene il valore per PCR4, che contiene informazioni sul bootloader di seconda fase e sul kernel.
    • 2: contiene il valore per PCR5, che contiene informazioni sulla tabella delle partizioni GUID del disco. Non viene utilizzato durante la convalida della sequenza di avvio più recente rispetto alla baseline dei criteri di integrità.
    • 3: contiene il valore per PCR7, che contiene informazioni sul criterio di avvio protetto dell'istanza.
  • policyEvaluationPassed: indica se la sezione specificata della sequenza di avvio ha superato la verifica rispetto alla base di riferimento sui criteri di integrità.

  • policyMeasurements: contiene i valori PCR per la base di riferimento sulle norme di integrità La sezione policyMeasurements contiene i seguenti elementi:

    • 0: contiene il valore per PCR0, che contiene informazioni sui componenti del firmware. Questa PCR non è implementata e contiene un valore statico. Non viene utilizzata durante la convalida della sequenza di avvio più recente rispetto alla base di riferimento sui criteri di integrità.
    • 1: contiene il valore per PCR4, che contiene informazioni sul bootloader di seconda fase e sul kernel.
    • 2: contiene il valore per PCR7, che contiene informazioni sul criterio di avvio protetto dell'istanza.

Per informazioni su come utilizzare i valori PCR di lateBootReportEvent per diagnosticare un errore di convalida dell'integrità di avvio, consulta Determinare la causa dell'errore di convalida dell'integrità di avvio.

Utilizzo di BitLocker con immagini Shielded VM

Puoi abilitare BitLocker per i dischi di avvio di Windows che fanno parte delle immagini VM schermate. Le immagini Shielded VM offrono funzionalità di sicurezza quali firmware conforme a UEFI, Avvio protetto, Avvio con protezione vTPM e monitoraggio dell'integrità. I controlli di vTPM e integrità sono attivati per impostazione predefinita e Google consiglia di attivare l'avvio protetto, se possibile.

Se scegli di abilitare BitLocker su un disco di avvio di Windows che fa parte di un'immagine VM schermata, ti consigliamo vivamente di salvare il codice di ripristino in una posizione sicura perché, se non hai il codice di ripristino, non puoi recuperare i dati.

Prendi in considerazione quanto segue prima di attivare BitLocker su un disco di avvio di Windows che fa parte di un'immagine Shielded VM:

  • Sui dischi di avvio delle Shielded VM, BitLocker utilizza il vTPM per archiviare le chiavi di crittografia e il vTPM è associato definitivamente alla VM su cui è stato creato. Ciò significa che puoi ripristinare uno snapshot di un disco di avvio VM schermato su un altro disco permanente, ma che non puoi decriptarlo perché il vTPM contenente le chiavi BitLocker non è disponibile. Se hai un codice di recupero, puoi recuperare i dati seguendo le istruzioni riportate nella guida al recupero di BitLocker. Se non hai un codice di recupero, i dati sul disco non potranno essere recuperati.

  • Sui dischi di dati Shielded VM, i dati di dischi permanenti sono criptati per impostazione predefinita. L'attivazione di BitLocker oltre alla crittografia del disco permanente non influisce sulla velocità effettiva, ma potrebbe aumentare leggermente l'utilizzo di vCPU. L'attivazione di BitLocker sui dischi di dati collegati alla VM non comporta le stesse verifiche di ripristino dei dischi di avvio. Questo perché le chiavi di crittografia BitLocker per i dischi di dati non sono archiviate nel vTPM. Se hai perso la possibilità di sbloccare il disco normalmente e hai la chiave di ripristino, puoi collegare il disco a un'altra VM non criptata e recuperarlo da lì. Se non hai un codice di recupero, i dati sul disco non possono essere recuperati.

Autorizzazione Identity and Access Management

La Shielded VM utilizza IAM per l'autorizzazione.

Le operazioni delle VM schermate utilizzano le seguenti autorizzazioni di Compute Engine:

  • compute.instances.updateShieldedInstanceConfig: consente all'utente di modificare le opzioni delle Shielded VM in un'istanza VM.
  • compute.instances.setShieldedInstanceIntegrityPolicy: consente all'utente di aggiornare la base di riferimento sui criteri di integrità su un'istanza VM.
  • compute.instances.getShieldedInstanceIdentity: consente all'utente di recuperare le informazioni della chiave di approvazione dal vTPM.

Le autorizzazioni delle VM schermate utilizzano le seguenti autorizzazioni di Compute Engine:

  • roles/compute.instanceAdmin.v1
  • roles/compute.securityAdmin

Puoi anche concedere autorizzazioni a Shielded VM ai ruoli personalizzati.

Vincoli dei criteri dell'organizzazione per la VM schermata

Puoi impostare il vincolo dei criteri dell'organizzazione constraints/compute.requireShieldedVm su True per richiedere che le istanze VM di Compute Engine create nella tua organizzazione siano istanze Shielded VM.

Scopri come impostare il vincolo constraints/compute.requireShieldedVm in Utilizzo dei vincoli booleani nei criteri dell'organizzazione. Per impostare un vincolo, devi essere un amministratore dei criteri dell'organizzazione.

Passaggi successivi