Skip to main content

Plugin do Snyk para Maven: análise integrada de vulnerabilidades de segurança para desenvolvedores

Escrito por
Integrate security into the CI/CD with the Snyk Maven plugin

20 de abril de 2021

0 minutos de leitura

O Maven é o sistema de build mais usado no ecossistema Java há muitos anos. Criar sua aplicação com o Maven é fácil, pois ele cuida de muitas tarefas para você. Em diferentes fases do ciclo de vida do Maven, ele realiza tarefas como:

  • Baixar dependências

  • Compilar seu código Java

  • Executar testes unitários

  • Criar um artefato pronto para distribuição

  • Testes de integração

  • E muito mais 

Com o Maven, o ciclo de desenvolvimento acontece da mesma forma em todas as máquinas de todos os desenvolvedores da equipe, além de também ocorrer assim no pipeline de CI. Como o Maven já baixa as dependências necessárias e executa os testes, não seria ótimo integrar a análise de vulnerabilidades a esse ciclo de forma simples? É exatamente isso que o plugin do Snyk para Maven faz.

É essencial analisar as dependências do seu projeto em busca de vulnerabilidades de segurança conhecidas. O momento ideal para começar a verificar suas dependências é assim que você as importa! Por isso, criamos o plugin do Snyk para Maven: agora você pode analisar sua aplicação em busca de vulnerabilidades de segurança em bibliotecas de terceiros durante o ciclo de build, levando conhecimento especializado em segurança para as mãos dos desenvolvedores.

Se quiser ver o plugin em ação antes de continuar lendo, tenho um vídeo para você...

The Simplest way to Secure your Java Maven Project

O plugin do Snyk para Maven

O plugin do Snyk para Maven já está disponível publicamente no Maven Central. Basta configurá-lo no arquivo pom.xml. Abaixo, você encontra a configuração padrão do plugin.

<build>
  <plugins>
    <plugin>
      <groupId>io.snyk</groupId>
      <artifactId>snyk-maven-plugin</artifactId>
      <version>2.0.0</version>
      <inherited>false</inherited>
      <executions>
        <execution>
          <id>snyk-test</id>
          <goals>
            <goal>test</goal>
          </goals>
        </execution>
        <execution>
          <id>snyk-monitor</id>
          <goals>
            <goal>monitor</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <apiToken>${env.SNYK_TOKEN}</apiToken>
        <args>
          <arg>--all-projects</arg>
        </args>
      </configuration>
    </plugin>
  </plugins>
</build>

Como você pode ver, há dois objetivos diferentes: test e monitor. Depois de adicionar o plugin ao seu projeto, basta chamar mvn snyk:test ou mvn snyk:monitor. Por padrão, o objetivo snyk test é associado à fase test do ciclo de vida do Maven. Isso significa que o objetivo Snyk test é executado automaticamente após a conclusão da fase test do Maven. O objetivo Snyk monitor é associado à fase install e funciona da mesma forma.

Assim como acontece com qualquer outro plugin do Maven, você pode alterar esse comportamento. Na seção de execução, basta adicionar uma tag <phase>. Ela pode ser definida como uma fase existente, como test, package ou verify, ou como none. No exemplo abaixo, associei snyk-test à fase verify e snyk-monitor a none. Agora, mvn snyk:monitor continua disponível para execução manual, mas não será executado automaticamente como parte de uma fase do ciclo de build.

…
<executions>
   <execution>
       <phase>verify</phase>
       <id>snyk-test</id>
       <goals>
           <goal>test</goal>
       </goals>
   </execution>
   <execution>
       <phase>none</phase>
       <id>snyk-monitor</id>
       <goals>
           <goal>monitor</goal>
       </goals>
   </execution>
</executions>
... 

Se quiser ignorar a execução do objetivo Snyk no seu ciclo de vida, basta adicionar -Dsnyk.skip ao comando. Exemplo:

mvn package -Dsnyk.skip

Como funciona o novo plugin do Snyk para Maven?

Já existia um plugin do Snyk para Maven, mas ele usava uma lógica própria para determinar a árvore de dependências. Por isso, os resultados da CLI e do antigo plugin do Maven podiam ser um pouco diferentes.

Assim como o plugin do Gradle, o novo plugin do Snyk para Maven agora usa a Snyk CLI internamente. Ele baixa e atualiza automaticamente o binário apropriado da CLI, então não é necessário instalá-la antes. Você só precisa de uma conta gratuita do Snyk para obter o token de API.

Configurando o plugin do Snyk para Maven

Para configurar o plugin, você precisa definir o token de API para ativar a análise de segurança das dependências com o Snyk. Você encontra o token na seção Configurações gerais da sua conta do Snyk. Outra opção é criar um token específico para uma conta de serviço.

Página de configurações da conta Snyk, mostrando a seção de token da API e a opção Configurações gerais destacada no menu do usuário

No primeiro exemplo desta publicação, não incluí o token no arquivo pom. Em vez disso, criei uma variável de ambiente global chamada SNYK_TOKEN na minha máquina e fiz referência a ela.

Assim, não deixo meu token secreto no arquivo pom, o que é especialmente útil quando você publica seu código em um repositório de código aberto.

apiToken>${env.SNYK_TOKEN}</apiToken>

Na seção <args> da configuração, você pode informar qualquer flag que normalmente usaria na CLI. No meu exemplo, informo a flag --all-projects. Assim, todos os meus projetos, independentemente do ecossistema, são analisados de uma só vez. Isso é especialmente útil se você usa vários arquivos pom no projeto.

Além disso, se quiser, você também pode configurar alguns detalhes específicos da CLI. Por padrão, a CLI é atualizada automaticamente na primeira execução do dia. Mas, se quiser usar um binário ou uma versão específica da CLI, ou alterar a estratégia de atualização, você pode adicionar um objeto <cli> dentro de <configuration>. Todas as configurações possíveis estão documentadas no repositório do GitHub. No exemplo abaixo, defino <updatePolicy> como always. Com isso, o plugin verifica se há atualizações da CLI em todas as execuções, e não apenas uma vez por dia.

<configuration>
   ...
   <cli>
      <updatePolicy>always</updatePolicy>
   </cli>
</configuration>

Adicione segurança ao ciclo de vida do Maven

Integrar a análise do Snyk Open Source ao ciclo de build do Maven é simples e natural. Com o novo plugin do Snyk para Maven, essa integração é perfeita e pode ser executada da mesma forma em todas as máquinas, inclusive no pipeline de CI. Você não precisa mais chamar a CLI manualmente, e a configuração da análise do Snyk Open Source fica armazenada como parte do projeto. Menos uma preocupação para os desenvolvedores.

Para saber mais sobre o plugin, acesse nosso repositório no GitHub. E não se esqueça de criar uma conta gratuita do Snyk antes de usar essa ótima integração.

Confira também estes recursos, que recomendo muito:

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.