Olá a todos.
Se há uma coisa que uso muito no meu homelab são containers docker. Muitos deles fazem parte já de algum pipeline que os utiliza, seja para consumir dados produzidos por eles, e que acaba por fazer algum tipo de validação de segurança, ou tem regras apropriadas para os defender a eles, e defender o resto da minha infraestrutura deles.
E os que não passam por nada e são apenas “executados”? Será que sei bem o que está lá? A verdade é que fazemos patching de sistemas operativos, tentamos com soluções como o watchtower fazer pull das ultimas versões disponíveis dos containers, mas a verdade é que não sabemos muito bem o que por lá está e quais as falhas de segurança presentes.
E não somos só nós. Com a crescente utilização de tecnologias como o Kubernetes, Docker e micro-serviços, o número de ameaças à segurança só aumenta. E, por mais que tentemos, manter um ambiente seguro é um pesadelo sem fim. É aqui que entra em cena, neste post, uma ferramenta como o Trivy, da Aqua Security. Iremos abordar outros em posts futuros
Neste post, vamos explorar como o Trivy nos pode ajudar a auditar os nossos containers em busca de vulnerabilidades e, ao mesmo tempo, reforça a segurança dos nossos sistemas. Não iremos complicar demasiado. Apenas usar uma linha de comandos para verificar o estado do que estamos a utilizar, e como a nossa escolha de muitas vezes colocar este tipo de aplicações por detrás de reverse-proxies faz todo o sentido 😉
O que é o Trivy?
Antes de mais, para quem ainda não está muito familiarizado, o Trivy é uma ferramenta de segurança open-source desenvolvida pela Aqua Security que realiza auditorias automáticas nos nossos containers, imagens de containers, e até no próprio código, procurando vulnerabilidades e falhas de segurança. O seu principal foco é identificar dependências desatualizadas, configurações mal feitas, ou qualquer tipo de ameaça que possa comprometer a segurança dos nossos sistemas.
O que o torna tão interessante? Para começar, ele é super fácil de usar. Não precisas de ser nenhum especialista em segurança para tirar proveito da ferramenta. Podemos estar mais focados no desenvolvimento do que na segurança propriamente dita, e o Trivy encaixa-se perfeitamente nesse cenário.
A Auditoria de Containers com o Trivy
Quando falamos em containers, estamos a falar de pequenos pacotes de software que incluem tudo o que é necessário para executar uma aplicação: desde o código propriamente dito até às dependências e bibliotecas. E, convenhamos, por vezes criamos ou utilizamos containers sem prestar nenhuma atenção ao que está lá dentro. A verdade é que nem sempre temos a certeza se todas as dependências estão devidamente atualizadas ou se há alguma vulnerabilidade oculta.
Aqui é onde o Trivy entra em ação. Quando corremos o Trivy numa imagem de container, ele faz uma varredura completa, analisando desde o sistema operativo subjacente até às bibliotecas e dependências incluídas. E o melhor? Ele dá-nos uma lista de todas as vulnerabilidades encontradas, organizadas por severidade (baixa, média, alta ou crítica). Isto significa que podemos ver de imediato quais são os problemas mais urgentes que precisamos de resolver para evitar eventuais ataques.
Imagina o seguinte: acabámos de criar um container novinho em folha para a nossa aplicação, tudo funciona às mil maravilhas, mas esquecemo-nos de verificar se todas as dependências estão atualizadas. O Trivy pode ser executado logo aqui, para garantir que não deixámos nada ao acaso. Caso detete alguma vulnerabilidade, podemos corrigir antes mesmo de colocar o container em produção.
Como Funciona na Prática?
Ok, mas como é que isto se faz na prática? A instalação do Trivy é extremamente simples. Podemos correr um comando básico numa linha de comandos, como este, ou correr de dentro de um ambiente docker se for mais pratico:
trivy image nome_da_imagem
E voilá, em apenas alguns segundos, o Trivy fará uma varredura completa na imagem que especificámos. Ele gerará um relatório detalhado com todas as vulnerabilidades encontradas, identificando não só as falhas como também sugerindo as versões corrigidas das dependências afetadas.
Por exemplo numa imagem que muitos usamos, o postgres:16
docker run aquasec/trivy image postgres:16
O resultado assustador – só parte é este:
2024-10-04T15:57:30Z INFO [vuln] Vulnerability scanning is enabled 2024-10-04T15:57:30Z INFO [secret] Secret scanning is enabled 2024-10-04T15:57:30Z INFO [secret] If your scanning is slow, please try '--scanners vuln' to disable secret scanning 2024-10-04T15:57:32Z INFO [secret] Please see also https://aquasecurity.github.io/trivy/v0.56/docs/scanner/secret#recommendation for faster secret detection 2024-10-04T15:57:46Z INFO Detected OS family="debian" version="12.7" 2024-10-04T15:57:46Z INFO [debian] Detecting vulnerabilities... os_version="12" pkg_num=144 2024-10-04T15:57:46Z INFO Number of language-specific files num=1 2024-10-04T15:57:46Z INFO [gobinary] Detecting vulnerabilities... 2024-10-04T15:57:46Z WARN Using severities from other vendors for some vulnerabilities. Read https://aquasecurity.github.io/trivy/v0.56/docs/scanner/vulnerability#severity-selection for details. postgres:16 (debian 12.7) ========================= Total: 138 (UNKNOWN: 0, LOW: 99, MEDIUM: 27, HIGH: 11, CRITICAL: 1)
A lista completa pode ser lida scan. Interessante não?
Não Só Containers: O Trivy Vai Mais Além
Talvez o que mais nos surpreenda no Trivy seja o facto de ele não se limitar apenas a containers. Sim, o Trivy também pode ser utilizado para auditar ficheiros de configuração, repositórios de código e até imagens de infraestrutura como código (IaC/Terraform/Opentofu/Ansible). Isto é super importante para quem está a usar Kubernetes, Docker Compose, ou outros sistemas de gestão de containers.
Vamos ser sinceros, quem nunca meteu os pés pelas mãos e causou algum erro de configuração em ficheiros YAML ou Dockerfiles? Esses pequenos erros, muitas vezes, são portas abertas para ataques. Com o Trivy, podemos verificar se as nossas configurações de Kubernetes estão bem feitas ou se há algum risco de segurança a corrigir. Ele vai verificar se as permissões estão corretas, se há portas abertas desnecessariamente, e uma série de outros pormenores que podem ser facilmente ignorados quando estamos a configurar ambientes.
E porque não utilizar o Trivy para fazer uma análise no nosso código-fonte? Ele verifica a existência de falhas de segurança em bibliotecas de terceiros que usamos, como aquelas que instalamos via gestores de pacotes (pip, npm, etc.). Sabemos bem que as dependências externas podem ser um ponto fraco em qualquer aplicação, especialmente quando são negligenciadas. E, sejamos honestos, quantas vezes já nos esquecemos de atualizar uma biblioteca no meio da correria de um projeto?
Como o Trivy Aumenta a Segurança dos Nossos Sistemas
Agora que já falámos sobre como o Trivy funciona, vamos ver de que forma ele realmente pode aumentar a segurança dos nossos sistemas. O Trivy não só encontra falhas e vulnerabilidades, como também nos permite agir rapidamente para as corrigir. E quanto mais rápido conseguirmos resolver uma vulnerabilidade, menor é a janela de tempo em que o sistema fica exposto a possíveis ataques:
- Deteção Precoce de Vulnerabilidades: Ao integrarmos o Trivy no nosso pipeline de CI/CD, conseguimos detetar vulnerabilidades durante o processo de desenvolvimento, em vez de sermos apanhados de surpresa em produção. Isto significa menos dores de cabeça e mais tempo focados no que realmente importa: desenvolver funcionalidades, ou andar pelo 9gag.
- Automatização de Auditorias: Em vez de fazermos uma auditoria manual (que, sejamos francos, raramente fazemos com a frequência que deveríamos), o Trivy automatiza o processo. A auditoria constante garante que estamos sempre atentos às mais recentes ameaças de segurança.
- Redução do Risco Operacional: Containers vulneráveis são uma porta de entrada perfeita para atacantes. Ao usar o Trivy para auditar as nossas imagens de containers, reduzimos o risco de comprometer a segurança do sistema como um todo.
- Correção Simplificada: O Trivy fornece relatórios detalhados e apontamentos claros sobre como corrigir as vulnerabilidades. Em vez de andarmos à procura de soluções, o Trivy indica-nos o caminho.
Trivy na Nossa Pipeline de CI/CD
Uma das melhores maneiras de tirar o máximo proveito do Trivy é integrá-lo diretamente na nossa pipeline de CI/CD. Desta forma, cada vez que fazemos um commit ou um push de código, o Trivy faz automaticamente a sweep das imagens que estão a ser construídas ou das bibliotecas que estamos a usar.
Por exemplo, se estivermos a usar GitLab CI ou Jenkins, é muito fácil adicionar um passo no nosso pipeline que execute o Trivy antes de as imagens serem enviadas para o registo de containers ou para o ambiente de produção.
Este nível de automação assegura que não estamos apenas a verificar as vulnerabilidades quando algo corre mal. Em vez disso, garantimos que os nossos sistemas estão sempre atualizados e que estamos a usar as versões mais seguras de cada dependência.
Containers e Reverse-proxys.
A word of caution: Pela auditoria que fizemos ainda agora ao container do postgres:16, conseguimos entender o perigoso que é ter containers não construidos, validados e “securizados” por nós, abertos indiscriminadamente para a internet. Por favor tenham noção disto quando disponibilizarem um serviço via docker publicamente.
Coloquem sempre os vossos sistemas, por detrás de uma plataforma que funcione com reverse-proxy, preferencialmente com uma arquitetura de WAF/IDS/IPS a defender.
Chegamos ao fim de mais um post semanal. Neste, observamos como o Trivy é uma ferramenta poderosa, opensource e gratuita, que nos permite não só detetar vulnerabilidades nos nossos containers e sistemas, mas também agir rapidamente para as corrigir. Ele simplifica todo o processo de auditoria e aumenta significativamente a segurança dos nossos ambientes, sem nos sobrecarregar com complexidade técnica. Pessoalmente estou a integrar ele nos meus fluxos de trabalho, está na hora de o fazer e já que tenho algo que me ajuda a melhorar a segurança, porque não o fazer.
Vamos lá auditar os nossos containers, e já sabem se encontrarem algo menos correcto, já sabem onde me encontrar.
Abraço.
Nuno