Getty Images/iStockphoto
Open-Source-Komponenten in der Softwarelieferkette verwalten
Angriffe auf Softwarelieferketten häufen sich. Es gibt keine Einzelmaßnahme, die Angriffe verhindert, aber die Umsetzung von Sicherheitsvorkehrungen verringert das Risiko.
Open-Source-Komponenten sind ein wesentlicher Bestandteil der heutigen Softwareanwendungen, aber sie können einen entscheidenden Preis haben: die Sicherheit.
Moderne Softwareanwendungen bestehen aus Komponenten aus vielen verschiedenen Quellen, einschließlich Open-Source-Software (OSS). Das kann dem Lebenszyklus der Softwareentwicklung Vorteile bringen, beispielsweise eine höhere Entwicklungsgeschwindigkeit, geringere Entwicklungskosten und eine bessere Skalierbarkeit.
Jedoch vergrößert die Verwendung von Komponenten aus verschiedenen Quellen auch die Angriffsfläche einer Anwendung und erhöht die Anzahl der Einstiegspunkte, die Angreifer nutzen können, um Zugriff auf Anwendungen und sensible Daten zu erhalten. Indem DevOps-Teams proaktive Maßnahmen zur Eindämmung von Angriffen ergreifen, gewährleisten sie die Sicherheit ihrer Softwarelieferkette.
Was ist die Softwarelieferkette?
Eine Softwarelieferkette umfasst alle Personen, Prozesse, Tools, Codebibliotheken und die zugrunde liegenden IT-Infrastrukturen, die zur Erstellung einer Softwareanwendung verwendet werden. Sie umfasst alle Aspekte des Lebenszyklus der Softwareentwicklung (Software Development Life Cycle, SDLC), wie zum Beispiel Codeerstellung, Tests, Bereitstellung und Wartung nach der Einführung.
Viele der Komponenten, aus denen die Softwarelieferkette eines Projekts besteht, sind Open Source. So veröffentlichte beispielsweise das Design-Automatisierungsunternehmen Synopsys im Februar 2023 einen Bericht, in dem die Ergebnisse von mehr als 1.700 Audits kommerzieller Codebasen untersucht wurden. Der Bericht ergab, dass mindestens eine Open-Source-Komponente in 96 Prozent der Anwendungen enthalten ist. Fast alle kommerziellen Anwendungen enthalten eine Open-Source-Komponente.
Ein Angriff auf die Softwarelieferkette liegt vor, wenn Angreifer in die Software eines Anbieters eindringen, um bösartigen Code einzuschleusen, der die Clients infiziert, die diese Software verwenden. Die Infiltration kann an jedem Punkt des Lebenszyklus erfolgen und viele verheerende Cyberangriffe nutzen die Softwarelieferkette. Der SolarWinds-Angriff und die Log4j-Sicherheitslücke gehören zu den jüngsten Angriffen auf die Lieferkette.
Die grundlegende Sicherheit der Softwarelieferkette erfordert eine Überprüfung der anfälligen Bereiche:
- Software-Code-Bibliotheken: Bibliotheken sind vorgefertigte Quellcode-Basen, die bestimmte Funktionen ausführen. Sie werden entweder von einem kommerziellen Drittanbieter bezogen oder sind Open Source. Um sich Zugang zu den Anwendungen zu verschaffen, die sie verwenden, schleusen Angreifer Hintertüren in Bibliotheken ein.
- Softwareentwicklungswerkzeuge: Zu den Softwareentwicklungs-Tools gehören integrierte Entwicklungsumgebungen, die Entwickler zum Schreiben von Programmcode verwenden: Beispielsweise Visual Studio und Eclipse, sowie Test-Frameworks wie JUnit und Selenium.
- Werkzeuge zur Systemerstellung: Diese Tools automatisieren verschiedene Aufgaben wie die Kompilierung von Code, die Paketierung und die Bereitstellung von Anwendungen. Sicherheitslücken in diesen Tools können es Angreifern ermöglichen, bösartigen Code einzuschleusen, wenn sie sie benutzen.
- IT-Infrastruktur: DevOps-Teams müssen die IT-Infrastruktur sichern, auf der die Anwendung ausgeführt wird – ob in der Cloud, vor Ort oder einem hybriden System – um sie vor unberechtigtem Zugriff zu schützen.
Warum sind Open-Source-Komponenten für die Entwicklung von Softwareanwendungen so wichtig?
Open-Source-Komponenten werden für Softwareentwicklungsprojekte immer beliebter. IT-Anbieter nutzen und unterstützen die Erstellung von Open-Source-Projekten wie die folgenden:
- Amazon: Die beliebtesten Tools von AWS sind Open-Source-Projekte, wie EKS Distro, Bottlerocket, OpenSearch und FreeRTOS.
- Google: Google ist der ursprüngliche Entwickler von Kubernetes, dem Open-Source-Automatisierungs-Tool für containerisierte Anwendungen. Google hat auch das Android OS entwickelt, ein quelloffenes mobiles Betriebssystem.
- Apache Software Foundation: Diese Foundation ist für die Verwaltung von mehr als 350 Open-Source-Projekten verantwortlich, darunter der Apache-Webserver.
- Cloud Native Computing Foundation: Diese Organisation konzentriert sich auf die Entwicklung von Cloud-nativen Anwendungen und Ressourcen. Derzeit verwaltet sie mehr als 150 Open-Source-Projekte.
- Docker: Dieses beliebte Tool zum Verpacken und Bereitstellen von Containern ist ein Open-Source-Projekt.
Open-Source-Softwarekomponenten sind nicht nur die Grundlage für wichtige Anwendungen, sondern bieten auch zahlreiche Vorteile. Selbst bei der Entwicklung kommerzieller Anwendungen können sie kostenlos verwendet werden. Außerdem sind Open-Source-Softwarekomponenten anpassbar, da der Code offen ist: Entwickler können die Funktionalität erweitern, um weitere Funktionen hinzuzufügen.
Open-Source-Software kann die Entwicklungszeit verkürzen. Die Open-Source-Softwarebibliothek enthält Komponenten für fast alle Funktionen, die Benutzer in ihre Anwendung einbauen möchten. Dadurch haben die Entwickler mehr Zeit für andere Bereiche der Entwicklung. Außerdem werden Open-Source-Projekte oft nach einem bestimmten Standard entwickelt, so dass verschiedene Open-Source-Komponenten problemlos zusammenarbeiten.
Abschließend können Open-Source-Projekte eine solide Codequalität und Sicherheit aufweisen. Sie werden oft von vielen Mitwirkenden entwickelt, was ein ausgiebiges Testen der Softwarekomponente gewährleistet. Jeder Entwickler überprüfen außerdem Open-Source-Komponenten auf Sicherheitsschwachstellen, was sie sicherer macht als proprietären Code, den Entwickler nicht auf Sicherheitsprobleme überprüfen können.
Wie können Angreifer Open-Source-Software ausnutzen, um Softwareanwendungen zu gefährden?
Trotz der zahlreichen Vorteile können Angreifer immer noch in Open-Source-Komponenten eindringen. Die häufigste Angriffsmethode besteht darin, Open-Source-Aspekte der Softwarelieferkette für böswillige Zwecke zu missbrauchen, was auf unterschiedliche Weise geschehen kann:
- Um Open-Source-Komponenten zu identifizieren und damit verbundene Sicherheitsschwachstellen auszunutzen, scannen Angreifer kommerzielle Anwendungen.
- Angreifer starten direkte Angriffe auf Teammitglieder, indem sie deren Zugangsdaten für Build-/Testserver oder Code-Repositories wie GitHub stehlen. Dann können Angreifer Quellcode stehlen oder bösartigen Code in Projektdateien einschleusen.
- Angreifer veröffentlichen bösartige Quellcode-Bibliotheken, die Namen tragen, die beliebten Open-Source-Softwareprojekten ähneln. Unwissende Entwickler könnten diese Pakete einbinden und ihre Projekte gefährden. Dieser Angriff wird Typosquatting genannt, wie bei der PyPI Typosquatting-Kampagne.
- Angreifer geben sich als legitime Entwickler aus und bringen Code mit bösartigen Hintertüren in bekannte Codebasen ein. Entwickler, die diese bösartigen Pakete verwenden, führen ungewollt Sicherheitslücken in ihre Pakete ein.
- Open-Source-Pakete erfordern Konfigurationen, wenn sie in Softwareprojekte eingebunden werden. Konfigurationsfehler oder Standardeinstellungen führen zu Sicherheitsschwachstellen.
- Open-Source-Komponenten können Zero-Day-Schwachstellen aufweisen: Das sind ungepatchte Sicherheitslücken, die Hacker ausnutzen, um eine Anwendung zu kompromittieren.
Abschwächen der Risiken von Open-Source-Komponenten
Um die Sicherheit von Open-Source-Komponenten in Softwarelieferketten zu verwalten, sollten DevOps-Teams die folgenden Best Practices berücksichtigen:
Sichere Kodierungspraktiken
Befolgen Sie bei der Entwicklung von Anwendungen sichere Kodierungspraktiken und fordern Sie die Softwareanbiete auf, dies ebenfalls zu tun. Zu diesen Kodierungspraktiken gehören:
- Validieren Sie Projektcodedateien mit Prüfsummen und digitalen Zertifikaten, um ihre Integrität zu überprüfen, bevor Sie sie in einer Anwendung verwenden.
- Erstellen Sie eine Softwarestückliste, um alle für die Erstellung einer Anwendung verwendeten Softwarekomponenten zu identifizieren.
- Verwenden Sie HTTPS/SSL zur Verschlüsselung des gesamten Datenverkehrs zwischen den Geräten der Entwickler und der Codebasis oder beim Austausch von Softwarekomponenten mit externen Anbietern.
- Vermeiden Sie die Verwendung schwacher Verschlüsselungsalgorithmen im Code und verwenden Sie keine Open-Source-Komponenten, die solche Bibliotheken nutzen.
- Vermeiden Sie das Hochladen von fest kodierten Passwörtern oder Zugangsschlüsseln in Code-Repositories.
Sichere Umgebungspraktiken
Die Teams stellen sicher, dass die Umgebung der Softwarelieferkette während der gesamten Entwicklung sicher ist. Zu den Best Practices gehören:
- Wenden Sie das Prinzip der minimalen Rechtevergabe zum Schutz aller Ressourcen in der gesamten Softwarelieferkette an: Code-Repositories, Entwicklungs-/Testserver und Vertriebsumgebungen).
- Verwenden Sie eine mehrstufige Authentifizierung, um den Zugriff auf die Entwicklungsumgebung zu beschränken.
- Stellen Sie sicher, dass alle Open-Source-Komponenten und andere Softwareabhängigkeiten auf dem neuesten Stand sind.
- Laden Sie Open-Source-Komponenten nur von vertrauenswürdigen Quellen herunter, zum Beispiel Docker Hub für den Austausch von Container-Images.
- Verwenden sie automatisierte Tools für die Bereitstellung von Anwendungen, um Angreifern die Möglichkeit zu nehmen, bösartigen Code einzuschleusen.
- Führen Sie regelmäßige Sicherheitsprüfungen bei Erstanbietern durch, um sicherzustellen, dass ihre Softwarekomponenten kein Sicherheitsrisiko darstellen.
- Isolieren Sie Entwicklungsumgebungen. Verwenden Sie beispielsweise für jede SDLC-Phase eine eigene Umgebung in einem separaten Netzwerksegment.
- Verwenden Sie Sicherheits-Tools wie SIEM-Systeme (Security Information and Event Management), Intrusion-Detection-Systeme (IDS) und Intrusion-Prevention-Systeme (IPS), um verdächtige Aktivitäten zu erkennen.
- Erstellen Sie einen Notfallplan, um im Falle eines Angriffs auf die Softwarelieferketten sofort reagieren zu können.