Skip to main content

Gradle-Abhängigkeiten: Scannen mit dem neuen Snyk-Gradle-Plugin

Artikel von
Blog illustrations gradle feature

23. Oktober 2020

0 Min. Lesezeit

Gradle ist eines der wichtigsten Build-Systeme – nicht nur im Java-Ökosystem, sondern auch für die Android-Entwicklung. Mit Gradle können Sie Abhängigkeiten verwalten sowie Ihr Projekt erstellen und testen.

Es ist wichtig, die Abhängigkeiten Ihres Projekts auf bekannte Sicherheitslücken zu überprüfen. Der ideale Zeitpunkt für den Start des Scans ist genau dann, wenn Sie die Abhängigkeiten importieren! Deshalb haben wir ein Gradle-Plugin entwickelt, mit dem Sie Ihre Anwendung im Rahmen Ihres Build-Zyklus auf Sicherheitslücken in Bibliotheken von Drittanbietern überprüfen können.

Snyk-Gradle-Plugin

Das Snyk-Gradle-Plugin wird im Gradle-Plugin-Portal veröffentlicht und lässt sich daher ganz einfach in Ihr Gradle-Projekt einbinden.

Gradle-Pluginseite für io.snyk.gradle.plugin.snykplugin mit Details zum Snyk-Schwachstellenscan, Version 0.4 und Sicherheitstags

Um das Plugin zu verwenden, müssen Sie es lediglich über die Plugins-DSL deklarieren.

Groovy:

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

Kotlin:

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

Konfiguration

Um das Plugin zu verwenden, benötigen Sie ein Snyk-Konto. Wenn Sie noch kein Snyk-Konto haben, können Sie hier eines erstellen. Habe ich schon erwähnt, dass ein Snyk-Konto völlig kostenlos ist?!

Es gibt verschiedene Möglichkeiten, Ihren API-Schlüssel festzulegen:

Sie können ihn direkt in Ihrer Gradle-Datei festlegen, wie ich weiter unten zeige. Bei einem Open-Source-Projekt sollten Sie jedoch beispielsweise verhindern, dass dieses Token öffentlich zugänglich wird.

Alternativ können Sie eine Umgebungsvariable SNYK_TOKEN mit dem API-Schlüssel festlegen. Dies ist auch die bevorzugte Methode, wenn Sie Snyk-Scans in Ihrer CI-Pipeline ausführen möchten.

Konfiguration des Snyk-Plugins

Wenn Sie den API-Schlüssel als Umgebungsvariable festgelegt haben, können Sie das Plugin sofort verwenden. Ich erkläre Ihnen aber auch, wie Sie bestimmte Einstellungen des Plugins anpassen können.

Fügen Sie Ihrer Gradle-Datei ein Erweiterungsobjekt snyk hinzu.

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")
}
  • apiDies ist der Snyk-API-Schlüssel. Sie können ihn hier festlegen oder weglassen und stattdessen die Umgebungsvariable SNYK_TOKEN mit dem API-Schlüssel festlegen.

  • severityDies ist der Schweregrad, ab dem Sie gewarnt werden möchten. Möglich sind „low“, „medium“ und „high“. Alle Sicherheitslücken ab dem ausgewählten Schweregrad werden angezeigt und führen dazu, dass der Build fehlschlägt. Wenn Sie keine Einstellung für den Schweregrad festlegen, werden alle gefundenen Sicherheitslücken angezeigt, der Build wird jedoch nicht abgebrochen.

  • autoDownloadSnyk verwendet für den Scan die CLI-Binärdatei. Wenn Sie die CLI separat installiert haben, beispielsweise über npm, verwendet das Gradle-Plugin diese Installation. Wird auf Ihrem System keine CLI gefunden, lädt das Gradle-Plugin automatisch die neueste Version herunter. Standardmäßig ist diese Eigenschaft auf true gesetzt und muss daher nicht angegeben werden. Wenn Sie den automatischen Download verhindern möchten, geben Sie diese Eigenschaft an und setzen Sie sie auf false.

  • autoUpdateWenn Sie die Snyk CLI nicht vorinstalliert haben, sondern sie automatisch vom Plugin herunterladen lassen, kann sie bei Verfügbarkeit einer neueren Version auch aktualisiert werden. Standardmäßig ist diese Eigenschaft auf false gesetzt. Beachten Sie, dass autoUpdate nicht funktioniert, wenn Sie die Snyk CLI bereits manuell installiert haben, beispielsweise über npm.

  • argumentsDas Gradle-Plugin verwendet im Hintergrund die Snyk CLI. Mit dieser Eigenschaft können Sie der CLI bei Bedarf zusätzliche Argumente übergeben. Informationen zu den verfügbaren Flags finden Sie in der CLI-Referenz. Profi-Tipp: Wenn Sie in Gradle Subprojekte verwenden, setzen Sie die Eigenschaft arguments wie im Beispiel oben auf --all-sub-projects. So werden beim Scan alle Gradle-Subprojekte überprüft.

Das Snyk-Plugin ausführen

Das Snyk-Plugin stellt Ihnen zwei neue Tasks zur Verfügung:

  • snyk-test

  • snyk-monitor

Sie können diese Tasks einzeln oder in einer Kette ausführen:

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

Snyk test

Der Task Snyk test scannt Ihre Abhängigkeiten und prüft, ob bekannte Sicherheitslücken in direkten und transitiven Abhängigkeiten vorhanden sind. Werden Sicherheitslücken gefunden, die dem ausgewählten Schweregrad oder einem höheren Schweregrad entsprechen, werden sie in der Konsole angezeigt und der Build schlägt fehl.

Wenn Sie Warnungen zu Abhängigkeiten erhalten möchten, ohne dass der Build fehlschlägt, lassen Sie den Schweregrad in Ihrer Konfiguration weg.

Terminal mit einem fehlgeschlagenen Gradle-Test-Task und einem Bericht zu Abhängigkeitslücken, der einen anfälligen Pfad ausweist.

Snyk monitor

Snyk monitor erfasst Ihre Abhängigkeiten genauso wie der Task snyk-test. Allerdings speichert es sie als Momentaufnahme in Ihrem Snyk-Konto und überwacht diese Momentaufnahme. Wenn im Laufe der Zeit neue Sicherheitslücken gefunden oder bestehende behoben werden, werden Sie automatisch benachrichtigt. Das ist ideal, wenn ein Release in die Produktion geht und Sie es weiterhin überwachen möchten. Snyk monitor lässt Ihren Build NICHT fehlschlagen, sondern überwacht ihn lediglich.

Verketten

Sie können die neuen Snyk-Tasks mit anderen vorhandenen Tasks verketten, damit Ihre Scans automatisch ausgeführt werden. Im folgenden Beispiel verknüpfe ich den Task snyk-test in der Gradle-Datei mit dem regulären Test-Task.

Groovy:

test.finalizedBy('snyk-test')

Kotlin:

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

Ab jetzt wird bei jedem Aufruf von gradle test der Task snyk-test nach den regulären Tests ausgeführt. Das bedeutet auch, dass der Task snyk-test jedes Mal aufgerufen wird, wenn die Anwendung erstellt oder neu erstellt wird. Je nach Kontext kann diese Strategie hilfreich sein, um Tests und die Überwachung auf Sicherheitslücken verbindlich sicherzustellen.


Gradle Tutorial - How to use the Snyk plugin for Gradle