Skip to main content

JHipster-Sicherheitsscans mit Snyk

Artikel von
Blog illustrations fipster feature

8. Oktober 2020

0 Min. Lesezeit

JHipster ist eine bekannte Open-Source-Plattform, mit der Sie schnell moderne Web- und Microservice-Anwendungen generieren, entwickeln und bereitstellen können. Mit der JHipster CLI wählen Sie die Frameworks und Plattformen aus, die Sie für Ihre Anwendungen verwenden möchten.

Kombinieren Sie ganz einfach verschiedene Frameworks: Verwenden Sie beispielsweise Java mit Spring Boot für Ihr Backend, eine MongoDB-Datenbank und Angular oder React für Ihr Frontend. Ergänzen Sie diese Komponenten um Ihr bevorzugtes Test-Framework – und schon wird eine vollständige Anwendung mit Boilerplate-Code generiert.

Illustration eines bärtigen Mannes mit blauer Brille und Fliege neben dem Schriftzug „Hipster“ in Schreibschrift

Anwendungen mit integrierter Sicherheit erstellen

Wenn Sie eine Anwendung erstellen und mehrere Ökosysteme gleichzeitig nutzen, kommen zahlreiche Abhängigkeiten aus den ausgewählten Ökosystemen hinzu. Es ist wichtig, den Zustand Ihrer Abhängigkeiten im Blick zu behalten. Insbesondere sollten Sie benachrichtigt werden, wenn eine der vielen von Ihnen verwendeten Abhängigkeiten ein Sicherheitsproblem aufweist.


JHipster security scanning with Snyk

JHipster-Projekt über die Befehlszeile scannen

Wir verwenden den kostenlosen Snyk-Schwachstellen-Scanner, um die Abhängigkeiten in der Anwendung zu testen. Sie haben JHipster bereits mit npm installiert. Führen Sie daher einfach diesen Befehl aus, um Snyk auf Ihrem lokalen Rechner zu installieren.

npm i -g snyk

Zunächst müssen Sie sich authentifizieren. Für die Scan-Funktionen benötigen Sie ein kostenloses Snyk-Konto. Wenn Sie snyk auth eingeben, öffnet die CLI einen Webbrowser, in dem Sie ein kostenloses Konto erstellen oder sich anmelden können. Wenn Sie bereits ein Snyk-Konto haben, können Sie alternativ Ihren API-Schlüssel mit snyk auth <api key> verwenden oder ihn als Umgebungsvariable SNYK_TOKEN festlegen.

Um Ihr Projekt zu scannen, führen Sie einfach jedes Mal den folgenden Befehl aus.

snyk test --all-projects

Es empfiehlt sich, das Flag all-projects zu verwenden, da Ihr Ordner möglicherweise mehrere Projekte enthält. Dadurch sucht Snyk im aktuellen Verzeichnis und seinen Unterverzeichnissen nach mehreren Manifestdateien.

Wenn Sie gerade eine kleine monolithische Anwendung mit JHipster erstellt haben, enthält Ihr Ordner möglicherweise sowohl eine Java-Manifestdatei für das Backend als auch eine Node.js-Manifestdatei für das Frontend. Wir möchten beide scannen.

Anhand der Scan-Ergebnisse sehen Sie, ob Sie Bibliotheken mit Schwachstellen eingebunden haben und ob es eine einfache Möglichkeit gibt, diese zu beheben. Auch wenn noch kein direktes Upgrade verfügbar ist, können Sie die Bibliothek möglicherweise manuell aktualisieren. Hier finden Sie Beispiele dafür, wie Sie dies mit Maven umsetzen können.

Terminalausgabe mit Java-Abhängigkeitslücken, darunter die Deserialisierung nicht vertrauenswürdiger Daten und Denial-of-Service-Angriffe, sowie Hinweisen zu Updates.

Abhängigkeiten in Ihrem CI/CD-Prozess scannen

Mit jhipster ci-cd stehen Ihnen verschiedene Optionen für eine CI-Pipeline zur Verfügung. Es wäre sinnvoll, auch die Abhängigkeiten als Teil dieser Pipeline zu scannen. In diesem Beispiel verwenden wir dafür wieder Snyk. Sie benötigen lediglich ein kostenloses Snyk-Konto, um den API-Schlüssel nutzen zu können.

Im folgenden Beispiel zeigen wir Ihnen, wie Sie die CLI in verschiedene Pipelines integrieren, die JHipster für Sie erstellen kann. Es handelt sich um dieselbe CLI, die wir kürzlich auf unserem lokalen Rechner verwendet haben. Sie liefert eine ähnliche Ausgabe.

Außerdem möchten Sie Ihre Abhängigkeiten wahrscheinlich nach dem Erstellen der Binärdatei überwachen. Da im Laufe der Zeit Schwachstellen entdeckt werden, wäre es sinnvoll, Ihre Abhängigkeiten kontinuierlich im Blick zu behalten. Wir zeigen Ihnen, wie Sie dafür snyk monitor in Ihrer Pipeline verwenden.

Jenkins

Wenn Sie eine Jenkins-Pipeline auswählen, wird eine neue Datei src/main/docker/jenkins.yml erstellt. Sie können diesen Docker-Container mit docker-compose -f src/main/docker/jenkins.yml up ausführen.

Für Jenkins haben Sie zwei Möglichkeiten. Sie können entweder das Snyk-Plugin über die Benutzeroberfläche in Jenkins installieren und so konfigurieren, dass Sie es in Ihrer Pipeline verwenden können.

Alternativ können Sie Ihre Anwendung mit der Snyk-CLI-Binärdatei scannen und dies in der Jenkinsfile festlegen, die vom Generator jhipster ci-cd erstellt wird.

Fügen Sie der Jenkinsfile die folgenden Phasen hinzu, um die neueste Version der Snyk-CLI herunterzuladen und damit einen Scan auszuführen.

Hinweis: Sie müssen Ihr Snyk-API-Token aus Ihrem (kostenlosen) Konto als Umgebungsvariable SNYK_TOKEN hinzufügen.

Jenkins-Maskottchen mit Smoking und Fliege, das vor rotem rundem Hintergrund eine weiße Schriftrolle hält
Jenkinsfile
// Not required if you install the Snyk CLI on your Agent
stage('Download Latest Snyk CLI') {
   sh """
       curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
       chmod +x snyk
   """
}

// Run snyk test to check for vulnerabilities and fail the build if any are found
// Consider using --severity-threshold=<low|medium|high> for more granularity (see snyk help for more info).
stage('Snyk Test using Snyk CLI') {
   sh './snyk test --all-projects'
}

// Run snyk monitor to create a snapshot and let it monitor by Snyk
// Consider using --severity-threshold=<low|medium|high> for more granularity (see snyk help for more info).
stage('Snyk Monitor using Snyk CLI') {
   sh './snyk monitor --all-projects'
}

Die Jenkinsfile enthält drei Aufgaben:

  • die neueste Snyk-CLI-Binärdatei herunterladen

  • Snyk Test – Ihre Anwendung scannen und Schwachstellen anzeigen

  • Snyk Monitor – eine Momentaufnahme der Situation erstellen und zur kontinuierlichen Überwachung an Snyk senden

Für Snyk Test und Snyk Monitor können Sie --severity-threshold=<low|medium|high> hinzufügen, damit Sie nur über Schwachstellen ab einem bestimmten Schweregrad informiert werden.

Github Actions

GitHub Actions ist eine der beliebtesten Möglichkeiten, eine Pipeline aufzubauen, wenn Sie GitHub als Repository verwenden. Wenn Sie im Generator jhipster ci-cd die Option „Github Actions“ auswählen, erstellt JHipster für Sie eine Datei .github/workflow/github-ci.yml. YAML-Dateien in diesem Workflow-Ordner werden von GitHub erkannt und nach jedem Push als „Action“ ausgeführt.

GitHub-Actions-Workflow-Symbol mit verbundenen Symbolen für Start, Häkchen und ausstehenden Status

Snyk lässt sich auf verschiedene Arten integrieren.

Separate Github Actions

Sie können separate GitHub Actions für die Snyk-Testfunktionen erstellen. Dazu müssen Sie eine separate YML-Datei im Workflow-Ordner anlegen. Die Action wird parallel zur von JHipster erstellten Pipeline ausgeführt.

Je nach Ökosystem müssen Sie eine passende Action einfügen. Beispiele für Actions finden Sie in diesem Repository.

Snyk-Tests in die generierte Pipeline integrieren

Sie können Snyk auch als zusätzlichen Schritt in die von JHipster generierte Pipeline integrieren.

Zunächst müssen Sie Ihr Snyk-API-Token zu den Umgebungsvariablen hinzufügen. Sie können es im Abschnitt „env“ Ihres Skripts eintragen.

env:
   ...
   SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}

Damit Ihr Token nicht nach außen gelangt, fügen Sie es unter Settings †’ Secrets †’ New secret zu Ihren Secrets hinzu.

GitHub-Repository-Einstellungsseite mit dem Abschnitt „Secrets“, in dem ein vorhandenes SNYK_TOKEN-Secret sowie Optionen zum Aktualisieren oder Entfernen angezeigt werden.

Mit den folgenden Schritten laden Sie Folgendes herunter:

  • die neueste CLI-Binärdatei

  • Ihre Anwendung mit Snyk Test testen

  • die aktuelle Momentaufnahme mit Snyk Monitor überwachen

    • - name: Install Snyk CLI
       run: |
         curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
         chmod +x snyk
      - name: Snyk Test
       run: ./snyk test --all-projects
      - name: Snyk Monitor
       run: ./snyk test --all-projects

Alternativ können Sie die Binärdatei mit npm installieren. npm muss dafür jedoch in der Pipeline installiert sein. Das ist bereits der Fall, wenn Sie ein JavaScript-basiertes Frontend ausgewählt haben. In diesem Fall können Sie den Schritt „Install Snyk CLI“ durch Folgendes ersetzen:

- name: Install Snyk
 run: npm install -g snyk
- name: Snyk Test
 run: snyk test --all-projects
- name: Snyk Monitor
 run: snyk test --all-projects

Für Snyk Test und Snyk Monitor können Sie --severity-threshold=<low|medium|high> hinzufügen, damit Sie nur über Schwachstellen ab einem bestimmten Schweregrad informiert werden.

Travis CI

Wenn Sie diese Option im Generator jipster ci-cd auswählen, erstellt JHipster eine Datei .travis. Sie können Snyk ganz einfach integrieren, indem Sie den Skriptabschnitt wie folgt ergänzen:

Cartoon-Bauarbeiter mit gelbem Schutzhelm mit rotem T, Schutzbrille und rotem Schnurrbart
script:
...
# Dependency scanning with Snyk
# add Snyk API token as environment variable SNYK_TOKEN
- curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
- chmod +x snyk
- ./snyk test --all-projects
- ./snyk monitor --all-projects

…

Sie müssen Ihren Snyk-API-Schlüssel als Umgebungsvariable SNYK_TOKEN hinzufügen. Für Snyk Test und Snyk Monitor können Sie --severity-threshold=<low|medium|high> hinzufügen, damit Sie nur über Schwachstellen ab einem bestimmten Schweregrad informiert werden.

Circle CI

Bei Circle CI haben Sie zwei Möglichkeiten. Sie können Ihre Circle-CI-Instanz so konfigurieren, dass sie den Snyk Orb verwendet, wie in der Integrationsdokumentation beschrieben. Alternativ können Sie mit der neuesten CLI-Version scannen, indem Sie Folgendes zu Ihrer von JHipster ci-cd erstellten config.yml hinzufügen.

Schwarz-weißes CircleCI-Logo
       steps:
...
# Dependency scanning with Snyk.
# add Snyk API token as environment variable SNYK_TOKEN
 - run:
     name: install-snyk
     command: |
       curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
       chmod +x snyk
 - run: # run snyk test
     name: snyk test
     command: './snyk test --all-projects'
 - run: # run snyk monitor
     name: snyk monitor
     command: './snyk monitor --all-projects'
...

Sie müssen Ihren Snyk-API-Schlüssel als Umgebungsvariable SNYK_TOKEN hinzufügen. Für Snyk Test und Snyk Monitor können Sie --severity-threshold=<low|medium|high> hinzufügen, damit Sie nur über Schwachstellen ab einem bestimmten Schweregrad informiert werden.

GitLab CI

Auch bei GitLab CI können Sie die Snyk-CLI integrieren, um Ihre Projekte in der CI-Pipeline zu scannen. Fügen Sie am Ende der von JHipster ci-cd erstellten Datei .gitlab-ci.yml das folgende Beispiel hinzu, um Ihre Projekte zu scannen und zu überwachen.

GitLab-CI-Logo mit orangefarbenem Fuchs-Symbol und grauem Schriftzug „GitLab CI“
# Dependency scanning with Snyk
# add Snyk API token as environment variable SNYK_TOKEN
dependency_scanning:
 stage: release
 script:
   # Download latest CLI version
   - curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
   - chmod +x snyk
   # SNYK_TOKEN environment variable should be present and containing the api key
   # run snyk test to break build if needed and snyk monitor to monitor this snapshot
   - ./snyk test --all-projects
   - ./snyk monitor --all-projects

Auch hier müssen Sie Ihren Snyk-API-Schlüssel als Umgebungsvariable SNYK_TOKEN hinzufügen. Für Snyk Test und Snyk Monitor können Sie --severity-threshold=<low|medium|high> hinzufügen, damit Sie nur über Schwachstellen ab einem bestimmten Schweregrad informiert werden.

Fazit

Es ist natürlich wichtig, Ihre Drittanbieter-Bibliotheken auf Sicherheitsprobleme zu überprüfen. Es gibt zahlreiche Beispiele, in denen eine anfällige Bibliothek nicht durch eine korrigierte Version ersetzt wurde und dadurch ein ernstes Problem entstand. Scans mit Snyk helfen Ihnen, dies zu verhindern – sowohl lokal während der Entwicklung als auch in Ihrer CI-Pipeline.

Wie Sie sehen, lassen sich Abhängigkeiten in Ihrem JHipster-Projekt ganz einfach scannen. Wenn Sie sich die Codebeispiele für die in diesem Beitrag beschriebenen CI-Pipelines ansehen möchten, werfen Sie einen Blick auf dieses JHipster-Beispielprojekt. Entwickeln Sie also schnell mit JHipster und bleiben Sie mit Snyk sicher.

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 überholt herkömmliche Security-Workflows. Snyk Agentic AppSec setzt Security-Agenten ein, die Schwachstellen kontinuierlich finden, beheben und ü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 Dependency-Upgrades. Eine Lösung zählt nur, wenn die Sicherheitslücke behoben ist und Build sowie 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.