Syft CLI für die Generierung von Software Bill of Materials (SBOM)

Syft CLI für die Generierung von Software Bill of Materials (SBOM)

Inhaltsverzeichnis

Eine kurze Einführung in die Generierung von Software Bill of Materials (SBOM) mit Hilfe von Syft. Anhand eines Beispielprojekts werden wichtige Aspekte erklärt.

Wichtige Links

  1. Beispiel Repository mit React Frontend bei GitHub - Github: SecuraPoint/react-frontend
  2. Beispiel Docker Image, welches das React Frontend enthält, bei dockerhub - dockerhub: securapoint/react-frontend

SBOMs mit Syft generieren

Syft Cataloger sind spezialisierte Module innerhalb des Syft-Tools, die bestimmte Arten von Informationen aus einem Software-Artefakt extrahieren, wie z. B. Pakete, Dateien oder Metadaten. Jeder Cataloger ist dafür zuständig, ein bestimmtes Ökosystem oder Format zu analysieren, z. B. RPM, DEB, Python, Java oder Go. Syft verwendet eine Sammlung dieser Cataloger, um systematisch verschiedene Ebenen eines Software-Containers, Dateisystems oder Quellcodes zu durchsuchen. Während der Analyse orchestriert Syft die Cataloger so, dass sie parallel oder nacheinander laufen, je nach Konfiguration und Abhängigkeiten. Das Ergebnis ist eine umfassende Software Bill of Materials (SBOM), die alle identifizierten Komponenten und ihre Eigenschaften enthält.

Von Syft unterstützte Sources für Scans

Mit Syft lassen sich unterschiedliche Sources scannen und aus dem Ergebnis eine SBOM generieren. Die analysierbaren Sourcen sind:

  • Dateien: Einzelne Dateien wie zum Beispiel eine package-lock.json oder Archive (.tar)
  • Pfade: Hier können zum Beispiel komplette Repositories gescannt werden. Über glob expressions können dabei wiederum einzelne Pfade, Dateien oder Dateiendungen ausgeschlossen werden.
  • Images: Docker, Podman oder Containerd Images aus öffentlichen oder privaten Registries.

Vielzahl an Formaten kann erzeugt werden

Aus den oben erwähnten Sources kann Syft SBOM in verschiedenen Formaten erstellen. Dabei ist wählbar, ob json, Text oder XML ausgegeben werden sollen. Die verfügbaren Formate sind:

  • SPDX
  • CycloneDX
  • Syft-eigenes Format (dieses Format kann auch zur Erstellung eigener Templates verwendet werden)
  • GitHub

Die genauen Versionsnummern von CycloneDX und SPDX können im Syft Wiki nachvollzogen werden.


Beispiele für Syft CLI Commands

Im Folgenden schauen wir auf einige Beispiele von Syft CLI-Aufrufen. Diese Aufrufe scannen Images sowie Pfade und erzeugen daraus SBOMs im CycloneDX-Format.

# Generierung einer CycloneDX SBOM vom Root-Ordner eines Projekts
syft ./ -o cyclonedx-json

# Generierung einer Syft SBOM durch Scan eines Docker Images
syft securapoint/react-frontend:latest -o syft-json

# Generierung einer CycloneDX SBOM durch Scan eines Docker Images
syft securapoint/react-frontend:latest -o cyclonedx-json

Weitere Beispiele für Syft CLI Commands sind im README.md des Beispiel Repositories zu finden.


Konfiguration von Syft

Sollten die Standardeinstellungen von Syft nicht ausreichen oder nicht das gewünschte SBOM-Format erzeugen, kann es einfach umkonfiguriert werden.

Wichtige Flags in der Syft Konfiguration

Die Konfiguration von Syft Command erfolgt mittels Optionen (wie -o cyclonedx-json) oder mittels eines Konfigurationsfiles. Im Beispiel Repository ist ein Syft-Konfigurationsfile unter .syft.yaml abgelegt. Die darin enthaltenen Konfigurationen müssen nicht mehr als Optionen an das CLI übergeben werden.

Hier sind einige der wichtigen Konfigurationen zu sehen. Sie übernehmen folgende Funktionen:

  • pretty: true: Formatierung der JSON-Dateien.
  • select-catalogers: ["javascript"]: Sollte auf die Source angepasst sein. In diesen Beispiel ein, nmp-basiertes JavaScript Projekt.
  • content: 'all': Bestimmt, ob/wie viele Lizenz-Informationen in der SBOM enthalten sind.
  • enrich: ["javascript"]: Reichert die SBOM mit Informationen aus öffentlichen Paketquellen an.
  • include-dev-dependencies: true: Bestimmt, ob Dev-Dependencies in SBOM enthalten sind.
  • exclude: ['**/.git']: Schließt bestimmte Pfade oder Dateien vom Scan aus. Wichtig, um Übersichtlichkeit und Korrektheit der SBOM zu gewährleisten.

# [...]

format:
  # default value for all formats that support the "pretty" option (default is unset) (env: SYFT_FORMAT_PRETTY)
  pretty: true

# [...]

# add, remove, and filter the catalogers to be used (env: SYFT_SELECT_CATALOGERS)
select-catalogers: ["javascript"]

# [...]

license:
  # include the content of licenses in the SBOM for a given syft scan; valid values are: [all unknown none] (env: SYFT_LICENSE_CONTENT)
  content: 'all'

# [...]

# Enable data enrichment operations, which can utilize services such as Maven Central and NPM.
# By default all enrichment is disabled, use: all to enable everything.
# Available options are: all, golang, java, javascript (env: SYFT_ENRICH)
enrich: ["javascript"]

# [...]

javascript:
  # enables Syft to use the network to fill in more detailed license information (env: SYFT_JAVASCRIPT_SEARCH_REMOTE_LICENSES)
  search-remote-licenses: true

  # base NPM url to use (env: SYFT_JAVASCRIPT_NPM_BASE_URL)
  npm-base-url: 'https://registry.npmjs.org'

  # include development-scoped dependencies (env: SYFT_JAVASCRIPT_INCLUDE_DEV_DEPENDENCIES)
  include-dev-dependencies: true

# [...]

# exclude paths from being scanned using a glob expression (env: SYFT_EXCLUDE)
exclude: ['**/.git']

Ausschnitt aus .syft.yaml

Konfigurationsfile für einheitliche Generierung

Die Konfiguration mittels eingecheckter Konfigurationsdatei hat den Vorteil, dass die SBOM Generierungen immer einheitlich ablaufen (sofern sie nicht im CLI Command explizit überschrieben werden). Das ist vor allem im Sinne einer Automatisierung im Rahmen eines DevSecOp-Ansatzes.

Die SBOM Generierung mit einer bestimmten Konfiguration von Syft kann lokal getestet und wenn zufriedenstellend konfiguriert, reproduzierbar in einer CI-Pipeline ausgeführt werden. So kann in einer CI-Pipeline zu jedem Release (oder jedem Build) eine SBOM einheitlich generiert und als Artefakt des Releases erzeugt werden.

Hier ist der Aufruf einer GitHub Action zu sehen, die die Syft-Konfigurationsdatei verwendet.

- name: Generate path SBOM and upload artifact
    uses: anchore/sbom-action@v0
    with:
        path: ./
        format: cyclonedx-json
        output-file: syft-sbom-file-${{ steps.vars.outputs.sha_short }}.cyclonedx.json
        config: .syft.yaml

Fazit und selbst ausprobieren

Die Syft CLI besticht vor allem durch ihre einfache Verwendung und ihre Geschwindigkeit. Syft ist in Go geschrieben und das spürt man direkt bei der Geschwindigkeit, mit der die Command ausgeführt werden.

Die Syft Scans können mit einfach mit einer Source aufgerufen werden. Syft selbst wählt dann die zur Source passenden Cataloger und generiert eine passende SBOM. Ist das zu wenig, kann es über die Konfiguration gut an die eigenen Bedürfnisse angepasst werden.

Anhand des Beispielprojekts in GitHub kann man auch Pfad- und Dateiscans ausprobieren. Dazu kann das öffentliche Projekt Github: SecuraPoint/react-frontend einfach ausgecheckt werden. Im Anschluss muss Syft nur noch lokal installiert werden und schon kannst du Syft selbst ausprobieren.


Du möchtest mehr zum Thema erfahren?

Vereinbare einen kostenlosen Gesprächstermin mit uns oder sende uns deine Anfrage über unser Kontaktformular.

App screenshot

Ähnliche Posts

Cyber Resilience Act: Wie können sich Unternehmen auf die neuen Sicherheitsanforderungen vorbereiten

Cyber Resilience Act: Wie können sich Unternehmen auf die neuen Sicherheitsanforderungen vorbereiten

Die Anzahl an digitalen Produkten ist in den letzten Jahren stark gestiegen. Seien es klassische SaaS Produkte oder vernetzte Geräte im Haushalt oder Industriebereich. Diese digitalen Produkte hatten jedoch häufig ein geringes Cybersicherheitsniveau, was zu teils massiven Angriffen geführt hat. Der Cyber Resilience Act ist die erste europäische Verordnung, welche ein Mindestmaß an Cybersicherheit für alle vernetzten Produkte festlegt, die auf dem EU-Markt erhältlich sind.

Mehr lesen
SBOM und der Cyber Resilience Act

SBOM und der Cyber Resilience Act

Der Cyber Resilience Act ist die erste europäische Verordnung, die ein Mindestmaß an Cybersicherheit für alle vernetzten Produkte festlegt, die auf dem EU-Markt erhältlich sind. Damit sind nicht nur IoT-Produkte gemeint, sondern auch SaaS-Produkte oder Smartphone Apps. Das bedeutet, dass sich so gut wie alle Softwarehersteller mit dem Thema Cyber Resilience Act beschäftigen müssen. Der Cyber Resilience Act hat verschiedene Anforderungen, unter anderem die Erstellung und Archivierung einer SBOM für das jeweilige Softwareprodukt.

Mehr lesen
Von der Lizenz zur Sicherheit mit ISO/IEC 18974

Von der Lizenz zur Sicherheit mit ISO/IEC 18974

Was haben die Sicherheitsvorfälle Spring4Shell, OpenSSL Heartbleed oder XZ Utils Backdoor gemeinsam? Alles waren Open-Source-Software Komponenten und mit ihnen entstanden zahlreiche Sicherheitsvorfälle durch manipulierte Software innerhalb der Komponenten. Das sind nur wenige Beispiele, die zeigen, wie anfällig Software-Lieferketten sind. Der Einsatz von Open-Source-Software Komponenten ist heute ein integraler Bestandteil in der Softwareentwicklung.

Mehr lesen