Skip to main content

Dependências do Gradle: análise com o novo plugin do Snyk para Gradle

Escrito por
Blog illustrations gradle feature

23 de outubro de 2020

0 minutos de leitura

O Gradle é um dos principais sistemas de build não só do ecossistema Java, mas também do desenvolvimento para Android. Com o Gradle, você pode gerenciar as dependências, compilar e testar seu projeto.

É importante analisar as dependências do seu projeto em busca de vulnerabilidades de segurança conhecidas. O momento ideal para começar a fazer essa análise é assim que você importa as dependências! Para isso, criamos um plugin para Gradle que permite analisar seu aplicativo em busca de vulnerabilidades de segurança em bibliotecas de terceiros como parte do ciclo de build.

Plugin do Snyk para Gradle

O plugin do Snyk para Gradle está publicado no portal de plugins do Gradle, então é fácil incluí-lo no seu projeto Gradle.

Página do plugin Gradle para io.snyk.gradle.plugin.snykplugin, com detalhes da análise de vulnerabilidades do Snyk, versão 0.4 e tags de segurança

Para usar o plugin, basta declará-lo usando a DSL de plugins.

Groovy:

plugins {
  id "io.snyk.gradle.plugin.snykplugin" version "0.4"
}

Kotlin:

plugins {
  id("io.snyk.gradle.plugin.snykplugin") version "0.4"
}

Configuração

Para usar o plugin, você precisa de uma conta Snyk. Se ainda não tiver uma, crie sua conta aqui. Já mencionei que a conta Snyk é totalmente gratuita?!

Há várias maneiras de configurar sua chave de API:

Você pode configurá-la diretamente no arquivo Gradle, como vou mostrar abaixo. No entanto, se o seu projeto for de código aberto, por exemplo, talvez você queira evitar que esse token seja exposto publicamente.

Outra opção é definir uma variável de ambiente SNYK_TOKEN com a chave de API. Esse também é o método recomendado se você quiser usar a análise do Snyk no pipeline de CI.

Configuração do plugin do Snyk

Se você configurou a chave de API como variável de ambiente, já pode usar o plugin. Mesmo assim, vou explicar como ajustar algumas configurações.

Adicione um objeto de extensão snyk ao seu arquivo Gradle.

Groovy:

snyk {
    api = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
    severity = 'low'
    autoDownload = true
    autoUpdate = true
    arguments = '--all-sub-projects'
}

Kotlin:

configure<io.snyk.gradle.plugin.SnykExtension> {
   setApi("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
   setSeverity("high")
   setAutoDownload(true)
   setAutoUpdate(true)
   setArguments("--all-sub-projects")
}
  • apiEsta é a chave de API do Snyk. Você pode configurá-la aqui ou deixar este campo vazio e definir a variável de ambiente SNYK_TOKEN com a chave de API.

  • severityEste é o limite de severidade sobre o qual você quer receber alertas. As opções são baixa, média ou alta. Todas as vulnerabilidades com a severidade escolhida ou superior serão exibidas e farão o build falhar. Se você não configurar a severidade, todas as vulnerabilidades encontradas serão exibidas, mas o build não será interrompido.

  • autoDownloadO Snyk usa o binário da CLI para fazer a análise. Se você tiver instalado a CLI separadamente, por exemplo, via npm, o plugin do Gradle usará essa instalação. Se a CLI não for encontrada no seu sistema, o plugin do Gradle baixará automaticamente a versão mais recente. Por padrão, esta propriedade é true, então não é necessário especificá-la. Se você não quiser o download automático, especifique esta propriedade e defina o valor como false.

  • autoUpdateSe você não tiver a CLI do Snyk pré-instalada e o plugin fizer o download automático, ela também poderá ser atualizada quando houver uma versão mais recente disponível. Por padrão, esta propriedade é false. Atenção: a atualização automática não funciona se você já tiver instalado a CLI do Snyk manualmente, por exemplo, usando npm.

  • argumentsO plugin do Gradle usa a CLI do Snyk internamente. Esta propriedade permite definir argumentos extras para a CLI, se necessário. Para saber quais flags estão disponíveis, consulte a referência da CLI. Dica: se você usa subprojetos no Gradle, defina a propriedade arguments como --all-sub-projects, como no exemplo acima. Assim, todos os subprojetos do Gradle serão analisados.

Como executar o plugin do Snyk

O plugin do Snyk disponibiliza duas novas tarefas:

  • snyk-test

  • snyk-monitor

Você pode adicionar qualquer uma dessas tarefas individualmente ou encadeá-las:

$ gradle snyk-test
$ gradle clean build snyk-test

Teste do Snyk

A tarefa de teste do Snyk analisa suas dependências e verifica se há vulnerabilidades conhecidas tanto nas dependências de nível superior quanto nas transitivas. Se forem encontradas vulnerabilidades que correspondam ao nível de severidade escolhido ou sejam mais graves, elas serão exibidas no console e o build falhará.

Se quiser receber alertas sobre as dependências sem interromper o build, não configure a severidade.

Terminal mostrando uma tarefa de teste do Gradle com falha e um relatório de vulnerabilidades em dependências que identifica um caminho vulnerável.

Monitoramento do Snyk

O Snyk monitor também coleta todas as suas dependências da mesma forma que a tarefa snyk-test. No entanto, ele salva um snapshot daquele momento na sua conta Snyk e monitora esse snapshot. Quando novas vulnerabilidades forem identificadas ou as existentes forem corrigidas, você receberá notificações automaticamente. Isso é ideal quando uma versão chega à produção e você quer continuar monitorando-a. O Snyk monitor NÃO interrompe o build: ele apenas monitora.

Encadeamento

Você pode encadear as novas tarefas do Snyk com outras tarefas existentes para que as análises sejam executadas automaticamente. No exemplo a seguir, conecto a tarefa snyk-test à tarefa de teste padrão no arquivo Gradle.

Groovy:

test.finalizedBy('snyk-test')

Kotlin:

tasks.test {
   finalizedBy(tasks.`snyk-test`)
}

Agora, sempre que gradle test for executado, a tarefa snyk-test será executada depois dos testes padrão. Isso também significa que a tarefa snyk-test será chamada sempre que o aplicativo for compilado (ou recompilado). Dependendo do seu contexto, essa estratégia pode ajudar a garantir a análise e o monitoramento de vulnerabilidades.


Gradle Tutorial - How to use the Snyk plugin for Gradle