Überblick über die Sicherheit

Diese Seite bietet einen Überblick über die Sicherheitsfunktionen des Container-Optimized OS, das in Google Cloud ausgeführt wird.

Betriebssystemsicherheit

Das auf Chromium OS basierende Container-Optimized OS von Google macht sich verschiedene sicherheitsrelevante Designprinzipien zunutze, um eine gut konfigurierte Plattform für Produktionsdienste zu bieten.

Betriebssystem mit minimaler Angriffsfläche

Dies ist das Herzstück der Sicherheit des Container-Optimized OS. Da das Container-Optimized OS für die Ausführung von Containern optimiert ist und Container ihre eigenen Abhängigkeiten in Paketen erfassen, können unnötige Pakete entfernt werden. Die Angriffsfläche des Betriebssystems wird somit minimiert.

Unveränderliches Root-Dateisystem und abgesicherter Startmodus

Das Root-Dateisystem des Container-Optimized OS wird immer schreibgeschützt bereitgestellt. Darüber hinaus wird seine Prüfsumme zum Zeitpunkt der Erstellung berechnet und vom Kernel bei jedem Start überprüft. Dieser Mechanismus verhindert, dass Angreifer die Maschine "übernehmen", indem sie permanente lokale Änderungen vornehmen. Außerdem werden mehrere andere Orte im Dateisystem standardmäßig ohne Berechtigung zum Ausführen eingehängt. Weitere Informationen finden Sie unter Dateisystem.

Zustandslose Konfiguration

Ein schreibgeschütztes Root-Dateisystem ist zwar vorteilhaft für die Sicherheit, erschwert jedoch die Verwendung des Systems. Zum Beispiel muss die Möglichkeit bestehen, Nutzer zu erstellen und hinzuzufügen, um sich beim System anzumelden. Zur Behebung dieses Problems passen wir das Root-Dateisystem so an, dass /etc/ beschreibbar, aber zustandslos ist. Auf diese Weise können Sie während der Laufzeit Konfigurationseinstellungen vornehmen, die bei einem Neustart jedoch nicht erhalten bleiben. Jedes Mal, wenn ein Knoten mit Container-Optimized OS neu gestartet wird, beginnt er in einem bereinigten Zustand. Bestimmte Daten, z. B. die Basisverzeichnisse, Logs und Docker-Images, bleiben bei einem Neustart erhalten, weil sie nicht Teil des Root-Dateisystems sind.

Sicherheitsoptimierter Kernel

Container-Optimized OS bietet mehrere Kernel-Funktionen zur Verbesserung der Sicherheit, darunter Integrity Measurement Architecture (IMA), Audit, Kernel Page Table Isolation (KPTI) und einige Linux-Sicherheitsmodule (LSMs) von Chromium OS. Außerdem unterstützt Container-Optimized OS Sicherheitsfunktionen wie seccomp und AppArmor, die die Durchsetzung detaillierterer Sicherheitsrichtlinien ermöglichen.

Auf Sicherheit ausgelegte Standardeinstellungen

Dank der sicherheitsorientierten Standardwerte für mehrere Funktionen bietet Container-Optimized OS eine weitere Ebene zur Verbesserung der Sicherheit. Dazu gehören unter anderem die sysctl-Einstellungen, mit denen ptrace und nicht authentifizierte BPF deaktiviert werden können, die Firewall gesperrt werden kann und so weiter. Werden diese Standardwerte automatisch auf eine Reihe von Instanzen angewendet, trägt dies zur Sicherheit des gesamten Clusters, des gesamten Projekts und der gesamten Organisationsstruktur bei.

Automatische Updates

Die automatischen Updates von Container-Optimized OS ermöglichen die rechtzeitige Bereitstellung von Sicherheitspatches auf laufenden VMs. Wird Container-Optimized OS von Kubernetes Engine verwaltet, sorgen automatische Upgrades der Knoten für ein Gleichgewicht zwischen Sicherheit und Stabilität.

Dateisystem

Im Folgenden finden Sie eine Liste der Pfade im Dateisystem des Container-Optimized OS-Knoten-Images sowie deren Eigenschaften und empfohlene Verwendung:

Pfad Attribute Zweck
/
  • Schreibgeschützt
  • Ausführbar
Das Root-Dateisystem wird zur Wahrung der Integrität schreibgeschützt zur Verfügung gestellt. Der Kernel überprüft die Integrität des Root-Dateisystems beim Starten und verweigert den Start, wenn Fehler vorliegen.
/home
/var
  • Beschreibbar
  • Nicht ausführbar
  • Zustandsorientiert
Diese Pfade dienen zum Speichern von Daten, die für die Lebensdauer des Startdatenträgers bestehen bleiben. Sie werden über /mnt/stateful_partition bereitgestellt.
/var/lib/google
/var/lib/docker
/var/lib/toolbox
  • Beschreibbar
  • Ausführbar
  • Zustandsorientiert
Diese Pfade sind Arbeitsverzeichnisse für Compute Engine-Pakete (z. B. den Account Manager-Dienst), Docker und die Toolbox.
/var/lib/cloud
  • Beschreibbar
  • Ausführbar
  • Zustandslos
  • tmpfs
Dieser Pfad ist das Arbeitsverzeichnis des cloud-init-Pakets.
/etc
  • Beschreibbar
  • Nicht ausführbar
  • Zustandslos
  • tmpfs
/etc enthält normalerweise Ihre Konfiguration. Beispiel: über cloud-init definierte Services vom Typ systemd. Es empfiehlt sich, den gewünschten Status Ihrer Instanzen in cloud-init zu erfassen, da cloud-init zur Anwendung kommt, wenn eine Instanz neu erstellt und wenn eine Instanz neu gestartet wird.
/tmp
  • Beschreibbar
  • Nicht ausführbar
  • Zustandslos
  • tmpfs
/tmp wird normalerweise als temporärer Speicherbereich verwendet und sollte nicht zum Speichern von nichtflüchtigen Daten genutzt werden.
/mnt/disks
  • Beschreibbar
  • Ausführbar
  • Zustandslos
  • tmpfs
Sie können nichtflüchtigen Speicher in Verzeichnissen unter /mnt/disks bereitstellen.

Firewall

Standardmäßig ist Container-Optimized OS so konfiguriert, dass es alle auf Port 22 eingehenden TCP-/UDP-Verbindungen außer SSH beendet. Weitere Informationen zum Ändern der Standardeinstellung, um weitere Ports zu öffnen, finden Sie unter Host-Firewall konfigurieren.

Zugriff auf Instanzen

Standardmäßig enthält Container-Optimized OS keine zugänglichen Nutzerkonten. Nutzerkonten und SSH-Schlüssel werden über Instanz- oder Projektmetadaten verwaltet. Mit neueren Versionen von Container-Optimized OS (Meilenstein 66 und höher) können Sie den Zugriff auf Images mithilfe von IAM verwalten. Dies ermöglicht eine präzisere Zugriffskontrolle (sudo gegenüber nicht-sudo) und sorgt für identifizierbare SSH-Schlüssel sowie eine organisationsinterne Anmelderichtlinie. Weitere Informationen finden Sie unter Zugriff auf Instanzen mit OS-Login verwalten.

Der SSH-Daemon ist so konfiguriert, dass die passwortbasierte Authentifizierung abgelehnt wird und keine Root-Anmeldungen erlaubt sind.

Sichere Infrastruktur

Zusätzlich zu den verschiedenen Härtungsfunktionen des Betriebssystems selbst, berücksichtigt das Team von Container-Optimized OS bei der Entwicklung, Erstellung und Bereitstellung von Images auch die Softwarelieferkette und priorisiert die Sicherheit der Infrastruktur. Grundlage dafür ist die jahrelange Erfahrung mit Chromium OS und Google im Allgemeinen.

Bei Google aus der Source erstellt

Jedes Paket in Container-Optimized OS, einschließlich des Linux-Kernels selbst, wird aus der Source von ChromiumOS-Code-Repositories erstellt. Wir wissen also genau, was in das Betriebssystem aufgenommen wird, von wem es in welcher Version eingeführt wurde usw. Somit können wir auch jedes Paket umgehend patchen und aktualisieren, falls auf irgendeiner Ebene eine Sicherheitslücke entdeckt wird.

Ständiges Scannen nach Sicherheitslücken und deren Behandlung (gemäß CVE)

Wir erhalten vom CVE-Scansystem immer eine Meldung, wenn eine Sicherheitslücke im Kernel oder in einem Paket des Betriebssystems entdeckt wird. Dabei handelt es sich um das gleiche System, das in Android und Chromium OS zum Erkennen von Sicherheitslücken eingesetzt wird. Das Team von Container-Optimized OS reagiert mit Vorrang auf solche Meldungen, um gepatchte Versionen bereitzustellen. Das Team von Container-Optimized OS arbeitet auch mit dem Notfallreaktionsteam von Google zusammen, um umfassendere Sicherheitspatches schneller in Container-Optimized OS zur Verfügung zu stellen.

Test- und Qualifizierungsverfahren

Bevor wir ein neues Image von Container-Optimized OS in Google Cloud veröffentlichen, testen wir es auf mehreren Ebenen. Dies schließt Kernel-Fuzzing durch syzkaller, Kubernetes-Tests auf Clusterebene, Integrationstests für Compute Engine-Funktionen und mehrere Leistungsbenchmarks ein. Somit wird die Stabilität und Qualität unserer Versionen sichergestellt.