Read in English · Leer en español · Lire en français
Abschnitt 8.6 von 8.8 · Mittelstufe · 23 Min. Lesezeit
Sicherheit der Software-Lieferkette
Videolektion
5 Min. · auf Englisch gesprochen, mit UntertitelnNur anhören (Audio)
Transkript lesen
Der meiste Code in einem modernen Service stammt nicht von dem Team, das ihn betreibt. Diese Lektion zeigt, warum alles, worauf Sie aufbauen, zu Ihrer Angriffsfläche gehört, und wie Architekten dieses Risiko verringern.
Ein Restaurant baut sein Mehl nicht selbst an. Es vertraut Lieferanten. Ist das Mehl eines Lieferanten verunreinigt, ist jedes Restaurant betroffen, das es gekauft hat, wie sauber seine Küche auch sein mag. Deshalb führen gute Restaurants eine Liste jeder Zutat und ihrer Herkunft. Sie kaufen bei Lieferanten, die ihre Lieferungen versiegeln und kennzeichnen, und prüfen die Siegel bei der Ankunft. Software entsteht genauso, aus Hunderten von Komponenten, die andere geschrieben haben und die Build-Maschinen zusammensetzen.
Das ist die Kette: ein Entwickler, das Quell-Repository, das Build-System, eine Registry, die das Ergebnis speichert, und das Deployment. Jeder Pfeil ist eine Vertrauensbeziehung, und jeder bekannte Vorfall missbrauchte eine andere. Open-Source-Abhängigkeiten fließen in den Build. 2018 wurde ein beliebtes Paket namens event-stream an einen Freiwilligen übergeben, der eine bösartige Abhängigkeit hinzufügte. 2021 war Log4Shell ein ehrlicher, aber schwerer Fehler in einer Logging-Bibliothek, die tief in unzähligen Systemen steckte. 2024 kam der Angriff auf xz utils über den Quellcode und den Release-Prozess. Nach etwa zwei Jahren geduldiger, nützlicher Beiträge lieferte ein Co-Maintainer Release-Dateien mit einer versteckten Backdoor aus. Sie wurde früh entdeckt. 2020 manipulierten Angreifer bei SolarWinds das Build-System, sodass die echt signierten Updates des Unternehmens eine Backdoor enthielten. Eine Signatur beweist, wer etwas gebaut hat, nicht, dass der Build sauber war. Und Registrys werden mit verwechselbaren Paketnamen missbraucht, Typosquatting genannt, und mit öffentlichen Paketen, die wie die internen eines Unternehmens heißen.
Eine Software Bill of Materials, kurz SBOM, ist eine maschinenlesbare Liste der Komponenten Ihrer Software, mit Versionen und exakten Kennungen. Sie macht Software nicht von selbst sicherer. Sie macht Fragen beantwortbar. Erzeugen Sie sie während des Builds, aus dem, was tatsächlich aufgelöst und paketiert wurde, nicht aus der Liste, die ein Entwickler geschrieben hat. Speichern Sie sie mit dem Artefakt und speisen Sie sie in einen Service ein, der jede gespeicherte Liste erneut prüft, sobald eine neue Schwachstelle veröffentlicht wird. Als Log4Shell bekannt wurde, beantworteten Organisationen mit einem genauen Inventar die Frage in Stunden. Andere brauchten Wochen.
Das ist eine gehärtete Pipeline vom Commit bis zur Produktion. Sie beginnt mit geprüftem Quellcode auf geschützten Branches und mit Abhängigkeiten, die auf exakte Versionen festgeschrieben sind, mit einem Hash für jede. Der Build ist isoliert, wird für einen Job erstellt und danach zerstört, und alle seine Eingaben sind deklariert. Er erzeugt die Stückliste. Das Ergebnis wird ohne langlebigen Schlüssel signiert. Ein Zertifikat, das nur Minuten gilt, nennt die Identität des Builds, und die Signatur wird in einem öffentlichen Log erfasst, an das nur angefügt werden kann. Das Image wird über seinen Digest gespeichert. Bevor die Produktion es ausführt, prüft eine Admission-Kontrolle die Signatur und die Herkunft. Nur was die erwartete Pipeline aus geprüftem Quellcode gebaut hat, darf laufen.
Committen Sie Lockfiles, die die exakten Versionen mit einem Hash für jede festhalten, und installieren Sie in jedem Build daraus. Pinnen Sie auch die Build-Werkzeuge. 2025 wurden die Versions-Tags einer beliebten Build-Action auf bösartigen Code verschoben, was Tausende Repositorys traf, die per Tag darauf verwiesen. Pinnen ohne Updates schafft das umgekehrte Risiko, also lassen Sie einen Bot oft kleine Updates vorschlagen. Einige Tage zu warten, bevor man ein Routine-Release übernimmt, hilft, weil die meisten bösartigen Releases binnen Tagen zurückgezogen werden. Sicherheitskorrekturen gehen schnell durch. Und Scanner liefern Hunderte von Befunden. Priorisieren Sie danach, ob eine Schwachstelle ausgenutzt wird, ob Ihr Code sie erreichen kann und ob der Service aus dem Internet erreichbar ist.
Die Regulierung drängt in dieselbe Richtung. Die Cyberresilienz-Verordnung der EU legt Cybersicherheitsanforderungen für Hardware- und Softwareprodukte mit digitalen Elementen fest, die auf dem Unionsmarkt bereitgestellt werden. Ihre Anforderungen sind architektonisch: sichere Standardkonfiguration, eine begrenzte Angriffsfläche, Sicherheitsupdates und eine SBOM, die zumindest die obersten Abhängigkeiten erfasst. Sie gilt stufenweise. Ihre Pflichten zur Meldung aktiv ausgenutzter Schwachstellen und schwerwiegender Vorfälle gelten ab dem elften September 2026, die meisten übrigen Pflichten ab dem elften Dezember 2027. Das ist eine allgemeine Information, keine Rechtsberatung. Ob ein bestimmtes Produkt in den Anwendungsbereich fällt, ist eine Rechtsfrage für jede Organisation, die anhand der amtlichen Texte und mit qualifizierten Beratern zu klären ist.
Der vollständige Abschnitt schildert die vier Vorfälle im Detail und enthält die Level für Build-Integrität sowie eine Checkliste für Service-Teams. Als Nächstes betrachten wir in Abschnitt acht Punkt sieben Privacy by Design. Bis gleich.
Was Sie wissen müssen
- Der meiste Code in einem modernen Service stammt aus Abhängigkeiten, Build-Tools, CI-Actions und Basis-Images; jedes davon und jeder, der es ändern kann, gehört zur Angriffsfläche.
- event-stream (2018) missbrauchte das Vertrauen in Maintainer, SolarWinds (2020) ein kompromittiertes Build-System, Log4Shell (2021) eine verwundbare Bibliothek tief in Abhängigkeitsbäumen und xz utils (2024) die geduldige Übernahme eines Release-Prozesses.
- Eine SBOM im Format SPDX oder CycloneDX listet Komponenten mit exakten Kennungen auf, sodass sich die Betroffenheit von einer neuen Schwachstelle per Abfrage ermitteln lässt; die US Executive Order 14028 (2021) und die Cyberresilienz-Verordnung der EU haben SBOMs zum Standard gemacht.
- SLSA (Version 1.2) definiert die Build-Level L0 bis L3, bis hin zu gehärteten, isolierten Builds, sowie Source-Level bis zum Review durch zwei Personen; Provenienz hält fest, wer ein Artefakt woraus gebaut hat.
- Das schlüssellose Signieren von Sigstore bindet ein kurzlebiges Zertifikat an eine CI-Identität und erfasst Signaturen in einem öffentlichen Transparenzlog; Admission-Prüfungen verifizieren Signaturen und Provenienz vor dem Deployment.
- Lockfiles mit Hashes, das Pinnen von CI-Actions und Images per Digest, kleine automatisierte Updates mit kurzer Wartezeit für neue Releases, priorisiertes Scannen sowie ephemere, hermetische Builds verringern das Risiko im Arbeitsalltag.
- Die Meldepflichten der Cyberresilienz-Verordnung gelten ab dem 11. September 2026 (Frühwarnung binnen 24 Stunden, Meldung binnen 72 Stunden), die meisten übrigen Pflichten ab dem 11. Dezember 2027.
Warum Abhängigkeiten eine Angriffsfläche sind
Der meiste Code in einem modernen Service wurde nicht von dem Team geschrieben, das ihn betreibt. Ein kleiner Webservice deklariert vielleicht zwanzig direkte Abhängigkeiten und installiert über deren eigene Abhängigkeiten mehrere hundert Pakete; der Container, in dem er ausgeliefert wird, bringt ein Betriebssystem-Userland mit, und die Pipeline, die ihn baut, führt Compiler, Plug-ins und CI-Actions aus, die wiederum andere geschrieben haben. Abschnitt 0.3 stellte Abhängigkeiten als Aufwandsersparnis mit Wartungskosten vor. Dieser Abschnitt betrachtet ihre Sicherheitskosten: Jede dieser Komponenten und jede Person und jedes System, die sie ändern können, gehört zu Ihrer Angriffsfläche.
Ein Software-Supply-Chain-Angriff kompromittiert etwas, das Sie nutzen, um Sie zu erreichen, meist viele Opfer auf einmal. Er kann auf vier grundlegenden Wegen kommen. Schadcode aus einer vertrauenswürdigen Quelle: Das Konto eines Maintainers wird per Phishing übernommen, ein Maintainer wird feindselig, oder ein Projekt wird einem Fremden übergeben. Bösartige Doppelgänger: Typosquatting veröffentlicht reqeusts neben requests; Dependency Confusion, im Februar 2021 von Alex Birsan demonstriert, veröffentlicht in der öffentlichen Registry ein Paket mit demselben Namen wie ein internes Paket eines Unternehmens und einer höheren Versionsnummer, das manche Build-Tools dann bevorzugen. Manipulation in der Pipeline: Der Quellcode ist in Ordnung, aber das Build-System, die Signaturschlüssel oder die Registry sind kompromittiert. Ehrliche Schwachstellen: Am Schreiben des Codes war kein Angreifer beteiligt, aber ein schwerer Fehler in einer weit verbreiteten transitiven Abhängigkeit gefährdet jeden, der sie ausliefert.
Die letzten Jahre haben gezeigt, wie schnell sich die erste Art ausbreitet. Im März 2025 wurden die Versions-Tags einer beliebten GitHub Action, tj-actions/changed-files, auf einen bösartigen Commit verschoben, der CI-Secrets in Build-Logs ausgab; betroffen waren Tausende Repositorys, die per Tag auf die Action verwiesen. Im September 2025 wurde ein Maintainer weit verbreiteter npm-Pakete wie chalk und debug über eine gefälschte npm-Support-Seite per Phishing getäuscht, und bösartige Versionen wurden veröffentlicht und binnen Stunden wieder entfernt; später im selben Monat stahl ein sich selbst verbreitender Wurm mit dem Spitznamen Shai-Hulud npm-Tokens und veröffentlichte damit infizierte Versionen weiterer Pakete.
Die Lieferkette und die Vertrauensbeziehungen, die Angreifer missbrauchen
Vier Vorfälle, genau erzählt
event-stream (2018). event-stream war ein beliebtes npm-Paket mit rund zwei Millionen Downloads pro Woche, für das sein ursprünglicher Autor keine Zeit mehr hatte. Im September 2018 übergab er die Veröffentlichungsrechte an einen Freiwilligen, der Hilfe angeboten hatte. Der neue Maintainer fügte eine Abhängigkeit hinzu, flatmap-stream, deren veröffentlichtes Paket eine verschlüsselte Nutzlast enthielt, die nur im Build von Copay, einer Bitcoin-Wallet-Anwendung, aktiv wurde und versuchte, Wallets mit hohen Guthaben zu stehlen. Ein Entwickler bemerkte den verdächtigen Code im November 2018. Nichts am Modell von npm war gebrochen worden: Ein vertrauenswürdiger Name hatte einfach den Besitzer gewechselt.
SolarWinds (2020). Angreifer, die die US-Regierung später dem russischen Auslandsgeheimdienst zuordnete, verschafften sich Zugang zur Build-Umgebung von SolarWinds, dem Hersteller des Netzwerkmanagement-Produkts Orion. Ein Implantat (von den Ermittlern SUNSPOT genannt) wartete auf Orion-Builds, tauschte während der Kompilierung eine Quelldatei gegen eine Version mit Backdoor aus und legte anschließend das Original zurück. Die so entstandenen Updates, veröffentlicht zwischen März und Juni 2020, wurden von SolarWinds’ eigener Pipeline gebaut und mit dem echten Zertifikat des Unternehmens signiert. Rund 18.000 Kunden installierten sie; die Angreifer wählten dann eine viel kleinere Zahl von Behörden und Unternehmen für weitere Eindringversuche aus. FireEye entdeckte die Kampagne im Dezember 2020 bei der Untersuchung eines Angriffs auf das eigene Unternehmen. Die Lehre für Architekten: Eine Signatur beweist, wer etwas gebaut hat, nicht, dass der Build sauber war.
Log4Shell (2021). CVE-2021-44228, am 9. Dezember 2021 offengelegt und nach CVSS mit 10,0 bewertet, war ein Fehler in Log4j 2, der dominierenden Logging-Bibliothek für Java. Log4j löste Lookups auf, die in Log-Nachrichten standen, darunter JNDI-Lookups, die eine Klasse von einem entfernten Server laden konnten; ein Angreifer, der eine Zeichenkette wie einen Benutzernamen oder einen Request-Header ins Log bringen konnte, konnte so Code auf dem Server ausführen. Kein Angreifer hatte die Lieferkette angetastet; der Schaden entstand dadurch, wie weit verbreitet und wie tief eingebettet die Bibliothek war. Organisationen verbrachten Wochen damit herauszufinden, wo sie sie nutzten, mehrere Folge-Releases waren nötig, um verwandte Fehler zu schließen, und wer ein genaues Inventar hatte, beantwortete die Frage in Stunden.
xz utils (2024). xz ist eine Kompressionsbibliothek, die über andere Bibliotheken vom OpenSSH-Server mehrerer Linux-Distributionen genutzt wird. Über etwa zwei Jahre leistete ein Konto namens Jia Tan nützliche Beiträge und wurde, unterstützt von weiteren Konten, die den überlasteten ursprünglichen Maintainer drängten, Hilfe anzunehmen, zum Co-Maintainer. Die Versionen 5.6.0 und 5.6.1, veröffentlicht im Februar und März 2024, enthielten eine Backdoor, mit der der Inhaber eines bestimmten privaten Schlüssels Befehle über SSH hätte ausführen können. Der Schadcode war in binären Testdateien versteckt und wurde durch ein verändertes Build-Skript aktiviert, das nur in den Release-Tarballs existierte, nicht im öffentlichen Repository. Am 29. März 2024 machte Andres Freund, ein Entwickler bei Microsoft, sie öffentlich, nachdem er untersucht hatte, warum SSH-Logins auf einem Testsystem ungewöhnlich viel CPU verbrauchten und etwa eine halbe Sekunde länger dauerten; sie wurde als CVE-2024-3094 erfasst. Weil sie früh entdeckt wurde, hatte sie vor allem Entwicklungs- und Rolling-Release-Distributionen erreicht und kaum stabile.
Was jeder Vorfall lehrt
| Vorfall | Was geschah | Angegriffenes Glied | Kontrollen, die geholfen hätten |
|---|---|---|---|
| event-stream (npm), 2018 | Ein neuer, freiwilliger Maintainer, dem der erschöpfte ursprüngliche Autor das Paket übergeben hatte, fügte eine Abhängigkeit (flatmap-stream) hinzu, die eine verschlüsselte Nutzlast gegen eine bestimmte Bitcoin-Wallet-Anwendung enthielt. | Vertrauen in Maintainer und transitive Abhängigkeiten | Lockfiles und eine Wartezeit vor der Übernahme neuer Versionen; Prüfung neuer transitiver Abhängigkeiten; Finanzierung und Nachfolgeregelung für kritische Pakete. |
| SolarWinds Orion, 2020 | Angreifer im Netzwerk des Herstellers platzierten Code, der während des Builds eine Quelldatei austauschte, sodass rechtmäßig signierte Updates die Backdoor SUNBURST enthielten. | Build-System | Isolierte, ephemere, überwachte Builds; Provenienz; reproduzierbare Builds zum Vergleich der Ergebnisse; minimale Rechte für das Netzwerkmanagement-Tool selbst. |
| Log4Shell (Log4j 2), 2021 | Eine seit Langem vorhandene Funktion, die JNDI-Lookups in geloggtem Text auflöste, ließ jeden Angreifer, der eine Zeichenkette ins Log bringen konnte, Code auf dem Server ausführen. | Eine verwundbare, tief verschachtelte Abhängigkeit | Eine SBOM, um jedes betroffene System in Minuten zu finden; Egress-Filterung; schnelles, eingeübtes Patchen. |
| xz utils, 2024 | Nach etwa zwei Jahren geduldiger Beiträge lieferte ein Co-Maintainer Release-Tarballs mit einer versteckten Backdoor aus, die auf OpenSSH in einigen Linux-Distributionen zielte. | Quellcode und Release-Prozess | Builds aus dem geprüften Repository statt aus handgefertigten Tarballs; reproduzierbare Builds; genaue Prüfung binärer Testdateien und Build-Skripte. |
Software Bills of Materials
Eine Software Bill of Materials (SBOM) ist eine maschinenlesbare Liste der Komponenten einer Software mit Versionen, Kennungen und den Beziehungen zwischen ihnen. Sie macht Software nicht von selbst sicherer; sie macht Fragen beantwortbar. Wird das nächste Log4Shell bekannt, verwandelt ein durchsuchbarer Bestand an SBOMs für jedes deployte Artefakt die Frage Sind wir betroffen, und wo?
in eine Abfrage.
Zwei Formate dominieren. SPDX von der Linux Foundation begann als Format für Lizenz-Compliance; Version 2.2.1 ist die internationale Norm ISO/IEC 5962:2021, und SPDX 3.0 (2024) ergänzt Profile für Sicherheit, Builds und KI. CycloneDX, ein OWASP-Projekt für Sicherheitsanwendungsfälle, ist von Ecma International als ECMA-424 standardisiert; Version 1.7 erschien im Oktober 2025. Beide können Komponenten mit einer Package URL (purl) wie pkg:npm/express@4.21.2 identifizieren, und genau damit gleichen Schwachstellendatenbanken ab. Die ergänzende Idee VEX (Vulnerability Exploitability eXchange) erlaubt es einem Lieferanten zu erklären, dass eine gelistete verwundbare Komponente in seinem Produkt nicht ausnutzbar ist, etwa weil die verwundbare Funktion nie aufgerufen wird; das verringert das Rauschen für die Kunden.
Die Politik hat SBOMs in den Mainstream gebracht. Die US Executive Order 14028, Improving the Nation's Cybersecurity, unterzeichnet am 12. Mai 2021, legte Maßnahmen für die Software-Lieferkette bei Software fest, die an die Bundesregierung verkauft wird, darunter die Bereitstellung einer SBOM für Käufer; die National Telecommunications and Information Administration veröffentlichte daraufhin die Mindestelemente einer SBOM (Lieferant, Komponentenname, Version, weitere eindeutige Kennungen, Abhängigkeitsbeziehungen, Autor der SBOM-Daten und ein Zeitstempel). Die US-Politik hat sich seither von einheitlichen Vorgaben entfernt: Im Januar 2026 hob das Memorandum M-26-05 des Office of Management and Budget die frühere Pflicht von Lieferanten auf, sichere Entwicklungspraktiken zu bescheinigen; die Behörden legen nun risikobasierte Anforderungen fest und verlangen SBOMs, wo sie es für richtig halten. In der EU macht die weiter unten beschriebene Cyberresilienz-Verordnung eine SBOM zum Teil der technischen Dokumentation für Produkte mit digitalen Elementen.
Erzeugen Sie SBOMs während des Builds, aus dem, was tatsächlich aufgelöst und paketiert wurde, statt aus dem Manifest, das ein Entwickler geschrieben hat; speichern Sie sie neben dem Artefakt, mit dessen Digest als Schlüssel; und speisen Sie sie in einen Service ein, der jede gespeicherte SBOM erneut prüft, sobald eine neue Schwachstelle veröffentlicht wird.
{
"bomFormat": "CycloneDX",
"specVersion": "1.6",
"metadata": {"timestamp": "2026-10-20T09:14:02Z",
"component": {"bom-ref": "orders-service", "type": "application",
"name": "orders-service", "version": "4.12.0"}},
"components": [
{"bom-ref": "log4j-core", "type": "library", "name": "log4j-core",
"group": "org.apache.logging.log4j", "version": "2.24.3",
"purl": "pkg:maven/org.apache.logging.log4j/log4j-core@2.24.3",
"hashes": [{"alg": "SHA-256", "content": "9f2c..."}]},
{"bom-ref": "jackson-databind", "type": "library", "name": "jackson-databind",
"version": "2.18.2",
"purl": "pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.18.2"}
],
"dependencies": [
{"ref": "orders-service", "dependsOn": ["log4j-core", "jackson-databind"]}
]
}SLSA: Level für die Build-Integrität
SLSA (Supply-chain Levels for Software Artifacts, ausgesprochen salsa) ist ein Framework, inzwischen unter dem Dach der Open Source Security Foundation gepflegt, das aufeinander aufbauende Schutzstufen gegen Manipulation beschreibt. Version 1.0 (2023) definierte einen Build-Track; Version 1.2 gliederte die Spezifikation in mehrere Tracks und ergänzte einen Source-Track. Das zentrale Artefakt ist die Provenienz: eine signierte Aussage, meist im Attestierungsformat von in-toto, darüber, welche Build-Plattform ein Artefakt erzeugt hat, aus welcher Quellcode-Revision und mit welcher Build-Definition und welchen Parametern. Ein Konsument prüft die Provenienz gegen Erwartungen wie von unserer CI aus dem main-Branch von github.com/fooddelivery/orders gebaut.
Der Source-Track hat vier Level: Versionskontrolle (L1), eine fortlaufende, unveränderliche Historie mit Provenienz für jede Revision (L2), fortlaufend durchgesetzte technische Kontrollen wie geschützte Branches (L3) und ein Review durch zwei Personen für jede Änderung an geschützten Branches (L4). Für die meisten Organisationen ist das realistische Ziel Build L3 auf einer gemeinsamen, gut betriebenen Build-Plattform plus Source L3 oder L4 für wichtige Repositorys; die Level sagen, was eine Plattform garantieren muss, und ein Plattformteam kann sie einmal für alle Services erfüllen.
Die Level des SLSA-Build-Tracks
| Niveau | Name | Was es garantiert |
|---|---|---|
| Build L0 | Keine Garantien | Keine Anforderungen: das Fehlen von SLSA. |
| Build L1 | Provenienz vorhanden | Der Build erzeugt Provenienz, die beschreibt, wie das Artefakt gebaut wurde. Das fängt Fehler ab, ist aber leicht zu fälschen. |
| Build L2 | Gehostete Build-Plattform | Ein gehosteter Build-Dienst erzeugt und signiert die Provenienz und schützt so vor Manipulation nach dem Build. |
| Build L3 | Gehärtete Builds | Die Build-Plattform isoliert Builds voneinander und hält Signiermaterial außer Reichweite benutzerdefinierter Build-Schritte; das schützt vor Manipulation während des Builds. |
Signieren und Provenienz mit Sigstore
Artefakte zu signieren ist seit Langem möglich, doch die Verwaltung langlebiger Signaturschlüssel war so mühsam, dass nur wenige Open-Source-Projekte es taten, und gestohlene Schlüssel waren selbst ein Risiko. Sigstore, 2021 gestartet und heute Teil der Open Source Security Foundation, macht das Signieren durch schlüsselloses Signieren billig. Ein CI-Job weist Fulcio, der Zertifizierungsstelle von Sigstore, seine Identität mit einem OpenID-Connect-Token nach; Fulcio stellt ein wenige Minuten gültiges Zertifikat aus, das diese Identität nennt, etwa einen bestimmten Workflow in einem bestimmten Repository; das Tool signiert das Artefakt und erfasst die Signatur in Rekor, einem öffentlichen Transparenzlog, an das nur angefügt werden kann; der ephemere private Schlüssel wird danach verworfen. Prüfer kontrollieren die Signatur, die Identität im Zertifikat und den Log-Eintrag, statt einem Schlüssel zu vertrauen, der durchgesickert sein könnte.
Das Tool cosign wendet das auf Container-Images und andere Artefakte an, und Paket-Ökosysteme haben dieselben Ideen übernommen: npm kann Pakete mit Provenienzangaben veröffentlichen, die sie mit dem Quell-Repository und dem Build verknüpfen (2023), und PyPI unterstützt Trusted Publishing aus der CI ohne langlebige Tokens (2023) sowie auf Sigstore basierende Attestierungen (2024). Beim Deployment kann ein Admission Controller in Kubernetes, etwa der Policy Controller von Sigstore oder Kyverno, jedes Image ablehnen, das nicht von der erwarteten Identität signiert ist oder dem die erwartete Provenienz fehlt. Denken Sie an SolarWinds: Signatur und Provenienz beweisen, woher etwas stammt; erst Build-Isolation, Review und Erkennung machen vertrauenswürdig, was dabei herauskommt.
Eine gehärtete Pipeline vom Commit bis zur Produktion
Lockfiles, Pinning und automatisierte Updates
Ein Manifest wie package.json oder pyproject.toml gibt zulässige Versionsbereiche an; ein Lockfile (package-lock.json, poetry.lock, uv.lock, go.sum, Cargo.lock) hält die exakt aufgelösten Versionen fest, meist mit einem kryptografischen Hash für jede. Wird das Lockfile committet und in der CI daraus installiert (npm ci, pip install --require-hashes), nutzt jeder Build dieselben geprüften Bytes, und ein mit anderem Inhalt neu veröffentlichtes Paket fällt bei der Hash-Prüfung durch. Pinning gilt auch für Build-Werkzeuge: Verweisen Sie auf CI-Actions per vollständigem Commit-Hash, nicht per Tag, den der Eigentümer oder ein Angreifer verschieben kann, denn genau das ließ den tj-actions-Vorfall sich ausbreiten; verweisen Sie auf Basis-Images per Digest.
Pinning ohne Updates schafft das umgekehrte Risiko: Alte Versionen sammeln bekannte Schwachstellen an, und Upgrades werden zu groß, um sie noch anzugehen. Update-Bots wie Dependabot und Renovate öffnen kleine, häufige Pull Requests, die die CI automatisch testet. Eine nützliche Verfeinerung ist ein Mindestalter für Releases: einige Tage warten, bevor man eine routinemäßige neue Version übernimmt, denn die meisten bösartigen Releases werden innerhalb von Stunden oder Tagen entdeckt und zurückgezogen; Sicherheitskorrekturen sind davon ausgenommen und werden beschleunigt.
Werkzeuge für Software Composition Analysis (SCA) wie OWASP Dependency-Check, Trivy, Grype oder kommerzielle Dienste gleichen Ihre Abhängigkeiten mit Schwachstellendatenbanken ab. Ihre Schwäche ist das Rauschen: Hunderte Befunde, die meisten in Codepfaden, die Sie nie aufrufen. Priorisieren Sie mit Exploit-Daten (steht die Schwachstelle im Katalog Known Exploited Vulnerabilities der CISA, wie hoch ist ihr EPSS-Wert?), mit Erreichbarkeitsanalyse, wo Ihre Werkzeuge sie bieten, und mit der Exposition (ist der Service aus dem Internet erreichbar?). Abschnitt 8.8 behandelt Schwachstellenmanagement als Prozess.
Container und Build-Integrität
Ein Container-Image enthält neben Ihrem Code ein Betriebssystem-Userland, und jedes Paket darin gehört zur Lieferkette. Beginnen Sie mit minimalen Basis-Images (distroless, Alpine oder schlanke Distributions-Images), die weniger potenziell verwundbare Pakete enthalten; bauen Sie Images regelmäßig neu, damit Korrekturen im Basis-Image ankommen, auch wenn sich Ihr Code nicht geändert hat; scannen Sie Images in der CI und laufend erneut in der Registry, weil jeden Tag neue Schwachstellen für alte Images veröffentlicht werden; und deployen Sie Images per Digest, damit genau das läuft, was gescannt wurde.
Das Build-System ist das wertvollste Ziel in der Kette, weil es alles berührt, wie SolarWinds gezeigt hat. Lassen Sie Builds auf ephemeren Runnern laufen, die für einen einzigen Job erstellt und danach zerstört werden, damit sich ein Angreifer nicht zwischen Builds festsetzen kann. Machen Sie Builds hermetisch, mit allen Eingaben deklariert und per Hash abgerufen und ohne Netzwerkzugriff während der Kompilierung, damit keine nicht deklarierten Eingaben hineingelangen. Halten Sie langlebige Secrets aus der CI heraus, indem Sie per OIDC-Föderation für jeden Job kurzlebige Cloud-Zugangsdaten beziehen, und geben Sie jeder Pipeline nur die geringsten nötigen Rechte, damit ein Pull Request aus einem Fork die Deployment-Zugangsdaten nicht erreichen kann. Schützen Sie den Release-Pfad mit Branch-Schutz und Review durch zwei Personen. Schließlich erlauben reproduzierbare Builds, bei denen derselbe Quellcode stets eine bitgenau identische Ausgabe ergibt, unabhängigen Parteien, neu zu bauen und zu vergleichen; das Projekt Reproducible Builds und Distributionen wie Debian haben die meisten ihrer Pakete reproduzierbar gemacht, und eine Abweichung ist ein starkes Indiz für Manipulation.
Die Cyberresilienz-Verordnung der EU
Die Cyberresilienz-Verordnung (CRA), Verordnung (EU) 2024/2847, legt horizontale Cybersicherheitsanforderungen für Produkte mit digitalen Elementen fest, die auf dem Unionsmarkt bereitgestellt werden: Hardware- und Softwareprodukte einschließlich ihrer Lösungen zur Datenfernverarbeitung. Sie ist am 10. Dezember 2024 in Kraft getreten und gilt stufenweise. Die Vorschriften über die Notifizierung von Konformitätsbewertungsstellen gelten ab dem 11. Juni 2026. Die Meldepflichten nach Artikel 14 gelten ab dem 11. September 2026: Ein Hersteller muss eine aktiv ausgenutzte Schwachstelle oder einen schwerwiegenden Sicherheitsvorfall, der die Sicherheit seines Produkts beeinträchtigt, mit einer Frühwarnung innerhalb von 24 Stunden, nachdem er davon Kenntnis erlangt hat, einer ausführlicheren Meldung innerhalb von 72 Stunden und später einem Abschlussbericht melden (bei einer Schwachstelle spätestens 14 Tage, nachdem eine Korrekturmaßnahme verfügbar ist; bei einem schwerwiegenden Vorfall innerhalb eines Monats), und zwar über die einheitliche Meldeplattform, die von ENISA, der Agentur der Europäischen Union für Cybersicherheit, betrieben wird. Die meisten übrigen Pflichten gelten ab dem 11. Dezember 2027.
Die grundlegenden Anforderungen in Anhang I sind ebenso architektonisch wie verfahrensbezogen: Produkte müssen so konzipiert sein, dass sie ein angemessenes Cybersicherheitsniveau gewährleisten, mit einer sicheren Standardkonfiguration bereitgestellt werden, Angriffsflächen begrenzen, die Vertraulichkeit und Integrität von Daten schützen, Daten minimieren sowie sicherheitsrelevante Ereignisse protokollieren und Sicherheitsupdates empfangen können. Hersteller müssen Komponenten ermitteln und dokumentieren, unter anderem durch die Erstellung einer SBOM, die zumindest die obersten Abhängigkeiten erfasst, Schwachstellen über eine Strategie zur koordinierten Offenlegung behandeln und Sicherheitsupdates für einen Unterstützungszeitraum bereitstellen, der in der Regel mindestens fünf Jahre betragen sollte, es sei denn, das Produkt wird voraussichtlich kürzer verwendet. Geldbußen für Verstöße gegen die grundlegenden Anforderungen oder die Pflichten der Hersteller können bis zu 15 Millionen EUR oder 2,5 % des weltweiten Jahresumsatzes betragen, je nachdem, welcher Betrag höher ist.
Der Anwendungsbereich ist entscheidend. Freie und quelloffene Software, die außerhalb einer Geschäftstätigkeit entwickelt oder bereitgestellt wird, fällt nicht unter die Cyberresilienz-Verordnung, und für Verwalter quelloffener Software, die solche Software für die kommerzielle Nutzung unterstützen, gilt eine leichtere Regelung. Reine Software as a Service fällt grundsätzlich nicht unter die Verordnung, es sei denn, sie ist die Lösung zur Datenfernverarbeitung eines Produkts; Cloud- und andere digitale Diensteanbieter können stattdessen unter die NIS-2-Richtlinie fallen. Ob ein bestimmtes Produkt in den Anwendungsbereich fällt und welches Konformitätsbewertungsverfahren gilt, ist eine Rechtsfrage für jede Organisation; die architektonische Folge ist, dass SBOMs, Schwachstellenbehandlung, Update-Mechanismen und Sicherheitsprotokollierung zu Nachweisen werden, die vorhanden sein müssen, statt guter Absichten.
Checkliste: Sicherheit der Lieferkette für ein Service-Team
Das meiste davon ist einmal eine Plattformfunktion und danach Gewohnheit.
- Ein Inventar führenFür jeden Build eine SBOM erzeugen und mit dem Artefakt speichern, damit „Sind wir betroffen?“ eine Abfrage ist und kein Projekt.
- Abhängigkeiten festschreiben und verifizierenLockfiles committen, in der CI mit Hash-Prüfung installieren und den Build scheitern lassen, wenn Lockfile und Manifest nicht übereinstimmen.
- Abhängigkeiten bewusst wählenVor dem Hinzufügen Wartung, Zahl der Maintainer, OpenSSF-Scorecard-Ergebnisse, Lizenz und den Umfang des transitiv mitgezogenen Codes prüfen.
- Laufend aktualisieren, aber nicht sofortEinen Bot jede Woche kleine Updates vorschlagen lassen; für Routine-Updates ein kurzes Mindestalter für Releases anwenden; Sicherheitskorrekturen beschleunigen.
- Scannen, dann einordnenSoftware Composition Analysis und Image-Scans in der CI und laufend in der Registry ausführen; nach Ausnutzbarkeit und Erreichbarkeit priorisieren, nicht nach Anzahl.
- Build-Werkzeuge ebenso pinnen wie BibliothekenCI-Actions und Plug-ins auf vollständige Commit-Hashes und Basis-Images auf Digests pinnen; Änderungen daran wie Code prüfen.
- Den Build isolieren und härtenEphemere Runner, keine langlebigen Secrets (OIDC-Föderation nutzen), Tokens mit minimalen Rechten, geschützte Branches und Review durch zwei Personen für Release-Pfade.
- Signieren und Provenienz erfassenArtefakte mit Sigstore oder einem Gegenstück signieren, SLSA-Provenienz veröffentlichen und auf der Plattform Build L3 anstreben.
- Beim Deployment verifizierenAdmission-Richtlinien weisen Images ab, die unsigniert sind, von der falschen Identität signiert wurden oder denen Provenienz aus dem erwarteten Repository fehlt.
- Für das nächste Log4Shell planenÜben, eine Bibliothek innerhalb eines Tages in jedem Service zu finden und zu patchen, und die eigenen Meldepflichten nach der Cyberresilienz-Verordnung, aus Verträgen und gegenüber Kunden kennen.
Häufige Fragen
Sollten wir alle Abhängigkeiten per Vendoring (Kopie) in unser Repository übernehmen?
Vendoring bietet Kontrolle und Offline-Builds, erschwert aber Updates und verdeckt Korrekturen aus dem Upstream. Ein Lockfile mit Hashes plus ein privater Registry-Mirror, der freigegebene Pakete zwischenspeichert, bietet den Großteil der Kontrolle mit weniger Wartung.
Reicht eine private Registry, um Dependency Confusion zu verhindern?
Nur wenn Builds so konfiguriert sind, dass sie interne Namen ausschließlich aus ihr auflösen. Verwenden Sie Paketnamen mit Scope oder Namespace, registrieren Sie Ihre internen Namen in öffentlichen Registrys und konfigurieren Sie den Paketmanager so, dass ein öffentliches Paket niemals ein internes überschreiben kann.
Wer in der Organisation ist für die Sicherheit der Lieferkette zuständig?
Meist ist sie geteilt: Ein Plattform- oder Sicherheitsteam stellt die gehärtete Pipeline, das Signieren, das Scannen und die Richtlinien einmal bereit; jedes Service-Team hält seine Abhängigkeiten wenige, aktuell und begründet.
Prüfen Sie Ihr Verständnis
Warum haben die Signaturprüfungen die SolarWinds-Kunden nicht geschützt?
Die Backdoor wurde während des eigenen Builds von SolarWinds eingefügt, sodass das trojanisierte Update tatsächlich von SolarWinds signiert war. Eine Signatur zeigt, wer ein Artefakt erzeugt hat, nicht, dass der Build sauber war.
Was ergänzt ein Lockfile gegenüber einem Manifest?
Das Manifest gibt zulässige Versionsbereiche an; das Lockfile hält die exakt aufgelösten Versionen und meist ihre Hashes fest, sodass jeder Build dieselben Bytes installiert und ein verändertes Paket bei der Verifizierung durchfällt.
Warum ist der Verweis auf eine CI-Action per Tag riskanter als per Commit-Hash?
Ein Tag kann von jedem verschoben werden, der das Repository kontrolliert, auch von einem Angreifer, sodass dieselbe Referenz unbemerkt anderen Code ausführen kann; ein vollständiger Commit-Hash bezeichnet unveränderlichen Inhalt.
Welche Frage beantwortet eine SBOM, die ein Schwachstellenscanner allein über eine ganze Systemlandschaft hinweg nicht schnell beantwortet?
Welche deployten Artefakte in welchen Services und Umgebungen eine bestimmte Komponente in einer bestimmten Version enthalten, sodass sich die Betroffenheit von einer neu bekannt gegebenen Schwachstelle überall zugleich ermitteln lässt.
Quellen und weiterführende Literatur
Haben Sie eine Frage zu diesem Abschnitt? ArchitectBot, der KI-Lernassistent des Kurses, antwortet zuerst aus dem Kurs.
Fragen: „Wie sollte unser Team Hunderte von Schwachstellenwarnungen zu Abhängigkeiten priorisieren, und welche sind wirklich wichtig?“