Questo documento spiega cos'è CIS Benchmark, come il benchmark si relaziona con Container-Optimized OS (COS), come verificare lo stato di conformità nell'istanza e come risolvere i problemi in caso di errore.
Panoramica
Center for Internet Security (CIS) pubblica dei benchmark per fornire consigli di sicurezza sulle best practice per varie piattaforme. Container-Optimized OS CIS Benchmark è un insieme di suggerimenti per la configurazione di istanze che utilizzano Container-Optimized OS per supportare una security posture solida. Sia le immagini COS x86 che ARM sono conformi a CIS.
Accesso al benchmark
Il CIS Benchmark di Container-Optimized OS è disponibile sul sito web di CIS:
- Vai alla pagina dei download di benchmark CIS.
- Cerca CIS Google Container-Optimized OS Benchmark.
- Fai clic su Scarica PDF.
Livelli dei suggerimenti per la sicurezza
CIS definisce i seguenti livelli di suggerimenti per Container-Optimized OS.
Livello 1
I suggerimenti di questo livello vogliono essere applicabili alla maggior parte degli ambienti. Questo livello include consigli quali:
- La randomizzazione del layout dello spazio degli indirizzi è abilitata
- Impossibile utilizzare
/tmp
per eseguire programmi binari eseguibili - L'invio del reindirizzamento dei pacchetti è disabilitato
Livello 2
I suggerimenti di questo livello estendono i suggerimenti di livello 1, creando un ambiente di sicurezza più rigoroso. I consigli del livello 2 non sono necessariamente applicabili a tutti i casi in quanto potrebbero richiedere modifiche alla domanda. Prima di applicarli, devi valutare i suggerimenti del Livello 2 per il tuo ambiente. Questo livello include consigli quali:
- Esistono regole firewall per tutte le porte aperte
- I reindirizzamenti ICMP e le pubblicità del router non sono accettati
- Il timeout predefinito della shell dell'utente è pari o inferiore a 900 secondi
In che modo Container-Optimized OS rispetta i CIS Benchmarks
A partire da Milestone 97, le immagini Container-Optimized OS sono conformi per impostazione predefinita al livello CIS 1 e offrono la possibilità di conformarsi al livello CIS 2. Forniamo anche uno scanner che puoi utilizzare per verificare l'istanza rispetto ai livelli consigliati della CSI.
La configurazione CIS che definisce i suggerimenti è presente al /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 su /var/lib/google/cis_scanner_scan_result.textproto
. Questo file viene sovrascritto a ogni esecuzione dello scanner CIS. Se una delle scansioni di livello 1 o 2 del CIS ha esito negativo, il file cis_scanner_scan_result.textproto
conterrà un elenco di tutti i controlli non riusciti.
Controlla lo stato di conformità dell'istanza
Le immagini Container-Optimized OS forniscono i seguenti servizi di sistema per il controllo e la configurazione della conformità:
- cis-level1.service: abilitato per impostazione predefinita, si avvia all'avvio. All'avvio, il servizio controlla se l'istanza è conforme al livello CIS 1.
- cis-level2.service: disabilitato per impostazione predefinita. Questo servizio consente di configurare l'istanza in modo che sia conforme al livello CIS 2 e verifica lo stato di conformità rispetto al livello 1 e al livello 2.
Le sezioni seguenti spiegano come controllare lo stato di conformità dell'istanza e come automatizzare il processo di controllo.
Controllare lo stato di conformità al livello 1 del CIS
Per verificare se l'istanza è conforme al livello 1 della CIS, controlla lo stato di 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.
Il cis-level1.service
verifica la conformità di livello 1 CIS solo una volta, quando
l'avvio dell'istanza. Per configurare i controlli periodici della conformità, consulta l'articolo Controllo periodico dello stato di conformità CIS.
Configurazione della conformità CIS livello 2 e verifica dello stato
Puoi utilizzare il servizio cis-level2
per configurare l'istanza in modo che sia conforme al livello CIS 2 e per verificare lo stato di conformità rispetto al livello 1 e al livello 2. Il servizio systemd supporta tutti i consigli del livello 2 del CIS tranne quanto segue:
4.1.1.2 Assicurati che il logging sia in esecuzione (ID: logging-service-running)
Questo suggerimento è disattivato per impostazione predefinita, ma può essere riattivato eliminando l'ID dall'elenco dei siti disattivati che è disponibile nel file
/etc/cis-scanner/env_vars
. Questo controllo esiste solo nei traguardi 109 e versioni successive. Negli obiettivi precedenti, l'abilitazione del logging ti assicura la conformità a questo consiglio. Se annulli la disattivazione, l'esecuzione del serviziocis-level2
avvia uno script che avvia la registrazione di fluent-bit. Mantieni disattivata la funzionalitàlogging-service-running
se non vuoi utilizzare il logging predefinito o il tuo logging.
Per i seguenti suggerimenti, 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 di negazione predefinito IPv6
- 3.3.1.2 Assicurati che il traffico di 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 di negazione predefinito
- 3.3.2.2 Assicurarsi che il traffico di loopback sia configurato
- 3.3.2.3 Verificare 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 questo comando:
systemctl start cis-level2.service
Per verificare se l'istanza è stata configurata correttamente e se è conforme ai consigli di livello 2 CIS, 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 di CIS solo una volta. Per configurare i controlli periodici della conformità, consulta l'articolo Controllo periodico dello stato di conformità CIS.
Controllo periodico dello stato di conformità al CIS
Le immagini Container-Optimized OS includono i seguenti servizi per verificare periodicamente la conformità a 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à del livello CIS 1 ed è disabilitato. - cis-compliance-scanner.timer: esegue
cis-compliance-scanner.service
periodicamente. La mestruazione predefinita è una volta al giorno.
Configura il servizio di scansione
Il cis-compliance-scanner.service
è responsabile del controllo dello stato di conformità a CIS in base alle variabili di ambiente definite in /etc/cis-scanner/env_vars
. Per impostazione predefinita, questo servizio verifica la conformità del livello CIS 1.
Per verificare la conformità di CIS livello 2, 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 della 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
In questo esempio il periodo dello scanner è impostato su una volta ogni ora.
Per applicare le modifiche, ricarica le unità di sistema:
systemctl daemon-reload
Disattivazione di specifici controlli di conformità CIS
Le raccomandazioni di livello 1 e 2 del CIS sono fatte 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 di esempio env_vars
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 il processo di controllo della conformità per le tue istanze utilizzando cloud-init o OS Policy. I seguenti esempi mostrano alcuni casi d'uso con ciascun strumento:
- Esempio 1: verificare il livello di conformità CIS 1 una volta al giorno.
- Esempio 2: verifica il livello di conformità CIS 1 una volta all'ora.
- Esempio 3: verificare il livello di conformità CIS 2 una volta al giorno.
- Esempio 4: disattivare un controllo specifico di conformità CIS.
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 CIS di livello 2 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 suggerimento per 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 di sistema operativo
Puoi utilizzare un criterio di sistema operativo per configurare la scansione di CIS Benchmark. Prima di iniziare, assicurati di conoscere i criteri di sistema operativo, incluse le seguenti informazioni:
- Scrittura dei criteri di sistema operativo
- Assegnazione dei criteri del sistema operativo
- Visualizzare i report sull'assegnazione dei criteri del sistema operativo
Inoltre, devi aggiungere le opzioni instanceFilter
e rollout
nella
i 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 CIS di livello 2 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 suggerimento per CIS specifico.
Risoluzione dei problemi
Questa sezione descrive come risolvere i problemi relativi alla scansione di CIS Benchmark.
La configurazione di un'istanza per rispettare i suggerimenti di livello 2 di CIS non riesce
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
viene chiuso 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.
I log del journal menzioneranno i suggerimenti che non sono stati applicati all'istanza e che hanno causato l'errore del servizio di sistema cis-level2
.
Conformità CIS Il controllo di livello 1 o di livello 2 non va a buon fine
I risultati della scansione per ogni esecuzione di conformità a livello di CIS sono scritti su /var/lib/google/cis_scanner_scan_result.textproto
. Se una delle scansioni di livello 1 o 2 del CIS ha esito negativo, 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 CIS Benchmark e segui i passaggi nella sezione Remediation
per il controllo non riuscito in modo da rendere conforme l'istanza. Per trovare il suggerimento che corrisponde a un controllo non riuscito in CIS Benchmark, cerca l'ID non_compliant_benchmark's
nel file di configurazione dello scanner CIS all'indirizzo /usr/share/google/security/cis-compliance/cis_config.textproto
.