CIS-Compliance konfigurieren und prüfen

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

In diesem Dokument wird erläutert, was die CIS-Benchmark ist, wie sich die Benchmark auf Container-Optimized OS (COS) bezieht, wie Sie den Compliancestatus in der Instanz prüfen und wie Sie Fehler beheben, falls ein Fehler auftritt.

Übersicht

Das Center for Internet Security (CIS) veröffentlicht Benchmarks für bewährte Sicherheitsempfehlungen für verschiedene Plattformen. Die CIS-Benchmark von Container-Optimized OS besteht aus einer Reihe von Empfehlungen zur Konfiguration von Instanzen, die Container-Optimized OS verwenden, um eine starke Sicherheitslage zu unterstützen.

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.

Stufen der Sicherheitsempfehlungen

CIS definiert die folgenden Empfehlungsstufen für Container-Optimized OS.

Stufe 1

Empfehlungen auf dieser Ebene sollten für die meisten Umgebungen gelten. Diese Stufe enthält Empfehlungen wie die folgenden:

  • Zufällige Anordnung des Adressraum-Layouts ist aktiviert
  • /tmp kann nicht zum Ausführen ausführbarer Binärprogramme verwendet werden
  • Das Senden von Paketweiterleitungen ist deaktiviert

Stufe 2

Empfehlungen auf dieser Ebene erweitern die Empfehlungen der Stufe 1 und führen zu einer strengeren Sicherheitsumgebung. Die Empfehlungen der Stufe 2 gelten nicht unbedingt für alle Fälle, da sie möglicherweise Anwendungsänderungen erfordern. Sie sollten die Empfehlungen auf Ebene 2 für Ihre Umgebung bewerten, bevor Sie sie übernehmen. Diese Stufe enthält Empfehlungen wie die folgenden:

  • Firewallregeln sind für alle offenen Ports vorhanden
  • ICMP-Weiterleitungen und Router-Werbung sind nicht zulässig.
  • Das Standardzeitlimit der Nutzershell beträgt 900 Sekunden oder weniger

Wie Container-Optimized OS den CIS-Benchmarks entspricht

Ab Meilenstein 97 entsprechen Container-Optimized OS-Images standardmäßig der CIS-Ebene 1 und bieten eine Option zur Einhaltung von CIS-Level 2. Wir bieten auch einen Scanner, mit dem Sie Ihre Instanz anhand der CIS-Empfehlungsstufen prüfen können.

Die CIS-Konfiguration für die Empfehlungen ist unter /usr/share/google/security/cis-compliance/cis_config.textproto angegeben. Der CIS-Scanner prüft anhand der Konfiguration den Compliancestatus der Instanz. Die Ergebnisse jeder Ausführung des CIS-Compliance-Scanners werden in /var/lib/google/cis_scanner_scan_result.textproto geschrieben. Diese Datei wird bei jeder Ausführung des CIS-Scanners überschrieben. Wenn einer der CIS-Scans der Stufen 1 oder 2 fehlschlägt, enthält die Datei cis_scanner_scan_result.textproto eine Liste aller fehlgeschlagenen Prüfungen.

Compliancestatus der Instanz prüfen

Container-Optimized OS-Images bieten die folgenden systemd-Dienste für Compliance-Prüfung und -Konfiguration:

  • cis-level1.service: Standardmäßig aktiviert und startet beim Booten. Beim Start des Dienstes wird geprüft, ob die Instanz der CIS-Stufe 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 Compliancestatus anhand von Level 1 und Level 2 vergleicht.

In den folgenden Abschnitten wird erläutert, wie Sie den Compliancestatus der Instanz prüfen und den Auditprozess automatisieren können.

Compliancestatus der CIS-Ebene 1 prüfen

Prüfen Sie den Status von cis-level1.service, um zu sehen, ob Ihre Instanz die CIS-Stufe 1 erfüllt:

systemctl status cis-level1

Die Ausgabe sieht in 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

Falls nicht-konforme Prüfungen gefunden werden, lesen Sie den Abschnitt CIS-Konformitätsprüfung für Stufe 1/Stufe 2.

cis-level1.service prüft beim Booten der Instanz nur einmal auf CIS-Stufe 1-Compliance. Informationen zur regelmäßigen Überprüfung der Compliance finden Sie unter Regelmäßige Überprüfung des CIS-Compliancestatus.

Compliance mit CIS-Level 2 konfigurieren und Status prüfen

Mit dem Dienst cis-level2 können Sie die Instanz so konfigurieren, dass sie CIS-Level 2 entspricht, und den Compliancestatus mit Level 1 und 2 abgleichen. Der systemd-Dienst unterstützt alle Empfehlungen der CIS-Level 2, mit Ausnahme von:

  • 4.1.1.2 Ausführung von Stackdriver-Dienst sicherstellen

    Diese Empfehlung gilt nur für Instanzen, die standardmäßig den Stackdriver Logging-Agent verwenden. Da Nutzer verschiedene Arten von Logging-Agents bevorzugen, überlassen wir es dem Nutzer, einen eigenen Logging-Agent zu starten. Daher konfiguriert der Dienst cis-level2 die Instanz nicht und prüft nicht, ob diese Empfehlung eingehalten wird.

Bei den folgenden Empfehlungen konfiguriert der cis-level2-Dienst die Instanz, überprüft jedoch nicht den Compliancestatus dieser Empfehlungen.

  • 3.3.1.1 Firewallrichtlinie für IPv6-Standardablehnung sicherstellen
  • 3.3.1.2 IPv6-Loopback-Traffic konfigurieren
  • 3.3.1.3 Ausgehende und ausgehende IPv6-Verbindungen konfigurieren
  • 3.3.1.4 Achten Sie darauf, dass für alle offenen Ports IPv6-Firewallregeln vorhanden sind
  • 3.3.2.1 Standardmäßige Firewall-Ablehnungsrichtlinie sicherstellen
  • 3.3.2.2 Achten Sie darauf, dass der Loopback-Traffic konfiguriert ist
  • 3.3.2.3 Ausgehende und bestehende Verbindungen konfigurieren

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 den Status von cis-level2.service, um zu sehen, ob Ihre Instanz erfolgreich konfiguriert wurde und den Empfehlungen der CIS-Level 2 entspricht:

systemctl status cis-level2

Die Ausgabe sieht in 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, finden Sie unter Fehlerbehebung weitere Informationen.

Der Dienst cis-level2 konfiguriert die Instanz und prüft nur einmal, ob die CIS-Level-2-Compliance erfüllt ist. Informationen zur regelmäßigen Überprüfung der Compliance finden Sie unter Regelmäßige Überprüfung des CIS-Compliancestatus.

Regelmäßige Überprüfung des CIS-Compliancestatus

Container-Optimized OS-Images umfassen die folgenden Dienste, um die CIS-Compliance regelmäßig zu überprüfen:

  • cis-compliance-scanner.service: Prüft den Compliancestatus anhand der unter /etc/cis-scanner/env_vars definierten Umgebungsvariablen. Standardmäßig überprüft dieser Dienst die Einhaltung von CIS-Level 1 und ist deaktiviert.
  • cis-compliance-scanner.timer: Führt cis-compliance-scanner.service regelmäßig aus. Der Standardzeitraum ist einmal täglich.

Scannerdienst konfigurieren

cis-compliance-scanner.service ist dafür verantwortlich, den Status der CIS-Konformität anhand der unter /etc/cis-scanner/env_vars definierten Umgebungsvariablen zu prüfen. Standardmäßig prüft dieser Dienst die Einhaltung von CIS-Level 1.

Setzen Sie die Umgebungsvariable LEVEL in /etc/cis-scanner/env_vars auf 2, um die Compliance mit CIS-Level 2 zu prüfen. 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

Starten Sie die Einheit cis-compliance-scanner.timer, um das regelmäßige Scannen von Compliance einzurichten:

systemctl start cis-compliance-scanner.timer

Standardmäßig beginnt cis-compliance-scanner.timer einmal täglich cis-compliance-scanner.service. Wenn Sie den Scanzeitraum ändern möchten, überschreiben Sie das Feld OnUnitActiveSec der Einheit cis-compliance-scanner.timer:

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 einmal pro Stunde festgelegt.

Aktualisieren Sie die systemd-Einheiten, um die Änderungen zu übernehmen:

systemctl daemon-reload

Bestimmte CIS-Compliance-Prüfungen deaktivieren

Die Empfehlungen der CIS-Ebene 1 und 2 werden auf die meisten Umgebungen angewendet. Einige Empfehlungen gelten jedoch möglicherweise nicht für Ihre Umgebung. Verwenden Sie die Umgebungsvariable EXTRA_OPTIONS in /etc/cis-scanner/env_vars, um bestimmte Empfehlungen zu deaktivieren.

Im folgenden Beispiel einer env_vars-Datei wird die Empfehlung für etc-passwd-permissions widergespiegelt:

# 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"

Aktivieren und Überprüfen des CIS-Compliancestatus automatisieren

Sie können die Compliance-Prüfung für Ihre Instanzen mit cloud-init oder OS Policy automatisieren. Die folgenden Beispiele zeigen einige Anwendungsfälle für jedes Tool:

  • Beispiel 1: Konformität mit CIS-Level 1 einmal pro Tag prüfen
  • Beispiel 2: Überprüfung der Compliance mit der CIS-Level 1 einmal pro Stunde
  • Beispiel 3: Einmal täglich die Einhaltung der CIS-Level 2 überprüfen
  • Beispiel 4: Spezifische CIS-Konformitätsprüfung deaktivieren

cloud-init verwenden

Bevor Sie die folgenden Beispiele ausprobieren, machen Sie sich mit der Konfiguration einer COS-Instanz mit cloud-init vertraut, indem Sie der Anleitung unter cloud-init mit dem Cloud-Konfigurationsformat verwenden folgen.

Beispiel 1

In der folgenden Beispielkonfiguration wird ein periodischer Scan von CIS-Level 1 mit der Standardperiode 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 periodische Scannen von 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 das regelmäßige Scannen von CIS-Level 2 mit der Standardperiode von einem Tag 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

Mit einer Betriebssystemrichtlinie können Sie das CIS-Benchmark-Scannen konfigurieren. Machen Sie sich zuerst mit den folgenden Richtlinien vertraut:

Außerdem müssen instanceFilter und rollout in der Beispielkonfiguration für die Bereitstellung von Nutzern hinzugefügt werden.

Beispiel 1

In der folgenden Beispielkonfiguration wird ein periodischer Scan von CIS-Level 1 mit der Standardperiode von einmal täglich gestartet.

# An OS policy to check CIS level 1 compliance once a day.
osPolicies:
- id: ensure-cis-level1-compliance-once-a-day-policy
  mode: ENFORCEMENT
  resourceGroups:
  - resources:
      id: ensure-cis-level1-compliance-once-a-day
      exec:
        validate:
          interpreter: SHELL
          # If cis-compliance-scanner.service is active, return an exit code
          # 100 to indicate that the instance is in compliant state.
          # Otherwise, return an exit code of 101 to run `enforce` step.
          script: |-
            is_active=$(systemctl is-active cis-compliance-scanner.timer)
            result=$(systemctl show -p Result --value cis-compliance-scanner.service)

            if [ "$is_active" == "active" ] && [ "$result" == "success" ]; then
              exit 100;
            else
              exit 101;
            fi
        enforce:
          interpreter: SHELL
          # COS 97 images are by-default CIS Level 1 compliant and there is no
          # additional configuration needed. However, if certain changes
          # cause non-compliance because of the workload on the instance, this
          # section can be used to automate to make fixes. For example, the
          # workload might generate a file that does not comply with the
          # recommended file permissions.
          # Return an exit code of 100 to indicate that the desired changes
          # successfully applied.
          script: |-
            # optional <your code>
            # Check the compliance of the instance once a day.
            systemctl start cis-compliance-scanner.timer && exit 100

Beispiel 2

Im folgenden Beispiel wird das periodische Scannen von CIS-Level 1 einmal pro Stunde konfiguriert.

# An OS policy to check CIS level 1 compliance once an hour.
osPolicies:
- id: ensure-cis-level1-compliance-once-an-hour-policy
  mode: ENFORCEMENT
  resourceGroups:
  - resources:
      id: ensure-cis-level1-compliance-once-an-hour
      exec:
        validate:
          interpreter: SHELL
          # If cis-compliance-scanner.service is active, return an exit code
          # 100 to indicate that the instance is in compliant state.
          # Otherwise, return an exit code of 101 to run `enforce` step.
          script: |-
            is_active=$(systemctl is-active cis-compliance-scanner.timer)
            result=$(systemctl show -p Result --value cis-compliance-scanner.service)

            if [ "$is_active" == "active" ] && [ "$result" == "success" ]; then
              exit 100;
            else
              exit 101;
            fi
        enforce:
          interpreter: SHELL
          # Return an exit code of 100 to indicate that the desired changes
          # were successfully applied.
          script: |-
            # Overwrite "OnUnitActiveSec" field of the
            # cis-compliance-scanner.timer to trigger
            # cis-compliance-scanner.service once an hour
            # instead of once a day.
            mkdir /etc/systemd/system/cis-compliance-scanner.timer.d
            tee /etc/systemd/system/cis-compliance-scanner.timer.d/override.conf <<EOF
            [Unit]
            Description=Run CIS Scanner once an hour

            [Timer]
            OnUnitActiveSec=1h
            EOF
            # Reload systemd units.
            systemctl daemon-reload
            # Check the compliance of the instance once an hour.
            systemctl start cis-compliance-scanner.timer && exit 100

Beispiel 3

Im folgenden Beispiel wird das regelmäßige Scannen von CIS-Level 2 mit der Standardperiode von einem Tag konfiguriert.

# An OS policy to check CIS level 2 compliance once a day.
osPolicies:
- id: ensure-cis-level2-compliance-once-a-day-policy
  mode: ENFORCEMENT
  resourceGroups:
  - resources:
      id: ensure-cis-level2-compliance-once-a-day
      exec:
        validate:
          interpreter: SHELL
          # If cis-compliance-scanner.service is active, return an exit code
          # 100 to indicate that the instance is in compliant state.
          # Otherwise, return an exit code of 101 to run `enforce` step.
          script: |-
            is_active=$(systemctl is-active cis-compliance-scanner.timer)
            result=$(systemctl show -p Result --value cis-compliance-scanner.service)

            if [ "$is_active" == "active" ] && [ "$result" == "success" ]; then
              exit 100;
            else
              exit 101;
            fi
        enforce:
          interpreter: SHELL
          # Return an exit code of 100 to indicate that the desired changes
          # were successfully applied.
          script: |-
            # Configure the instance for CIS level 2.
            systemctl start cis-level2.service
            # Change the scan level to 2.
            sed -i 's/^LEVEL=.*$/LEVEL="2"/' /etc/cis-scanner/env_vars
            # Check the compliance of the instance once a day.
            systemctl start cis-compliance-scanner.timer && exit 100

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.

# An OS policy to opt-out of CIS check and check compliance status once a day.
osPolicies:
- id: exclude-cis-check-and-check-compliance-once-a-day-policy
  mode: ENFORCEMENT
  resourceGroups:
  - resources:
      id: exclude-cis-check-and-check-compliance-once-a-day
      exec:
        validate:
          interpreter: SHELL
          # If cis-compliance-scanner.service is active, return an exit code
          # 100 to indicate that the instance is in compliant state.
          # Otherwise, return an exit code of 101 to run `enforce` step.
          script: |-
            is_active=$(systemctl is-active cis-compliance-scanner.timer)
            result=$(systemctl show -p Result --value cis-compliance-scanner.service)

            if [ "$is_active" == "active" ] && [ "$result" == "success" ]; then
              exit 100;
            else
              exit 101;
            fi
        enforce:
          interpreter: SHELL
          # Return an exit code of 100 to indicate that the desired changes
          # were successfully applied.
          script: |-
            # 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 && exit 100

Fehlerbehebung

Das Konfigurieren einer Instanz zur Einhaltung der CIS-Empfehlungen der Stufe 2 schlägt fehl

Der Dienst cis-level2 konfiguriert die Instanz zuerst so, dass sie den CIS-Empfehlungen der Stufe 2 entspricht, und prüft dann, ob sie sowohl die CIS-Ebene 1 als auch die Ebene 2 erfüllt. 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 nicht auf die Instanz angewendet werden konnten. Dies führte zum Ausfall des cis-level2-Systems.

Prüfung gemäß CIS-Konformitätsstufe 1 / 2

Die Scanergebnisse für jede Ausführung der CIS-Konformität werden in /var/lib/google/cis_scanner_scan_result.textproto geschrieben. Wenn einer der CIS-Scans der Stufen 1 oder 2 fehlschlägt, enthält die Textdatei die Liste aller fehlgeschlagenen Prüfungen, z. B. 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 minimieren, verwenden Sie die CIS-Benchmark und folgen Sie den Schritten im Abschnitt Remediation für die fehlgeschlagene Prüfung, um die Instanz konform zu machen. Um zu sehen, welche Empfehlung einer fehlgeschlagenen Prüfung in der CIS-Benchmark entspricht, suchen Sie die non_compliant_benchmark's-ID in der CIS-Scanner-Konfigurationsdatei unter /usr/share/google/security/cis-compliance/cis_config.textproto.