Einheit
SBOM-Generierung
Wie generiert man mit dem Open Source Review Toolkit eine Software Bill of Materials.
Lernziel
Nach dieser Einheit kannst du für ein Softwareprojekt mit dem Open Source Software Review Toolkit eine Software Bill of Material erstellen und visualisieren.
FOSS-Compliance
Softwareprojekte bestehen in der Regel aus einer Vielzahl von Komponenten, die oft standardisierte Funktionalitäten wie Datenbankzugriff, Dateizugriff, Kommunikationsprotokolle oder Visualisierungen bereitstellen und über verschiedene Projekte hinweg wiederverwendet werden. Derartige Komponenten werden oft unter Open-Source-Lizenzen bereitgestellt. In der Praxis umfasst eine Software deshalb meist Komponenten, die einer Vielzahl von unterschiedlichen Open-Source-Lizenzen unterliegen. Die Sicherstellung, dass alle Bedingungen der unterschiedlichen Lizenzen erfüllt werden, kann sehr schnell unübersichtlich und herausfordernd werden. Deshalb ist Lizenzmanagement eine der zentralen Aufgaben im Bereich FOSS-Compliance.
Software Bill of Materials
Eine Softwarestückliste (engl. Software Bill of Materials - SBOM) ist das zentrale Instrument, um effektiv FOSS-Compliance umzusetzen. Die Software Bill of Materials listet alle in einer Software enthaltenen Komponenten, möglichst mit eindeutig identifizierbaren Namen, Versionsangaben und Lizenzinformationen auf.
Eine Software Bill of Materials sollte maschinenlesbar gestaltet werden, um sie in Arbeitsprozesse und Werkzeuge einbinden zu können. Es ist heute dringend zu empfehlen eines der standardisierten und etablierten Formate wie CycloneDX oder SPDX zu nutzen. Für beide Formate gibt es ein reichhaltiges Ökosystem an Werkzeugen. Das CycloneDX-Format wird innerhalb der OWASP Foundation entwickelt und ist als ECMA-424 standardisiert. Es ist nicht auf Software beschränkt, sondern beinhaltet auch andere Formen der Bill of Material. Das SPDX-Format wird innerhalb der Linux Foundation entwickelt und ist als ISO/IEC 5962:2021 standardisiert.
Nachfolgend wird die Generierung einer SBOM mit dem Open Source Software Review Toolkit der Linux Foundation vorgestellt. Das OSS Review Toolkit (ORT) ist eine Sammlung von Werkzeugen zur Generierung einer SBOM und der Analyse von Softwareprojekten im Hinblick auf FOSS-Compliance und Security.
Projektanalyse am Beispiel Eclipse iceoryx
Als Beispiel für die Generierung einer SBOM wird das Projekt Eclipse iceoryx, eine Middleware für Interprozesskommunikation, genutzt. Die gewählte Version ist in C++ geschrieben und nutzt Bazel für das Build-Management und die Verwaltung von Abhängigkeiten zu anderen Softwarekomponenten.
Die nachfolgenden Analysen wurden in einer Umgebung mit Ubuntu 24.04 und unter Nutzung von Podman für die Ausführung von Containern erstellt.
SBOM generieren mit dem OSS Review Toolkit
Um eine möglichst einfache Reproduzierbarkeit der folgenden Anleitung zu gewährleisten wird die Ausführung der Analyse in einem Container durchgeführt.
# Das Podman Ubuntu-Paket installieren (getestet mit Podman Version 4.9.3) und jq zum Lesen von JSON-Dateien in der Kommandozeile.
$ sudo apt install podman jq
# Arbeitsordner anlegen
$ mkdir iceoryx-ort-sbom
$ cd iceoryx-ort-sbom
# Quellcode von Iceoryx mit Git holen (Iceoryx Version 2.95.8)
$ git clone https://github.com/eclipse-iceoryx/iceoryx.git
$ cd iceoryx/
$ git checkout v2.95.8
$ cd ..
# Umgebungsvariablen für ORT-Containerimage setzen (Version 91.2.0)
$ export ORT_IMAGE=ghcr.io/oss-review-toolkit/ort:91.2.0
$ export WORKSPACE="$PWD"
# Abhängigkeiten in Iceoryx mit ORT analysieren
# Ergebnis: ort-results/analyzer/analyzer-result.yml
$ mkdir -p ort-results/analyzer
$ podman run --rm --userns=keep-id --env USE_BAZEL_VERSION=7.6.1 --volume "$WORKSPACE:/workspace:Z" --workdir /workspace "$ORT_IMAGE" --info analyze --input-dir /workspace/iceoryx --output-dir /workspace/ort-results/analyzer
# Anzeigen der identifizierten Abhängigkeiten (die von Bazel verwaltet werden)
$ grep -n "Bazel" ort-results/analyzer/analyzer-result.yml
# SBOM in CycloneDX-Format mit ORT erstellen (Ergebnis: JSON file)
# Eingabe: ort-results/analyzer/analyzer-result.yml
# Ergebnis: ort-results/reporter/iceoryx-cyclonedx.json
$ mkdir -p ort-results/reporter
$ podman run --rm --userns=keep-id --volume "$WORKSPACE:/workspace:Z" --workdir /workspace "$ORT_IMAGE" --info report --ort-file /workspace/ort-results/analyzer/analyzer-result.yml --output-dir /workspace/ort-results/reporter --report-formats CycloneDx -O CycloneDx=singleBom=true -O CycloneDx=singleBomComponentName=iceoryx -O CycloneDx=singleBomComponentType=LIBRARY -O CycloneDx=outputFileFormats=JSON
$ mv ort-results/reporter/bom.cyclonedx.json ort-results/reporter/iceoryx-cyclonedx.json
# Anzeigen der Abhängigkeiten von Iceoryx im SBOM
$ jq '.dependencies' ort-results/reporter/iceoryx-cyclonedx.json
SBOM visualisieren mit Sunshine
SBOM-Dateien sind sehr umfangreich und lassen sich nur schwer manuell lesen. Zur Visualisierung bietet sich deshalb das im Rahmen des CycloneDX-Standards entwickelte Werkzeug Sunshine an. Analog zur Analyse wird auch die Visualisierung in einem Container durchgeführt.
# Erstelle eine Containerbeschreibung für Sunshine
$ cat << 'EOF' > sunshine
FROM python:3.12-slim
WORKDIR /opt/sunshine
RUN apt-get update && \
apt-get install -y --no-install-recommends git && \
git clone https://github.com/CycloneDX/Sunshine . && \
pip install --no-cache-dir -r requirements.txt && \
apt-get purge -y git && \
apt-get autoremove -y && \
rm -rf /var/lib/apt/lists/*
EOF
# Erstelle den Container mittels der Beschreibung
$ export SUNSHINE_IMG=localhost/sunshine:latest
$ podman build --tag "$SUNSHINE_IMG" --file sunshine .
# Erstellen des HTML-Reports mit Sunshine
# Eingabe: ort-results/reporter/iceoryx-cyclonedx.json
# Ergebnis: ort-results/reporter/iceoryx-report.html
$ podman run --rm --userns=keep-id --volume "$WORKSPACE:/workspace:Z" --workdir /workspace "$SUNSHINE_IMG" python /opt/sunshine/sunshine.py -i ort-results/reporter/iceoryx-cyclonedx.json -o ort-results/reporter/iceoryx-report.html
# Nutze einen Webbrowser um die Visualisierung ort-results/reporter/iceoryx-report.html anzuzeigen
Bei Bedarf Aufräumen
Sofern keine weiteren Analysen mit ORT durchgeführt werden sollen, können mit den folgenden Anweisungen alle Dateien und installierten Pakete vollständig aus der Ubuntu-Umgebung entfernt werden.
# Das heruntergeladene ORT-Containerimage löschen
$ podman image rm "$ORT_IMAGE"
# Alle nicht mehr benötigten Container, Volumes etc. löschen
$ podman system prune
# Arbeitsverzeichnis löschen
$ cd ..
$ rm -rf iceoryx-ort-sbom
# Das Podman Ubuntu-Paket inklusive Konfiguration und Abhängigkeiten deinstallieren
$ sudo apt --purge autoremove podman