In this article
Software-Abhängigkeiten: Abhängigkeiten im großen Maßstab verwalten
Was sind Software-Abhängigkeiten?
Eine Software-Abhängigkeit ist eine Codebibliothek oder ein Paket, das in einer neuen Software wiederverwendet wird. Beispielsweise kann ein Machine-Learning-Projekt eine Python-Bibliothek zum Erstellen von Modellen verwenden.
Software-Abhängigkeiten ermöglichen es Entwicklerinnen und Entwicklern, Software schneller bereitzustellen, indem sie auf bereits geleisteter Arbeit aufbauen. Sie haben die Anwendungsentwicklung in den vergangenen Jahrzehnten revolutioniert, bringen aber auch häufig übersehene Risiken mit sich.
Welche Arten von Abhängigkeiten gibt es?
Software-Abhängigkeiten lassen sich in zwei Arten unterteilen:
Direkte: Bibliotheken oder Pakete, die Ihr Code direkt aufruft.
Transitive: Bibliotheken oder Pakete, die von Ihren Abhängigkeiten aufgerufen werden. Es handelt sich um Abhängigkeiten Ihrer Abhängigkeiten.
Beide Arten von Abhängigkeiten müssen sorgfältig verwaltet werden, um die damit verbundenen Risiken zu kontrollieren. Transitive oder indirekte Abhängigkeiten erfordern besondere Aufmerksamkeit, da nicht sofort ersichtlich ist, dass sie in einer Anwendung zum Einsatz kommen. Abhängigkeiten sind in anderen Abhängigkeiten verschachtelt und bilden so einen komplexen Abhängigkeitsbaum. Dadurch kann leicht übersehen werden, dass Ihre Anwendung eine Bibliothek mit Schwachstellen verwendet.
Snyk-Bericht
Status der Open-Source-Sicherheit 2022
Ein Blick auf die Komplexität und Risiken der Software-Lieferkette – in Zusammenarbeit mit The Linux Foundation.
Warum die Verwaltung von Abhängigkeiten unverzichtbar ist
In den Anfängen der Software-Abhängigkeiten war das Herunterladen und Installieren einer benötigten Bibliothek mühsam. Die Wiederverwendung kleinerer Pakete war daher unpraktisch. In den vergangenen zwei Jahrzehnten haben Dependency-Manager wie Node Package Manager (NPM) für Node.js und Maven für Java die Arbeit mit kleineren Paketen ermöglicht – sogar mit solchen, die nur aus wenigen Codezeilen bestehen. Seitdem ist die Zahl der verfügbaren Pakete für Entwicklerinnen und Entwickler sprunghaft gestiegen. Software-Abhängigkeiten sind heute ein zentraler Bestandteil moderner Anwendungen.
Mit vorgefertigten Software-Abhängigkeiten können Entwicklerinnen und Entwickler Software schneller und in kürzeren Release-Zyklen bereitstellen. Abhängigkeiten bringen jedoch oft übersehene Risiken mit sich. Wenn Sie externe Software als Abhängigkeit einbinden, verlassen Sie sich darauf, dass deren Entwicklerinnen und Entwickler den Code korrekt schreiben, testen und warten.
Zusätzlich zu den Sicherheitslücken, die in diesen Programmabhängigkeiten vorhanden sein können, können sie auch veralten. Das beeinträchtigt die Qualität der Software, die sie aufruft, oder kann sogar zu deren Ausfall führen. Diese Abhängigkeiten können Fehler oder Sicherheitsprobleme enthalten, die sich auf die Leistung und das Risikoprofil der Anwendung auswirken. Außerdem können Lizenzbedingungen gelten, deren Verletzung rechtliche Folgen oder Haftungsrisiken nach sich ziehen kann.
Vor diesem Hintergrund ist es entscheidend, Abhängigkeiten zu verwalten, um die damit verbundenen Risiken zu minimieren. Dennoch widmen viele Unternehmen dem Dependency-Management nur wenig Aufmerksamkeit. Solange die Software reibungslos läuft, sehen sie keinen Grund, etwas zu reparieren, das nicht kaputt ist. Hinzu kommt, dass die Verwaltung von Abhängigkeiten schwierig ist. Transitive Abhängigkeiten können mehrfach miteinander verknüpft sein oder sogar zyklische Abhängigkeiten aufweisen. Die Aktualisierung einer Abhängigkeit kann die gesamte Kette beschädigen und Sie in die Dependency-Hölle stürzen.
Warum Sie Open-Source-Abhängigkeiten verwalten sollten
In den ersten Jahren der Software-Abhängigkeiten kauften Unternehmen Code-Pakete von bekannten und renommierten Anbietern. Heute handelt es sich bei den meisten Abhängigkeiten um Open-Source-Bibliotheken von Drittanbietern, was das Dependency-Management komplexer macht. Die Open-Source-Mitwirkenden, die den in produktiver Software verwendeten Code schreiben und warten, gehören oft nicht zu Ihrem Unternehmen.
Als Open-Source-Bibliotheken aufkamen, kopierten und fügten Entwicklerinnen und Entwickler häufig Codezeilen direkt ein. Dadurch war es unmöglich, Komponenten nachzuverfolgen und zu aktualisieren. Moderne Methoden umfassen die Verwendung eines Paketmanagers zur Verwaltung von Open-Source-Komponenten oder das Einbinden von Open-Source-Bibliotheken in interne Module. Diese Ansätze erleichtern die Nutzung von Open-Source-Code in Anwendungen. Trotz der explosionsartigen Zunahme an Open-Source-Komponenten wissen Entwicklerinnen und Entwickler oft nur wenig über die Schwachstellen, die sie mit sich bringen können.
Zumindest teilweise aufgrund der enormen Zunahme der erstellten Code-Menge entdecken Sicherheitsexpertinnen und -experten ständig Schwachstellen in Open-Source-Komponenten. Wenn eine böswillige Partei eine solche Schwachstelle entdeckt, kann sie damit Angriffe starten (Equifax-Datenpanne) – insbesondere bei sehr beliebten Paketen (Log4Shell). Darüber hinaus legen Open-Source-Lizenzen Nutzungsbedingungen fest. Verstöße können hohe Geldstrafen und einen Reputationsschaden nach sich ziehen.
Aus diesen Gründen ist es unerlässlich, ein System zur Verwaltung von Open-Source-Abhängigkeiten über ihren gesamten Lebenszyklus hinweg einzurichten. Dazu gehört auch, Richtlinien für den Umgang von Entwicklerinnen und Entwicklern mit Open-Source-Komponenten zu erstellen und durchzusetzen.
5 Herausforderungen beim Dependency-Management
Wie wir gesehen haben, ermöglichen Open-Source-Abhängigkeiten eine schnellere Anwendungsentwicklung, setzen Unternehmen aber auch Sicherheits- und Rechtsrisiken aus. Die Verwaltung dieser Abhängigkeiten erfordert Sorgfalt, insbesondere bei transitiven Abhängigkeiten, da sie zu verschachtelten Abhängigkeitsebenen führen können. Ein Ansatz zur Verwaltung und Eindämmung der Risiken von Open-Source-Abhängigkeiten ist die Software Composition Analysis.
Software Composition Analysis (SCA) ist ein Ansatz für Sicherheitstests von Anwendungen, mit dem Softwarekomponenten nachverfolgt und analysiert werden. SCA umfasst sowohl Methoden zur Anwendungssicherheit als auch Tools, die Software überwachen und die als Abhängigkeiten verwendeten Komponenten erfassen. SCA beschränkt sich nicht auf Open-Source-Komponenten. Das Wachstum von Open-Source-Abhängigkeiten hat jedoch in den vergangenen Jahren zu einer Vielzahl von SCA-Tools geführt.
Damit sich die Risiken von Open-Source-Abhängigkeiten erfolgreich verwalten lassen, müssen SCA-Tools einige zentrale Herausforderungen bewältigen:
Transitive Abhängigkeiten können Open-Source-Pakete hinter mehreren Ebenen verbergen. Dadurch ist es schwierig, alle Open-Source-Pakete zu überblicken, die eine Anwendung aufruft. Untersuchungen von Snyk haben ergeben, dass sich die große Mehrheit der Schwachstellen in diesen verborgenen Abhängigkeiten befindet. Entwicklerinnen und Entwickler wissen daher möglicherweise nicht einmal, dass sie Open-Source-Pakete mit Sicherheitslücken verwenden.
Es ist wichtig zu verstehen, wie die einzelnen Ökosysteme mit Abhängigkeiten umgehen. Faktoren wie Lock-Dateien und die Auflösung von Paketen während der Installation wirken sich darauf aus, wie Schwachstellen erkannt werden. SCA-Tools müssen diese Besonderheiten berücksichtigen, um relevante Schwachstellen korrekt zu identifizieren. So lassen sich beispielsweise Dependency-Confusion-Angriffe erkennen und verhindern – eine Methode, mit der erfolgreich auf Daten von Yelp, Tesla, Apple, Microsoft und anderen Unternehmen zugegriffen und diese abgegriffen wurden.
Die Zahl der in Software-Abhängigkeiten entdeckten Schwachstellen kann in die Tausende gehen. SCA-Tools benötigen daher ein System, mit dem Maßnahmen zur Erkennung und Behebung von Schwachstellen priorisiert werden können.
SCA-Tools benötigen eine zuverlässige Quelle, die Schwachstellen rechtzeitig meldet, damit diese abgesichert werden können.
SCA-Tools müssen schnell genug sein, um mit dem Tempo der Entwicklerinnen und Entwickler Schritt zu halten. Andernfalls ignorieren oder umgehen diese möglicherweise Sicherheitsprüfungen.
Wie das Dependency-Management-Tool von Snyk Risiken eindämmt
Traditionelle Sicherheitsansätze konzentrieren sich auf das Ende des Entwicklungsprozesses, statt Sicherheit in DevOps-Workflows zu integrieren. Snyk Open Source macht Entwicklerinnen und Entwickler zu wichtigen Akteuren für die Sicherheitslage ihres Unternehmens, indem es sich sofort in bestehende Workflows und Tools integrieren lässt. Sicherheits- und Betriebsteams verwalten und überwachen den Prozess, während Entwicklerinnen und Entwickler mit Snyk-Tools Entwicklungspipelines direkt in CI/CD-Tools kontinuierlich absichern. Sicherheitsprobleme bereits während der Entwicklung zu beheben, bevor der Code auch nur in die Nähe der Produktion kommt, ist mit Abstand die sicherste und kostengünstigste Option.
Snyk deckt alle Aspekte der Anwendungssicherheit ab. Mit einer Abhängigkeitsbaumansicht lassen sich Abhängigkeiten und darin enthaltene Schwachstellen erkennen. Außerdem werden Abhängigkeiten bei Änderungen automatisch aktualisiert (lesen Sie, wie das mit Java und Python funktioniert). Snyk automatisiert Scans in der IDE, sodass Entwicklerinnen und Entwickler Probleme während der Entwicklung finden, priorisieren und beheben sowie Updates zusammenführen können. Wenn zur Laufzeit anfällige Funktionen aufgerufen werden, werden automatisch Warnmeldungen ausgegeben. Integrationen mit SCMs wie GitHub und GitLab erleichtern die Bereitstellung des Tools in neuen und bestehenden Code-Projekten. Zudem können automatisch PRs mit Korrekturen erstellt werden, wodurch der wertvollen Entwicklungszeit weniger verloren geht.
Mit diesem entwicklerorientierten Sicherheitsansatz können Entwicklerinnen und Entwickler Fehler in Code und Abhängigkeiten in Echtzeit finden und beheben. Schwachstellen werden früher erkannt, wodurch ihre Auswirkungen auf den Entwicklungslebenszyklus geringer ausfallen. Eine umfassende Schwachstellendatenbank enthält sorgfältig kuratierte Beschreibungen. Alle Einträge werden auf ihre Richtigkeit geprüft und getestet. Außerdem erhält jede Schwachstelle einen CVSS-Score und einen Vektor. Die Beschreibungen geben Aufschluss über die Ausnutzbarkeit, Lizenzierung, Sicherheitshistorie und Wartung der markierten Bibliotheken.
Pearson, das weltweit größte Bildungsunternehmen, begann mit dem automatisierten Dependency-Scanning von Snyk, um seine Risikoexposition zu minimieren. Nachdem Entwicklerinnen und Entwickler die Plattform nutzen konnten, wollte das DevSecOps-Team sicherstellen, dass sie auch wussten, wie sie Probleme schnell beheben können.
Die Funktion zur automatisierten Behebung von Snyk priorisiert Schwachstellen und reduziert so den Aufwand, den Entwicklerinnen und Entwickler zu ihrer Behebung betreiben müssen. Dadurch sinkt Pearsons Risikoexposition durch veraltete Abhängigkeiten, neu entdeckte Sicherheitslücken und Lizenzprobleme.
„Es kann etwas überwältigend sein, wenn Teams sich bei Snyk anmelden und Hunderte von Schwachstellen sehen“, … „deshalb empfehlen wir ihnen, sich die Behebungsmaßnahmen statt der einzelnen Probleme anzusehen. 20 bis 30 Schwachstellen lassen sich mit nur einem Upgrade der Abhängigkeit beheben. Das ist für Teams einfacher umzusetzen.“
Scannen Sie Ihre Abhängigkeiten auf Schwachstellen
Finden, priorisieren und beheben Sie Schwachstellen automatisch und kostenlos mit Snyk.
So sichern Sie Ihre Software-Abhängigkeiten
Software-Abhängigkeiten spielen in der modernen Softwareentwicklung eine zentrale Rolle. Sie ermöglichen es Entwicklerinnen und Entwicklern, bereits geschriebenen Code wiederzuverwenden – für eine schnellere Bereitstellung und kürzere Entwicklungszyklen. Ihre Nutzung ist deshalb sprunghaft gestiegen. Sie bringen jedoch Risiken und Schwachstellen mit sich, die Unternehmen häufig unterschätzen.
Open-Source-Abhängigkeiten sind ein besonderer Risikobereich. Die meisten Abhängigkeiten, die moderne Entwicklerinnen und Entwickler nutzen, sind Open Source. Das bedeutet, dass produktive Software darauf angewiesen ist, dass externe Mitwirkende diese Abhängigkeiten schreiben, aktualisieren und warten.
Eine umfassende Überwachung von Abhängigkeiten ist daher entscheidend. Es ist jedoch schwierig, jede von einer Anwendung verwendete Abhängigkeit zu überwachen – insbesondere transitive Abhängigkeiten.
Snyk Open Source ist ein SCA-Tool, das Abhängigkeiten während des gesamten Entwicklungslebenszyklus automatisch erkennt und überwacht. Anders als andere Lösungen verfolgt Snyk einen entwicklerorientierten Ansatz und macht Entwicklerinnen und Entwickler zu aktiven Beteiligten an der Anwendungssicherheit.
Weitere Informationen zu Abhängigkeiten und ihren Auswirkungen auf die Anwendungssicherheit finden Sie in unserem Report The State of Open Source Security.
Vielen Dank fürs Lesen. Bleiben Sie sicher.