Marcio Cunha

Como auditar vulnerabilidades em imagens Docker com o Trivy

Aprenda a escanear camadas de containers e pacotes desatualizados em pipelines de CI/CD utilizando o scanner Trivy de forma simples e direta.

Marcio Cunha•7 min
Também disponível em:EnglishEspañol
Resumo
  • O Trivy analisa pacotes do sistema operacional e dependências de linguagens em imagens de containers.
  • Identificar falhas conhecidas antes do deploy evita brechas críticas em ambientes de produção.
  • A integração em pipelines automatizados bloqueia imagens vulneráveis de forma preventiva.
  • A análise detalhada de camadas ajuda a entender exatamente onde mora cada fragilidade.
  • Políticas de tolerância a falhas garantem flexibilidade sem abrir mão da segurança.

Por que escanear imagens Docker se tornou indispensável

Quando empacotamos uma aplicação em um container, costumamos baixar imagens base prontas na internet para poupar tempo. Na prática, isso significa que estamos puxando milhares de linhas de código escritas por terceiros, incluindo bibliotecas antigas e ferramentas de sistema que podem conter falhas de segurança conhecidas. Se não auditarmos esse conteúdo, nossa aplicação herda brechas que facilitam invasões cibernéticas silenciosas. Antes de subir qualquer código para o ambiente de produção, precisamos olhar para dentro do pacote e descobrir o que está oculto nas dependências.

Para entender a gravidade do problema, vale lembrar que a segurança de um sistema costuma ser avaliada pelo seu elo mais fraco. Um container web moderno pode parecer seguro, mas se a imagem base contiver uma versão desatualizada do OpenSSL ou do utilitário de rede, um atacante pode explorar essa vulnerabilidade para obter acesso total ao servidor. Para mitigar esse risco de forma eficiente, a engenharia moderna recorre a ferramentas automatizadas de inspeção profunda, permitindo cruzar o conteúdo do container com bases de dados globais de ameaças conhecidas.

Antes de implementar barreiras automáticas de segurança, é recomendável dominar a inspeção manual para entender o impacto das dependências. Conforme detalhamos no guia sobre como inspecionar camadas e tamanho de imagens no Docker com o dive, enxergar o interior de cada fatia do container revela excessos e arquivos esquecidos que aumentam desnecessariamente a nossa superfície de ataque. Combinar essa visibilidade estrutural com um scanner de vulnerabilidades automatizado transforma radicalmente a postura defensiva da equipe de engenharia.

O que é o Trivy e como ele funciona na prática

O Trivy é um scanner de vulnerabilidades de código aberto desenvolvido especificamente para o ecossistema nativo de nuvem. Na prática, ele funciona como um inspetor minucioso que lê a estrutura de arquivos do seu container, identifica pacotes instalados — como dependências Python, Node.js ou pacotes APT do Linux — e compara cada versão com um catálogo mundial de falhas catalogadas, conhecido como CVE. A grande vantagem dessa ferramenta é a simplicidade de uso e a velocidade com que entrega resultados claros direto no terminal.

Diferente de scanners antigos e pesados que exigiam configurações complexas em bancos de dados locais, o Trivy baixa uma base de dados compacta e atualizada na primeira execução e realiza a varredura localmente em segundos. Isso significa que você pode rodá-lo na sua máquina de desenvolvimento, no servidor de homologação ou diretamente dentro de servidores de integração contínua sem esforço excessivo. Ele analisa não apenas pacotes do sistema operacional, mas também arquivos de lock de gerenciadores de pacotes e até mesmo configurações de infraestrutura como código.

A precisão do Trivy evita falsos positivos excessivos ao categorizar os problemas por níveis de gravidade claros, como baixa, média, alta e crítica. Quando uma vulnerabilidade é encontrada, a ferramenta exibe o código identificador da falha e a versão exata para a qual o pacote deve ser atualizado. Essa clareza orienta o desenvolvedor exatamente sobre o que precisa ser corrigido no arquivo de configuração, poupando horas preciosas de investigação em logs crípticos.

Como instalar e executar o primeiro escaneamento local

A instalação do Trivy é extremamente simples e compatível com os principais sistemas operacionais do mercado. Em ambientes Linux baseados em Debian ou Ubuntu, por exemplo, podemos adicionar o repositório oficial e instalar o binário com comandos diretos no terminal. Na prática, essa facilidade permite que qualquer desenvolvedor adicione uma verificação de segurança rápida antes mesmo de enviar o código para o repositório remoto, garantindo um ciclo de desenvolvimento muito mais seguro.

Para executar o primeiro escaneamento em uma imagem Docker que já está presente no seu ambiente local, utilizamos o comando básico apontando para o nome da imagem. O scanner vai ler todas as camadas, descompactar o necessário na memória de forma temporária e exibir um relatório completo na tela. Veja o exemplo de comando para realizar essa auditoria inicial de forma rápida e totalmente automatizada:

trivy image my-app:latest

Caso a imagem ainda não esteja na sua máquina, o Trivy possui a capacidade inteligente de puxar os metadados necessários e realizar a análise sem exigir que você execute comandos complexos de extração prévia. Se o relatório retornar muitas vulnerabilidades críticas, o desenvolvedor pode investigar a origem do problema e até mesmo otimizar o processo de construção. Para evitar que problemas de build atrapalhem o fluxo, vale a pena consultar as dicas em como usar cache remoto no CI/CD para acelerar builds do Docker, garantindo agilidade sem abrir mão da segurança.

Automatizando a auditoria em pipelines de CI/CD

Garantir que as imagens sejam escaneadas manualmente na máquina do desenvolvedor ajuda, mas o verdadeiro ganho de segurança acontece quando inserimos o scanner dentro do pipeline de CI/CD. Na prática, isso significa que toda vez que alguém enviar um novo commit para o repositório de código, o servidor de automação vai construir a imagem Docker e acionar o Trivy imediatamente antes de enviá-la para o registro oficial de containers da empresa.

Podemos configurar o Trivy para falhar o build caso encontre vulnerabilidades com gravidade crítica, impedindo automaticamente que códigos inseguros alcancem o ambiente de produção. Essa barreira automática protege a empresa contra descuidos humanos e garante um padrão rigoroso de conformidade técnica. Abaixo, temos um exemplo prático de como estruturar essa verificação utilizando parâmetros de interrupção por severidade:

name: Security Scan
on: [push]
jobs:
  trivy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Build Docker image
        run: docker build -t my-app:${{ github.sha }} .
      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: 'my-app:${{ github.sha }}'
          exit-code: '1'
          severity: 'CRITICAL,HIGH'

Com essa configuração ativa, o pipeline se recusa a prosseguir caso existam falhas graves pendentes de correção. Essa abordagem proativa obriga a equipe a atualizar dependências regularmente, mantendo a base de código saudável e imune a ataques exploratórios comuns direcionados a softwares desatualizados.

Filtrando resultados e lidando com falsos positivos

Em grandes projetos de software, é comum que scanners de vulnerabilidade apontem falhas em pacotes que sequer são executados em tempo de execução, gerando alertas que chamamos de falsos positivos. Na prática, saber filtrar esses resultados é essencial para evitar o esgotamento da equipe de engenharia com alertas falsos. O Trivy permite ignorar vulnerabilidades específicas utilizando arquivos de configuração dedicados ou parâmetros diretos na linha de comando.

Podemos criar um arquivo chamado .trivyignore na raiz do projeto para listar códigos de CVEs que foram analisados e considerados inofensivos para o contexto específico daquela aplicação. Essa flexibilidade garante que a esteira de segurança continue rigorosa sem se tornar um obstáculo irracional para as entregas de software. O segredo é documentar o motivo de cada exceção para manter a transparência e a governança técnica do projeto em dia.

Além de ignorar falhas pontuais, também podemos alterar o formato de saída do relatório para arquivos JSON ou HTML, facilitando a integração com ferramentas corporativas de monitoramento e painéis gerenciais. Dessa forma, a segurança dos containers deixa de ser apenas uma tarefa técnica isolada e passa a fazer parte da métrica de qualidade acompanhada por toda a organização. Para aprofundar esses conceitos na prática em produção, confira também nossa análise técnica sobre Como ler logs de múltiplos pods no Kubernetes ao mesmo tempo.

Considerações finais

Auditar imagens Docker com o Trivy deixou de ser um luxo corporativo para se tornar um requisito básico de higiene digital na engenharia de software moderna. Ao integrar esse scanner leve e veloz tanto na estação de trabalho quanto nas esteiras automatizadas de CI/CD, blindamos nossas aplicações contra ameaças conhecidas antes mesmo que elas cheguem aos servidores de produção. A segurança contínua exige ferramentas ágeis que caminhem lado a lado com a velocidade dos negócios, e o Trivy cumpre esse papel com excelência técnica.

Manter o hábito de inspecionar camadas, atualizar imagens base e tratar vulnerabilidades críticas cria uma cultura organizacional madura e resiliente. O investimento de tempo para configurar essas barreiras defensivas retorna multiplicado em tranquilidade operacional e na proteção da reputação da empresa perante clientes e parceiros. Comece implementando varreduras locais hoje mesmo e evolua gradualmente para o bloqueio automático em seus pipelines.