Olá! Bem-vindo de volta ao nosso módulo sobre Segurança de Contêineres.
Introdução
Na lição anterior, demos um passo fundamental para proteger nossas aplicações ao implementar o princípio do menor privilégio, executando nossos contêineres .NET como um usuário não-root. Isso reduz drasticamente os danos que um invasor pode causar se comprometer a aplicação.
Agora, vamos adicionar outra camada crucial à nossa estratégia de segurança, focando no que está dentro da nossa imagem. Uma imagem Docker é composta por um sistema operacional base e várias dependências de software. Cada uma dessas peças pode ter vulnerabilidades de segurança conhecidas. Deixá-las sem verificação é como construir uma casa com materiais defeituosos.
O objetivo desta lição é aprender a escanear imagens em busca de vulnerabilidades usando ferramentas comuns (como Docker Scout e Trivy) e interpretar os resultados do escaneamento. Esta prática, muitas vezes chamada de "shift-left security", nos permite identificar e corrigir problemas de segurança no início do ciclo de desenvolvimento, muito antes de a aplicação chegar à produção.
1. Por que Escanear Imagens de Contêiner?
Toda imagem Docker é construída sobre uma imagem base e pode incluir pacotes de sistema operacional (via apt-get, apk add, etc.) e dependências de aplicações (como pacotes NuGet em seu caso). Com o tempo, vulnerabilidades são descobertas nesses componentes. Uma vulnerabilidade é uma falha de software que pode ser explorada por um invasor para comprometer a segurança de um sistema.
As ferramentas de escaneamento de vulnerabilidades funcionam de maneira conceitual:
- Elas inspecionam sua imagem Docker para criar um inventário completo de todo o software contido nela — um Software Bill of Materials (SBOM).
- Elas comparam cada item do SBOM com bancos de dados públicos de vulnerabilidades conhecidas, como o Common Vulnerabilities and Exposures (CVE).
- Elas geram um relatório listando todas as vulnerabilidades encontradas, sua gravidade e, idealmente, como corrigi-las.
Para você, como desenvolvedor .NET, isso é uma extensão do gerenciamento de dependências que você já faz. Assim como você verifica pacotes NuGet por questões de segurança, o escaneamento de imagens Docker estende essa vigilância para toda a pilha de software do seu contêiner.
All-In-One Open Source Security Scanner | Docker Image Analysis with Trivy
Para entender a importância fundamental do escaneamento de imagens, assista a este segmento inicial do vídeo do canal Akamai Developer. Ele explica o que é o escaneamento de vulnerabilidades no contexto de Docker e por que ele é indispensável.
Assista do início até 02:40. O vídeo introduz o conceito de escaneamento de vulnerabilidades, explica como pacotes vulneráveis em uma imagem podem minar outras medidas de segurança e apresenta o Trivy, uma das ferramentas que abordaremos.
2. Docker Scout: A Ferramenta Nativa do Docker
A maneira mais fácil de começar a escanear suas imagens é usando a ferramenta integrada do próprio Docker: Docker Scout. Ela substitui o antigo comando docker scan e está integrada diretamente no Docker Desktop e na CLI do Docker.
Docker Scout: Scan Container Images for Vulnerabilities
Este tutorial do DataCamp oferece uma excelente introdução prática ao Docker Scout, cobrindo os comandos essenciais e como interpretar a saída.
Leia as seções "What Is Docker Scout?", "Installing and Enabling Docker Scout", "Scanning an Image with Docker Scout", e "Understanding the output". Elas fornecerão o contexto necessário e os comandos práticos que usaremos a seguir.
Analisando uma Imagem com a CLI
O comando principal que você usará é docker scout cves. Ele analisa uma imagem e lista as vulnerabilidades (CVEs) encontradas.
Vamos tentar escanear uma imagem de exemplo. Execute o seguinte comando no seu terminal:
docker scout cves node:18-bullseye
Você verá uma saída detalhada. Vamos analisar as partes principais:
- Resumo da Vulnerabilidade: No topo, você verá uma contagem de vulnerabilidades agrupadas por severidade:
C(Critical),H(High),M(Medium),L(Low). - Lista de Pacotes Vulneráveis: A tabela principal mostra cada pacote que possui uma vulnerabilidade.
Name: O nome do pacote (ex:openssl).Version: A versão instalada na imagem.Type: O tipo de pacote (ex:debpara pacotes Debian).Vulnerabilities: Um resumo das vulnerabilidades para aquele pacote.
- Detalhes da Vulnerabilidade: Mais abaixo, cada CVE é listado individualmente, informando a qual pacote pertence e, crucialmente, a versão em que foi corrigido (
Fixed in).

Analisando através do Docker Desktop
Se preferir uma interface gráfica, o Docker Desktop integra o Scout de forma bastante visual.
- Vá para a aba Images no Docker Desktop.
- Clique em uma imagem que você tenha localmente.
- Na visualização de detalhes da imagem, você verá uma aba ou seção dedicada à análise do Docker Scout, mostrando as mesmas informações da CLI de uma forma mais interativa.
Find Vulnerabilities Fast! New Docker CLI Command: Docker Scout
Este vídeo do canal DevOps Directive demonstra o fluxo de trabalho completo com o Docker Scout, tanto na CLI quanto no Docker Desktop. Ele também introduz o comando recommendations.
Assista do timestamp 00:44 a 06:35. Preste atenção em como o comando docker scout cves é usado e como a saída é interpretada. Em seguida, observe como as mesmas informações são apresentadas na GUI do Docker Desktop e como o filtro "fixable" pode ser útil.
3. Trivy: Uma Alternativa Open-Source Popular
Embora o Docker Scout seja excelente por sua integração, o Trivy, da Aqua Security, é uma das ferramentas de escaneamento de código aberto mais populares e versáteis do mercado. Dado seu amplo uso em pipelines de CI/CD, é uma ferramenta valiosa para se conhecer.

Uma das maneiras mais convenientes de usar o Trivy é através de sua própria imagem Docker, o que significa que você não precisa instalar nada em sua máquina local além do Docker.
Analisando uma Imagem com Trivy
O comando para escanear uma imagem é simples. Vamos escanear a mesma imagem node para comparar os resultados:
docker run --rm aquasec/trivy image node:18-bullseye
A saída do Trivy é semelhante em conceito à do Scout, mas formatada de maneira diferente. Para cada sistema operacional ou tipo de dependência (ex: Debian, npm), ele apresenta uma tabela:
Library: O nome do pacote.Vulnerability ID: O identificador CVE.Severity:CRITICAL,HIGH,MEDIUM,LOW,UNKNOWN.Installed Version: A versão presente na imagem.Fixed Version: A versão que contém a correção para a vulnerabilidade.
All-In-One Open Source Security Scanner | Docker Image Analysis with Trivy
Para ver o Trivy em ação com exemplos práticos e impactantes, assista a esta demonstração.
Assista aos segmentos de 05:15 a 13:22 e de 16:25 a 19:29. O primeiro segmento mostra como usar a imagem Docker do Trivy para escanear imagens ubuntu e b-wapp, interpretando os resultados. O segundo segmento é particularmente interessante, pois escaneia uma imagem conhecida por ser vulnerável ao Shellshock, demonstrando como o Trivy identifica uma vulnerabilidade crítica e fornece detalhes para a correção.
Teste seu entendimento!
Você está trabalhando em um projeto .NET mais antigo que ainda usa a imagem SDK do .NET 7. Você suspeita que ela pode ter vulnerabilidades desatualizadas. Escreva o comando do Trivy (usando a imagem Docker do Trivy) para escanear a imagem mcr.microsoft.com/dotnet/sdk:7.0.
Show answer
O comando correto é:
docker run --rm aquasec/trivy image mcr.microsoft.com/dotnet/sdk:7.0
Este comando instrui o Docker a executar um contêiner temporário (--rm) a partir da imagem aquasec/trivy. Dentro desse contêiner, o Trivy executará o subcomando image para escanear o alvo especificado: mcr.microsoft.com/dotnet/sdk:7.0. O Docker primeiro fará o download da imagem SDK do .NET 7 se ela não estiver presente localmente antes de o Trivy realizar a análise.
4. Interpretando Resultados e Tomando Medidas
Ver um relatório com centenas de vulnerabilidades pode ser assustador, mas o segredo está na priorização e na ação estratégica.
-
Priorize por Severidade: Comece sempre pelas vulnerabilidades
CriticaleHigh. Elas representam os riscos mais imediatos e, em muitos ambientes de produção, são bloqueadores de build (ou seja, o pipeline de CI/CD falha se elas forem encontradas). -
Identifique a Fonte: A vulnerabilidade está no sistema operacional base (ex: Debian) ou em uma dependência de linguagem (ex: npm, NuGet)? A ferramenta de escaneamento informará isso.
-
Procure a Correção ("Fixed Version"): Esta é a informação mais importante do relatório.
- Se a correção estiver em um pacote do SO: A solução mais comum é atualizar sua imagem base. Por exemplo, se seu
DockerfileusaFROM debian:11.5, simplesmente mudá-lo paraFROM debian:11(que aponta para a versão patch mais recente do Debian 11) e reconstruir a imagem pode resolver dezenas de vulnerabilidades de uma só vez. - Se a correção estiver em um pacote que você instalou: Se você instalou um pacote manualmente (
RUN apt-get install -y some-package), certifique-se de que está instalando a versão corrigida ou atualize o pacote dentro do seuDockerfile. - Se a correção estiver em uma dependência da aplicação: Atualize a versão do pacote em seu arquivo de projeto (ex:
.csproj) e reconstrua.
- Se a correção estiver em um pacote do SO: A solução mais comum é atualizar sua imagem base. Por exemplo, se seu
-
Se não houver correção disponível: Isso acontece. Nesse caso, você precisa avaliar o risco. A funcionalidade vulnerável é usada pela sua aplicação? Ela está exposta a entradas externas? Às vezes, o risco pode ser aceitável, mas essa decisão deve ser consciente.
5. Docker Scout vs. Trivy: Qual Usar?
Ambas são excelentes ferramentas. A escolha geralmente depende do seu fluxo de trabalho.
| Característica | Docker Scout | Trivy |
|---|---|---|
| Integração | Nativa do ecossistema Docker (Desktop, Hub). | Ferramenta de linha de comando independente. Altamente integrável com qualquer sistema de CI/CD. |
| Licença | Comercial (com um nível gratuito generoso). | Open Source (Apache 2.0). |
| Escopo | Focado principalmente em imagens de contêiner. | Mais amplo: imagens, sistemas de arquivos, repositórios Git, Terraform, Kubernetes, etc. |
| Facilidade de Uso | Extremamente fácil para quem já usa Docker Desktop. | Muito fácil via CLI, especialmente usando sua própria imagem Docker. |
Recomendação Prática:
- Use o Docker Scout para escaneamentos rápidos durante o desenvolvimento local no seu desktop. Sua integração é imbatível.
- Use o Trivy em seus pipelines de CI/CD para automação. Sua flexibilidade e natureza open-source o tornam um padrão da indústria para builds automatizados.
Conclusão
Parabéns! Você agora sabe como inspecionar suas imagens Docker em busca de vulnerabilidades conhecidas, uma habilidade essencial para qualquer desenvolvedor que trabalha com contêineres.
Principais Pontos:
- O escaneamento de vulnerabilidades verifica todo o software dentro de uma imagem (SBOM) contra bancos de dados de falhas de segurança conhecidas (CVEs).
- Docker Scout é a ferramenta nativa do Docker, perfeitamente integrada ao Docker Desktop e à CLI, ideal para desenvolvimento local.
- Trivy é uma alternativa open-source poderosa e versátil, amplamente utilizada em pipelines de CI/CD para escaneamento automatizado.
- Ao interpretar os resultados, priorize as vulnerabilidades
CriticaleHighe use a informação deFixed Versionpara atualizar imagens base ou pacotes específicos.
Na próxima lição, continuaremos a fortalecer nossos contêineres, mas desta vez focando no tempo de execução. Aprenderemos a configurar restrições de recursos (limites de CPU e memória) para evitar que um único contêiner com falha ou malicioso possa derrubar todo o sistema hospedeiro.