Zum Inhalt springen

Services, Wiki-Artikel, Blog-Beiträge und Glossar-Einträge durchsuchen

↑↓NavigierenEnterÖffnenESCSchließen
Supply Chain Security Glossar

SBOM - Software Bill of Materials

Ein SBOM (Software Bill of Materials) ist ein maschinenlesbares Inventar aller Softwarekomponenten, Bibliotheken und Abhängigkeiten in einer Anwendung - inklusive Open-Source-Pakete, Versionen und Lizenzen. SBOMs ermöglichen schnelle Identifikation betroffener Systeme bei neuen CVEs (Log4Shell-Beispiel) und sind durch US Executive Order 14028 und EU Cyber Resilience Act regulatorisch gefordert.

SBOM (Software Bill of Materials) beantwortet eine Frage die während Log4Shell (Dezember 2021) millionen IT-Teams gleichzeitig stellten: “Nutzen wir log4j? Wenn ja, wo?” Ohne SBOM: wochenlange manuelle Suche durch hunderte Repositories. Mit SBOM: Antwort in Sekunden.

SBOM-Formate

SPDX (Software Package Data Exchange)

  • Entwickelt von Linux Foundation
  • ISO/IEC 5962:2021 (internationaler Standard)
  • Formate: .spdx (Tag-Value), .json, .yaml, .xml, .rdf
  • Stärke: beste Lizenz-Compliance-Unterstützung
  • Tooling: syft, spdx-tools, fossology
{
  "spdxVersion": "SPDX-2.3",
  "name": "myapp",
  "packages": [{
    "SPDXID": "SPDXRef-log4j",
    "name": "log4j-core",
    "version": "2.14.1",
    "supplier": "Organization: Apache Software Foundation",
    "licenseDeclared": "Apache-2.0",
    "externalRefs": [{
      "referenceCategory": "SECURITY",
      "referenceType": "cpe23Type",
      "referenceLocator": "cpe:2.3:a:apache:log4j:2.14.1:*"
    }]
  }]
}

CycloneDX

  • Entwickelt von OWASP
  • Fokus: Security-Use-Cases (Vulnerability Management)
  • Formate: .json, .xml
  • Stärke: beste Security-Tool-Integration
  • Tooling: cdxgen, syft, Dependabot
  • VEX (Vulnerability Exploitability eXchange) als Erweiterung
{
  "bomFormat": "CycloneDX",
  "specVersion": "1.5",
  "components": [{
    "type": "library",
    "name": "log4j-core",
    "version": "2.14.1",
    "group": "org.apache.logging.log4j",
    "purl": "pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1",
    "licenses": [{"license": {"id": "Apache-2.0"}}],
    "vulnerabilities": [{
      "id": "CVE-2021-44228",
      "ratings": [{"severity": "critical", "score": 10.0}]
    }]
  }]
}

SWID (Software Identification Tags)

  • ISO/IEC 19770-2 Standard
  • Fokus: Asset Management, Software-Inventarisierung
  • Weniger verbreitet in Open-Source-Tooling
  • Häufiger bei kommerzieller Software (Windows-Installer)

Empfehlung nach Anwendungsfall

AnwendungsfallEmpfohlenes Format
Security-FokusCycloneDX (beste CVE-Integration)
Lizenz-ComplianceSPDX
Enterprise/AssetSWID + SPDX

SBOM generieren

# syft (Anchore - Open Source)
# Installation:
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh

# Python-Projekt:
syft dir:./myapp -o spdx-json=sbom.spdx.json
syft dir:./myapp -o cyclonedx-json=sbom.cdx.json

# Docker-Image:
syft nginx:latest -o spdx-json=nginx-sbom.spdx.json

# NPM-Projekt:
syft dir:./webapp --catalogers javascript-lock-file
# cdxgen (CycloneDX Generator - OWASP)
npm install -g @cyclonedx/cdxgen
cdxgen -t nodejs -o bom.json ./myapp
cdxgen -t python -o bom.json ./myapp
cdxgen -t java -o bom.json ./myapp
# Unterstützt 30+ Sprachen/Ökosysteme
# Trivy (Aqua Security)
# SBOM aus Image:
trivy image --format cyclonedx --output sbom.json nginx:latest
# SBOM aus Dateisystem:
trivy fs --format spdx-json --output sbom.json ./
# GitHub Dependency Graph (SaaS)
# Automatisch für alle GitHub Repos (wenn aktiviert)
# Export via API:
gh api /repos/{owner}/{repo}/dependency-graph/sbom > sbom.json
# SBOM-Signierung (für Vertrauenskette) via Sigstore cosign:
cosign attach sbom --sbom sbom.cdx.json container-image:tag
cosign verify-blob sbom.cdx.json --certificate cert.pem
# SBOM-Signierung wichtig für:
# → Lieferketten-Vertrauen (ich beweise: dieses SBOM ist von mir)
# → Unveränderlichkeit (SBOM wurde nicht manipuliert)

SBOM für Vulnerability Management

# grype - Vulnerability Scanner mit SBOM-Input (Anchore)

# grype installieren:
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh

# Direkt auf Image scannen:
grype nginx:latest

# Auf SBOM-Datei scannen (schneller, offline möglich!):
grype sbom:./sbom.spdx.json

Ausgabe:

NAME         INSTALLED  FIXED-IN  VULNERABILITY   SEVERITY
log4j-core   2.14.1     2.17.1    CVE-2021-44228  Critical
log4j-api    2.14.1     2.17.1    CVE-2021-44228  Critical
# Exit-Code für CI/CD:
grype sbom:./sbom.json --fail-on critical
# exit 1 wenn Critical CVEs gefunden → Build schlägt fehl!

Log4Shell-Beispiel: SBOM vs. kein SBOM

Szenario: 10. Dezember 2021, CVE-2021-44228 publiziert.

Ohne SBOM:

  • IT: “Haben wir log4j irgendwo?”
  • Dev Team A: “Glaube nicht, check mal…”
  • Dev Team B: “Wir bauen auf Spring, keine Ahnung ob das dabei ist”
  • 3 Wochen manuelles Suchen in hunderten Repos…

Mit SBOM:

grype sbom:service-a/sbom.json --fail-on critical  # → 0 findings
grype sbom:service-b/sbom.json --fail-on critical  # → FAIL: log4j 2.14.1!
grype sbom:service-c/sbom.json --fail-on critical  # → 0 findings
grype sbom:service-d/sbom.json --fail-on critical  # → FAIL: log4j 2.12.3!

10 Minuten um alle betroffenen Services zu identifizieren → sofortiger Patch-Plan für genau 2 von 10 Services.

VEX (Vulnerability Exploitability eXchange)

Ergänzt SBOM: “CVE-XYZ ist zwar vorhanden, aber nicht ausnutzbar weil…” Reduziert False Positives (z.B. CVE in Code-Pfad der nie ausgeführt wird).

{
  "vulnerabilities": [{
    "id": "CVE-2021-44228",
    "analysis": {
      "state": "not_affected",
      "justification": "code_not_reachable",
      "response": ["will_not_fix"],
      "detail": "log4j-core is bundled but JndiLookup class is disabled in deployment"
    }
  }]
}

Regulatorische SBOM-Anforderungen

US Executive Order 14028 (Mai 2021)

  • “Improving the Nation’s Cybersecurity”
  • SBOM-Pflicht für Softwareanbieter der US-Bundesbehörden
  • Baseline-Definition: NTIA-Minimum-Elements für SBOM
  • Wirkung: US-Markt → indirekt globale Anforderung

EU Cyber Resilience Act (CRA) - gültig ab 2027

  • Gilt für alle “Products with Digital Elements” im EU-Markt
  • Anforderung: “Vulnerability Disclosure Policy” + SBOM-ähnliche Dokumentation
  • Annex I: technische Dokumentation inkl. aller Abhängigkeiten
  • Geldbußen: bis 15M EUR oder 2,5% des Jahresumsatzes
  • Betrifft: fast jede Software die in der EU verkauft wird

NIS2-Richtlinie (seit Oktober 2024)

  • Art. 21: “Sicherheit der Lieferkette” als Pflichtkontrolle
  • SBOM als Umsetzungsmittel für Supply-Chain-Security
  • Kritische Einrichtungen: detailliertere Anforderungen

NTIA Minimum Elements (US, Oktober 2021)

6 Pflichtfelder pro Komponente:

  1. Supplier Name (Hersteller)
  2. Component Name
  3. Component Version
  4. Other Unique Identifiers (PURL, CPE)
  5. Dependency Relationship (wer hängt von wem ab?)
  6. Author of SBOM Data

Best Practices für SBOM-Implementierung

  • SBOM in CI/CD generieren (jeder Build → neues SBOM)
  • SBOMs signieren (Sigstore cosign)
  • SBOMs in Artifact Registry speichern (neben Docker-Image)
  • Automatisierter Schwachstellenscan gegen SBOM (grype in Pipeline)
  • SBOM-Retention: mindestens so lange wie Software supported wird
  • Transitive Dependencies einschließen (A → B → C: alle drei!)

Cookielose Analyse via Matomo (selbst gehostet, kein Tracking-Cookie). Datenschutzerklärung