Header Ads

Como usar o Trivy para encontrar vulnerabilidades em contêineres Docker

Uma varredura Trivy inspeciona a imagem base do seu Dockerfile para encontrar vulnerabilidades não resolvidas que seus contêineres irão herdar. Trivy também pode ver os pacotes do sistema operacional e as dependências do código-fonte adicionadas por meio de gerenciadores de pacotes populares.

Trivy tem três tipos de varredura: contêiner, repositório Git e diretório do sistema de arquivos. Neste artigo, estamos nos concentrando em verificações de contêiner. Os documentos do Trivy fornecem mais informações sobre como você pode analisar seu código-fonte e seu ambiente.

Instalando Trivy

Trivy &’ está disponível nas distribuições Linux mais populares. Pode ser necessário adicionar o repositório do desenvolvedor. Você pode encontrar o link certo para sua distribuição nos documentos do Trivy.

Se preferir usar uma versão específica, você pode baixar um binário da página de lançamentos do GitHub do projeto. Também existe um script de instalação automatizada que fará o download do binário apropriado para o seu sistema operacional.

Finalmente, Trivy &’ tem sua própria imagem Docker que você pode usar em vez da instalação bare-metal:

 docker run --rm -v trivy-cache: /root/. cache/ -v /var/run/docker. sock:/var/run/docker. sock aquasec / trivy: mais recente [/ PRE ]

Publicidade

Este comando liga seu diretório trivy-cache ao caminho de cache do contêiner Trivy. Isso melhora o desempenho, permitindo que Trivy armazene dados em cache fora do Docker entre as varreduras.

O soquete Docker do seu host também é montado no contêiner. Isso permite que o Trivy verifique outros contêineres em execução no host. Agora você está pronto para começar a encontrar vulnerabilidades.

Primeira execução

O mecanismo de contêiner do Trivy oferece suporte a imagens locais e remotas. Funciona com Docker, Podman, arquivos de imagem exportados (docker save) e imagens em registros como Docker Hub e GitHub Container Registry.

Você pode iniciar uma varredura básica usando o comando trivy image. Isso aceita uma tag de imagem.

 imagem trivy minha-imagem: mais recente 

Trivy baixará seu banco de dados de vulnerabilidades na primeira execução. O banco de dados será armazenado em cache e reutilizado para verificações futuras.

Os resultados da varredura são emitidos diretamente para o seu terminal. O resumo na parte superior mostra o sistema operacional do contêiner detectado e uma análise das vulnerabilidades encontradas por gravidade. A tabela fornece uma lista completa de problemas, incluindo a biblioteca em que cada um foi encontrado, uma descrição e um ID CVE quando disponível.

Reduzindo o ruído

Trivy suporta vários sinalizadores para permitir que você personalize sua saída. O padrão será mostrar todas as vulnerabilidades detectadas se nenhum sinalizador estiver presente. Isso pode incluir vulnerabilidades que não foram corrigidas no projeto upstream.

Publicidade

Você pode excluir problemas não corrigidos adicionando a sinalização --ignore-unfixed. Isso reduz o ruído, ocultando problemas que você não conseguirá resolver.

 imagem trivial - ignorar minha imagem não corrigida: mais recente 

Às vezes, você pode querer aceitar intencionalmente uma vulnerabilidade. Nem todos os problemas afetam todos os projetos igualmente. Se você não for afetado ou se estiver disposto a correr o risco, o Trivy permitirá que você omita IDs de CVE específicos de suas verificações.

Adicione um arquivo . trivyignore ao seu diretório de trabalho. Insira uma lista de IDs CVE, um em cada linha. Trivy encontrará e usará o arquivo quando você executar uma verificação. Os CVEs presentes em . trivyignore não aparecerão na saída da varredura. É uma boa ideia adicionar um comentário a cada CVE que você excluir; isso garante que outros colaboradores sejam informados do motivo pelo qual o risco foi aceito.

 # . trivyignore # Este problema não é relevante para o nosso uso CVE-2021-1234 

Vulnerabilidades de filtragem

Você pode filtrar para mostrar vulnerabilidades de um tipo específico usando a sinalização --vuln-type. Isso aceita biblioteca ou sistema operacional como um valor.

O uso da biblioteca revelará problemas decorrentes das dependências da linguagem de programação. A opção os define o escopo da varredura para pacotes do sistema operacional.

Publicidade

Você também pode filtrar pela gravidade da vulnerabilidade. Isso ajuda você a se concentrar nos problemas que importam, ocultando vulnerabilidades relativamente insignificantes. Passe em uma lista separada por vírgulas de níveis de gravidade de CVSS para incluir:

 imagem trivy - severity MÉDIA, ALTA, CRÍTICA minha-imagem: mais recente 

Agora qualquer “ baixo ” problemas de gravidade serão omitidos do relatório.

O padrão de Trivy é uma tabela visual projetada para consumo humano em um terminal. Em vez disso, você pode obter JSON analisável por máquina adicionando --format json.

Também há suporte para estilos de saída personalizados usando modelos. Vários modelos estão incluídos, como xml e html:

 imagem trivial - modelo de formato @ contrib / html. tpl -o scan. html minha-imagem: mais recente 

Esta varredura produzirá um relatório HTML salvo em scan. html. Os relatórios gráficos podem ser mais rápidos de ler e mais fáceis de compartilhar, especialmente quando muitos problemas são encontrados.

Usando Trivy In CI

Você pode incorporar facilmente o Trivy em seus scripts de CI. Esteja ciente de que o código de saída é sempre 0 por padrão, mesmo se forem encontradas vulnerabilidades. Adicione o sinalizador --exit-code 1 para fazer Trivy sair com um código diferente de zero se houver problemas.

Publicidade

Você tem várias opções para incluir o Trivy em suas construções. Os padrões oficiais de integração estão disponíveis para provedores de CI populares, incluindo GitHub, GitLab, Travis e CircleCI.

Ao construir imagens dentro de seu pipeline, você pode executar o Trivy na saída final da compilação ou usar a ferramenta dentro do contêiner. As compilações de vários estágios do Docker permitem que você faça referência à imagem Trivy e aborte a compilação se a varredura falhar. Certifique-se de usar o modo de sistema de arquivos em vez de imagem, pois está verificando o contêiner em execução por dentro.

 COPIAR --from = aquasec / trivy: mais recente / usr / local / bin / trivy / usr / local / bin / trivy RUN sistema de arquivos trivy --exit-code 1 - sem progresso / 

Normalmente, é melhor executar o Trivy próximo ao final do Dockerfile, depois que todas as dependências do software estiverem instaladas. Execute rm / usr / local / bin / trivy depois para reduzir o tamanho da imagem final.

Modo de servidor

Trivy pode ser executado no modo cliente-servidor. Isso move o banco de dados de vulnerabilidade para o servidor, para que os clientes não precisem manter suas próprias versões.

Binários triviais vêm com modo de servidor embutido. Execute o trivy server para iniciar uma instância do servidor em sua máquina. A porta padrão é 4594; você pode mudar isso adicionando --listen localhost: 8080 e especificando a porta escolhida.

O servidor fará o download do banco de dados de vulnerabilidade quando for iniciado. Ele verificará se há atualizações em segundo plano e obterá automaticamente novas versões.

Publicidade

Você conecta um cliente Trivy ao seu servidor usando um cliente trivy:

 cliente trivy --remote http: // localhost: 8080 image minha-imagem: mais recente 

Se precisar de autenticação, adicione um sinalizador --token ao servidor e aos comandos do cliente. O servidor só aceitará novos clientes se eles apresentarem o token correto.

Resumo

Usar o Trivy para verificar seus contêineres do Docker ajuda a encontrar vulnerabilidades antes que se tornem um problema na produção. Você pode ter mais confiança em seus contêineres verificando regularmente se há pacotes de SO desatualizados e dependências de linguagem de programação.

Trivy adquire suas listas de vulnerabilidades de várias fontes diferentes. Algumas dessas fontes especificam apenas o uso não comercial, então você deve verificar se o seu projeto é compatível antes de adicionar o Trivy às suas compilações.

Nenhum comentário