
Docker Bench for Security è uno script che verifica decine di buone pratiche comuni relative alla distribuzione di container Docker in produzione.

Docker Bench per la Sicurezza è uno script che controlla decine di buone pratiche comuni relative al deployment di container Docker in produzione. I test sono tutti automatizzati e si basano sul CIS Docker Benchmark v1.6.0.
Lo rendiamo disponibile come utilità open-source in modo che la community Docker possa avere un modo semplice per autovalutare i propri host e container Docker rispetto a questo benchmark.
| Versione | CIS |
|---|---|
| 1.6.0 | 1.6.0 |
| 1.5.0 | 1.5.0 |
| 1.3.6 | 1.4.0 |
| 1.3.5 | 1.2.0 |
| 1.3.3 | 1.1.0 |
| 1.3.0 | 1.13.0 |
Puoi semplicemente eseguire questo script dal tuo host di base con:
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sudo sh docker-bench-security.sh
Nota:
jqè una dipendenza opzionale ma raccomandata.
Hai due opzioni se desideri creare ed eseguire questo container da solo:
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
docker build --no-cache -t docker-bench-security .
Seguito da un appropriato comando docker run come indicato di seguito.
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
docker-compose run --rm docker-bench-security
Nota bene: l'immagine docker/docker-bench-security è obsoleta ed è necessaria una build manuale. Vedi #405 per maggiori informazioni.
Nota che questo container viene eseguito con molti privilegi -- condividendo il filesystem dell'host, i namespace dei pid e di rete, poiché parti del benchmark si applicano all'host in esecuzione.
docker run --rm --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc:ro \
-v /usr/bin/containerd:/usr/bin/containerd:ro \
-v /usr/bin/runc:/usr/bin/runc:ro \
-v /usr/lib/systemd:/usr/lib/systemd:ro \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker-bench-security
Non dimenticare di regolare i volumi condivisi in base al tuo sistema operativo. Alcuni esempi sono:
docker.service e docker.secret si trovano nella cartella /lib/systemd/system di default.docker run --rm --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc:ro \
-v /lib/systemd/system:/lib/systemd/system:ro \
-v /usr/bin/containerd:/usr/bin/containerd:ro \
-v /usr/bin/runc:/usr/bin/runc:ro \
-v /usr/lib/systemd:/usr/lib/systemd:ro \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker-bench-security
Docker Desktop su macOS non ha /usr/lib/systemd né i binari Docker sopra menzionati.sudo touch /etc/hostname
docker run --rm --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker-bench-security
Docker bench richiede Docker 1.13.0 o successivo per essere eseguito.
Nota che quando le distribuzioni non contengono auditctl, i test di audit controlleranno /etc/audit/audit.rules per vedere se è presente una regola al suo posto.
-b optional Do not print colors
-h optional Print this help message
-l FILE optional Log output in FILE, inside container if run using docker
-u USERS optional Comma delimited list of trusted docker user(s)
-c CHECK optional Comma delimited list of specific check(s) id
-e CHECK optional Comma delimited list of specific check(s) id to exclude
-i INCLUDE optional Comma delimited list of patterns within a container or image name to check
-x EXCLUDE optional Comma delimited list of patterns within a container or image name to exclude from check
-t LABEL optional Comma delimited list of labels within a container or image to check
-n LIMIT optional In JSON output, when reporting lists of items (containers, images, etc.), limit the number of reported items to LIMIT. Default 0 (no limit).
-p PRINT optional Disable the printing of remediation measures. Default: print remediation measures.
Di default lo script Docker Bench per la Sicurezza eseguirà tutti i test CIS disponibili e produrrà log nella cartella log dalla directory corrente, denominati docker-bench-security.log.json e docker-bench-security.log.
Se viene utilizzato il container docker, i file di log verranno creati all'interno del container nella posizione /usr/local/bin/log/. Se desideri accedervi dall'host dopo l'esecuzione del container, dovrai montare un volume per conservarli.
I controlli basati su CIS sono denominati check_<section>_<number>, ad es. check_2_6 e i controlli contribuiti dalla community sono denominati check_c_<number>.
sh docker-bench-security.sh -c check_2_2 eseguirà solo il controllo 2.2 Assicurarsi che il livello di logging sia impostato su 'info'.
sh docker-bench-security.sh -e check_2_2 eseguirà tutti i controlli disponibili tranne 2.2 Assicurarsi che il livello di logging sia impostato su 'info'.
sh docker-bench-security.sh -e docker_enterprise_configuration eseguirà tutti i controlli disponibili tranne il gruppo docker_enterprise_configuration
sh docker-bench-security.sh -e docker_enterprise_configuration,check_2_2 eseguirà tutti i controlli disponibili tranne il gruppo docker_enterprise_configuration e 2.2 Assicurarsi che il livello di logging sia impostato su 'info'
sh docker-bench-security.sh -c container_images,container_runtime eseguirà solo i controlli container_images e container_runtime
sh docker-bench-security.sh -c container_images -e check_4_5 eseguirà solo i controlli container_images tranne 4.5 Assicurarsi che Content trust per Docker sia abilitato
Nota che quando si inviano controlli, fornisci informazioni sul motivo per cui è un test ragionevole da aggiungere e includi una qualche forma di documentazione ufficiale che verifichi tali informazioni.