Start › Cybersecurity-Wiki › Was ist eine Schwachstelle in Software?

Wiki

Was ist eine Schwachstelle in Software?

Eine Software-Schwachstelle ist eine Eigenschaft eines Programms, durch die es eine Handlung zulässt, die seine Regeln nicht vorsehen.
Die Ursache liegt im Code, in der Konfiguration oder im Zusammenspiel mit anderen Komponenten.
Erst die Ausnutzung macht aus der Eigenschaft einen Vorfall, die Eigenschaft selbst ist der Fehler.

Arten von Software-Schwachstellen

Arten unterscheiden sich danach, welche Grenze das Programm nicht hält, etwa zwischen Daten und Befehlen oder zwischen erlaubtem und zu großem Speicher.
Manche Fehler bleiben lokal, andere lassen sich über eine Schnittstelle von außen erreichen.
Die Art bestimmt, welche Korrektur greift.

Pufferüberläufe

Pufferüberläufe entstehen, wenn ein Programm mehr Daten in einen fest begrenzten Speicherbereich schreibt, als dort vorgesehen ist, und dadurch benachbarte Inhalte überschreibt.
Angreifende können so den weiteren Ablauf beeinflussen, wenn der überschüssige Inhalt von außen stammt.
Die Korrektur liegt im Begrenzen und Prüfen der Länge, bevor geschrieben wird.

Injection Flaws

Injection Flaws entstehen, wenn Eingaben als Teil eines Befehls an eine Datenbank, eine Shell oder eine andere Auswertungskomponente weitergereicht werden.
Das Programm behandelt die Eingabe als Daten, die Komponente dahinter versteht Teile davon als Anweisung.
Parameterisierte Schnittstellen und striktes Trennen von Befehl und Wert schließen diesen Weg.

Ursachen von Software-Schwachstellen

Ursachen sind meist Annahmen, die im Entwurf nicht durchgesetzt werden, etwa dass eine Eingabe harmlos, kurz oder bereits geprüft sei.
Zeitdruck und fehlende Tests für die unerwarteten Fälle lassen diese Annahmen stehen.
Eine Schwachstelle ist deshalb oft ein unterbliebener Check, nicht ein geheimnisvoller Defekt.

Fehlende Eingabevalidierung

Fehlende Eingabevalidierung lässt Werte zu, die das Programm in Länge, Zeichensatz oder Bedeutung nicht tragen kann.
Die Prüfung gehört an die Grenze, an der die Daten in das System kommen, und erneut dort, wo sie eine empfindliche Komponente erreichen.
Vertrauen auf eine vorherige Schicht genügt nicht, wenn diese Schicht umgangen werden kann.

Unzureichende Fehlerbehandlung

Unzureichende Fehlerbehandlung verrät Interna, lässt das Programm in einem halbfertigen Zustand oder wiederholt eine gefährliche Aktion.
Eine gute Behandlung nennt dem Nutzer das Nötige und schreibt das Detail in ein geschütztes Protokoll.
Sie setzt den Vorgang auf einen sicheren Ausgang zurück, statt mit unklaren Rechten weiterzulaufen.

Auswirkungen von Software-Schwachstellen

Auswirkungen reichen von einer verfälschten Anzeige bis zum Ausführen fremder Anweisungen und zum Abfließen von Daten.
Wie schwer eine Schwachstelle wiegt, hängt davon ab, ob sie von außen erreichbar ist und welche Rechte das Programm besitzt.
Eine interne, schwer erreichbare Lücke ist eine andere Priorität als dieselbe Lücke an der öffentlichen Schnittstelle.

Unbefugter Zugriff

Unbefugter Zugriff entsteht, wenn die Schwachstelle Prüfungen von Anmeldung oder Rechten umgeht.
Die angreifende Seite handelt dann mit den Rechten des Programms oder eines anderen Nutzers.
Die Korrektur stellt die Prüfung wieder her, die Reaktion nimmt Zugänge zurück, die über den Fehler entstanden sind.

Datendiebstahl

Datendiebstahl wird möglich, wenn die Schwachstelle Abfragen oder Dateien öffnet, die nicht zur Anfrage gehören.
Daten verlassen das System über dieselbe Schnittstelle, die der Fehler missbraucht.
Neben der Korrektur gehören eine Eingrenzung der betroffenen Daten und die Information der Verantwortlichen dazu.

Maßnahmen zur Minderung von Software-Schwachstellen

Minderung verbindet schnelles Schließen bekannter Fehler mit einer Bauweise, die dieselben Fehler seltener entstehen lässt.
Keine einzelne Maßnahme deckt alle Arten ab.
Priorität haben Fehler, die von außen ohne besondere Rechte erreichbar sind.

Regelmäßige Patches

Regelmäßige Patches bringen die Korrekturen der Hersteller und der eigenen Entwicklung auf die laufenden Systeme.
Dafür braucht es eine Inventur, ein Zeitfenster und eine Prüfung, dass der Dienst danach noch funktioniert.
Ein verfügbarer Patch, der nicht eingespielt wird, lässt die bekannte Lücke offen.

Verwendung von Sicherheitstools

Sicherheitstools finden bekannte fehlerhafte Versionen, unsichere Konfigurationen und manche Fehlerklassen im Code oder im laufenden Verhalten.
Sie erzeugen eine Liste, die jemand bewerten und abarbeiten muss.
Ein Werkzeug ohne diese Abarbeitung verändert das Risiko nicht.

Sichere Programmierpraktiken

Sichere Programmierpraktiken trennen Daten von Befehlen, prüfen Längen und Rechte und behandeln Fehler so, dass kein halboffener Zustand bleibt.
Reviews und Tests schließen die Fälle ein, die eine normale Bedienung nie sendet.
Diese Praktiken senken die Zahl neuer Lücken, sie ersetzen das Einspielen von Korrekturen nicht.

Schulungen zur Sicherheitsbewusstseinsbildung

Schulungen zur Sicherheitsbewusstseinsbildung zeigen Entwicklerinnen und Betreibern, wie aus einer Eingabe ein Fehler wird und wie eine Meldung eines Fundes läuft.
Sie gehören zur Minderung, weil viele Lücken in gewöhnlichen Funktionen entstehen, nicht nur in speziell sicherheitsrelevantem Code.
Die Schulung nennt die im Haus erlaubten Bibliotheken und Prüfschritte.

Schlussfolgerung

Eine Software-Schwachstelle ist eine durchsetzbare Lücke in den Annahmen eines Programms, von Speichergrenzen bis zu injizierten Befehlen.
Auswirkungen sind unbefugter Zugriff und Datenabfluss, wo die Lücke erreichbar ist.
Patches, Werkzeuge, sichere Bauweise und Schulung schließen sie nur gemeinsam und in dieser Reihenfolge der Dringlichkeit.