Questo documento spiega che cos'è il benchmark CIS, in che modo il benchmark è correlato a Container-Optimized OS (COS), come verificare lo stato di conformità nell'istanza e come risolvere i problemi in caso di errore.
Panoramica
Il Center for Internet Security (CIS) rilascia dei benchmark per fornire suggerimenti di sicurezza basati sulle best practice per diverse piattaforme. Il benchmark CIS di Container-Optimized OS è un insieme di consigli per configurare istanze che utilizzano Container-Optimized OS per supportare una solida strategia di sicurezza. Le immagini COS x86 e ARM sono conformi al CIS.
Accesso al benchmark
Il benchmark CIS Container-Optimized OS è disponibile sul sito web di CIS:
- Vai alla pagina di download dei 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 consigli di questo livello sono pensati per essere applicabili alla maggior parte degli ambienti. Questo livello include consigli come i seguenti:
- 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 a questo livello estendono quelli di livello 1, determinando un ambiente di sicurezza più rigoroso. I suggerimenti di livello 2 non sono necessariamente applicabili a tutti i casi in quanto potrebbero richiedere modifiche all'applicazione. Prima di applicarli, dovresti valutare i consigli del livello 2 per il tuo ambiente. Questo livello include consigli come i seguenti:
- Esistono regole firewall per tutte le porte aperte
- I reindirizzamenti ICMP e gli annunci di router non sono accettati
- Il timeout predefinito della shell 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 al livello CIS 1 per impostazione predefinita e offrono un'opzione per conformarsi al livello CIS 2. Forniamo anche uno scanner che puoi utilizzare per verificare la tua istanza in base ai livelli di suggerimenti del CIS.
La configurazione CIS che definisce i suggerimenti è presente in /usr/share/google/security/cis-compliance/cis_config.textproto
. Lo scanner CIS utilizza la configurazione per controllare 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 analisi di livello 1 o 2 del CIS non ha esito positivo, il file cis_scanner_scan_result.textproto
conterrà un elenco di tutti i controlli non superati.
Controlla lo stato di conformità dell'istanza
Le immagini Container-Optimized OS 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, il servizio controlla se l'istanza è conforme al livello CIS 1.
- cis-level2.service: disattivato per impostazione predefinita. Questo servizio ti consente di configurare l'istanza in modo che sia conforme al livello 2 del CIS e di verificare lo stato di conformità rispetto al livello 1 e al livello 2.
Le sezioni seguenti spiegano come verificare lo stato di conformità dell'istanza e come automatizzare il processo di controllo.
Verifica lo stato di conformità CIS di livello 1
Per verificare se la tua istanza è conforme al livello 1 del 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, fai riferimento alla sezione Controllo di conformità CIS 1/Livello 2 non riuscito.
L'elemento cis-level1.service
verifica la conformità di livello CIS 1 una sola volta, all'avvio dell'istanza. Per configurare il controllo periodico della conformità, consulta Controllo periodico dello stato di conformità CIS.
Configura la conformità al CIS 2 e controlla lo 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 CIS di livello 2 ad eccezione di quanto segue:
4.1.1.2 Assicurati che il servizio stackdriver sia in esecuzione
Questo suggerimento si applica solo alle istanze che utilizzano l'agente Logging Stackdriver per impostazione predefinita. Poiché gli utenti potrebbero preferire tipi diversi di agenti di logging, lasciamo all'utente il compito di avviare il proprio agente di logging. Di conseguenza, il servizio
cis-level2
non configura l'istanza e non controlla la conformità di questo suggerimento.
Per i seguenti suggerimenti, il servizio cis-level2
configura l'istanza, ma non verifica lo stato di conformità di questi suggerimenti.
- 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 Assicurarsi 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 Assicurati che il traffico di loopback sia configurato
- 3.3.2.3 Assicurarsi che le connessioni in uscita e stabilite siano configurate
Il servizio cis-level2
è disabilitato 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 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à di livello 2 del CIS solo una volta. Per configurare il controllo periodico della conformità, consulta Controllo periodico dello stato di conformità CIS.
Controllo periodico dello stato di conformità CIS
Le immagini di Container-Optimized OS includono i seguenti servizi per verificare periodicamente la conformità CIS:
- cis-compliance-scanner.service: verifica lo stato di conformità in base a variabili di ambiente definite in
/etc/cis-scanner/env_vars
. Per impostazione predefinita, questo servizio verifica la conformità al CIS di livello 1 ed è disabilitato. - cis-compliance-scanner.timer: esegue
cis-compliance-scanner.service
periodicamente. Il periodo predefinito è una volta al giorno.
Configura il servizio di scansione
cis-compliance-scanner.service
è responsabile del controllo dello stato della conformità CIS in base alle variabili di ambiente definite in /etc/cis-scanner/env_vars
. Per impostazione predefinita, questo servizio verifica la conformità al CIS di livello 1.
Per verificare la conformità al 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=""
Configurazione del 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
viene avviato 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 di scansione viene impostato su una volta ogni ora.
Per applicare le modifiche, ricarica le unità del sistema:
systemctl daemon-reload
Disattivazione di specifici controlli di conformità CIS
Le raccomandazioni CIS di livello 1 e 2 sono pensate 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 il processo di controllo della conformità delle tue istanze utilizzando cloud-init o un criterio di sistema operativo. I seguenti esempi mostrano alcuni casi d'uso per ogni strumento:
- Esempio 1: verifica la conformità al CIS Livello 1 una volta al giorno.
- Esempio 2: verifica la conformità al CIS Livello 1 una volta all'ora.
- Esempio 3: verifica la conformità al CIS Livello 2 una volta al giorno.
- Esempio 4: disattivazione del 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 Utilizzo di cloud-init con il formato di configurazione di Cloud.
Esempio 1
La configurazione di esempio seguente avvia la scansione periodica del 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 del 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 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 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 del sistema operativo per configurare la scansione di benchmark CIS. Prima di iniziare, assicurati di avere dimestichezza con i criteri del sistema operativo, inclusi quanto segue:
- Scrittura dei criteri del 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
nei seguenti esempi per il deployment.
Esempio 1
La configurazione di esempio seguente avvia la scansione periodica del CIS di livello 1 con il periodo predefinito di una volta al giorno.
Esempio 2
L'esempio seguente configura la scansione periodica del CIS di livello 1 una volta ogni ora.
Esempio 3
L'esempio seguente configura la scansione periodica del 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 CIS specifico.
Risoluzione dei problemi
Questa sezione descrive come risolvere i problemi relativi alla scansione dei benchmark CIS.
La configurazione di un'istanza per rispettare i suggerimenti del CIS di livello 2 non va a buon fine
Il servizio cis-level2
configura prima l'istanza in modo che sia conforme ai suggerimenti di livello 2 del CIS, quindi verifica la conformità sia al livello CIS 1 che al livello 2. Se la configurazione dell'istanza non va a buon fine, 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 riporteranno i suggerimenti che non è stato possibile applicare all'istanza, causando un errore del servizio systemd cis-level2
.
Il controllo di livello 1 o 2 di conformità CIS non ha esito positivo
I risultati della scansione per ogni esecuzione della conformità a livello di CIS sono scritti su /var/lib/google/cis_scanner_scan_result.textproto
. Se una delle analisi CIS di livello 1 o 2 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 il Benchmark CIS e segui i passaggi nella sezione Remediation
relativi al controllo non superato per rendere conforme l'istanza. Per trovare quale consiglio corrisponde a un controllo non superato nel benchmark CIS, cerca l'ID non_compliant_benchmark's
nel file di configurazione dello scanner CIS situato all'indirizzo /usr/share/google/security/cis-compliance/cis_config.textproto
.