Tech Insights / Secure Software Supply Chain

Sichere Softwarelieferkette: Schnelle und sichere Bereitstellung von Software in die Produktion

Das Implementieren einer sicheren Softwarelieferkette bildet die Grundlage für sichere Softwareentwicklung und einen schnelleren Weg zu DevSecOps.


Was ist eine sichere Softwarelieferkette?

Eine sichere Softwarelieferkette ist eine Reihe von Prozessen für die sichere, zuverlässige und konsistente Bereitstellung von Software und ihren Abhängigkeiten in die Produktion. Dazu gehören regelmäßige Quellcode-Updates und definierte Kontrollen für Plattform-Governance.

Eine sichere Softwarelieferkette gewährleistet, dass der Code und seine Abhängigkeiten vertrauenswürdig, konform, aktuell und releasebereit sind. Außerdem werden regelmäßige Überprüfungen durchgeführt, um Schwachstellen zu erkennen, zu melden und zu beseitigen. Mit der Durchsetzung definierter Richtlinien in allen Systemen der Kette werden unbefugter Zugriff und das Ausführen nicht signierter Pakete verhindert.




Best Practices für eine sichere Softwarelieferkette

Für die Entwicklung einer sicheren Softwarelieferkette sind eine Reihe von Tools und Praktiken erforderlich, mit denen Ihr Unternehmen Softwarepakete aus eigener Entwicklung und von Drittanbietern vom Quellcode bis in die Produktion in anhaltend hoher Geschwindigkeit und Qualität sowie gemäß der akzeptierten Risikostufe bereitstellen kann.

VMware hat fünf wesentliche Bereiche für sichere Softwareentwicklung identifiziert, mit denen Unternehmen Sicherheit in die agile Softwareentwicklung integrieren und Angriffe auf die Softwarelieferkette vermeiden können.

  1. 1. Schutz des Anwendungsquellcodes

    Der Teil der Softwarelieferkette, den Sie während der Softwareentwicklung am besten kontrollieren können, ist der Code, den Sie schreiben. Eine sichere Lieferkette ist unwirksam, wenn der ausgelieferte Code Sicherheitslücken aufweist. Durch Strategien zum Schutz des Codes können Sie dazu beitragen, Angriffe auf die Lieferkette zu verhindern.

    Best Practices

    • Unterstützen Sie Entwickler beim Umsetzen von Sicherheitsmaßnahmen in Produktionsumgebungen.
    • Verwenden Sie Zugriffskontrollen für Code-Repositorys, um unbefugten Zugriff und ungewollte Codeänderungen zu verhindern.
    • Setzen Sie Code-Linting/statische Code-Analyse ein, um häufige programmatische Fehler zum Entwicklungszeitpunkt zu erkennen, bevor diese zu angreifbaren Produktionsfehlern werden.
    • Führen Sie Peer-Code-Reviews durch, um Schwachstellen durch unbeabsichtigte Fehler oder absichtlich schädliches Handeln zu vermeiden.
    • Setzen Sie mithilfe von Secrets-Management durch, dass der Quellcode keine sensiblen Anmelde- und Konfigurationsdaten enthält. Dies verhindert Angriffe aufgrund von Offenlegung, Reverse-Engineering oder sonstiger Veröffentlichung des Codes.
    • Verwenden Sie Static App Security Testing (SAST), eine Art von Softwaresicherheitstest, bei dem der Quellcode nach Code-Mustern durchsucht wird, die bekannten schwachen Coding-Praktiken entsprechen.
    • Setzen Sie Source Composition Analysis (SCA) ein, um die in der Anwendung verwendeten Drittanbieterbibliotheken, -Frameworks und -komponenten zu verifizieren.

    Ergebnisse

    • Anwendungsentwickler können qualitativ hochwertigen Code anhand von Best Practices für die Sicherheit entwickeln.
    • Alle Commits in das Repository sind vertrauenswürdig.
    • Der Quellcode ist frei von Secrets oder anderen sensiblen Umgebungsdaten.
  2. 2. Management von Anwendungsabhängigkeiten

    Nur wenige Entwickler erstellen ihre Builds von Grund auf neu. Um Zeit zu sparen und die Entwicklung zu beschleunigen, verwenden Sie möglicherweise vorgefertigten Code aus Open-Source- oder anderen Quellen. Dies bedeutet, dass auch dieser vorgefertigte Code, der in den finalen Build integriert wird, beim Erkennen und Patchen von Anwendungsschwachstellen in der Produktion berücksichtigt werden muss.

    Um ein sicheres Design und eine sichere Entwicklung von Software zu gewährleisten, müssen Anwendungsabhängigkeiten für Ihre Teams klar ersichtlich sein. Regelmäßige Scans stellen sicher, dass alle abhängigen Bibliotheken gepatcht und frei von häufigen Schwachstellen und Risiken (Common Vulnerabilities and Exposures, CVEs) sind, um das Ausnutzen von Abhängigkeiten zu erschweren.

    Best Practices

    • Führen Sie regelmäßige Scans auf Schwachstellen in Abhängigkeiten durch, um sicherzustellen, dass alle abhängigen Bibliotheken gepatcht und frei von CVEs sind.
    • Patchen Sie angreifbare Abhängigkeiten zeitnah.
    • Pinnen Sie Abhängigkeiten (Dateisperren), d. h. binden Sie Abhängigkeiten an bestimmte, geprüfte Versionen, um zu vermeiden, dass neue Schwachstellen beim unbeabsichtigten Aktualisieren einer Abhängigkeit eingeführt werden.
    • Verwenden Sie Abhängigkeiten aus bekannten und seriösen Quellen, die von einer Vielzahl von Entwicklern genutzt werden. Die Wahrscheinlichkeit einer Kompromittierung ist im Vergleich zu weniger vertrauenswürdigen Quellen geringer.
    • Seien Sie sich darüber im Klaren, welche Abhängigkeiten genau verwendet werden. Moderne Anwendungen bestehen oft aus Dutzenden oder mehr Abhängigkeiten. Der dadurch entstehende Angriffsvektor führt zu Schwachstellen in der gesamten Abhängigkeitshierarchie.
    • Führen Sie neue Abhängigkeiten nur aus gutem Grund ein. In einigen Fällen kann die Angriffsfläche durch das Vermeiden weitverzweigter Abhängigkeiten minimiert werden.
    • Evaluieren Sie Updates zu bestehenden Abhängigkeiten. Softwareanbieter verteilen Updates bei routinemäßiger Wartung häufig über einen zentralen Server. Angreifer, die das Netzwerk eines Anbieters infiltrieren, können Malware in scheinbar harmlose Produkt-Updates einfügen.
    • Machen Sie sich mit Risikomanagement vertraut.

    Ergebnisse

    • Entwickler können die Herkunft von Drittanbieter- und internen Abhängigkeiten zuverlässig validieren.
    • Anwendungsteams können die Softwarestückliste ihrer Anwendung vollständig einsehen.
    • Stakeholder können schnell feststellen, welche Anwendungen möglicherweise durch CVEs angreifbar sind.
    • Ein reibungsloses Patching der Schwachstellen von Anwendungsabhängigkeiten wird sichergestellt.
  3. 3. Sichere CI/CD-Systeme

    Governance spielt eine wichtige Rolle für die Kontrolle der Continuous Integration und Continuous Delivery(CI/CD)-Pipeline. Sie können Ihre Softwarelieferkette besser schützen, indem Sie sicherstellen, dass Berechtigungen für Systeme vergeben und ordnungsgemäß konfiguriert werden. Hierzu zählt das Prinzip der minimalen Zugriffsrechte.

    Best Practices

    • Implementieren Sie Zugriffskontrollen für CI/CD-Pipelines und verhindern Sie das Umgehen von Pipelines, indem Sie Hintertüren vermeiden.
    • Verwenden Sie Systemkonten mit minimalen Zugriffsrechten für das Ausführen von Jobs, Tasks und Skripts in Automatisierungspipelines.
    • Verwenden Sie Pull- statt Push-basierte Bereitstellungen. Bei Push-basierten Bereitstellungen müssen Anmeldedaten außerhalb des Zielsystems offengelegt werden. Bei Pull-basierten Bereitstellungsszenarien werden die Anmeldedaten des Zielsystems nicht offengelegt. Controller synchronisieren jedoch Statusänderungen aus Git-Repositorys (GitOps) oder Image-Registrys.
    • Verwenden Sie das Management von Anmeldedaten für CI/CD-Pipelines und stellen Sie sicher, dass Ihre Bereitstellungstools Anmeldedaten für Ihre sensibelsten Umgebungen anfordern.
    • Generieren und speichern Sie Build- und Auditprotokolle.

    Ergebnisse

    • Entwickler können die Herkunft von Drittanbieter- und internen Abhängigkeiten zuverlässig validieren.
    • Anwendungsteams können die Softwarestückliste ihrer Anwendung vollständig einsehen.
    • Stakeholder können schnell feststellen, welche Anwendungen möglicherweise durch CVEs angreifbar sind.
    • Schwachstellen von Anwendungsabhängigkeiten werden reibungslos gepatcht.
  4. 4. Sichere Image-Builds und Registrys

    Beim besseren Absichern von Container-Images geht es darum, schwerwiegende CVEs in der Image-Registry zu reduzieren und CVEs schneller zu beseitigen. Dies wird durch signierte und vertrauenswürdige Basisimages und das Durchsetzen von Kontrollrichtlinien im Image-Repository erreicht.

    Best Practices

    • Implementieren Sie Kontroll-/Zugriffsrichtlinien für Image-Repositorys. Alle verwendeten Image-Referenzen müssen von einem automatisierten CI-Prozess autorisiert und validiert worden sein, um Zugriff außerhalb des Prozesses zu minimieren.
    • Verwenden Sie eine geringe Anzahl von genehmigten Basisimages, um die Angriffsfläche zu reduzieren. Stellen Sie sicher, dass Basisimages signiert und versioniert sind. Vertrauenswürdige Basisimages werden festgelegt, zur Verfügung gestellt und für den Build verwendet.
    • Speichern Sie Anwendungs-Images und/oder -artefakte an einem sicheren Ort. Setzen Sie Kontrollrichtlinien für Image-Repositorys durch und stellen Sie sicher, dass nur signierte Images in einer Registry gespeichert werden.
    • Halten Sie die Schwachstellendatenbank auf dem neuesten Stand und nutzen Sie diese für regelmäßig geplante Schwachstellenscans.
    • Verwenden Sie einen sicheren Image-Build, der reproduzierbar ist und nur aus vertrauenswürdigen Artefakten erstellt wurde. Stellen Sie sicher, dass das Einführen von Hintertüren in den Build erschwert und erkannt wird.
    • Verfolgen Sie in die Produktion übernommene Artefakte, um sicherzustellen, dass die für Tests verwendeten Artefakte auch in höhere Umgebungen übernommen werden. Auditprotokolle sind vorhanden.
    • Verwenden Sie Image-Tagging.
    • Validieren Sie Nachweise.

    Ergebnisse

    • Integrität von Anwendungs-Images durch Signatur
    • Speichern von Images in einer sicheren Registry
    • Vertrauen in bereitgestellte Artefakte
    • Transparenz von Image-Schwachstellen
    • Operationalisiertes Beheben von Image-Schwachstellen
  5. 5. Sichere Laufzeit

    Durch das Implementieren von Zero-Trust-Architektur, Sicherheitsinformations- und Ereignismanagement (SIEM) sowie Tools zum Erkennen komplexer Bedrohungen erzielen Sie eine sicherere Umgebung für Ihre Anwendungen und Ihre Plattform für die Anwendungsentwicklung. Beobachtbarkeit für Ihren Plattformbetrieb hilft Ihnen beim Überwachen Ihrer Laufzeit und liefert Erkenntnisse über die Performance Ihrer Anwendungen.

    Best Practices

    • Security Engineers müssen in der Lage sein, Angriffe zu erkennen. Dies erfolgt durch Korrelation verschiedener Ereignisse, möglicherweise durch ein SIEM-Tool, sowie durch andere Tools für die Bedrohungserkennung. Diese können bestimmte Ereignisse identifizieren, die auf das Eindringen eines Angreifers hindeuten.
    • Führen Sie Schwachstellen-Scans während der Laufzeit durch, um Schwachstellen in Kubernetes-Umgebungen zu erkennen.
    • Implementieren Sie sicheres Networking, um zu verhindern, dass Angreifer in ein einzelnes Netzwerk eindringen und sich von dort aus auf weitere vertrauenswürdige Netzwerke und Umgebungen ausbreiten. Eine sichere Datenübertragung durch sichere Kommunikation ist unerlässlich, um zu verhindern, dass Angreifer den Netzwerkdatenverkehr ausspionieren.
    • Verwenden Sie eine Strategie für sichere Mehrmandantenfähigkeit. Nutzen Sie für die Isolierung eine Namespace- und Cluster-Strategie mit zusätzlichen rollenbasierten Zugriffskontrollen.
    • Konfigurieren Sie Ihre Entwicklungsumgebung ordnungsgemäß, um Sicherheitsverletzungen zu vermeiden, die oftmals durch eine falsch konfigurierte Infrastruktur verursacht werden.
    • Dank Secrets-Management werden Secrets sicher an die jeweiligen Anwendungen und Services verteilt, die sie benötigen. Der Zugriff ist zudem nur auf diejenigen Secrets möglich, die für eine einwandfreie Funktion erforderlich sind. Dadurch werden die Angriffsfläche und Folgen einer potenziellen Sicherheitsverletzung reduziert.
    • Implementieren Sie einen sicheren Zugriff auf Ihre Umgebung, damit nur autorisierte Anwender darauf zugreifen können. Um dies zu gewährleisten, sind möglicherweise mehrere verschiedene Sicherheitsprotokolle erforderlich. Unbefugter Zugriff muss erkennbar sein.
    • Testen Sie die Anwendungssicherheit dynamisch („Black-Box“-Tests), um (Sicherheits-)Schwachstellen in einer laufenden Anwendung zu finden.
    • Verhindern Sie, dass unsignierte Images in einer Produktionsumgebung ausgeführt werden.
    • Beschleunigen Sie die Beseitigung von Sicherheitsschwachstellen in Ihrer Lieferkette.
    • Setzen Sie Richtlinien konsistent durch. Sicherheitsrichtlinien, Protokollaudits, Compliance-Richtlinien und Netzwerkrichtlinien müssen festgelegt, angewendet und getestet werden.
      • Sicherheits- und Zugriffsrichtlinien werden konsistent durchgesetzt.
      • Das System verhindert das Ausführen von Code, der nicht aus der sicheren Softwarelieferkette stammt.
      • Das Schreiben von (Rego-)Richtlinien ist fehleranfällig. Erstellen und testen Sie diese Richtlinien daher sorgfältig.
      • Testen Sie integrierte Richtlinien, um Konflikte zu vermeiden.

    Ergebnisse

    • Die Isolation von Workloads ist garantiert und verhindert einen negativen Einfluss oder Zugriff durch benachbarte Workloads.
    • Die Kommunikation zwischen Services über das Netzwerk ist sicher und zuverlässig.
    • CVEs von Anwendungen können von Entwicklern schnell eingesehen werden.
    • Liefern Sie eine neue, aktuelle und sichere Plattform für das Hosting von Workloads.


Die Bedeutung einer sicheren Softwarelieferkette

Durch immer häufigere Angriffe auf die Lieferkette ist die Softwareentwicklung in den letzten Jahren verstärkt in den Fokus geraten. In der kürzlich verabschiedeten Verordnung zur Stärkung der nationalen Cybersecurity werden Best Practices für die Sicherheit innerhalb der Lieferkette genannt. Anlass waren Kompromittierungen in der Lieferkette, die Angreifer ausnutzten, um sich Zugriff auf den Entwicklungsprozess zu verschaffen und Malware in den Quellcode einzufügen. Diese Malware konnte sich anschließend über die veröffentlichte Software verbreiten, sodass Angreifer Daten von Unternehmen stehlen konnten, die diese Anwendung nutzten. Die Verordnung soll Unternehmen in den USA als Anstoß dienen, sicherere Softwarelieferketten zu entwickeln und Kompromittierungen zu vermeiden, die zu einem Ausfall kritischer Infrastrukturen führen können.

Indem Sie Schwachstellen auf dem Weg in die Produktion erkennen und beheben, können Sie die Risiken von geschäftlichen Investitionen mindern, innerhalb kurzer Zeit sicherere Software für Anwender bereitstellen und Reibungspunkte für Entwickler, die Code bereitstellen, beseitigen. Tanzu bietet Lösungen für sichere Tools mit operatordefinierten Guardrails, die Entwickler gerne nutzen werden. Tanzu Labs-Experten etablieren gemeinsam mit Ihnen Prozesse für Ihr Unternehmen, die die Zusammenarbeit zwischen Entwicklungs- und Sicherheitsteams stärken. Wir verbessern Ihre DevSecOps-Verfahren mit unseren bewährten Lösungen und unterstützen Sie dabei, Ihren Anwendungsentwicklungsprozess dank einer sicheren Plattform zu schützen, auf der Sie Innovationen mit Mehrwert für Ihr Unternehmen entwickeln können.