Skip to main content

Snyk Maven-Plugin: Integriertes Scannen auf Sicherheitslücken für Entwickler

Artikel von
Integrate security into the CI/CD with the Snyk Maven plugin

20. April 2021

0 Min. Lesezeit

Maven ist seit vielen Jahren das am häufigsten verwendete Build-System im Java-Ökosystem. Mit Maven lässt sich Ihre Anwendung ganz einfach erstellen, da es Ihnen vieles abnimmt. In den verschiedenen Phasen des Maven-Lebenszyklus übernimmt es unter anderem folgende Aufgaben:

  • Abhängigkeiten herunterladen

  • Java-Code kompilieren

  • Unit-Tests ausführen

  • Ein bereitstellbares Artefakt erstellen

  • Integrationstests ausführen

  • Und vieles mehr 

Mit Maven läuft der Entwicklungslebenszyklus auf jedem Rechner und für alle Entwickler im Team gleich ab – ebenso wie in der CI-Pipeline. Da Maven bereits die benötigten Abhängigkeiten herunterlädt und Tests ausführt, wäre es nicht großartig, das Scannen auf Sicherheitslücken nahtlos in diesen Lebenszyklus zu integrieren? Genau das leistet das Snyk Maven-Plugin.

Es ist unerlässlich, die Abhängigkeiten Ihres Projekts auf bekannte Sicherheitslücken zu überprüfen. Der ideale Zeitpunkt, um mit der Überprüfung Ihrer Abhängigkeiten zu beginnen, ist genau dann, wenn Sie sie importieren! Deshalb haben wir das Snyk Maven-Plugin entwickelt. Damit können Sie Ihre Anwendung jetzt während des Build-Zyklus auf Sicherheitslücken in Bibliotheken von Drittanbietern scannen – und Sicherheitswissen direkt in die Hände von Entwicklern legen.

Möchten Sie das Plugin erst in Aktion sehen, bevor Sie weiterlesen? Dann habe ich genau das richtige Video für Sie …

The Simplest way to Secure your Java Maven Project

Das Snyk Maven-Plugin

Das Snyk-Plugin für Maven ist allgemein verfügbar und auf Maven Central veröffentlicht. Sie müssen es nur in Ihrer pom.xml-Datei konfigurieren. Unten sehen Sie die Standardkonfiguration des Plugins.

<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>

Wie Sie sehen, unterscheiden wir zwei verschiedene Ziele: test und monitor. Nachdem Sie das Plugin zu Ihrem Projekt hinzugefügt haben, rufen Sie einfach mvn snyk:test oder mvn snyk:monitor auf. Standardmäßig ist das Ziel snyk test mit der Maven-Testphase im Lebenszyklus verknüpft. Das bedeutet, dass das Snyk-Testziel automatisch ausgeführt wird, sobald die Maven-Testphase abgeschlossen ist. Das Snyk-Monitorziel ist mit der Installationsphase verknüpft und funktioniert genauso.

Wie bei jedem anderen Maven-Plugin können Sie dieses Verhalten ändern. Fügen Sie dazu im Ausführungsabschnitt einfach ein <phase>-Tag hinzu. Sie können eine vorhandene Phase wie test, package oder verify festlegen oder keine Phase auswählen. Im Beispiel unten habe ich snyk-test mit der Phase verify und snyk-monitor mit none verknüpft. mvn snyk:monitor kann jetzt weiterhin manuell ausgeführt werden, wird aber nicht automatisch als Teil einer Phase im Build-Lebenszyklus gestartet.

…
<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>
... 

Beachten Sie: Wenn Sie die Ausführung des Snyk-Ziels in Ihrem Lebenszyklus überspringen möchten, müssen Sie Ihrem Befehl lediglich -Dsnyk.skip hinzufügen. Beispiel:

mvn package -Dsnyk.skip

Wie funktioniert das neue Snyk Maven-Plugin?

Es gab bereits ein Snyk-Plugin für Maven. Dieses Plugin verwendete jedoch eine benutzerdefinierte Logik, um den Abhängigkeitsbaum zu ermitteln. Daher konnten sich die Ausgabe der CLI und die des alten Maven-Plugins leicht unterscheiden.

Ähnlich wie das Gradle-Plugin verwendet das neue Snyk Maven-Plugin jetzt tatsächlich im Hintergrund die Snyk CLI. Es lädt automatisch die passende CLI-Binärdatei herunter und aktualisiert sie, sodass die CLI nicht vorinstalliert sein muss. Sie benötigen lediglich ein kostenloses Snyk-Konto, um ein API-Token zu erhalten.

Das Snyk Maven-Plugin konfigurieren

Um das Plugin zu konfigurieren, müssen Sie das API-Token festlegen, damit Snyk Abhängigkeiten auf Sicherheitslücken scannen kann. Sie finden das Token in Ihrem Snyk-Konto unter Allgemeine Einstellungen. Alternativ können Sie auch ein spezielles Token für ein Servicekonto erstellen.

Snyk-Kontoeinstellungen mit hervorgehobenem Abschnitt „API-Token“ und der Option „Allgemeine Einstellungen“ im Benutzermenü

Im ersten Beispiel des Blogbeitrags habe ich das Token nicht in die pom-Datei geschrieben. Stattdessen habe ich auf meinem Rechner eine globale Umgebungsvariable namens SNYK_TOKEN erstellt und darauf verwiesen.

So muss ich mein geheimes Token nicht in der pom-Datei speichern. Das ist besonders nützlich, wenn Sie Ihren Code in einem Open-Source-Repository veröffentlichen.

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

Im Abschnitt <args> der Konfiguration können Sie beliebige Flags angeben, die Sie normalerweise auch der CLI übergeben. In meinem Beispiel verwende ich derzeit das Flag --all-projects. Damit werden alle meine Projekte unabhängig vom Ökosystem auf einmal gescannt. Das ist besonders nützlich, wenn Ihr Projekt mehrere pom-Dateien enthält.

Außerdem können Sie bei Bedarf bestimmte CLI-Einstellungen konfigurieren. Standardmäßig wird die CLI bei der ersten Ausführung des Tages automatisch aktualisiert. Wenn Sie jedoch eine bestimmte Binärdatei oder CLI-Version verwenden oder die Aktualisierungsstrategie ändern möchten, können Sie innerhalb von <configuration> ein <cli>-Objekt hinzufügen. Alle verfügbaren Einstellungen sind im GitHub-Repository dokumentiert. Im Beispiel unten setze ich <updatePolicy> auf always. Dadurch sucht das Plugin bei jeder Ausführung nach neuen CLI-Updates und nicht nur einmal täglich.

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

Integrieren Sie Sicherheit in Ihren Maven-Lebenszyklus

Das Scannen mit Snyk Open Source in den Maven-Build-Lebenszyklus zu integrieren, fühlt sich nahtlos und natürlich an. Mit dem neuen Snyk-Plugin für Maven funktioniert diese Integration reibungslos und auf jedem Rechner auf dieselbe Weise – auch in Ihrer CI-Pipeline. Sie müssen die CLI nicht mehr manuell aufrufen, und die Konfiguration für das Scannen mit Snyk Open Source wird direkt im Projekt gespeichert. Eine Sorge weniger für Entwickler.

Weitere Informationen zum Plugin finden Sie in unserem GitHub-Repository. Und denken Sie daran, sich für ein kostenloses Snyk-Konto anzumelden, bevor Sie diese praktische Integration nutzen.

Diese weiterführenden Ressourcen empfehle ich Ihnen besonders:

Starten Sie mit Capture-the-Flag

Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Challenges lösen.

Weiterlesen

blog feature snyk container custom base recommendations
Blog

Evo Agentic AppSec: Sicherheit, die mit der KI-Entwicklung Schritt hält

KI-gestützte Entwicklung ist schneller als herkömmliche Sicherheitsabläufe. Snyks Agentic AppSec setzt Sicherheitsagenten ein, um Schwachstellen kontinuierlich zu finden, zu beheben und zu überprüfen – während Menschen die Maßstäbe festlegen.

blog feature ai violet
Blog

VulnBump: Können KI-Agenten anfällige Abhängigkeiten beheben, ohne den Build zu beschädigen?

VulnBump testet KI-Agenten anhand von 307 realen Upgrades von Abhängigkeiten. Eine Behebung zählt nur, wenn die Sicherheitslücke geschlossen ist und Build und Tests weiterhin erfolgreich sind.

Blog

Frontier-Modelle fanden die Schwachstellen. Nur der Angreifer fand die Angriffsketten.

Die statische Analyse fand die Schwachstellen, doch erst Live-Angriffstests bewiesen, wie sie sich zu Angriffen verketten lassen. Ein Vergleich von Evo COS, Claude Security und Claude Code Security.