Questo documento spiega che cos'è il CIS Benchmark, come si relaziona al sistema operativo ottimizzato per i container (COS), come eseguire la verifica dello stato della conformità nell'istanza e come risolvere i problemi in caso di errore.
Panoramica
Il Center for Internet Security (CIS) rilascia benchmark per consigli sulle best practice per la sicurezza per varie piattaforme. Il benchmark CIS di Container-Optimized OS è un insieme di consigli per configurare le istanze che utilizzano Container-Optimized OS al fine di supportare una solida strategia di sicurezza. Sia le immagini COS x86 che ARM sono conformi a CIS.
Accesso al benchmark
Il benchmark CIS di Container-Optimized OS è disponibile sul sito web del CIS:
- Vai alla pagina dei download dei benchmark CIS.
- Cerca CIS Google Container-Optimized OS Benchmark.
- Fai clic su Scarica PDF.
Livelli di consigli per la sicurezza
CIS definisce i seguenti livelli di raccomandazione per Container-Optimized OS.
Livello 1
I consigli a questo livello sono pensati per essere applicabili alla maggior parte degli ambienti. Questo livello include consigli come:
- La casualizzazione dello spazio degli indirizzi è attivata
/tmp
non può essere utilizzato per l'esecuzione di file eseguibili binari- L'invio di reindirizzamento dei pacchetti è disattivato
Livello 2
I consigli di questo livello estendono quelli di Livello 1, con un risultato in termini di un ambiente di sicurezza più rigoroso. I consigli di livello 2 non sono necessariamente applicabili a tutti i casi, in quanto potrebbero richiedere modifiche all'applicazione. Prima di applicarli, devi valutare i consigli di Livello 2 per il tuo ambiente. Questo livello include consigli come:
- Esistono regole firewall per tutte le porte aperte
- I reindirizzamenti ICMP e le pubblicità del router non sono accettati
- Il timeout predefinito della shell utente è pari o inferiore a 900 secondi
In che modo Container-Optimized OS è conforme ai benchmark CIS
A partire dal traguardo 97, le immagini del sistema operativo ottimizzate per i container sono conformi al livello 1 del CIS per impostazione predefinita e offrono un'opzione per la conformità al livello 2 del CIS. Forniamo anche uno scanner che puoi utilizzare per eseguire la verifica della tua istanza in base ai livelli di raccomandazione del CIS.
La configurazione CIS che definisce i consigli è presente all'indirizzo /usr/share/google/security/cis-compliance/cis_config.textproto
. Lo scanner CIS utilizza la configurazione per verificare lo stato di conformità dell'istanza. I risultati di ogni esecuzione dello scanner di conformità a livello di CIS vengono scritti in /var/lib/google/cis_scanner_scan_result.textproto
. Questo file viene sovrascritto a ogni esecuzione dello scanner CIS. Se una delle scansioni CIS di Livello 1 o Livello 2 non va a buon fine, il file cis_scanner_scan_result.textproto
conterrà un elenco di tutti i controlli non riusciti.
Controllare lo stato di conformità delle istanze
Le immagini del sistema operativo ottimizzato per i container forniscono i seguenti servizi systemd per il controllo e la configurazione della conformità:
- cis-level1.service: abilitato per impostazione predefinita e si avvia all'avvio. All'avvio del servizio, viene controllato se l'istanza è conforme al livello 1 del CIS.
- cis-level2.service: disabilitato per impostazione predefinita. Questo servizio ti consente di configurare l'istanza in conformità con il livello 2 del CIS e di verificare lo stato di conformità sia al livello 1 che al livello 2.
Le sezioni seguenti spiegano come controllare lo stato di conformità dell'istanza e come automatizzare la procedura di controllo.
Controllare lo stato di conformità al livello 1 del CIS
Per verificare se la tua istanza è conforme al livello 1 del CIS, controlla lo stato del cis-level1.service
:
systemctl status cis-level1
L'output è simile al seguente:
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
Se vengono rilevati controlli non conformi, consulta Controllo di conformità CIS di livello 1/2 non riuscito.
cis-level1.service
verifica la conformità al livello 1 del CIS una sola volta, all'avvio dell'istanza. Per configurare il controllo periodico della conformità, consulta Controllo periodico dello stato di conformità al CIS.
Configura la conformità al livello 2 del CIS e controlla lo stato
Puoi utilizzare il servizio cis-level2
per configurare l'istanza in modo che sia conforme al livello 2 del CIS e per controllare lo stato di conformità sia al livello 1 che al livello 2. Il servizio systemd supporta tutti i consigli del CIS di Livello 2 tranne quanto segue:
4.1.1.2 Verifica che il logging sia in esecuzione (ID: logging-service-running)
Questo consiglio è disattivato per impostazione predefinita, ma può essere riattivato eliminando l'ID dall'elenco delle esclusioni, disponibile nel file
/etc/cis-scanner/env_vars
. Questo controllo esiste solo nei traguardi 109 e versioni successive. Nei traguardi precedenti, l'attivazione di Registra te stesso ti rende conforme a questo consiglio. Se annulli la disattivazione, l'esecuzione del serviziocis-level2
avvia uno script che avvia la registrazione di fluent-bit. Mantieni disattivata l'opzionelogging-service-running
se non vuoi utilizzare il nostro logging predefinito o se vuoi utilizzare il tuo.
Per i seguenti consigli, il servizio cis-level2
configura l'istanza, ma non verifica lo stato di conformità:
105 e versioni precedenti:
- 3.3.1.1 Assicurati che il criterio firewall predefinito per IPv6 sia di rifiuto
- 3.3.1.2 Assicurati che il traffico loopback IPv6 sia configurato
- 3.3.1.3 Assicurati che le connessioni IPv6 in uscita e stabilite siano configurate
- 3.3.1.4 Assicurati che esistano regole firewall IPv6 per tutte le porte aperte
- 3.3.2.1 Assicurati che il criterio firewall predefinito sia di rifiuto
- 3.3.2.2 Assicurati che il traffico loopback sia configurato
- 3.3.2.3 Assicurati che le connessioni in uscita e stabilite siano configurate
109 e versioni successive:
- 3.3.1.4 Assicurati che esistano regole firewall IPv6 per tutte le porte aperte
Il servizio cis-level2
è disattivato per impostazione predefinita. Per avviare il servizio, esegui il seguente comando:
systemctl start cis-level2.service
Per verificare se l'istanza è configurata correttamente e rispetta i consigli del CIS di livello 2, controlla lo stato di cis-level2.service
:
systemctl status cis-level2
L'output è simile al seguente:
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
Se la configurazione dell'istanza non va a buon fine o vengono rilevati controlli non conformi, consulta la sezione Risoluzione dei problemi.
Il servizio cis-level2
configura l'istanza e verifica la conformità al livello 2 del CIS una sola volta. Per configurare il controllo periodico della conformità, consulta Controllo periodico dello stato di conformità al CIS.
Controllo periodico dello stato di conformità al CIS
Le immagini Container-Optimized OS includono i seguenti servizi per verificare periodicamente la conformità al CIS:
- cis-compliance-scanner.service: controlla lo stato della conformità in base alle variabili di ambiente definite in
/etc/cis-scanner/env_vars
. Per impostazione predefinita, questo servizio verifica la conformità al livello 1 del CIS ed è disattivato. - cis-compliance-scanner.timer: viene eseguito periodicamente ogni
cis-compliance-scanner.service
. Il periodo predefinito è una volta al giorno.
Configurare il servizio dello scanner
cis-compliance-scanner.service
è responsabile del controllo dello stato della conformità al CIS in base alle variabili di ambiente definite in /etc/cis-scanner/env_vars
. Per impostazione predefinita, questo servizio verifica la conformità al livello 1 del CIS.
Per verificare la conformità al livello 2 del CIS, imposta la variabile di ambiente LEVEL in /etc/cis-scanner/env_vars
su 2. Il file /etc/cis-scanner/env_vars
è simile al seguente:
# 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=""
Configurare il timer
Per configurare la scansione periodica per la conformità, avvia l'unità cis-compliance-scanner.timer
:
systemctl start cis-compliance-scanner.timer
Per impostazione predefinita, cis-compliance-scanner.timer
inizia alle ore cis-compliance-scanner.service
una volta al giorno. Per modificare il periodo di scansione, sostituisci il campo OnUnitActiveSec dell'unità 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
Questo esempio imposta il periodo dello scanner su una volta ogni ora.
Per applicare le modifiche, ricarica le unità systemd:
systemctl daemon-reload
Disattivazione di controlli di conformità CIS specifici
I consigli CIS di Livello 1 e 2 sono progettati per essere applicabili alla maggior parte degli ambienti. Tuttavia ,alcuni consigli potrebbero non essere applicabili al tuo ambiente specifico. Per disattivare consigli specifici, utilizza la variabile di ambiente EXTRA_OPTIONS in /etc/cis-scanner/env_vars
.
Il seguente file env_vars
di esempio disattiva il consiglio etc-passwd-permissions
:
# 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"
Automatizza l'attivazione e il controllo dello stato di conformità CIS
Puoi automatizzare la procedura di controllo della conformità per le tue istanze utilizzando cloud-init o i criteri del sistema operativo. I seguenti esempi mostrano alcuni casi d'uso con ciascun strumento:
- Esempio 1: controlla la conformità al livello 1 del CIS una volta al giorno.
- Esempio 2: controlla la conformità al livello 1 del CIS una volta all'ora.
- Esempio 3: controlla la conformità al livello 2 del CIS una volta al giorno.
- Esempio 4: disattivare un controllo di conformità CIS specifico.
Utilizzo di cloud-init
Prima di provare i seguenti esempi, assicurati di avere familiarità con la configurazione di un'istanza COS con cloud-init seguendo le istruzioni riportate in Utilizzare cloud-init con il formato Cloud Config.
Esempio 1
La seguente configurazione di esempio avvia la scansione periodica CIS di Livello 1 con il periodo predefinito di una volta al giorno.
#cloud-config runcmd: # Check the compliance status of the instance once a day. - systemctl start cis-compliance-scanner.timer
Esempio 2
L'esempio seguente configura la scansione periodica CIS di Livello 1 una volta ogni ora.
#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
Esempio 3
L'esempio seguente configura la scansione periodica del livello 2 del CIS con il periodo predefinito di una volta al giorno.
#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
Esempio 4
L'esempio seguente configura lo scanner in modo che venga eseguito una volta al giorno e disattiva un consiglio CIS specifico.
#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
Utilizzo del criterio del sistema operativo
Puoi utilizzare un criterio del sistema operativo per configurare la scansione del benchmark CIS. Prima di iniziare, assicurati di conoscere le norme relative ai sistemi operativi, tra cui:
- Scrittura del criterio del sistema operativo
- Assegnazione dei criteri del sistema operativo
- Visualizzare i report sull'assegnazione delle policy del sistema operativo
Inoltre, devi aggiungere le opzioni instanceFilter
e rollout
nei
seguenti esempi per il deployment.
Esempio 1
La seguente configurazione di esempio avvia la scansione periodica CIS di Livello 1 con il periodo predefinito di una volta al giorno.
Esempio 2
L'esempio seguente configura la scansione periodica CIS di Livello 1 una volta ogni ora.
Esempio 3
L'esempio seguente configura la scansione periodica del livello 2 del CIS con il periodo predefinito di una volta al giorno.
Esempio 4
L'esempio seguente configura lo scanner in modo che venga eseguito una volta al giorno e disattiva un consiglio CIS specifico.
Risoluzione dei problemi
Questa sezione descrive come risolvere i problemi relativi alla scansione del benchmark CIS.
La configurazione di un'istanza per renderla conforme ai consigli del CIS di livello 2 non va a buon fine
Il servizio cis-level2
configura innanzitutto l'istanza in modo che sia conforme ai consigli del CIS di livello 2, quindi verifica la conformità sia al livello 1 che al livello 2 del CIS. Se la configurazione dell'istanza non riesce, il servizio cis-level2
esce con il seguente messaggio di errore:
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.
Nei log del diario sono riportati i consigli che non sono stati applicati all'istanza e che hanno causato l'errore del servizio cis-level2
systemd.
Il controllo di conformità CIS di livello 1 o 2 non va a buon fine
I risultati della scansione per ogni esecuzione della conformità a livello CIS vengono scritti in /var/lib/google/cis_scanner_scan_result.textproto
. Se una delle scansioni CIS di Livello 1 o 2 non va a buon fine, il file textproto conterrà l'elenco di tutti i controlli non riusciti, come nell'esempio seguente:
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: {}
}
Per ridurre i controlli non riusciti, utilizza il CIS Benchmark e segui i passaggi descritti nella sezione Remediation
relativa al controllo non riuscito per rendere conforme l'istanza. Per trovare il consiglio che corrisponde a un controllo non riuscito nel benchmark CIS, cerca l'ID non_compliant_benchmark's
nel file di configurazione dello scanner CIS in /usr/share/google/security/cis-compliance/cis_config.textproto
.