In diesem Dokument wird erläutert, was die CIS-Benchmark ist, wie sie sich auf Container-Optimized OS (COS) bezieht, wie Sie den Compliance-Status in der Instanz prüfen und wie Sie Fehler beheben können.
Übersicht
Das Center for Internet Security (CIS) veröffentlicht Benchmarks für Best-Practice-Sicherheitsempfehlungen für verschiedene Plattformen. Die Container-Optimized OS CIS Benchmark besteht aus einer Reihe von Empfehlungen für die Konfiguration von Instanzen, die Container-Optimized OS verwenden, um ein hohes Sicherheitsniveau zu bieten. Sowohl COS-x86- als auch COS-ARM-Images sind CIS-konform.
Auf die Benchmark zugreifen
Die CIS-Benchmark von Container-Optimized OS ist auf der CIS-Website verfügbar:
- Rufen Sie die CIS-Benchmarks-Downloadseite auf.
- Suchen Sie die CIS Google Container-Optimized OS-Benchmark.
- Klicken Sie auf PDF herunterladen.
Sicherheitsempfehlungsstufen
CIS definiert die folgenden Empfehlungsstufen für Container-Optimized OS.
Stufe 1
Empfehlungen auf dieser Ebene sollten für die meisten Umgebungen gelten. Diese Ebene enthält Empfehlungen wie die folgenden:
- Address Space Layout Randomization (ASLR) ist aktiviert
/tmp
kann nicht zum Ausführen von ausführbaren Binärdateien verwendet werden.- Das Senden von Paketweiterleitungen ist deaktiviert
Stufe 2
Empfehlungen auf dieser Ebene erweitern die Empfehlungen von Stufe 1, was eine strengere Sicherheitsumgebung zur Folge hat. Die Empfehlungen der Ebene 2 sind nicht unbedingt für alle Fälle anwendbar, da sie möglicherweise Änderungen an der Anwendung erfordern. Sie sollten die Empfehlungen auf Stufe 2 für Ihre Umgebung bewerten, bevor Sie sie anwenden. Diese Ebene enthält Empfehlungen wie die folgenden:
- Für alle offenen Ports sind Firewallregeln vorhanden.
- ICMP-Weiterleitungen und Router-Advertisements werden nicht akzeptiert
- Das Standardzeitlimit für die Nutzershell beträgt maximal 900 Sekunden.
Einhaltung der CIS-Benchmarks durch Container-Optimized OS
Ab Meilenstein 97 entsprechen Container-Optimized OS-Images standardmäßig CIS Level 1 und bieten eine Option für CIS Level 2. Außerdem stellen wir einen Scanner zur Verfügung, mit dem Sie Ihre Instanz anhand der CIS-Empfehlungsstufen prüfen können.
Die CIS-Konfiguration, in der die Empfehlungen definiert sind, befindet sich unter /usr/share/google/security/cis-compliance/cis_config.textproto
. Der CIS-Scanner verwendet die Konfiguration, um den Compliance-Status der Instanz zu prüfen. Die Ergebnisse jedes Durchlaufs des CIS-Konformitätsscanners werden in /var/lib/google/cis_scanner_scan_result.textproto
geschrieben. Diese Datei wird bei jedem Ausführen des CIS-Scanners überschrieben. Wenn einer der CIS-Scans der Stufe 1 oder Stufe 2 fehlschlägt, enthält die Datei cis_scanner_scan_result.textproto
eine Liste aller fehlgeschlagenen Prüfungen.
Compliancestatus von Instanzen prüfen
Container-Optimized OS-Images bieten die folgenden systemd-Dienste für die Compliance-Prüfung und Konfiguration:
- cis-level1.service: Standardmäßig aktiviert und wird beim Booten gestartet. Wenn der Dienst gestartet wird, prüft er, ob die Instanz CIS Level 1 entspricht.
- cis-level2.service: Standardmäßig deaktiviert. Mit diesem Dienst können Sie die Instanz so konfigurieren, dass sie CIS Level 2 entspricht, und den Compliance-Status sowohl für Level 1 als auch für Level 2 prüfen.
In den folgenden Abschnitten wird erläutert, wie Sie den Compliance-Status der Instanz prüfen und den Auditprozess automatisieren.
CIS-Level 1-Compliance-Status prüfen
So prüfen Sie, ob Ihre Instanz CIS Level 1-konform ist:cis-level1.service
systemctl status cis-level1
Die Ausgabe sieht etwa so aus:
Reading scan config from /usr/share/google/security/cis-compliance/cis_config.textproto
Running scan of 62 benchmarks
Scan status: SUCCEEDED
Found 0 non-compliant benchmarks
Writing scan results to /var/lib/google/cis_scanner_scan_result.textproto
Wenn nicht konforme Prüfungen gefunden werden, lesen Sie den Abschnitt CIS-Konformitätsprüfung der Stufe 1/Stufe 2 schlägt fehl.
Die cis-level1.service
prüft nur einmal beim Starten der Instanz, ob die CIS-Stufe 1 eingehalten wird. Informationen zum Konfigurieren regelmäßiger Compliance-Prüfungen finden Sie unter Regelmäßige Prüfung des CIS-Compliancestatus.
CIS-Konformität auf Stufe 2 konfigurieren und Status prüfen
Mit dem cis-level2
-Dienst können Sie die Instanz so konfigurieren, dass sie CIS Level 2 entspricht, und den Compliance-Status für Level 1 und Level 2 prüfen. Der systemd-Dienst unterstützt alle CIS Level 2-Empfehlungen mit Ausnahme der folgenden:
4.1.1.2 Prüfen, ob das Logging ausgeführt wird (ID: logging-service-running)
Diese Empfehlung ist standardmäßig deaktiviert, kann aber wieder aktiviert werden, indem Sie die ID aus der Liste der deaktivierten Empfehlungen in der Datei
/etc/cis-scanner/env_vars
löschen. Diese Prüfung ist erst ab Meilenstein 109 verfügbar. In früheren Meilensteinen genügt es, die Protokollierung zu aktivieren, um dieser Empfehlung zu entsprechen. Wenn Sie die Deaktivierung rückgängig machen, wird durch Ausführen descis-level2
-Dienstes ein Skript ausgeführt, das das Fluent Bit-Logging startet. Lassen Sielogging-service-running
deaktiviert, wenn Sie unser Standard-Logging nicht verwenden oder Ihr eigenes Logging verwenden möchten.
Bei den folgenden Empfehlungen wird die Instanz durch cis-level2
konfiguriert, der Compliance-Status wird jedoch nicht überprüft:
105 und niedriger:
- 3.3.1.1 Sicherstellen, dass die Standard-DENY-Firewallrichtlinie für IPv6 festgelegt ist
- 3.3.1.2 Sicherstellen, dass der IPv6-Loopback-Traffic konfiguriert ist
- 3.3.1.3 Sicherstellen, dass ausgehende und bestehende IPv6-Verbindungen konfiguriert sind
- 3.3.1.4 Sicherstellen, dass IPv6-Firewallregeln für alle offenen Ports vorhanden sind
- 3.3.2.1 Sicherstellen, dass die Standard-DENY-Firewallrichtlinie festgelegt ist
- 3.3.2.2 Sicherstellen, dass Loopback-Traffic konfiguriert ist
- 3.3.2.3 Ausgehende und bestehende Verbindungen konfigurieren
109 und höher:
- 3.3.1.4 Sicherstellen, dass IPv6-Firewallregeln für alle offenen Ports vorhanden sind
Der Dienst cis-level2
ist standardmäßig deaktiviert. Führen Sie den folgenden Befehl aus, um den Dienst zu starten:
systemctl start cis-level2.service
Prüfen Sie anhand des Status von cis-level2.service
, ob Ihre Instanz erfolgreich konfiguriert wurde und den CIS Level 2-Empfehlungen entspricht:
systemctl status cis-level2
Die Ausgabe sieht etwa so aus:
Reading scan config from /usr/share/google/security/cis-compliance/cis_config.textproto
Running scan of 112 benchmarks
Scan status: SUCCEEDED
Found 0 non-compliant benchmarks
Writing scan results to /var/lib/google/cis_scanner_scan_result.textproto
Wenn die Instanzkonfiguration fehlschlägt oder nicht konforme Prüfungen gefunden werden, lesen Sie den Abschnitt Fehlerbehebung.
Der cis-level2
-Dienst konfiguriert die Instanz und prüft die CIS-Konformität der Stufe 2 nur einmal. Informationen zum Konfigurieren regelmäßiger Compliance-Prüfungen finden Sie unter Regelmäßige Prüfung des CIS-Compliancestatus.
Regelmäßige Überprüfung des CIS-Compliancestatus
Container-Optimized OS-Images enthalten die folgenden Dienste, um die CIS-Compliance regelmäßig zu prüfen:
- cis-compliance-scanner.service: Prüft den Compliance-Status anhand von Umgebungsvariablen, die unter
/etc/cis-scanner/env_vars
definiert sind. Dieser Dienst prüft standardmäßig auf CIS Level 1-Compliance und ist deaktiviert. - cis-compliance-scanner.timer: Führt
cis-compliance-scanner.service
regelmäßig aus. Standardmäßig wird die Funktion einmal täglich ausgeführt.
Scannerdienst konfigurieren
Die cis-compliance-scanner.service
ist dafür verantwortlich, den Status der CIS-Compliance anhand der in /etc/cis-scanner/env_vars
definierten Umgebungsvariablen zu prüfen. Standardmäßig wird bei diesem Dienst die CIS-Konformität auf Stufe 1 geprüft.
Wenn Sie die Einhaltung von CIS Level 2 prüfen möchten, legen Sie die Umgebungsvariable LEVEL in /etc/cis-scanner/env_vars
auf 2 fest. Die Datei /etc/cis-scanner/env_vars
sieht in etwa so aus:
# cis-compliance-scanner.service environment variables
# The config file defines which checks to perform by cis_scanner
CONFIG="/usr/share/google/security/cis-compliance/cis_config.textproto"
# Where to store the result of the scan
RESULT="/var/lib/google/cis_scanner_scan_result.textproto"
# Upto which level to scan. It can be 1 or 2
LEVEL="2"
# Extra options that can be passed to cis_scanner
# For valid options, see output of `cis_scanner -h`
EXTRA_OPTIONS=""
Timer konfigurieren
Wenn Sie das regelmäßige Compliance-Scannen einrichten möchten, starten Sie die cis-compliance-scanner.timer
-Einheit:
systemctl start cis-compliance-scanner.timer
Standardmäßig wird cis-compliance-scanner.timer
einmal täglich um cis-compliance-scanner.service
gestartet. Wenn Sie den Scanzeitraum ändern möchten, überschreiben Sie das Feld OnUnitActiveSec der cis-compliance-scanner.timer
-Einheit:
sudo mkdir /etc/systemd/system/cis-compliance-scanner.timer.d
sudo tee /etc/systemd/system/cis-compliance-scanner.timer.d/override.conf <<EOF
[Unit]
Description=Run CIS Scanner once an hour
[Timer]
OnUnitActiveSec=1h
EOF
In diesem Beispiel wird der Scannerzeitraum auf einmal pro Stunde festgelegt.
Laden Sie die systemd-Einheiten neu, um die Änderungen zu übernehmen:
systemctl daemon-reload
Bestimmte CIS-Complianceprüfungen deaktivieren
CIS-Empfehlungen der Stufen 1 und 2 sind für die meisten Umgebungen anwendbar. Einige Empfehlungen sind jedoch möglicherweise nicht auf Ihre spezifische Umgebung anwendbar. Wenn Sie bestimmte Empfehlungen deaktivieren möchten, verwenden Sie die Umgebungsvariable EXTRA_OPTIONS in /etc/cis-scanner/env_vars
.
Im folgenden Beispiel für eine env_vars
-Datei wird die Empfehlung etc-passwd-permissions
deaktiviert:
# cis-compliance-scanner.service environment variables
# The config file defines which checks to perform by cis_scanner
CONFIG="/usr/share/google/security/cis-compliance/cis_config.textproto"
# Where to store the result of the scan
RESULT="/var/lib/google/cis_scanner_scan_result.textproto"
# Upto which level to scan. It can be 1 or 2
LEVEL="1"
# Extra options that can be passed to cis_scanner
# For valid options:`cis_scanner -h`
EXTRA_OPTIONS="--benchmark-opt-out-ids=etc-passwd-permissions"
Aktivierung und Prüfung des CIS-Compliancestatus automatisieren
Sie können den Prozess zur Compliance-Prüfung für Ihre Instanzen mit cloud-init oder OS Policy automatisieren. Die folgenden Beispiele zeigen einige Anwendungsfälle für die einzelnen Tools:
- Beispiel 1: Einmal täglich die CIS-Konformität auf Level 1 prüfen.
- Beispiel 2: Einmal pro Stunde die Einhaltung von CIS-Level 1 prüfen.
- Beispiel 3: Einmal täglich die Einhaltung von CIS Level 2 prüfen.
- Beispiel 4: Bestimmte CIS-Compliance-Prüfung deaktivieren
cloud-init verwenden
Bevor Sie die folgenden Beispiele ausprobieren, sollten Sie sich mit der Konfiguration einer COS-Instanz mit cloud-init vertraut machen. Folgen Sie dazu der Anleitung unter cloud-init mit dem Cloud-Konfigurationsformat verwenden.
Beispiel 1
In der folgenden Beispielkonfiguration wird das regelmäßige Scannen auf CIS-Level 1 mit dem Standardzeitraum von einmal täglich gestartet.
#cloud-config runcmd: # Check the compliance status of the instance once a day. - systemctl start cis-compliance-scanner.timer
Beispiel 2
Im folgenden Beispiel wird das regelmäßige Scannen auf CIS-Level 1 einmal pro Stunde konfiguriert.
#cloud-config # Override cis-compliance-scanner.timer with 1 hour frequency. write_files: - path: /etc/systemd/system/cis-compliance-scanner.timer.d/override.conf permissions: 0600 owner: root content: | [Unit] Description=Run CIS Scanner once an hour [Timer] OnUnitActiveSec=1h runcmd: # Reload systemd units. - systemctl daemon-reload # Check the compliance status of the instance once an hour. - systemctl start cis-compliance-scanner.timer
Beispiel 3
Im folgenden Beispiel wird die regelmäßige CIS-Scanning auf Stufe 2 mit dem Standardzeitraum von einmal täglich konfiguriert.
#cloud-config runcmd: # Configure the instance for CIS level 2. - systemctl start cis-level2.service # Change the scan level to CIS Level 2. - sed -i 's/^LEVEL=.*$/LEVEL="2"/' /etc/cis-scanner/env_vars # Check the compliance status of the instance once a day. - systemctl start cis-compliance-scanner.timer
Beispiel 4
Im folgenden Beispiel wird der Scanner so konfiguriert, dass er einmal täglich ausgeführt wird, und eine bestimmte CIS-Empfehlung wird deaktiviert.
#cloud-config runcmd: # Opt-out of the etc-passwd-permissions check. - sed -i 's/^EXTRA.*$/EXTRA_OPTIONS="--benchmark-opt-out-ids=etc-passwd-permissions"/' /etc/cis-scanner/env_vars # Check the compliance of the instance once a day. - systemctl start cis-compliance-scanner.timer
Betriebssystemrichtlinie verwenden
Sie können eine Betriebssystemrichtlinie verwenden, um das Scannen anhand der CIS-Benchmark zu konfigurieren. Bevor Sie beginnen, sollten Sie sich mit den OS-Richtlinien vertraut machen, insbesondere mit den folgenden Punkten:
- Betriebssystemrichtlinie verfassen
- Zuweisung von Betriebssystemrichtlinien
- Berichte zur Zuweisung von Betriebssystemrichtlinien ansehen
Außerdem müssen Sie die Optionen instanceFilter
und rollout
in den folgenden Beispielen für die Bereitstellung hinzufügen.
Beispiel 1
In der folgenden Beispielkonfiguration wird das regelmäßige Scannen auf CIS-Level 1 mit dem Standardzeitraum von einmal täglich gestartet.
Beispiel 2
Im folgenden Beispiel wird das regelmäßige Scannen auf CIS-Level 1 einmal pro Stunde konfiguriert.
Beispiel 3
Im folgenden Beispiel wird die regelmäßige CIS-Scanning auf Stufe 2 mit dem Standardzeitraum von einmal täglich konfiguriert.
Beispiel 4
Im folgenden Beispiel wird der Scanner so konfiguriert, dass er einmal täglich ausgeführt wird, und eine bestimmte CIS-Empfehlung wird deaktiviert.
Fehlerbehebung
In diesem Abschnitt wird beschrieben, wie Sie Probleme im Zusammenhang mit CIS-Benchmark-Scans beheben.
Konfiguration einer Instanz gemäß CIS-Empfehlungen der Stufe 2 schlägt fehl
Der cis-level2
-Dienst konfiguriert die Instanz zuerst so, dass sie den CIS-Empfehlungen der Stufe 2 entspricht, und prüft dann die Einhaltung von CIS-Stufe 1 und Stufe 2. Wenn die Konfiguration der Instanz fehlschlägt, wird der cis-level2
-Dienst mit der folgenden Fehlermeldung beendet:
Job for cis-level2.service failed because the control process exited with error code.
See "systemctl status cis-level2.service" and "journalctl -xeu cis-level2.service" for details.
In den Journalprotokollen werden die Empfehlungen aufgeführt, die auf der Instanz nicht angewendet werden konnten und zum Fehler des cis-level2
-Systemd-Dienstes geführt haben.
CIS-Compliance-Prüfung auf Ebene 1 oder 2 schlägt fehl
Die Scanergebnisse für jeden Lauf der CIS-Konformität werden unter /var/lib/google/cis_scanner_scan_result.textproto
geschrieben. Wenn einer der CIS-Scans der Stufe 1 oder Stufe 2 fehlschlägt, enthält die Textproto-Datei die Liste aller fehlgeschlagenen Prüfungen, wie im folgenden Beispiel:
cat /var/lib/google/cis_scanner_scan_result.textproto
# Output
start_time: {
seconds: 1648241700
nanos: 763152171
}
end_time: {
seconds: 1648241700
nanos: 812992527
}
scanner_version: "1.1.4.3"
benchmark_version: "1.0.0"
status: {
status: SUCCEEDED
}
non_compliant_benchmarks: {
id: "etc-passwd-permissions"
compliance_occurrence: {
non_compliant_files: {
path: "/etc/passwd"
reason: "File permission is 0664, expected the following bits to be set: 0444 and the following bits to be clear: 0133"
}
}
}
compliant_benchmarks: {
id: "etc-passwd-permissions"
compliance_occurrence: {}
}
Um die fehlgeschlagenen Prüfungen zu beheben, verwenden Sie die CIS-Benchmark und folgen Sie der Anleitung im Abschnitt Remediation
für die fehlgeschlagene Prüfung, um die Instanz konform zu machen. Wenn Sie herausfinden möchten, welche Empfehlung einer fehlgeschlagenen Prüfung in der CIS-Benchmark entspricht, suchen Sie in der CIS-Scanner-Konfigurationsdatei unter /usr/share/google/security/cis-compliance/cis_config.textproto
nach der non_compliant_benchmark's
-ID.