Software Sicherheitslücken und Schwachstellen

Das Verständnis von Software-Schwachstellen ist für den Umgang mit aktuellen Bedrohungen von grundlegender Bedeutung. Unabhängig davon, ob Ihr Unternehmen auf Software von Drittanbietern, von Ihren eigenen Entwicklern oder auf eine Kombination aus beidem angewiesen ist, ist die Fähigkeit, Software-Schwachstellen zu erkennen und mit ihnen umzugehen, von entscheidender Bedeutung, wenn es darum geht, die Software sicher zu halten und Sicherheitslücken so früh wie möglich zu schließen.

Dieser Artikel erklärt, was Software-Schwachstellen sind, wie sie funktionieren und wie man sich am besten davor schützen kann.

Was ist eine Software-Schwachstelle?

Eine Software-Schwachstelle (Sicherheitslücke bzw. Vulnerability) ist ein Fehler in einer Software, der es einem Angreifer ermöglichen könnte, die Kontrolle über ein System zu übernehmen.

Im Folgenden wird näher erläutert, welche Fehler zu Software-Schwachstellen führen können: Fehler in der Konzeption der Software, Probleme mit dem Quellcode der Software, schlecht verwaltete Daten oder Zugriffskontrollen innerhalb der Anwendung sowie jede andere Form von Fehlern, die ein Angreifer potenziell ausnutzen könnte.

Was kann ein Angreifer mit einer Software-Schwachstelle anstellen?

Ein Angreifer kann eine Software-Schwachstelle ausnutzen, um vertrauliche Daten zu stehlen oder zu manipulieren, ein System in ein Botnet einzubinden, eine Backdoor zu installieren oder andere Arten von Malware einzuschleusen. Darüber hinaus kann der Angreifer, nachdem er in einen Netzwerkhost eingedrungen ist, diesen Host verwenden, um in andere Hosts im selben Netzwerk einzudringen.

Die spezifischen Exploits, die ein Angreifer ausführen kann, variieren von einer Sicherheitslücke zur anderen. Nicht alle Schwachstellen ermöglichen es Angreifern, die gleiche Art von Schaden anzurichten, und nicht alle Schwachstellen stellen das gleiche Risiko dar.

Alle Schwachstellen stellen jedoch zumindest ein gewisses Risiko für die von ihnen betroffenen Anwendungen, für die Umgebungen, in denen diese Anwendungen gehostet werden, und für alle mit den Anwendungen verbundenen Ressourcen dar.

Wie werden Sicherheitslücken ausgenutzt?

Um eine Sicherheitslücke ausnutzen zu können, muss ein Angreifer zunächst die Schwachstelle finden. Dies kann auf verschiedene Arten passieren. Eine gängige Methode zum Aufspüren von Schwachstellen ist das Ausführen von Port-Scannern wie dem Open-Source-Tool nmap, das Informationen darüber sammeln kann, welche Dienste auf einem Server oder Computer laufen und sogar, welches Betriebssystem installiert ist. Anhand dieser Informationen kann der Angreifer feststellen, ob die verwendeten Dienste oder das Betriebssystem bekannte Sicherheitslücken aufweisen.

Anschließend muss der Angreifer eine Methode entwickeln, um die Schwachstelle auszunutzen. Auch hier sind die Methoden sehr unterschiedlich, können aber Techniken wie das Einschleusen von Schadcode in eine Anwendung oder das Umgehen von Zugriffskontrollen beinhalten. Einige Schwachstellen können aus der Ferne ausgenutzt werden, d.h. der Angreifer kann die Schwachstelle über das Netzwerk ausnutzen. Andere wiederum erfordern direkten physischen Zugriff auf die Infrastruktur, in der sich die anfällige Software befindet.

Wird die Schwachstelle erfolgreich ausgenutzt, ist der Angreifer in der Lage, bösartige Aktionen innerhalb der angegriffenen Anwendung oder des Host-Systems durchzuführen. Abhängig von der Art der Schwachstelle können diese Aktionen Aktivitäten wie das Ausspähen sensibler Daten, das Ausführen bösartiger Befehle, das Einschleusen von Malware oder die Störung kritischer Dienste umfassen, um dem Unternehmen Probleme zu bereiten.

Wie entstehen Software-Schwachstellen?

Wie bereits erwähnt, gibt es viele mögliche Ursachen für Sicherheitslücken in Software. Einige Anwendungen sind aufgrund allgemeiner Designfehler anfällig, z. B. aufgrund einer Architektur, bei der sensible Daten über unsichere Netzwerke übertragen werden. In anderen Fällen liegen die Schwachstellen in spezifischen Programmierfehlern, die zu Schwachstellen wie den folgenden führen:

  • Buffer Overflow (dt. Pufferüberlauf): Diese Schwachstellen ermöglichen es jemandem, mehr Daten in ein Eingabefeld einzugeben, als das Feld eigentlich zulassen sollte. Ein Angreifer kann dies ausnutzen, indem er bösartige Befehle in den Überlauf des Datenfeldes einfügt, die dann ausgeführt werden.
  • SQL-Injection: Dies könnte einem Angreifer ermöglichen, bösartige Befehle in die Datenbank einer Webanwendung einzuschleusen. Der Angreifer kann dies tun, indem er speziell gestaltete Structured Query Language-Befehle entweder in ein Datenfeld eines Formulars oder in die URL der Webanwendung eingibt.  Ist der Angriff erfolgreich, kann der unbefugte und nicht authentifizierte Angreifer Daten aus der Datenbank auslesen oder manipulieren.
  • Third-party libraries: Viele Programmierer verwenden Code-Bibliotheken von Drittanbietern, anstatt, die gesamte Software von Grund auf neu zu schreiben. Das kann eine echte Zeitersparnis sein, ist aber auch gefährlich, wenn die Bibliothek Schwachstellen aufweist. Vor der Verwendung solcher externer Bibliotheken sollten Entwickler sicherstellen, dass diese keine Sicherheitslücken aufweisen.
  • Schnittstellen: Eine API, über die Softwareprogramme miteinander kommunizieren können, kann auch eine Software-Schwachstelle enthalten. Viele APIs sind nicht durch strenge Sicherheitsrichtlinien geschützt, was es einem nicht authentifizierten Angreifer ermöglichen kann, in ein System einzudringen.

Die Berücksichtigung von Best Practices bei der Entwicklung von Anwendungen und beim Schreiben von Code sind effektive Methoden, um das Risiko von Sicherheitslücken zu reduzieren. Tools wie Software Composition Analysis-Scanner können ebenfalls dazu beitragen, einige Schwachstellen zu identifizieren, die zu Sicherheitslücken führen. Darüber hinaus sind Praktiken wie die “Shift Left” Security, die Entwicklern dabei helfen, der Sicherheit schon früh im Software Delivery Lifecycle (SDLC) Priorität einzuräumen, hilfreich, um das Risiko von Schwachstellen im Quellcode zu minimieren.

Aufgrund der Komplexität der meisten Anwendungen ist es jedoch praktisch unmöglich, zu garantieren, dass in einer Anwendung keine Probleme vorhanden sind, die Sicherheitslücken mit sich bringen. Sie sollten daher niemals davon ausgehen, dass eine Anwendung frei von Sicherheitslücken ist. Sie sollten Maßnahmen ergreifen, um Schwachstellen zu erkennen und darauf zu reagieren, unabhängig davon, wie sehr Sie davon überzeugt sind, dass Ihre Software sicher entwickelt wurde.

Software-Schwachstellen und Open-Source-Software

Software-Schwachstellen können sowohl proprietäre Software (d. h. Software, deren Quellcode nur dem Unternehmen, das sie entwickelt, zugänglich ist) als auch Open-Source-Software (deren Quellcode öffentlich zugänglich ist) betreffen.

Schwachstellen in Open-Source-Software stellen jedoch in gewisser Hinsicht ein zusätzliches Risiko dar. Ein Hauptgrund dafür ist, dass es für Angreifer in manchen Fällen einfacher ist, Schwachstellen in Open-Source-Software zu finden und auszunutzen, da der Quellcode für jedermann zugänglich ist. Proprietäre Software ist diesem Risiko nicht ausgesetzt, da Angreifer in den meisten Fällen keinen Zugang zum Quellcode haben (auch wenn sie andere Techniken verwenden können, um Schwachstellen zu identifizieren).

Der zweite Hauptgrund ist die Tatsache, dass Open-Source-Software in der Regel frei wiederverwendet werden kann und sich Unternehmen regelmäßig auf Open Source verlassen. Sie können Open-Source-Anwendungen in großem Umfang einsetzen und sogar Teile einer Open-Source-Codebasis in ihre eigenen Anwendungen kopieren oder Open-Source-Bibliotheken als Abhängigkeiten in ihre Anwendungen einbinden. Wenn Sie dies tun, gehen Sie das Risiko ein, dass sich Schwachstellen im Open-Source-Code auf Ihr Unternehmen auswirken.

Was nicht heißt, dass man Open-Source-Software nicht verwenden sollte, denn sie bietet in vielen Fällen eine ganze Reihe von Vorteilen. Aber es bedeutet, dass es wichtig ist zu wissen, auf welchen Open-Source-Code Ihr Unternehmen zurückgreift und ob dieser Code von Schwachstellen betroffen ist.

Wie man mit Software-Schwachstellen umgeht: Vulnerability Scanning & Co.

Der beste Weg, mit Software-Schwachstellen umzugehen, besteht darin, sie von vornherein zu vermeiden.  Softwareentwickler müssen sich mit sicheren Coding-Praktiken vertraut machen, und automatische Sicherheitstests müssen in den gesamten Softwareentwicklungsprozess integriert werden.

Aber auch hier gilt: Es kann nicht garantiert werden, dass der Code, auf den Ihr Unternehmen baut, keine Sicherheitslücken enthält. Aus diesem Grund ist es wichtig, Schwachstellen-Scans einzusetzen. Beim Vulnerability Scanning wird der Quellcode und/oder die Binärdateien Ihrer Anwendung automatisch auf bekannte Schwachstellen überprüft. Wenn der Scanner eine Anwendungskomponente entdeckt, die bekanntermaßen anfällig ist, alarmiert er die Entwickler, damit sie das Problem beheben können.

Schwachstellen-Scanner erkennen nicht immer alle potenziellen Sicherheitslücken, insbesondere können sie keine Vulnerabilities erkennen, die noch nicht öffentlich gemeldet oder offengelegt wurden. Sie schützen jedoch vor der überwiegenden Mehrheit der Schwachstellen.

Nachdem Sie Schwachstellen identifiziert haben, sollten Sie den Schweregrad der einzelnen Sicherheitslücken bewerten. Je nachdem, wie groß der Schaden ist, den eine Schwachstelle anrichten kann, und wie leicht sie ausgenutzt werden kann, kann sie mehr oder weniger ernst sein als andere Schwachstellen.

Entwickeln und implementieren Sie dann einen Plan zur Behebung der Schwachstelle. Der Prozess zur Behebung der Sicherheitslücke hängt von der Art der Schwachstelle ab, aber in vielen Fällen beinhaltet die Behebung der Lücke entweder die Aktualisierung des Quellcodes, die Implementierung eines Patches oder ein Update auf eine neuere Version der anfälligen Komponente. Wenn keine Lösung verfügbar ist und Sie diese nicht selbst implementieren können, können Sie alternative Maßnahmen ergreifen, um zu verhindern, dass die Schwachstelle ausgenutzt wird.