So erstellen Sie eine SBOM für JavaScript- und Node.js-Anwendungen
22. Mai 2023
0 Min. LesezeitAnmerkung der Redaktion: 31. Mai 2023
Da Snyks Befehl sbom jetzt allgemein verfügbar ist, wurde dieser Beitrag aktualisiert und zeigt, wie Sie mit Snyk eine SBOM gemäß der SPDX-Spezifikation erstellen können.
Was ist eine SBOM?
SBOM steht für Software Bill of Materials und bezeichnet eine Liste aller Open-Source-npm-Pakete, die Teil Ihres Projekts sind. Eine SBOM beschränkt sich jedoch nicht nur auf Open Source oder Softwarepakete, sondern kann auch Betriebssystembibliotheken, ein Microservices-Inventar und mehr umfassen.
Ihre npm-Softwarepakete werden in zwei Dateien dargestellt: package.json, die Ihre direkten Abhängigkeiten enthält, und eine Lockdatei wie package-lock.json oder yarn.lock, die den gesamten Baum der installierten Abhängigkeiten beim Erstellen Ihrer JavaScript- oder Node.js-Anwendungsprojekte abbildet.
Warum ist es wichtig, eine SBOM für eine Node.js-Anwendung zu pflegen?
Das JavaScript-Ökosystem ist Sicherheitsvorfällen, die Entwickler betreffen, nicht fremd. Zu den jüngsten Beispielen zählen Protestware, eine Form von Schadsoftware, die auf die Beschädigung von Festplattendaten abzielt, sowie schädliche npm-Pakete, die Dependency-Confusion-Angriffe ausnutzen, um in die Computersysteme interner Organisationen einzudringen.
Angesichts der inzwischen allgegenwärtigen Nutzung von Open-Source-Bibliotheken und der zunehmenden Sicherheitsvorfälle in Software-Repositories wie npm ist es unverzichtbar, feststellen und genau bestimmen zu können, ob eine bestimmte Abhängigkeitsversion in Ihrer Anwendung verwendet wird. Außerdem erhöhen diese Sicherheitsrisiken die Notwendigkeit, schnell zu handeln – etwa durch ein zügiges Aktualisieren von Abhängigkeiten oder Suchen und Ersetzen.
„Eine formelle Aufzeichnung mit Details zu verschiedenen Komponenten, die bei der Entwicklung von Software verwendet werden, und deren Supply-Chain-Beziehungen“ — NIST (National Institute of Standards and Technology)
Als Entwicklerinnen und Entwickler profitieren Sie von einer SBOM als ganzheitlichem Verzeichnis der Abhängigkeiten Ihres Tech-Stacks. So können Sie veraltete und verwundbare Abhängigkeiten aktualisieren oder Pakete ersetzen, für die es keine Korrektur gibt oder deren Lizenz inkompatibel ist. Außerdem können Sie Schwachstellen aufgrund Ihrer spezifischen Anwendungsfälle als nicht zutreffend einstufen. Schließlich werden Sie von Ihren Security- und Betriebsteams wahrscheinlich gebeten, eine SBOM für Ihre JavaScript- und Node.js-Anwendungen zu erstellen, um die Einhaltung behördlicher Cybersicherheitsanforderungen sicherzustellen und die Supply-Chain-Sicherheit nachzuverfolgen.
Mit der Snyk API eine SBOM für eine Node.js-Anwendung erstellen
Snyk ist eine kostenlose Developer-Security-Plattform, die das Erkennen und Beheben von Sicherheitsproblemen für Entwickler automatisiert. Wenn Sie Ihre Projekte mit Snyk überwachen, erhalten Sie rechtzeitig Sicherheitskorrekturen.
SBOM-Funktionen sind derzeit nur in kostenpflichtigen Tarifen verfügbar. Wenn Sie einen solchen Tarif nutzen, können wir mit der Erstellung einer SBOM für eine Node.js-Anwendung beginnen.
Voraussetzungen:
Ein kostenpflichtiges Snyk-Konto.
Zugriff auf die Snyk API
Ein JavaScript- oder Node.js-Projekt, das in die Snyk-Plattform importiert wurde
Das Befehlszeilentool curl
Schritt 1: JavaScript-Projekt in Snyk importieren
Importieren Sie zunächst ein Projekt in die Snyk-Plattform, damit alle darin enthaltenen npm-Abhängigkeiten und Bibliotheken analysiert und überwacht werden können.
Klicken Sie hier, um den Schritt-für-Schritt-Prozess zum Importieren eines Projekts aufzurufen (oder sehen Sie sich ein kurzes einminütiges Video an).
Schritt 2: Snyk-Token bereithalten
Für API-Aufrufe an die Snyk-Plattform benötigen Sie ein Snyk-API-Token mit den erforderlichen Berechtigungen, um den SBOM-Berichts-Endpunkt des Projekts abzufragen.
Wenn Sie die Snyk CLI verwenden, können Sie das Snyk-API-Token unter anderem mit folgendem Befehl finden:
Dieses Snyk-API-Token ist möglicherweise nicht berechtigt, Anfragen für die Organisation oder das Projekt zu stellen. Wir empfehlen Ihnen daher, für diese Aufgabe ein neues, dediziertes Servicekonto zu erstellen, damit Sie den Vorgang über CI und andere Systeme automatisieren können.
Rufen Sie zum Erstellen eines Servicekontos die Einstellungen Ihrer Organisation und anschließend Servicekonten auf. Geben Sie einen Namen für das neue Servicekonto ein, weisen Sie ihm die Rolle Org Admin zu und klicken Sie auf Erstellen.

Sie erhalten ein API-Token. Speichern Sie es an einem sicheren Ort und halten Sie es bereit. Wir verwenden es gleich, um die Snyk API abzufragen und eine SBOM zu erstellen.
Weitere Informationen finden Sie in der Snyk-Dokumentation zur Verwaltung von Servicekonten.
Schritt 3: Organisations- und Projekt-IDs ermitteln
Auf derselben Einstellungsseite finden Sie Ihre Organisations-ID. Kopieren Sie sie und halten Sie sie ebenfalls bereit:

Als Nächstes ermitteln wir die Projekt-ID des JavaScript-Projekts, das wir in Snyk importiert haben.
Rufen Sie Projekte auf, suchen Sie das Projekt, für das Sie eine SBOM erstellen möchten, und klicken Sie dann darauf, um die Details anzuzeigen:

Klicken Sie auf der Seite mit den Projektdetails oben rechts auf den Tab Einstellungen und scrollen Sie nach unten, um die Projekt-ID zu kopieren:

Schritt 4: SBOM mit curl und der Snyk API erstellen
Sie sollten nun Folgendes bereithalten:
Ein Snyk-API-Token
Die Organisations-ID
Die Projekt-ID
Jetzt können wir eine API-Anfrage senden und den SBOM-Bericht abrufen. Mit dem Befehlszeilentool curl senden wir eine HTTP-Anfrage an die Snyk API:
Die von der API zurückgegebenen Ergebnisse liegen im JSON-Format vor und verwenden den CycloneDX-Standard für den SBOM-Bericht. Beachten Sie die URL-Kodierung %2B am Ende des API-Abfrageparameters. Sie kodiert das Zeichen +.
Tipp: Sie können mehrere Instanzen des Abfrageparameters format angeben, um SBOM-Versionen in mehreren Formaten zu erhalten.
Die Ausgabedaten sind möglicherweise zu umfangreich oder für die Konsolenausgabe nicht gut formatiert. Mit einer Pipe zu jq können wir die Ausgabe übersichtlicher und besser lesbar machen:
Der erstellte SBOM-Bericht ist nun lesbar und sollte etwa so aussehen, wenn Sie ein Projekt importiert haben, das mit dem JavaScript-Paketmanager npm verwaltet wird:
Der erstellte SBOM-Bericht ist ein gültiges CycloneDX-1.4-Dokument, das die Software-Stückliste für das angegebene Snyk-Projekt enthält.
Er enthält umfangreiche Metadaten und meldet auch transitive Abhängigkeiten, um abhängige Bibliotheken hervorzuheben. Ein Beispiel aus demselben Bericht wie oben:
Die CycloneDX-Ausgabe enthält derzeit voraussichtlich folgende Informationen:
Direkte Abhängigkeiten
Transitive Abhängigkeiten und ihre Beziehungen zu den Paketen, von denen sie abhängen.
Die Snyk-
Org- undProject-Kennungen, für die diese SBOM erstellt wurde.Der Name der Anwendung oder des Projekts, für das diese SBOM erstellt wurde, sofern er in der als Eingabe bereitgestellten Paketmanifestdatei enthalten ist.
In der API-Dokumentation finden Sie weitere Nutzungsmöglichkeiten für die Snyk API für SBOMs, zum Beispiel die Unterstützung der Serialisierung in XML statt JSON oder die Ausgabe eines Dokuments gemäß der SPDX-Spezifikation als Standard für Software-Stücklisten.
Jetzt können Sie die SBOM-Erstellung für Ihre Open-Source-Abhängigkeiten automatisieren. Was werden Sie als Nächstes entwickeln? Teilen Sie es mit uns in der DevSecOps-Discord-Community.
Mit der Snyk CLI eine SBOM für eine Node.js-Anwendung erstellen
Wenn Sie keinen direkten Zugriff auf die Snyk API haben, können Sie die Snyk CLI nutzen. Sie unterstützt zahlreiche Betriebssysteme und lässt sich für die Suche, Behebung, Überwachung und Berichterstellung für alle Snyk-Produkte verwenden – von der statischen Codeanalyse bis hin zu Infrastructure as Code.
Beginnen wir mit der Erstellung einer SBOM für eine beliebige JavaScript-Anwendung, die mit einem Paketmanager verwaltet wird.
Voraussetzungen:
Die Snyk CLI (hier erfahren Sie, wie Sie die Snyk CLI installieren)
Snyk-CLI-Version >= 1.1071.0
In einem JavaScript-Projektverzeichnis mit einer vorhandenen Manifestdatei package.json können wir alle darin enthaltenen Software-Stücklisten analysieren.
Nehmen wir ein Node.js-Projekt mit debug als Dev-Abhängigkeit und fastify als Webanwendungs-Framework unter den Produktionsabhängigkeiten:
Wie viele transitive Abhängigkeiten kommen also zu diesen zwei direkten Abhängigkeiten hinzu? Hier zeigt sich der Vorteil einer SBOM für das Projekt: Sie bietet einen vollständigen Überblick über dessen Abhängigkeiten. Führen wir den folgenden Befehl snyk aus. Er sucht im aktuellen Verzeichnis nach einer unterstützten Datei package.json und analysiert sie:
Die obige CycloneDX-Ausgabe wurde nach etwa 40 Zeilen gekürzt, um den Artikel übersichtlich zu halten. Die vollständige Software-Stückliste für einen derart kleinen Satz direkter Abhängigkeiten umfasst 749 Zeilen formatiertes JSON.
Mit jq können wir zählen, wie viele Open-Source-Abhängigkeiten dieses Projekt hat:
Insgesamt umfasst die Software-Stückliste dieses Projekts 60 Open-Source-Pakete.
Jetzt wird deutlich, warum eine SBOM wichtig ist: Sie dient nicht nur dazu, Compliance- oder regulatorische Anforderungen Ihres Sicherheitsteams oder behördliche Vorgaben zu erfüllen. Inzwischen wissen wir, dass Ihr Projekt von 60 Open-Source-Paketen abhängt und nicht nur von den zwei, die Sie direkt installiert haben. Hier zeigt sich die Bedeutung der Software-Supply-Chain: Sicherheitsprobleme können erhebliche Folgen haben und stellen ein direktes Risiko für Verbraucher dar.
Wenn Sie feststellen, dass Ihr Projekt tatsächlich auf 60 Open-Source-Pakete angewiesen ist, stellen Sie sich vielleicht eine der folgenden Fragen:
Hat eines dieser Pakete eine Lizenz, die nicht mit den Richtlinien und der Nutzung in meiner Organisation vereinbar ist?
Werden alle diese Pakete aktiv gepflegt?
Was passiert, wenn eine neue Schwachstelle in einem dieser 60 Pakete entdeckt wird?
Diese Fragen zur Projektintegrität bearbeiten wir mithilfe von Snyk Advisor. Das Tool bietet einen Integritätswert, der Beliebtheit, Wartung, Sicherheit und Community-Kennzahlen des Projekts berücksichtigt.

Zurück zu SBOMs: Im Folgenden sehen Sie die vollständige Befehlszeilenverwendung zum Scannen von Projekten:
Eine SBOM gemäß der SPDX-Spezifikation erstellen
Auch die Snyk CLI und die API-Routen unterstützen die SPDX-Spezifikation. Wenn Sie das Befehlszeilen-Flag format auf spdx2.3+json setzen, können Sie eine SPDX-konforme SBOM-Ausgabe im JSON-Format erstellen. So geht's:
Das Ergebnis sieht etwa wie die folgende unvollständige JSON-Antwort für unser zuvor gezeigtes Fastify-Beispielprojekt aus:
Was können Sie sonst noch von einer SBOM erwarten?
Snyk unterstützt Entwickler dabei, sichere Anwendungen zu erstellen und bereitzustellen – durch das sofortige Erkennen unsicheren Codes in der IDE oder durch automatisierte Pull Requests mit Korrekturen für Software-Repositories auf GitHub oder Bitbucket.
In diesem Artikel haben wir uns auf die Abhängigkeiten von JavaScript-Anwendungen als Teil des SBOM-Verzeichnisses konzentriert. Eine SBOM stellt jedoch auch zahlreiche weitere nützliche Datenpunkte zu den in einem Projekt verwendeten Softwarekomponenten bereit. Diese zusätzlichen Informationen sind entscheidend, um nicht nur den Aufbau eines Softwareprodukts zu verstehen, sondern auch dessen Sicherheitsrisiken, Compliance-Anforderungen und Lizenzierung zu verwalten. Zu den Daten, die eine SBOM enthalten kann, gehören beispielsweise:
Komponentendetails: Dazu gehören Informationen zu jeder in der Software verwendeten Komponente, etwa der npm-Paketname, die Version und die Herkunft (npmjs-Repository oder GitHub-Repository).
Lizenzinformationen: Dazu gehören Angaben zu den Lizenzen, die für die einzelnen in der Software verwendeten Komponenten gelten, etwa Lizenztyp, Bedingungen und Pflichten. Vielleicht sind Sie an npm-Pakete mit MIT- oder Apache-Lizenz gewöhnt. Eine verschachtelte Abhängigkeit kann jedoch eine inkompatible Lizenz wie die GNU GPL verwenden und Sie rechtlichen Risiken aussetzen.
Schwachstellendaten: Dazu gehören Informationen zu öffentlich bekannten Sicherheitslücken in den in der Software verwendeten npm-Paketen, unabhängig davon, ob sie sich direkt oder indirekt auf die Software auswirken.
Kryptografische Daten: Dazu gehören Informationen zu den in der Software verwendeten kryptografischen Komponenten, etwa zu Algorithmen und Schlüssellängen. Wenn eine Anwendung beispielsweise einen unsicheren Algorithmus wie den MD5-Hash verwendet, sollten Sie darüber Bescheid wissen und entsprechende Maßnahmen ergreifen.
Build-Informationen: Dazu gehören Details zur Erstellung der Software, etwa zur Build-Umgebung, zu den verwendeten Tools und zu den Build-Konfigurationseinstellungen.
Metadaten: Dazu gehören alle weiteren für die Software relevanten Informationen, etwa Projektname, Version und Autor.
Ein praktisches Beispiel dafür, wie eine SBOM für Sie als JavaScript-Entwickler hilfreich sein kann, sehen Sie in der folgenden Tabelle:
Komponentenname | Version | Lizenztyp | Schwachstellendaten | Kryptografische Daten |
|---|---|---|---|---|
Express | 4.4.0 | MIT | N/A | |
Lodash | 4.17.16 | MIT | N/A | |
Vue | 2.5.16 | MIT | N/A | |
Axios | 0.21.0 | MIT | N/A |
Zum Zeitpunkt der Veröffentlichung dieses Artikels stellt Snyk Abhängigkeiten und ihre Beziehungen in folgenden Formaten bereit:
CycloneDX Version 1.4 als JSON
CycloneDX Version 1.4 als XML
SPDX Version 2.3 als JSON
Das Team arbeitet daran, weitere Bereiche der Spezifikationen zu unterstützen, etwa Schwachstellen, Lizenzen und mehr.
Mit Snyk können Sie SBOMs auch auf andere Weise nutzen:
Das SBOM-Prüftool ist eine kostenlose Website, auf der Sie ein SBOM-Artefakt hochladen können, damit Snyk die darin aufgeführten npm-Pakete auf Schwachstellen untersucht.
Abschnitt zur Snyk API über SBOMs
Vertiefen Sie Ihr Wissen in der SBOM-Dokumentation
Das Bomber-Open-Source-Projekt kann SBOM-Spezifikationsformate als Eingabe lesen und eine Liste von Schwachstellen ausgeben. Es kann hilfreich sein, wenn Sie mit proprietären Komponenten von Anbietern arbeiten müssen. Außerdem unterstützt es Snyk als Anbieter der Schwachstellendaten.
Wenn Sie Java-Entwickler sind oder es in Ihrem Unternehmen Java-basierte Anwendungen gibt, lesen Sie den Artikel meines Kollegen Brian Vermeer darüber, wie Sie SBOMs in Java mit Maven und Gradle erstellen.
Als ausführlichere Einführung empfehle ich Ihnen den Artikel von Snyk über Software Bill of Materials (SBOM) für die Open-Source-Lieferkettensicherheit.
Sichern Sie Ihre Open-Source-Abhängigkeiten
Die entwicklerorientierten Tools von Snyk erstellen mit einem Klick Fix-Pull-Requests für anfällige Open-Source-Abhängigkeiten und deren transitive Abhängigkeiten.
