O Snyk se destaca como uma ferramenta especializada na análise de vulnerabilidades presentes em arquivos de configuração de infraestrutura, abrangendo desde containers até pacotes de aplicações.
Snyk oferece uma plataforma primariamente baseada em nuvem, mas disponibiliza diversos produtos para atender a diferentes necessidades.
O Snyk Open Source se integra ao fluxo de trabalho do Git através da sua CLI. Ao ser acionado, ele identifica vulnerabilidades, categoriza-as por nível de risco e realiza correções automáticas para falhas de segurança já conhecidas. Essa funcionalidade pode ser integrada ao processo de solicitação de pull, garantindo a segurança do código enviado aos repositórios.
Por outro lado, o Snyk Infrastructure as Code se concentra na análise e correção de vulnerabilidades em arquivos de configuração JSON e YAML do Kubernetes. Ele utiliza um sistema de regras que permite aos administradores configurar a sensibilidade das detecções nos repositórios Git, de acordo com seus critérios específicos.
O Snyk Container possibilita testar imagens Docker e registros associados tanto durante sua criação quanto posteriormente. Este programa pode ser integrado a CLIs, SCMs, ferramentas de CI, registros de contêiner e Kubernetes.
Neste artigo, exploraremos o uso do Snyk Container, que vem integrado ao Docker, para detectar vulnerabilidades em nossas imagens.
Exemplo de Arquivo Docker
Para começar a usar o Snyk na detecção de vulnerabilidades, você precisará de uma imagem Docker. Neste exemplo, utilizaremos a seguinte imagem:
FROM python:3.4-alpine ADD . /code WORKDIR /code RUN pip install -r requirements.txt EXPOSE 8000 CMD [“python”, “app.py”]
O primeiro passo é criar a imagem localmente através do comando abaixo:
docker build -t 0xyz0/python-app.
Agora, temos uma imagem pronta para análise.
Analisando a Imagem com o Cliente Docker
A integração do Snyk com o Docker simplifica enormemente o processo de análise. Para iniciar a verificação, basta executar o seguinte comando:
docker scan 0***0/python-app
Essa ação iniciará a análise, que retornará uma saída com informações detalhadas sobre as vulnerabilidades encontradas, além de um resumo.
A análise do Docker mostrará todas as vulnerabilidades identificadas na imagem.
Como você pode observar, a ferramenta não apenas informa o número de vulnerabilidades, mas também fornece detalhes sobre cada uma, incluindo seu nível de criticidade. Além disso, ela oferece recomendações sobre a imagem base mais segura a ser utilizada.
Você pode obter informações mais detalhadas sobre cada vulnerabilidade no Banco de dados de vulnerabilidades do Snyk.
No meu caso, a ferramenta ofereceu diversas alternativas. Decidi, então, modificar o meu Dockerfile com a primeira opção:
FROM python:3.7.11-slim ADD . /code WORKDIR /code RUN pip install -r requirements.txt EXPOSE 8000 CMD ["python", "app.py"]
Após reconstruir a imagem e executar a análise novamente:
docker build -t 0***0/python-app . && docker scan 0***0/python-app
A saída agora exibirá um número menor de vulnerabilidades e indicará que você está utilizando uma imagem base mais segura.
A verificação do Docker assegura que você está utilizando a imagem base mais segura.
Você também pode gerar um relatório mais detalhado ao adicionar o arquivo Docker que gera a imagem ao comando:
docker scan -f Dockerfile 0***0/python-app
Ou, se preferir, excluir a imagem base da análise para se concentrar apenas no seu código:
docker scan -f Dockerfile --exclude-base 0***0/python-app
Este serviço também oferece integração com repositórios do Docker Hub:
Entretanto, essa integração requer uma das assinaturas pagas. No entanto, é possível utilizar a ferramenta localmente com o plano gratuito disponível para quem está logado no Docker Hub (com limitações nas varreduras), o que permite verificar a segurança de suas imagens em desenvolvimento ou de imagens de terceiros antes de utilizá-las.
Utilizando o Snyk com Github Actions
O primeiro passo é criar um repositório e, dentro dele, uma pasta:
.github / worflows /
Para utilizar o Snyk Container no Github, você precisará criar uma nova imagem ou usar uma já existente no Docker Hub. O processo requer a criação de um segredo chamado SNYK_TOKEN. Para obter este token, você deve criar uma conta no Snyk e gerá-lo na seção “API Token” nas configurações gerais.
Com o token em mãos, você pode criar o segredo no Github e utilizá-lo na Action. Em seguida, insira o nome do repositório criado no Docker Hub e a mensagem que deve ser enviada. Você pode acessar as saídas de cada etapa para usar como variável na mensagem.
with: args: 'A new commit has been pushed. Please verify github action: | worflow $ {{fromJson (steps.repo.outputs.result) .html_url}} / actions | Exec: $ {{steps.prep.outputs.created}} | Version: $ {{steps.prep.outputs.version}} '
Para executar o fluxo de trabalho, basta fazer um push no branch principal. A ação do Github detectará o arquivo dentro da pasta .github/workflows/ e executará as etapas definidas.
Considerações Finais 👈
Com a crescente popularidade dos contêineres, os incidentes de segurança estão se tornando cada vez mais comuns, muitas vezes devido a erros de configuração na implantação. O Snyk oferece uma solução eficiente e simples para evitar erros de configuração e detectar vulnerabilidades comuns em imagens Docker.