JHipster-Sicherheitsscans mit Snyk
8. Oktober 2020
0 Min. LesezeitJHipster 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.

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

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.

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.

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.
Damit Ihr Token nicht nach außen gelangt, fügen Sie es unter Settings Secrets New secret zu Ihren Secrets hinzu.

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

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.

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.

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.



