
O Docker Bench for Security é um script que verifica dezenas de melhores práticas comuns em relação à implantação de contêineres Docker em produção.

O Docker Bench for Security é um script que verifica dezenas de práticas recomendadas comuns para implantação de contêineres Docker em produção. Todos os testes são automatizados e baseados no CIS Docker Benchmark v1.6.0.
Disponibilizamos isso como um utilitário de código aberto para que a comunidade Docker tenha uma maneira fácil de autoavaliar seus hosts e contêineres Docker em relação a este benchmark.
| Versão | 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 |
Você pode simplesmente executar este script a partir do seu host base executando:
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sudo sh docker-bench-security.sh
Nota:
jqé uma dependência opcional, mas recomendada.
Você tem duas opções se desejar construir e executar este contêiner você mesmo:
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
docker build --no-cache -t docker-bench-security .
Seguido por um comando docker run apropriado conforme indicado abaixo.
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
docker-compose run --rm docker-bench-security
Observe que a imagem docker/docker-bench-security está desatualizada e é necessário realizar uma construção manual. Veja #405 para mais informações.
Observe que este contêiner está sendo executado com muitos privilégios — compartilhando os namespaces de sistema de arquivos, PID e rede do host, devido a partes do benchmark se aplicarem ao host em execução.
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
Não se esqueça de ajustar os volumes compartilhados de acordo com seu sistema operacional. Alguns exemplos são:
docker.service e docker.secret estão localizados na pasta /lib/systemd/system por padrão.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 no macOS não possui /usr/lib/systemd ou os binários Docker mencionados acima.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
O Docker bench requer Docker 1.13.0 ou posterior para ser executado.
Observe que quando as distribuições não contêm auditctl, os testes de auditoria verificarão /etc/audit/audit.rules para ver se uma regra está presente.
-b optional Não imprimir cores
-h optional Imprimir esta mensagem de ajuda
-l FILE optional Saída de log em FILE, dentro do contêiner se executado usando docker
-u USERS optional Lista separada por vírgulas de usuários docker confiáveis
-c CHECK optional Lista separada por vírgulas de IDs de verificações específicas
-e CHECK optional Lista separada por vírgulas de IDs de verificações específicas a excluir
-i INCLUDE optional Lista separada por vírgulas de padrões dentro de um nome de contêiner ou imagem para verificar
-x EXCLUDE optional Lista separada por vírgulas de padrões dentro de um nome de contêiner ou imagem a excluir da verificação
-t LABEL optional Lista separada por vírgulas de rótulos dentro de um contêiner ou imagem a verificar
-n LIMIT optional Na saída JSON, ao relatar listas de itens (contêineres, imagens, etc.), limitar o número de itens relatados a LIMIT. Padrão 0 (sem limite).
-p PRINT optional Desabilitar a impressão de medidas de remediação. Padrão: imprimir medidas de remediação.
Por padrão, o script Docker Bench for Security executará todos os testes CIS disponíveis e produzirá logs na pasta de log do diretório atual, chamados docker-bench-security.log.json e docker-bench-security.log.
Se o contêiner docker for usado, os arquivos de log serão criados dentro do contêiner no local /usr/local/bin/log/. Se você deseja acessá-los a partir do host após a execução do contêiner, precisará montar um volume para armazená-los.
As verificações baseadas no CIS são nomeadas check_<section>_<number>, por exemplo, check_2_6 e as verificações contribuídas pela comunidade são nomeadas check_c_<number>.
sh docker-bench-security.sh -c check_2_2 executará apenas a verificação 2.2 Ensure the logging level is set to 'info'.
sh docker-bench-security.sh -e check_2_2 executará todas as verificações disponíveis exceto 2.2 Ensure the logging level is set to 'info'.
sh docker-bench-security.sh -e docker_enterprise_configuration executará todas as verificações disponíveis exceto o grupo docker_enterprise_configuration
sh docker-bench-security.sh -e docker_enterprise_configuration,check_2_2 executará todas as verificações disponíveis exceto o grupo docker_enterprise_configuration e 2.2 Ensure the logging level is set to 'info'
sh docker-bench-security.sh -c container_images,container_runtime executará apenas as verificações container_images e container_runtime
sh docker-bench-security.sh -c container_images -e check_4_5 executará apenas as verificações container_images exceto 4.5 Ensure Content trust for Docker is Enabled
Observe que ao enviar verificações, forneça informações sobre por que é um teste razoável a ser adicionado e inclua algum tipo de documentação oficial verificando essas informações.