Das Blatt für den Moment, in dem jemand einen Nachweis verlangt: Was steckt im Artefakt, woher stammt es, wer steht dafür gerade, und welche Frist läuft gerade. Maßgeblich sind die Originalquellen — SLSA 1.2, SPDX, CycloneDX, Sigstore Cosign und der Cyber Resilience Act.
Die erste Hälfte des Seminars — Angriffspfade, Repository-Schutz, Paketquellen, Scanverfahren und Pipeline-Rechte — liegt auf dem Blatt Lieferkette: Risiken und Härtung. Für Dockerfile, Cache und rootless-Betrieb siehe Container, Images und Lieferkette.
Was zu einem ausgelieferten Artefakt gehört
| Nachweis | Beantwortet | Wird gebraucht bei |
|---|---|---|
| Quellrevision | Woraus wurde gebaut? | jeder Ursachensuche |
| Werkzeugliste | Womit wurde gebaut? | kompromittiertem Werkzeug |
| Provenance | Wer bezeugt den Bau? | Verifikation vor dem Deployment |
| Digest | Ist es unverändert? | jedem Verdacht auf Austausch |
| SBOM | Was steckt darin? | neuer Schwachstelle |
Ohne Quellrevision am Artefakt beginnt jede Untersuchung mit der Frage, welcher Stand überhaupt läuft. Die Aufbewahrungsfrist richtet sich nach dem Supportzeitraum des Produkts, nicht nach dem Platz auf der Ablage — und Build- Protokolle verfallen oft nach Wochen, während Untersuchungen länger dauern.
Modul: Reproduzierbare und nachvollziehbare Builds
SBOM: Angaben je Komponente
| Angabe | Beantwortet | Ohne sie |
|---|---|---|
| Name und Version | Was ist es? | keine Zuordnung möglich |
| Lieferant und Urheber | Wer verantwortet es? | keine Ansprechstelle |
| Bezugsquelle | Woher kam es? | Herkunft nicht prüfbar |
| Prüfsumme | Ist es unverändert? | Austausch unbemerkt |
| Lizenz und Copyright | Dürfen wir es nutzen? | rechtliche Lücke |
| Beziehungen | Warum ist es drin? | direkt und transitiv nicht trennbar |
Externe Bezeichner wie Package URL und CPE verbinden die Komponente mit den Schwachstellendatenbanken. Was nicht ermittelbar war, gehört ausdrücklich als unbekannt markiert — eine Lücke, die als Lücke dasteht, ist etwas anderes als eine verschwiegene.
Modul: Grundlagen der Software Bill of Materials
Drei Erzeugungspunkte, drei Wahrheiten
| Erzeugt aus | Enthält | Fehlt |
|---|---|---|
| Quellstand | erklärte Abhängigkeiten | was der Build hinzufügt |
| Build-Artefakt | tatsächlich eingebundener Code | Betriebssystempakete |
| Container-Image | alles bis zum Basis-Image | Bezug zum Quellstand |
Für den Betreiber zählt das Image, für die Ursachensuche der Quellstand — deshalb lohnen beide. Die Differenzen sind kein Fehler, sondern die Information.
Modul: Grundlagen der Software Bill of Materials
SPDX und CycloneDX nebeneinander
| SPDX | CycloneDX | |
|---|---|---|
| Normung | ISO/IEC 5962:2021 | ECMA-424 |
| Aufbau | Profile über einem Kernmodell | Abschnitte in einer BOM |
| Reichweite | Software, Build, Dataset, AI | Software, Hardware, ML, Dienste |
| Schwachstellen | Security-Profil | eigener Abschnitt samt VEX |
| Serialisierung | Modell mit Serialisierungen | JSON, XML, Protocol Buffers |
Die Wahl fällt selten frei — meist gibt der Empfänger das Format vor, und dann werden beide gebraucht.
mvn org.cyclonedx:cyclonedx-maven-plugin:makeBom # aus dem Projekt
syft <image>:<tag> -o spdx-json=sbom.spdx.json # aus dem Image
cyclonedx validate --input-file target/bom.json # gegen das Schema
Erzeugen und Validieren gehören in denselben Schritt: Eine ungeprüfte Stückliste fällt sonst erst beim Empfänger auf. Beim Vergleich zweier Releases ist die ernsteste Beobachtung gleiche Version, andere Prüfsumme — sie steht in keinem Änderungsprotokoll.
Modul: SPDX und CycloneDX praktisch einsetzen
Vier Fragen an einen Schwachstellentreffer
| Frage | Quelle | Wirkung auf die Priorität |
|---|---|---|
| Wie schwer ist der Fehler? | Schweregradbewertung | Grundlage, nicht Ergebnis |
| Wird er aktiv ausgenutzt? | Meldungen zu Ausnutzung | hebt stark an |
| Ist der Code erreichbar? | eigene Analyse | senkt oder hebt deutlich |
| Gibt es eine Behebung? | Herstellerangabe | bestimmt den Weg |
Die dritte Frage kann nur das eigene Team beantworten — sie ist die teuerste und die wertvollste. Erster Schnitt vor jeder Bewertung: Treffer in Testabhängigkeiten von denen in Produktionscode trennen.
Modul: Schwachstellenmanagement mit SBOM und VEX
VEX: drei Aussagen und ihre Voraussetzung
| Aussage | Bedeutung | Was sie voraussetzt |
|---|---|---|
| betroffen | hier ausnutzbar | Plan mit Frist |
| nicht betroffen | hier nicht ausnutzbar | belegte Begründung |
| in Prüfung | noch nicht entschieden | Termin für die Entscheidung |
Tragfähige Begründungen für „nicht betroffen”: Der verwundbare Code ist gar nicht enthalten · er wird von keinem Pfad erreicht · die Ausnutzung setzt eine Konfiguration voraus, die hier nicht vorliegt · eine vorgelagerte Maßnahme verhindert sie. Ohne Termin wird „in Prüfung” ein Dauerzustand, der die Liste unbrauchbar macht.
Modul: Schwachstellenmanagement mit SBOM und VEX
Prüfsumme, Signatur, Attestierung
| Mittel | Wehrt ab | Wehrt nicht ab |
|---|---|---|
| Prüfsumme | zufällige Veränderung | gezielten Austausch samt Summe |
| Signatur | fremde Urheberschaft | Fehler des echten Urhebers |
| Attestierung | erfundene Herkunft | falsche Aussage der Plattform |
Deshalb hängt alles daran, wer die Attestierung erzeugt — nicht daran, dass es eine gibt. Beim schlüssellosen Signieren stellt Fulcio nach Prüfung des OIDC-Tokens ein kurzlebiges Zertifikat aus, der private Schlüssel wird nach Gebrauch vernichtet, und Rekor bezeugt den Vorgang mit Zeitstempel.
cosign sign --yes <registry>/<image>@sha256:<digest>
cosign verify \
--certificate-identity=<erwartete-identitaet> \
--certificate-oidc-issuer=<erwarteter-aussteller> \
<registry>/<image>@sha256:<digest>
Ohne die beiden Erwartungsangaben bestätigt die Prüfung nur, dass überhaupt jemand signiert hat. Signiert wird immer der Digest, nie ein Tag.
Modul: Signaturen, Attestierungen und Provenance
Was in einer Provenance steht
| Angabe | Inhalt | Wird geprüft gegen |
|---|---|---|
| Artefakt | Digest des Images | das ausgerollte Image |
| Herkunft | Repository und Revision | erwartetes Repository |
| Plattform | die bauende Instanz | erwartete Build-Plattform |
| Parameter | Eingaben des Laufs | erwartete Parameter |
Erst wenn alle vier Zeilen eine Erwartung haben, ist die Verifikation mehr als eine Formsache.
| Prüfpunkt | Wirkt gegen | Wirkt nicht gegen |
|---|---|---|
| In der Pipeline | Fehler im eigenen Ablauf | Start an der Pipeline vorbei |
| Beim Zulassen im Cluster | jedes nicht zugelassene Image | Manipulation nach dem Start |
Erst der zweite Prüfpunkt macht aus der Signatur eine Bedingung statt eines Hinweises. Ablehnungsfall und Notfallweg gehören vorher festgelegt — sonst wird die Regel beim ersten Störfall dauerhaft abgeschaltet.
Modul: Signaturen, Attestierungen und Provenance · Container, Registry und Deployment absichern
SLSA: zwei Spuren, zwei Skalen
| Build Track | Umgebung | Provenance |
|---|---|---|
| L1 | gehostete Infrastruktur | existiert, benennt das Artefakt eindeutig |
| L2 | isoliert zwischen Läufen | signiert, von der Steuerungsebene erzeugt |
| L3 | je Build neu, Geheimnisse getrennt | nicht fälschbar, Parameter vollständig |
| Source Track | Verlangt | Nutzen |
|---|---|---|
| L1 | modernes Versionskontrollsystem | Änderungen sind nachvollziehbar |
| L2 | Historie gesichert, Provenance je Revision | wer was änderte, zeitnah bezeugt |
| L3 | technische Kontrollen am Branch erzwungen | Nachweis der geltenden Kontrollen |
| L4 | Freigabe durch zwei verschiedene Personen | erschwert eingeschleuste Änderungen |
Der Source Track hat vier Stufen, der Build Track drei. Technische Kontrollen wirken erst ab ihrer Aktivierung — eine Lücke setzt die bezeugte Historie zurück. Stufen gelten je Artefakt und Repository, nicht je Unternehmen.
| Verbreitete Annahme | Wirklichkeit |
|---|---|
| L3 verlangt Bitgleichheit | Reproduzierbarkeit ist nicht gefordert |
| L3 verlangt Netzfreiheit | Hermetik ist ausdrücklich ausgenommen |
Gefordert ist Isolation: kein geteilter Zustand, kein vergifteter Cache, keine Nachwirkung auf den Folgelauf.
Modul: SLSA 1.2 in der Praxis · Reproduzierbare und nachvollziehbare Builds
Meldung: Rollen und Fristen
| Rolle | Erste Aufgabe | Braucht vorher |
|---|---|---|
| Erstkontakt | bestätigen und einordnen | Postfach und Frist |
| Entwicklung | reproduzieren und eingrenzen | Zugriff auf alte Stände |
| Produktsicherheit | bewerten und entscheiden | Bewertungsmaßstab |
| Kommunikation | Betroffene informieren | Verteiler und Textbausteine |
Die rechte Spalte lässt sich nur vorher herstellen. Im Ernstfall merkt man lediglich, dass sie fehlt.
| Schritt | Frist | Inhalt |
|---|---|---|
| Frühwarnung | 24 Stunden ab Kenntnis | erste Mitteilung |
| Vollständige Meldung | 72 Stunden | Lage und Maßnahmen |
| Abschluss Schwachstelle | 14 Tage nach Abhilfe | Ergebnis und Behebung |
| Abschluss Vorfall | 1 Monat nach der 72-Stunden-Meldung | Auswertung |
Gemeldet wird über die zentrale Meldeplattform an das zuständige CSIRT, zugleich geht die Information an ENISA. Die Uhr läuft ab Kenntnis, nicht ab Klarheit — die Frühwarnung verlangt keine fertige Analyse. Meldepflichtig sind aktiv ausgenutzte Schwachstellen und schwerwiegende Vorfälle, nicht jeder Befund.
Modul: Schwachstellenmeldungen und Security Incident Response
Cyber Resilience Act: die Daten
| Datum | Status | Was gilt |
|---|---|---|
| 10.12.2024 | in Kraft | Verordnung in Kraft getreten |
| 11.06.2026 | anwendbar | Kapitel zu notifizierten Stellen |
| 11.09.2026 | anwendbar | Meldepflichten für Hersteller |
| 11.12.2027 | anwendbar | vollständige Anwendung |
Betroffen sind Produkte mit digitalen Elementen — Software oder Hardware samt Fernverarbeitungslösungen, deren Nutzung eine direkte oder mittelbare Datenverbindung zu einem Gerät oder Netz umfasst. Vier Pflichten betreffen den Entwicklungsprozess unmittelbar: Risikobewertung über den Lebenszyklus, Sicherheit durch Gestaltung, ein festgelegter Supportzeitraum und eine technische Dokumentation, die Bewertung und umgesetzte Maßnahmen festhält. Die Einordnung dient der technischen Orientierung und ersetzt keine Rechtsberatung.
Modul: Cyber Resilience Act und dauerhaftes Betriebsmodell
Kennzahlen, die etwas steuern
| Kennzahl | Zeigt | Reagiert auf |
|---|---|---|
| Anteil signierter Artefakte | Abdeckung der Herkunft | Lücken in der Pipeline |
| Anteil verifizierter Deployments | Wirkung der Regel | Umgehungswege |
| Alter der ältesten Ausnahme | Verfall der Disziplin | fehlende Fristen |
| Zeit von Meldung bis Behebung | Reaktionsfähigkeit | Engpässe im Ablauf |
Eine Kennzahl ohne benannte Reaktion ist Dekoration — die rechte Spalte ist der eigentliche Zweck. Drei Kennzahlen genügen; mehr werden erhoben, aber nicht mehr gelesen.
Modul: Cyber Resilience Act und dauerhaftes Betriebsmodell
Typische Fallen
- Die SBOM gilt als dauerhaft gültig. Sie beschreibt den Stand, aus dem sie erzeugt wurde — ohne Erzeugungszeitpunkt lässt sie sich keinem Release zuordnen.
- Unbekanntes wird weggelassen statt markiert. Eine scheinbar lückenlose Liste ist weniger wert als eine mit sichtbaren Lücken.
- Nur eine SBOM, und niemand weiß, welche Sicht sie zeigt. Quellstand, Artefakt und Image beantworten verschiedene Fragen.
- Der Schweregrad wird als Priorität verwendet, weil er als Zahl vorliegt — die Erreichbarkeit im eigenen Produkt entscheidet aber stärker.
- „Nicht betroffen” wird gesetzt, weil ein Patch aufwendig wäre. Das ist keine Bewertung, sondern eine Umgehung mit unangenehmer Aktenlage.
- Die Verifikation prüft die Gültigkeit, nicht die erwartete Identität. Ein grüner Haken ohne Inhalt.
- Signiert wird ein Tag statt eines Digests. Der Tag wandert später, die Signatur bleibt gültig und meint etwas anderes.
- Die Provenance entsteht im Build-Skript statt durch die Plattform. Dann sagt sie nur, was das Skript behauptet.
- Beim Umkopieren zwischen Registries bleiben Signatur und Attestierungen zurück. Die Verifikation schlägt dann im Deployment fehl.
- Die Prüfung läuft nur in der Pipeline. Ein Notfall-Deployment geht daran vorbei.
- Die Frühwarnung wird verschoben, bis die Analyse fertig ist. Die Frist läuft ab Kenntnis.
- Der Zeitpunkt der Kenntniserlangung steht nirgends. Dann lässt sich die Einhaltung nicht belegen.
- Der Supportzeitraum ist nicht festgelegt und beim Kauf nicht erkennbar — dabei ist er eine Entscheidung und eine Zeile in der Produktbeschreibung.