Shielded VM

Shielded VM bietet für Compute Engine-VM-Instanzen eine überprüfbare Integrität, sodass Sie sich sicher sein können, dass Ihre Instanzen nicht durch Malware oder Rootkits auf Boot- oder Kernel-Ebene manipuliert wurden. Diese überprüfbare Integrität von Shielded VM wird mithilfe von Secure Boot, Measured Boot und Integritätsüberwachung mit aktiviertem vTPM (Virtual Trusted Platform Module) erreicht.

Shielded VM ist das erste Angebot der Shielded Cloud-Initiative. Diese hat zum Ziel, für die gesamte Google Cloud Platform (GCP) eine noch bessere Sicherheitsgrundlage zu schaffen. Erreicht werden soll dies durch die Bereitstellung von überprüfbarer Integrität sowie von Funktionen wie vTPM-Abschirmung oder Versiegelung, wodurch eine Daten-Exfiltration verhindert werden kann.

Secure Boot

Secure Boot sorgt dafür, dass das System nur authentische Software ausführt, indem die digitale Signatur aller Startkomponenten überprüft und der Startvorgang angehalten wird, wenn die Signaturüberprüfung fehlschlägt.

Shielded VM-Instanzen führen Firmware aus, die von der Zertifizierungsstelle von Google signiert und verifiziert wurde. Dadurch wird sichergestellt, dass die Firmware der Instanz unverändert bleibt und für Secure Boot ein Root of Trust eingerichtet wird. Die Firmware Unified Extensible Firmware Interface (UEFI) 2.3.1 sorgt für die sichere Verwaltung der Zertifikate, die die Schlüssel enthalten, mit denen die Softwarehersteller die Firmware, den Bootloader und von ihnen geladene Binärdateien signieren. Shielded VM-Instanzen verwenden UEFI-Firmware.

Bei jedem Start überprüft die UEFI-Firmware die digitale Signatur jeder Startkomponente anhand des sicheren Speichers mit genehmigten Schlüsseln. Die Ausführung von Startkomponenten, die nicht ordnungsgemäß oder überhaupt nicht signiert sind, wird untersagt.

Sollte dieser Fall auftreten, zeigt die VM-Instanz einen Fehlerstatus in der GCP Console an und das Log der seriellen Konsole der VM-Instanz enthält einen Eintrag mit den Strings UEFI: Failed to load image (Image konnte nicht geladen werden) und Status: Security Violation (Sicherheitsverletzung) sowie eine Beschreibung der Startoption, die fehlgeschlagen ist. Deaktivieren Sie zur Behebung des Fehlers Secure Boot anhand der Anleitung unter Shielded VM-Optionen ändern. Danach können Sie die VM-Instanz booten, das Problem diagnostizieren und beheben und dann Secure Boot wieder aktivieren.

Virtual Trusted Platform Module (vTPM)

Ein vTPM ist ein virtualisiertes vertrauenswürdiges Plattformmodul. Dabei handelt es sich um einen speziellen Computerchip für den Schutz von Objekten wie Schlüsseln und Zertifikaten, mit denen Sie den Zugriff auf Ihr System authentifizieren. Das vTPM für Shielded VM ist vollständig kompatibel mit der Bibliotheksspezifikation 2.0 der Trusted Computing Group (TPM) und verwendet BoringSSL, das über FIPS 140-2 L1 validiert ist.

Mit einem vTPM für Shielded VM wird Measured Boot möglich. Dafür werden Messungen durchgeführt, die zum Erstellen einer als funktionierend bekannten Startreferenz erforderlich sind, der sogenannten Referenz der Integritätsrichtlinie. Die Referenz der Integritätsrichtlinie wird für den Vergleich mit Messungen aus nachfolgenden VM-Starts herangezogen, um festzustellen, ob sich etwas geändert hat.

Sie können das vTPM auch verwenden, um Secrets durch Abschirmung oder Versiegelung zu schützen. Auf GitHub finden Sie im Projekt Go-TPM Beispiele dafür, wie Sie in der Sprache Go ein vTPM für diesen Zweck verwenden.

Measured Boot

Bei einem Measured Boot wird ein Hash jeder Komponente (z. B. der Firmware, des Bootloaders oder des Kernels) erstellt, wenn die Komponente geladen wird. Dieser Hash wird dann mit den Hashes aller Komponenten, die bereits geladen wurden, verkettet und noch einmal gehasht, wie in der folgenden Abbildung dargestellt:

Measured Boot-Vorgang.

Diese Information identifiziert sowohl die Komponenten, die geladen wurden, als auch ihre Ladereihenfolge.

Wenn Sie eine VM-Instanz zum ersten Mal booten, erstellt Measured Boot die Referenz der Integritätsrichtlinie aus dem ersten Satz dieser Messungen und speichert diese Daten sicher. Jedes Mal, wenn die VM-Instanz danach startet, werden diese Messungen noch einmal ausgeführt und bis zum nächsten Neustart sicher gespeichert. Diese beiden Sätze von Messungen ermöglichen die Integritätsüberwachung, mit der Sie feststellen können, ob Änderungen an der Startsequenz einer VM-Instanz vorgenommen wurden.

Integritätsüberwachung

Die Integritätsüberwachung hilft Ihnen, den Zustand Ihrer VM-Instanzen zu verstehen und entsprechende Entscheidungen zu treffen.

Sie beruht auf den Messungen, die beim Measured Boot erstellt wurden und die Plattformkonfigurationsregister (Platform Configuration Registers, PCRs) verwenden, um Informationen über die Komponenten und ihre Ladereihenfolge sowohl in der Referenz der Integritätsrichtlinie (einer als funktionierend bekannten Startsequenz) als auch während der letzten Startsequenz zu speichern.

Die Integritätsüberwachung vergleicht die letzten Startmessungen mit der Referenz der Integritätsrichtlinie und gibt ein Ergebnispaar aus zwei jeweils bestandenen oder nicht bestandenen Messungen zurück, je nachdem, ob die Messungen übereinstimmen oder nicht. Ein Ergebnis gilt für die frühe Startsequenz, das andere für die späte Startsequenz. Die frühe Startsequenz ist die Startsequenz vom Start der UEFI-Firmware bis zur Übergabe der Kontrolle an den Bootloader. Die späte Startsequenz ist die Startsequenz vom Bootloader bis zur Übergabe der Kontrolle an den Betriebssystem-Kernel. Wenn einer dieser Teile der letzten Startsequenz nicht mit der Referenz übereinstimmt, wird ein Fehler bei der Integritätsprüfung ausgegeben.

Wenn es sich um einen erwarteten Fehler handelt, z. B. wenn Sie ein Systemupdate für diese VM-Instanz angewendet haben, sollten Sie die Referenz der Integritätsrichtlinie aktualisieren. Durch das Aktualisieren der Referenz der Integritätsrichtlinie werden die beim letzten Start erfassten Messungen als neue Referenz der Integritätsrichtlinie festgelegt. Haben Sie den Fehler nicht erwartet, sollten Sie diese VM-Instanz stoppen und den Grund für den Fehler untersuchen.

Sie können Integritätsberichte in Stackdriver Monitoring aufrufen und Warnungen zu Integritätsfehlern festlegen. Die Ergebnisdetails der Integritätsüberwachung können Sie in Stackdriver Logging überprüfen. Weitere Informationen finden Sie unter Integrität von Shielded VM-Instanzen überwachen.

Integritätsüberwachungsereignisse

Shielded VM erstellt Logeinträge für die folgenden Ereignistypen:

  • clearTPMEvent gibt an, ob das vTPM gelöscht wurde, wodurch alle darin gespeicherten Secrets gelöscht werden. Dies wirkt sich nicht auf Shielded VM aus. Es betrifft Sie also nur, wenn Sie das vTPM zur Abschirmung sensibler Daten verwenden, wie unter Virtual Trusted Platform Module (vTPM) beschrieben.
  • earlyBootReportEvent gibt an, ob die Integritätsprüfung der frühen Startsequenz bestanden wurde, und bietet Details zu den PCR-Werten aus der Referenz und aus der letzten Startsequenz, die für dieses Ergebnis verglichen wurden.
  • lateBootReportEvent gibt an, ob die Integritätsprüfung der späten Startsequenz bestanden wurde, und bietet Details zu den PCR-Werten aus der Referenz und aus der letzten Startsequenz, die für dieses Ergebnis verglichen wurden.
  • setShieldedInstanceIntegrityPolicy wird bei jeder Aktualisierung der Referenz der Integritätsrichtlinie protokolliert.
  • shutdownEvent wird bei jeder Beendigung der VM-Instanz protokolliert.
  • startupEvent wird bei jedem Start der VM-Instanz protokolliert. Interessant hierbei ist der Wert für bootCounter, der anzeigt, wie oft diese Instanz neu gestartet wurde.
  • updateShieldedInstanceConfig wird bei jeder Aktivierung oder Deaktivierung der Shielded VM-Optionen protokolliert.

Die typische Ereignisabfolge in den Logs ist: startupEvent, earlyBootReportEvent, lateBootReportEvent und schließlich shutdownEvent. Alle haben denselben Wert für bootCounter, der sie als Ereignisse derselben Startsequenz der VM-Instanz identifiziert.

Wenn Sie als Reaktion auf einen erwarteten Integritätsfehler in einer VM-Instanz die Referenz der Integritätsrichtlinie aktualisieren, werden zusätzlich die Ereignisse earlyBootReportEvent und lateBootReportEvent aufgeführt, die die Messungen für die neue Referenz der Integritätsrichtlinie beschreiben. Hier sehen Sie ein Beispiel für den erwarteten Ablauf:

  • startupEvent
  • earlyBootReportEvent vergleicht die ursprüngliche Referenz mit der letzten Startsequenz (bestanden).
  • lateBootReportEvent vergleicht die ursprüngliche Referenz mit der letzten Startsequenz (fehlgeschlagen).
  • setShieldedInstanceIntegrityPolicy legt beim Aktualisieren der Referenz der Integritätsrichtlinie die bei der letzten Startsequenz erfassten Messungen als neue Referenz der Integritätsrichtlinie fest.
  • earlyBootReportEvent vergleicht die neue Referenz mit der letzten Startsequenz (bestanden).
  • lateBootReportEvent vergleicht die neue Referenz mit der letzten Startsequenz (bestanden).

Windows

earlyBootReportEvent

Die wichtige Information in earlyBootReportEvent befindet sich im Abschnitt earlyBootReportEvent, der die folgenden Abschnitte und Elemente enthält:

  • actualMeasurements enthält die Werte des Platform Configuration Register (PCR) für die letzte Startsequenz. Die PCR-Werte geben die Startkomponenten und ihre Ladereihenfolge in der letzten Startsequenz an. Sie werden mit der Referenz der Integritätsrichtlinie verglichen, deren Werte im Abschnitt policyMeasurements erfasst sind. Damit wird festgestellt, ob bei der Startsequenz der VM-Instanz eine Änderung aufgetreten ist. Der Abschnitt actualMeasurements enthält die folgenden Elemente:

    • 0 enthält den Wert für PCR0, das Informationen zu Firmwarekomponenten enthält. Dieses PCR ist nicht implementiert und enthält stattdessen einen statischen Wert. Bei der Überprüfung der letzten Startsequenz anhand der Referenz der Integritätsrichtlinie wird es nicht verwendet.
    • 1 enthält den Wert für PCR4, das Informationen über den Code des UEFI-Bootmanagers und Startversuche enthält.
    • 2 enthält den Wert für PCR5, das Informationen zur GUID-Partitionstabelle des Laufwerks enthält. Bei der Überprüfung der letzten Startsequenz anhand der Referenz der Integritätsrichtlinie wird es nicht verwendet.
    • 3 enthält den Wert für PCR7, das Informationen zur Secure Boot-Richtlinie der Instanz enthält.
  • policyEvaluationPassed gibt an, ob der angegebene Abschnitt der Startsequenz die Überprüfung anhand der Referenz der Integritätsrichtlinie bestanden hat.

  • policyMeasurements enthält die PCR-Werte für die Referenz der Integritätsrichtlinie. Der Abschnitt policyMeasurements enthält die folgenden Elemente:

    • 0 enthält den Wert für PCR0, das Informationen zu Firmwarekomponenten enthält. Dieses PCR ist nicht implementiert und enthält stattdessen einen statischen Wert. Bei der Überprüfung der letzten Startsequenz anhand der Referenz der Integritätsrichtlinie wird es nicht verwendet.
    • 1 enthält den Wert für PCR4, das Informationen über den Code des UEFI-Bootmanagers und Startversuche enthält.
    • 2 enthält den Wert für PCR7, das Informationen zur Secure Boot-Richtlinie der Instanz enthält.

Wie Sie die PCR-Werte in earlyBootReportEvent verwenden, um einen Fehler bei der Startintegritätsprüfung zu diagnostizieren, erfahren Sie unter Ursache für das Fehlschlagen der Startintegritätsprüfung ermitteln.

lateBootReportEvent

Die wichtige Information in lateBootReportEvent befindet sich im Abschnitt lateBootReportEvent, der die folgenden Abschnitte und Elemente enthält:

  • actualMeasurements enthält die Werte des Platform Configuration Register (PCR) für die letzte Startsequenz. Die PCR-Werte geben die Startkomponenten und ihre Ladereihenfolge in der letzten Startsequenz an. Sie werden mit der Referenz der Integritätsrichtlinie verglichen, deren Werte im Abschnitt policyMeasurements erfasst sind. Damit wird festgestellt, ob bei der Startsequenz der VM-Instanz eine Änderung aufgetreten ist. Der Abschnitt actualMeasurements enthält die folgenden Elemente:

    • 0 enthält den Wert für PCR0, das Informationen zu Firmwarekomponenten enthält. Dieses PCR ist nicht implementiert und enthält stattdessen einen statischen Wert. Bei der Überprüfung der letzten Startsequenz anhand der Referenz der Integritätsrichtlinie wird es nicht verwendet.
    • 1 enthält den Wert für PCR4, das Informationen über den Code des UEFI-Bootmanagers und Startversuche enthält.
    • 2 enthält den Wert für PCR5, das Informationen zur GUID-Partitionstabelle des Laufwerks enthält. Bei der Überprüfung der letzten Startsequenz anhand der Referenz der Integritätsrichtlinie wird es nicht verwendet.
    • 3 enthält den Wert für PCR7, das Informationen zur Secure Boot-Richtlinie der Instanz enthält.
    • 4 enthält den Wert für PCR11, das Informationen zur Zugriffssteuerung über BitLocker Drive Encryption enthält.
    • 5 enthält den Wert für PCR12, das Informationen zu Datenereignissen enthält. Bei der Überprüfung der letzten Startsequenz anhand der Referenz der Integritätsrichtlinie wird es nicht verwendet.
    • 6 enthält den Wert für PCR13, das Informationen zum Windows-Kernel und zu Starttreibern enthält.
    • 7 enthält den Wert für PCR14, das Informationen zu Windows-Startautoritäten enthält.
  • policyEvaluationPassed gibt an, ob der angegebene Abschnitt der Startsequenz die Überprüfung anhand der Referenz der Integritätsrichtlinie bestanden hat.

  • policyMeasurements enthält die PCR-Werte für die Referenz der Integritätsrichtlinie. Der Abschnitt policyMeasurements enthält die folgenden Elemente:

    • 0 enthält den Wert für PCR0, das Informationen zu Firmwarekomponenten enthält. Dieses PCR ist nicht implementiert und enthält stattdessen einen statischen Wert. Bei der Überprüfung der letzten Startsequenz anhand der Referenz der Integritätsrichtlinie wird es nicht verwendet.
    • 1 enthält den Wert für PCR4, das Informationen über den Code des UEFI-Bootmanagers und Startversuche enthält.
    • 2 enthält den Wert für PCR7, das Informationen zur Secure Boot-Richtlinie der Instanz enthält.
    • 3 enthält den Wert für PCR11, das Informationen zur Zugriffssteuerung über BitLocker Drive Encryption enthält.
    • 4 enthält den Wert für PCR13, das Informationen zum Windows-Kernel und zu Starttreibern enthält.
    • 5 enthält den Wert für PCR14, das Informationen zu Windows-Startautoritäten enthält.

Wie Sie die PCR-Werte in lateBootReportEvent verwenden, um einen Fehler bei der Startintegritätsprüfung zu diagnostizieren, erfahren Sie unter Ursache für das Fehlschlagen der Startintegritätsprüfung ermitteln.

Linux

earlyBootReportEvent

Die wichtige Information in earlyBootReportEvent befindet sich im Abschnitt earlyBootReportEvent, der die folgenden Abschnitte und Elemente enthält:

  • actualMeasurements enthält die Werte des Platform Configuration Register (PCR) für die letzte Startsequenz. Die PCR-Werte geben die Startkomponenten und ihre Ladereihenfolge in der letzten Startsequenz an. Sie werden mit der Referenz der Integritätsrichtlinie verglichen, deren Werte im Abschnitt policyMeasurements erfasst sind. Damit wird festgestellt, ob bei der Startsequenz der VM-Instanz eine Änderung aufgetreten ist. Der Abschnitt actualMeasurements enthält die folgenden Elemente:

    • 0 enthält den Wert für PCR0, das Informationen zu Firmwarekomponenten enthält. Dieses PCR ist nicht implementiert und enthält stattdessen einen statischen Wert. Bei der Überprüfung der letzten Startsequenz anhand der Referenz der Integritätsrichtlinie wird es nicht verwendet.
    • 1 enthält den Wert für PCR4, das Informationen zum Shim des Betriebssystems enthält.
    • 2 enthält den Wert für PCR5, das Informationen zur GUID-Partitionstabelle des Laufwerks enthält. Bei der Überprüfung der letzten Startsequenz anhand der Referenz der Integritätsrichtlinie wird es nicht verwendet.
    • 3 enthält den Wert für PCR7, das Informationen zur Secure Boot-Richtlinie der Instanz enthält.
  • policyEvaluationPassed gibt an, ob der angegebene Abschnitt der Startsequenz die Überprüfung anhand der Referenz der Integritätsrichtlinie bestanden hat.

  • policyMeasurements enthält die PCR-Werte für die Referenz der Integritätsrichtlinie. Der Abschnitt policyMeasurements enthält die folgenden Elemente:

    • 0 enthält den Wert für PCR0, das Informationen zu Firmwarekomponenten enthält. Dieses PCR ist nicht implementiert und enthält stattdessen einen statischen Wert. Bei der Überprüfung der letzten Startsequenz anhand der Referenz der Integritätsrichtlinie wird es nicht verwendet.
    • 1 enthält den Wert für PCR4, das Informationen zum Shim des Betriebssystems enthält.
    • 2 enthält den Wert für PCR7, das Informationen zur Secure Boot-Richtlinie der Instanz enthält.

Wie Sie die PCR-Werte in earlyBootReportEvent verwenden, um einen Fehler bei der Startintegritätsprüfung zu diagnostizieren, erfahren Sie unter Ursache für das Fehlschlagen der Startintegritätsprüfung ermitteln.

lateBootReportEvent

Die wichtige Information in lateBootReportEvent befindet sich im Abschnitt lateBootReportEvent, der die folgenden Abschnitte und Elemente enthält:

  • actualMeasurements enthält die Werte des Platform Configuration Register (PCR) für die letzte Startsequenz. Die PCR-Werte geben die Startkomponenten und ihre Ladereihenfolge in der letzten Startsequenz an. Sie werden mit der Referenz der Integritätsrichtlinie verglichen, deren Werte im Abschnitt policyMeasurements erfasst sind. Damit wird festgestellt, ob bei der Startsequenz der VM-Instanz eine Änderung aufgetreten ist. Der Abschnitt actualMeasurements enthält die folgenden Elemente:

    • 0 enthält den Wert für PCR0, das Informationen zu Firmwarekomponenten enthält. Dieses PCR ist nicht implementiert und enthält stattdessen einen statischen Wert. Bei der Überprüfung der letzten Startsequenz anhand der Referenz der Integritätsrichtlinie wird es nicht verwendet.
    • 1 enthält den Wert für PCR4, das Informationen über den Bootloader der zweiten Phase und den Kernel enthält.
    • 2 enthält den Wert für PCR5, das Informationen zur GUID-Partitionstabelle des Laufwerks enthält. Bei der Überprüfung der letzten Startsequenz anhand der Referenz der Integritätsrichtlinie wird es nicht verwendet.
    • 3 enthält den Wert für PCR7, das Informationen zur Secure Boot-Richtlinie der Instanz enthält.
  • policyEvaluationPassed gibt an, ob der angegebene Abschnitt der Startsequenz die Überprüfung anhand der Referenz der Integritätsrichtlinie bestanden hat.

  • policyMeasurements enthält die PCR-Werte für die Referenz der Integritätsrichtlinie. Der Abschnitt policyMeasurements enthält die folgenden Elemente:

    • 0 enthält den Wert für PCR0, das Informationen zu Firmwarekomponenten enthält. Dieses PCR ist nicht implementiert und enthält stattdessen einen statischen Wert. Bei der Überprüfung der letzten Startsequenz anhand der Referenz der Integritätsrichtlinie wird es nicht verwendet.
    • 1 enthält den Wert für PCR4, das Informationen über den Bootloader der zweiten Phase und den Kernel enthält.
    • 2 enthält den Wert für PCR7, das Informationen zur Secure Boot-Richtlinie der Instanz enthält.

Wie Sie die PCR-Werte in lateBootReportEvent verwenden, um einen Fehler bei der Startintegritätsprüfung zu diagnostizieren, erfahren Sie unter Ursache für das Fehlschlagen der Startintegritätsprüfung ermitteln.

Autorisierung durch Cloud Identity and Access Management (IAM)

Shielded VM verwendet Cloud IAM zur Autorisierung.

Shielded VM-Vorgänge verwenden die folgenden Compute Engine-Berechtigungen:

  • compute.instances.updateShieldedInstanceConfig ermöglicht dem Nutzer das Ändern der Shielded VM-Optionen auf einer VM-Instanz.
  • compute.instances.setShieldedInstanceIntegrityPolicy ermöglicht dem Nutzer das Aktualisieren der Referenz der Integritätsrichtlinie auf einer VM-Instanz.
  • compute.instances.getShieldedInstanceIdentity ermöglicht dem Nutzer das Abrufen der Endorsement-Key-Informationen vom vTPM.

Shielded VM-Berechtigungen werden für die folgenden Compute Engine-Rollen erteilt:

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

Sie können Shielded VM-Berechtigungen auch benutzerdefinierten Rollen zuweisen.

Einschränkungen der Organisationsrichtlinien für Shielded VM

Sie können die Einschränkung der Organisationsrichtlinien constraints/compute.requireShieldedVm auf True setzen, um festzulegen, dass es sich bei den in Ihrer Organisation erstellten Compute Engine-VM-Instanzen um Shielded VM-Instanzen handeln muss.

Informationen zum Festlegen der Beschränkung constraints/compute.requireShieldedVm können Sie dem Abschnitt Boolesche Einschränkungen in Organisationsrichtlinien verwenden entnehmen. Sie müssen Organisationsrichtlinienadministrator sein, um eine Beschränkung festlegen zu können.

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...