Como analisar a segurança do JHipster com o Snyk
8 de outubro de 2020
0 minutos de leituraO JHipster é uma plataforma de código aberto muito conhecida, que permite gerar, desenvolver e implantar rapidamente aplicações web modernas e microsserviços. Com a CLI do JHipster, você pode escolher os frameworks e as plataformas que quer usar nas suas aplicações.
É fácil combinar diferentes frameworks. Por exemplo, você pode usar Java com Spring Boot no back-end, um banco de dados MongoDB e Angular ou React no front-end. Combine tudo isso com seu framework de testes favorito e uma aplicação completa com código boilerplate será gerada na hora.

Crie aplicações com segurança integrada
Criar a estrutura de uma aplicação e usar vários ecossistemas ao mesmo tempo traz muitas dependências de cada um deles. É essencial acompanhar a integridade dessas dependências. Mais importante ainda, você precisa receber um alerta se alguma das muitas dependências que usa tiver um problema de segurança.

Analise seu projeto JHipster pela linha de comando
Vamos usar o scanner de vulnerabilidades gratuito do Snyk para testar as dependências da aplicação. Como você já usou o npm para instalar o JHipster, basta executar este comando para instalar o Snyk na sua máquina.
Primeiro, você precisa se autenticar. Para usar os recursos de análise, é necessário ter uma conta gratuita no Snyk. Se você digitar snyk auth, a CLI abrirá um navegador para você criar uma conta gratuita ou fazer login. Se já tiver uma conta no Snyk, você também pode usar sua chave de API snyk auth <api key> ou defini-la como variável de ambiente SNYK_TOKEN.
Sempre que quiser analisar seu projeto, basta executar o seguinte comando.
Recomendamos usar a opção all-projects, pois pode haver mais de um projeto na pasta. Ela faz com que o Snyk procure vários arquivos de manifesto no diretório atual e nos subdiretórios.
Se você acabou de criar uma pequena aplicação monolítica com o JHipster, talvez tenha na pasta um arquivo de manifesto Java para o back-end e um arquivo de manifesto Node.js para o front-end. Vamos analisar os dois.
Com os resultados da análise, você descobre se incluiu bibliotecas vulneráveis e se há uma maneira simples de corrigi-las. Mesmo que ainda não exista uma atualização direta disponível, talvez seja possível atualizar a biblioteca manualmente. Veja alguns exemplos de como fazer isso no Maven.

Analise suas dependências no fluxo de CI/CD
Ao executar jhipster ci-cd, você tem várias opções de pipeline de CI. Seria ótimo analisar as dependências como parte desse pipeline também. Neste exemplo, vamos usar o Snyk para isso. Basta ter uma conta gratuita no Snyk para usar a chave de API.
A seguir, vamos mostrar como integrar a CLI aos diferentes pipelines que o JHipster pode criar para você. É a mesma CLI que usamos recentemente na nossa máquina local, e ela gera um resultado semelhante.
Além disso, provavelmente você vai querer monitorar as dependências depois de compilar o binário. Como novas vulnerabilidades podem ser descobertas ao longo do tempo, seria ótimo monitorar suas dependências continuamente. Veja como fazer isso com o snyk monitor no seu pipeline.
Jenkins
Ao selecionar um pipeline do Jenkins, um novo arquivo src/main/docker/jenkins.yml será gerado. Você pode executar esse contêiner do Docker com docker-compose -f src/main/docker/jenkins.yml up.
Ao usar o Jenkins, você tem duas opções. Pode instalar o plugin do Snyk pela interface do Jenkins e configurá-lo para usá-lo no pipeline.
Outra opção é analisar sua aplicação com o binário da CLI do Snyk e declarar isso no Jenkinsfile gerado pelo gerador jhipster ci-cd.
Adicione as etapas a seguir ao Jenkinsfile para baixar a versão mais recente da CLI do Snyk e usá-la na análise.
Observação: você precisa adicionar o token de API do Snyk da sua conta gratuita como variável de ambiente SNYK_TOKEN.

O Jenkinsfile contém três tarefas:
baixar o binário mais recente da CLI do Snyk
Snyk Test — analisar sua aplicação e exibir as vulnerabilidades
Snyk Monitor — criar um snapshot do estado atual e enviá-lo ao Snyk para monitoramento contínuo
Para o Snyk Test e o Snyk Monitor, você pode adicionar --severity-threshold=<low|medium|high> para receber alertas apenas sobre vulnerabilidades a partir de uma determinada gravidade.
GitHub Actions
O GitHub Actions é provavelmente uma das formas mais populares de criar um pipeline quando você usa o GitHub como repositório. Ao escolher “Github Actions” no gerador jhipster ci-cd, o JHipster gera um arquivo .github/workflow/github-ci.yml para você. Os arquivos YAML nessa pasta de workflows são identificados e executados pelo GitHub como uma “action” a cada push.

Há várias maneiras de integrar o Snyk a esse fluxo.
GitHub Actions separadas
Você pode criar GitHub Actions separadas para usar os recursos do Snyk Test. Para isso, crie um arquivo YAML separado na pasta de workflows. A action será executada em paralelo ao pipeline criado pelo JHipster.
Você precisa inserir uma action específica para cada ecossistema. Confira exemplos de actions neste repositório.
Integre os testes do Snyk ao pipeline gerado
Você também pode integrar o Snyk ao pipeline gerado pelo JHipster como uma etapa adicional.
Primeiro, você precisa adicionar o token de API do Snyk às variáveis de ambiente. Você pode incluí-lo na seção env do seu script.
Como você não quer expor seu token ao mundo, adicione-o aos secrets em Settings Secrets New secret.

Ao adicionar as etapas abaixo, você vai:
baixar o binário mais recente da CLI
testar sua aplicação com o Snyk Test
monitorar o snapshot atual com o Snyk Monitor
Como alternativa, você pode instalar o binário usando o npm. No entanto, o npm precisa estar instalado no pipeline. Isso já acontece se você escolheu um front-end baseado em JavaScript. Nesse caso, você pode substituir a etapa Install Snyk CLI pelo seguinte:
Para o Snyk Test e o Snyk Monitor, você pode adicionar --severity-threshold=<low|medium|high> para receber alertas apenas sobre vulnerabilidades a partir de uma determinada gravidade.
Travis CI
O JHipster gera um arquivo .travis se você escolher essa opção no gerador jipster ci-cd. É fácil integrar o Snyk: basta adicionar o seguinte à seção script:

Você precisa adicionar sua chave de API do Snyk como variável de ambiente SNYK_TOKEN. Para o Snyk Test e o Snyk Monitor, você pode adicionar --severity-threshold=<low|medium|high> para receber alertas apenas sobre vulnerabilidades a partir de uma determinada gravidade.
Circle CI
No Circle CI, você tem duas opções. Pode configurar sua instância do Circle CI para usar o Snyk Orb, conforme descrito na documentação de integração. Ou pode analisar usando a versão mais recente da CLI, adicionando o seguinte ao arquivo config.yml criado para você pelo JHipster ci-cd.

Você precisa adicionar sua chave de API do Snyk como variável de ambiente SNYK_TOKEN. Para o Snyk Test e o Snyk Monitor, você pode adicionar --severity-threshold=<low|medium|high> para receber alertas apenas sobre vulnerabilidades a partir de uma determinada gravidade.
GitLab CI
No GitLab CI, também podemos incorporar a CLI do Snyk para analisar seus projetos no pipeline de CI. No arquivo .gitlab-ci.yml gerado pelo JHipster ci-cd, você pode adicionar o exemplo a seguir ao final do arquivo para analisar e monitorar seus projetos.

Mais uma vez, você precisa adicionar sua chave de API do Snyk como variável de ambiente SNYK_TOKEN. Para o Snyk Test e o Snyk Monitor, você pode adicionar --severity-threshold=<low|medium|high> para receber alertas apenas sobre vulnerabilidades a partir de uma determinada gravidade.
Conclusão
É claro que é importante verificar se suas bibliotecas de terceiros têm problemas de segurança. Há muitos exemplos de situações que se tornaram sérias porque uma biblioteca vulnerável não foi substituída por uma versão corrigida. A análise com o Snyk ajuda você a evitar esse problema, tanto na sua máquina durante o desenvolvimento quanto no pipeline de CI.
Como você pode ver, é muito fácil analisar as dependências do seu projeto JHipster. Para conferir os exemplos de código dos pipelines de CI descritos neste post, consulte este projeto de exemplo do JHipster. Desenvolva com agilidade usando o JHipster e mantenha a segurança com o Snyk.
Comece a resolver desafios de capture the flag
Aprenda a resolver desafios de capture the flag assistindo sob demanda ao nosso workshop virtual introdutório.



