Como verificar a segurança de containers Docker sem dores de cabeça extras
Recentemente, pesquisadores de segurança encontraram mais de quatro milhões de containers placeholder vazios e centenas de milhares de imagens com cryptominers ocultos no Docker Hub. Nos acostumamos a fazer pull de imagens base ou dependências de terceiros com um único comando docker pull, raramente pensando no que pode estar escondido dentro das camadas — não apenas um pacote vulnerável, mas um token de acesso incorporado à infraestrutura de outra pessoa ou um script de escape de sandbox.
Para verificação de imagens, as pessoas geralmente recorrem ao Trivy, Grype ou Clair. Eles fazem um trabalho decente encontrando CVEs conhecidos em pacotes do sistema, mas frequentemente perdem coisas sutis como configuração ruim em tempo de execução, chaves de API vazadas e novos vetores de ataque direcionados a cadeias de suprimentos.
O projeto dockerscan do pesquisador de segurança espanhol Daniel Garcia (cr0hn) resolve esse problema com auditoria abrangente. A primeira versão da ferramenta foi escrita em Python em 2017 e rodava lentamente, mas na segunda versão o autor reescreveu completamente o motor em Go, aumentou a velocidade dez vezes e combinou verificação de vulnerabilidades, detecção de segredos e auditoria de configuração em um único binário.
O que há dentro do novo DockerScan
Em vez de executar três utilitários diferentes em sequência para verificar imagens, o dockerscan executa diagnósticos abrangentes em várias áreas de uma só vez.
A ferramenta combina cinco módulos de análise:
- CIS Docker Benchmark v1.7.0. Verifica mais de 80 parâmetros de segurança, incluindo execução como root, portas abertas desnecessárias, diretiva HEALTHCHECK ausente e permissões corretas de arquivos do sistema.
- Detector de ataques à cadeia de suprimentos. Procura vestígios de campanhas populares dos últimos anos: miners ocultos (como xmrig), backdoors em bibliotecas do sistema (seguindo o incidente xz-utils), textos de phishing e containers sem camadas reais.
- Detecção de segredos incorporados. Reconhece mais de 40 formatos de chaves e tokens (AWS, GCP, OpenAI, Stripe, chaves SSH privadas, strings de conexão de banco de dados). Tokens desconhecidos são capturados através do cálculo de entropia de Shannon com um limiar acima de 4.5.
- Banco de dados de vulnerabilidades CVE. Rastreia vulnerabilidades perigosas de escape de container (CVE-2024-21626 no runc), problemas do BuildKit e imagens base desatualizadas. O banco de dados é compilado a partir do snapshot oficial MITRE cvelistV5, então o utilitário não atinge os limites da API do NVD.
- Auditoria de segurança em tempo de execução. Verifica capabilities perigosas do Linux (por exemplo, CAP_SYS_ADMIN), perfis Seccomp e AppArmor e flags de isolamento de namespace.
Na versão 2.1.0, o autor corrigiu um bug importante nas builds anteriores da v2.0.x que fazia a verificação de vulnerabilidades de pacotes retornar silenciosamente zero resultados. Agora o correspondência de versão de pacotes segue as regras do dpkg accounting para backports de distribuição.
Início rápido e execução de verificações
O utilitário é distribuído como um binário pronto para uso para Linux, macOS e Windows. Sem dependências para instalar.
A instalação no Linux amd64 leva três linhas:
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-linux-amd64 -o dockerscan
chmod +x dockerscan
sudo mv dockerscan /usr/local/bin/
Antes da primeira execução, baixe o banco de dados CVE local:
dockerscan update-db
O banco de dados é atualizado diariamente via GitHub Actions e pesa cerca de 30 MB compactado. Depois disso, você pode apontar o scanner para qualquer imagem local ou remota:
dockerscan nginx:latest
Se você está interessado apenas em verificações específicas, por exemplo detecção de segredos e conformidade com CIS Benchmark, você pode limitar os módulos com a flag --scanners:
dockerscan --scanners cis,secrets ubuntu:22.04
Para scripts de automação, o modo silencioso -q e filtragem por severidade são úteis:
dockerscan -q --only-critical my-app:prod
Trabalhando com registros privados
Um problema comum com muitos scanners é a autenticação inconveniente com repositórios privados. O dockerscan suporta todos os cenários populares: Docker Hub, GHCR, AWS ECR, Google Artifact Registry, Azure ACR e GitLab.
Se você já está autenticado via docker login, o utilitário automaticamente obtém tokens de ~/.docker/config.json. Ele também suporta auxiliares de credenciais do sistema (osxkeychain no macOS, wincred no Windows e pass no Linux).
Para pipelines CI/CD, é mais conveniente passar credenciais via variáveis de ambiente:
export DOCKER_USERNAME=ci-bot
export DOCKER_PASSWORD=ghp_secret_token_here
dockerscan ghcr.io/my-org/private-service:v1.2.0
O utilitário retorna códigos de saída claros: 0 para um relatório limpo, 1 quando problemas de nível Alto são encontrados e 2 quando vulnerabilidades críticas são detectadas. Isso permite parar imediatamente o build do pipeline ao encontrar um bug perigoso.
Integração em CI/CD e relatórios
Os resultados do Dockerscan são salvos nos formatos JSON e SARIF. O formato SARIF é nativamente compreendido pelo GitHub Security, GitLab e Azure DevOps, então os problemas encontrados são imediatamente exibidos na interface de pull request.
Exemplo de step para GitHub Actions:
name: Security Scan
run: |
./dockerscan update-db
./dockerscan -q myapp:${{ github.sha }}
name: Upload SARIF report
uses: github/codeql-action/upload-sarif@v2
if: always()
with:
sarif_file: dockerscan-report.sarif
Licença e limitações
A licença do projeto merece atenção especial. O autor escolheu um modelo Source-Available. O código fonte é totalmente aberto, o utilitário pode ser usado gratuitamente para necessidades internas da empresa, incorporado em pipelines CI/CD pessoais e usado em auditorias e pentests. Apenas uma coisa é proibida: empacotar o dockerscan em um SaaS comercial e vendê-lo como um serviço de verificação em nuvem pago sem a permissão do autor.
Vale a pena migrar para o DockerScan
Se você precisa de análise estática rápida de imagens combinada com verificação de permissões de container e detecção de tokens vazados, o dockerscan cobre todas essas tarefas com um único comando. O utilitário consome cerca de 50-100 MB de RAM e roda perceptivelmente mais rápido que soluções antigas em Python.
A ferramenta é uma ótima escolha para engenheiros DevOps e especialistas de segurança para auditoria regular de imagens de produção e adição de verificações rigorosas em pipelines de deploy. A melhor maneira de começar é executá-lo contra um par de seus próprios containers funcionais para ver o número real de avisos ocultos do CIS Benchmark.
Projetos relacionados