Gerade in Zeiten der Covid-Pandemie wurde und wird immer wieder über die Wichtigkeit funktionierender Lieferketten gesprochen und welche weitreichenden Folgen mit einer unterbrochenen Lieferkette verbunden sind. Dieser Beitrag befasst sich ebenfalls mit Lieferketten, jedoch bezogen auf die Softwareentwicklung, und wie deren Rolle in Bezug auf die IT-Sicherheit regelmäßig unterschätzt wird.
Der Inhalt im Überblick
Abhängigkeiten in moderner Softwareentwicklung
Es ist in der modernen Softwareentwicklung (spätestens seit dem Siegeszug großer Frameworks in der Webentwicklung – siehe exemplarisch Angular oder React) zur Normalität geworden, tausende Programmzeilen in den Programmcode einer neuen Anwendung zu importieren, bevor auch nur eine Zeile Business-Logik implementiert worden ist. Diese importierten Programmzeilen nennt man in der Softwareentwicklung Abhängigkeiten (engl. Dependencies) und sie stellen einen Teil der Lieferkette (engl. Supply-Chain) des Softwareentwicklungsprozesses dar. Nicht selten haben diese Abhängigkeiten selbst wiederum eine ganze Reihe von Abhängigkeiten, wodurch häufig sogar die Entwickler keine gesamte, konkrete Auflistung von Abhängigkeiten in der Software vor Augen haben.
Angriff durch Übernahme weniger Benutzeraccounts
Im Gegensatz zu häufig komplizierten Zero-Day-Schwachstellen ist ein Einschleusen von schadhaftem Quellcode in die Lieferkette einer Software manchmal deutlich einfacher. Da die Abhängigkeiten in aller Regel von öffentlichen Verzeichnissen verteilt werden, reicht es den Benutzeraccount zu übernehmen, der für die Verwaltung der Software auf dem jeweiligen Verzeichnis berechtigt ist.
Dies kann auch schon dadurch erreicht werden, dass der Verwalter eine E-Mail angegeben hat, deren Domain ausgelaufen ist, weil das Softwarepaket im verteilenden Portal nicht mehr existiert und vom Angreifer mit selben Namen neu erstellt wird. Eine weitere Angriffsmöglichkeit ist, falls ein internes Softwarepaket aus einer internen Ressource geladen werden soll, dass der Angreifer ein gleichnamiges Softwarepaket mit einer höheren Versionsnummer in einem öffentlichen Verzeichnis zur Verfügung stellt. Die Werkzeuge zum Laden und Einbinden der Abhängigkeiten (z.B. npm oder pip) bevorzugen hierbei dann häufig die öffentliche Variante, wenn diese eine höhere Versionsnummer besitzt. Zum Finden von Softwarepaketen, die aus den oben genannten Gründen übernommen werden können, gibt es mittlerweile frei zugängliche Werkzeuge, mit denen Angreifern die Möglichkeit gegeben wurde, bekannte Plattformen permanent nach solchen Softwarepaketen durchsuchen zu können.
Angriff durch Programmierfehler
Nicht immer muss ein Paket vollständig übernommen werden, um angegriffen werden zu können. Schwachstellen wie die in der beliebten Softwarebibliothek Log4j (Log4Shell), die zum Schreiben von Protokollen genutzt wird, oder wie die in dem sehr beliebten Spring-Framework für Webentwicklung (Spring4Shell), zeigen beeindruckend wie weitreichend die Konsequenzen von kritischen Sicherheitslücken in Softwarepaketen sein können, wenn diese häufig in Lieferketten genutzt werden
Weitreichende Konsequenzen und hoher Patch-Aufwand
Kritische Sicherheitslücken in weitverbreiteten Abhängigkeiten sind besonders dann ein großes Problem, wenn den Anwendern einer Software gar nicht bewusst ist, dass die Software, die sie täglich nutzen, von einer betroffenen Komponente abhängig ist. Dieser Umstand erklärt auch, warum der Aufruhr bei diesen Schwachstellen besonders groß ist, da zunächst für jede Software die Frage geklärt werden muss, ob sie die Komponente nicht eventuell doch nutzt. Diese Frage ist jedoch häufig nicht leicht zu beantworten. Somt ist der Aufwand zur bloßen Identifizierung betroffener Software enorm hoch und die Dauer, bis jede Software in einem Unternehmen geprüft worden ist, sehr lang.
Software-Lieferketten bei Risikobewertung stärker berücksichtigen
Trotz der potenziell weitreichenden Folgen und Schäden wird der Risikobewertung von Software-Lieferketten häufig nicht die Bedeutsamkeit beigemessen, die dem möglichen Schaden gerecht würde. Die jüngste Vergangenheit hat mit den Sicherheitslücken Log4Shell und Spring4Shell dabei eindrücklich demonstriert, welche Konsequenzen dieses Ungleichgewicht mit sich bringen kann. Entwickler, IT-Sicherheitsbeauftragte und Unternehmen, die die Entwicklung von Software in Auftrag geben, sollten bei der Erstellung und Bewertung von Software immer auch die Lieferkette (also die Reihe der Abhängigkeiten) beachten. Insbesondere in kritischen Bereichen sollten im besten Fall alle genutzten Komponenten bekannt sein und regelmäßig kontrolliert werden, ob und wie gut diese gepflegt sind.