Skip to main content

Kurz erklärt: LDAP-Injection

Artikel von
blog feature playwright end to end tests

1. Juni 2023

0 Min. Lesezeit

Das Lightweight Directory Access Protocol (LDAP) ist ein Authentifizierungsmechanismus zum Schutz von Webanwendungen. LDAP ist beliebt, weil es ressourcenschonend ist und sich leicht skalieren lässt – Eigenschaften, die für Entwickler attraktiv sind. Gleichzeitig bedeutet das, dass LDAP-Datenbanken oft große Mengen wertvoller Informationen enthalten. Dadurch sind sie ein attraktives Ziel für Angreifer. 

Anwendungen erstellen LDAP-Abfragen aus Benutzereingaben, um auf die in LDAP-Datenbanken gespeicherten Informationen zuzugreifen und diese zu bearbeiten. Im Idealfall sollte die Anwendung die Benutzereingaben validieren und bereinigen. Das geschieht jedoch nicht immer, sodass diese Abfragen anfällig für LDAP-Injections sind.

In diesem Artikel erfahren Sie, wie LDAP-Injection funktioniert, welche Folgen diese Art von Angriff haben kann und wie Sie Anwendungen dagegen schützen können.

So funktioniert LDAP-Injection

LDAP-Abfragen verwenden Prädikate, die aus Sonderzeichen wie Anführungszeichen, Sternchen, eckigen Klammern und kaufmännischen Und-Zeichen bestehen, um die Bedeutung der Abfrage zu steuern. Diese Sonderzeichen werden Metazeichen genannt. In der Regel werden solche Eingaben bereinigt und validiert, bevor die Abfrage erstellt und an den Server gesendet wird. In einer ungesicherten Umgebung ohne ausreichende Eingabevalidierung kann ein Angreifer die Steuerzeichen jedoch ändern und so das beabsichtigte Verhalten der Abfrage verändern.

Ein Beispiel: Eine Anmeldeseite fragt nach einem USER und einem PASSWORD, um den Zugriff auf eine Datenbank mithilfe einer der am weitesten verbreiteten LDAP-Implementierungen zu authentifizieren – OpenLDAP. Der LDAP-Server verwendet einen Suchfilter wie den folgenden, um zu überprüfen, ob die vom Benutzer eingegebenen Zugangsdaten USER und PASSWORD in einer Liste zugelassener Zugangsdatenpaare enthalten sind:

(&(USER=jsmith)(PASSWORD=sec87pD02))

Wichtig: Aufgrund einer Besonderheit der Funktionen in Active Directory Application Mode (ADAM) können wir diese Suchabfrage nicht in zwei Filter aufteilen, also beispielsweise nicht so:

(USER=jsmith)(PASSWORD=sec87pD02)

OpenLDAP würde nur den ersten Filter verarbeiten und den zweiten ignorieren. Deshalb benötigen wir den AND-Operator (&), damit der Suchfilter den Wert TRUE ergibt, wenn die eingegebenen Zugangsdaten korrekt sind.

Wenn unser Benutzername-Passwort-Paar also in der Datenbank vorhanden ist, können wir uns erfolgreich authentifizieren, indem wir „jsmith“ als Benutzernamen und „sec87pD02“ als Passwort eingeben. 

Wenn ein Angreifer jedoch nur den Benutzernamen jsmith kennt, kann er die folgende Angriffskette in das USER-Feld der Anmeldeseite einschleusen:

jsmith)(&))

Wenn wir die Benutzereingabe also nicht bereinigen, bevor wir sie in die resultierende LDAP-Suchabfrage einfügen, sieht die Abfrage wie folgt aus:

(& (USER=jsmith)(&))(PASSWORD=randomstring))

Der Angreifer hat damit den ersten Filter vervollständigt, den der LDAP-Server verarbeitet. Da der erste Filter mit dem Operator & den Wert TRUE ergibt, ignoriert das Skript das falsche Passwort im zweiten Filter und gewährt Zugriff auf die Datenbank.

Der LDAP-Syntaxfilter, der das Active Directory abfragt, ist ein vorrangiges Ziel für Angreifer. Angreifer können damit Zeichenfolgenwerte übergeben, die den LDAP-Server dazu bringen, bestimmte Abfragen und andere LDAP-Anweisungen auszuführen. So schleusen sie Befehle ein, die unzureichende Berechtigungen oder Fehlkonfigurationen auf dem LDAP-Server ausnutzen. Falsch konfigurierte Berechtigungen können Angreifern Zugriff auf das LDAP-Verzeichnis ermöglichen und damit die primäre LDAP-Datenstruktur – den Directory Information Tree – gefährden. Angreifer können auch LDAP-Anweisungen oder die Webanwendungen verändern, die diese Anweisungen aus Benutzereingaben erstellen.

Mögliche Folgen von LDAP-Injection-Angriffen

Eine LDAP-Injection ist eine gefährliche Sicherheitsverletzung, die unbefugten Zugriff auf Anwendungen und Ressourcen ermöglichen und Verzeichnisinformationen gefährden kann. Angreifer können LDAP-Angriffe auf verschiedene Weise durchführen – jede davon kann schwerwiegende Folgen haben. 

Authentifizierungsmaßnahmen umgehen

Verzeichnisdienste dienen vor allem dazu, Benutzer zu autorisieren und zu authentifizieren. LDAP steuert den Benutzerzugriff auf Ressourcen und Anwendungen, die LDAP unterstützen. Um auf eine Anwendung oder Ressource zuzugreifen, gibt ein Benutzer seine Anmeldedaten ein, etwa Benutzername und Passwort. LDAP vergleicht diese mit den Daten im LDAP-Verzeichnis. Stimmen die Anmeldedaten überein, erhält der Benutzer die Berechtigung, auf die Ressource zuzugreifen.

LDAP-Angriffe zielen häufig darauf ab, Passwortprüfungen zu umgehen. Angreifer erstellen eine Code-Injection, durch die die Abfrage nach dem Benutzernamen endet. So können sie beim Server eine LDAP-Authentifizierung anfordern, ohne das korrekte Passwort einzugeben. Beispielsweise kann ein Angreifer die Metazeichen &, * oder | verwenden, um die Authentifizierung zu umgehen. 

LDAP-Injection-Angriffe zum Umgehen von Anmeldungen können schwerwiegende Folgen haben. Angreifer können Zugriff auf Administratorkonten erhalten, was zur Offenlegung von Daten und zu Datenschutzverletzungen führen kann. Letztlich können solche Angriffe die vollständige Kompromittierung von Systemen, einen Imageschaden und finanzielle Verluste durch Klagen, Geldstrafen und entgangene Geschäfte zur Folge haben.

Offengelegte Daten und Ressourcen

Eine LDAP-Injection kann es Angreifern ermöglichen, sensible Daten zu Hosts und Benutzern, die im LDAP-Baum abgebildet sind, offenzulegen, zu ändern, einzufügen oder zu löschen. LDAP-Injection-Angriffe betreffen Anwendungen, die LDAP-Filter verwenden, um gemeinsam genutzte Ressourcen bereitzustellen.

Ein Angreifer kann LDAP-Filtercode einschleusen oder eine LDAP-Abfrage verwenden, um alle Ressourcen im Verzeichnis aufzulisten. Dadurch können Unternehmensdaten, einschließlich sensibler Informationen, kompromittiert werden. Auch Änderungen am Verzeichnis, etwa das Löschen oder Hinzufügen von Einträgen, sind möglich. Sobald ein Hacker Verzeichnisinformationen erlangt hat, kann er sensible Daten bei einem Ransomware-Angriff als Druckmittel einsetzen.

So schützen Sie Anwendungen vor LDAP-Injection

Am besten vermeiden Sie LDAP-Injection-Angriffe, indem Sie Ihre Anwendungen dagegen absichern. Mit den folgenden Best Practices können Sie Ihre Anwendungen schützen und die Auswirkungen möglicher LDAP-Injection-Angriffe begrenzen.

Benutzereingaben validieren und bereinigen

Die wichtigste Schutzmaßnahme gegen LDAP-Injection-Angriffe ist die Validierung und Bereinigung von Eingaben. Ihre Anwendung muss alle Benutzereingaben in einer LDAP-Abfrage validieren, darunter POST- und GET-Parameter, Cookies und HTTP-Header. Außerdem sollte die Anwendung alle scheinbar ungültigen Eingaben zurückweisen. Wenn in einem Eingabefeld eine E-Mail-Adresse verlangt wird, können Sie die Eingabe auf Punkte (.), Buchstaben, Zahlen, das At-Zeichen (@), Pluszeichen (+), Unterstriche (_) und Bindestriche (-) beschränken.

Bei einer Client-Server-Anwendung ist die serverseitige Validierung von Eingaben zwingend erforderlich. Auf der Client-Seite ist sie technisch optional, aber entscheidend. Die serverseitige Validierung verhindert, dass Benutzer die clientseitige Validierung durch Deaktivieren von JavaScript umgehen. Andernfalls könnte ein Angreifer Datenbanken auslesen sowie Daten lesen oder ändern. Wenn Anwendungen Benutzereingaben nicht validieren, werden sie anfällig für Directory-Traversal-Angriffe, bei denen Angreifer beliebige Dateien auf dem Server einer Anwendung lesen können.

Das Prinzip der geringsten Berechtigung und Zero-Trust-Autorisierung für den Verzeichniszugriff durchsetzen

Das Prinzip der geringsten Berechtigung (Principle of Least Privilege, PoLP) ist eine Sicherheitsmaßnahme, die die Zugriffsrechte von Benutzern auf das notwendige Minimum und den kürzestmöglichen Zeitraum beschränkt. Durch das PoLP können Benutzer nur auf die Ressourcen zugreifen, die sie zur Erfüllung ihrer Aufgaben und Verantwortlichkeiten benötigen, und diese nur schreiben, ausführen oder lesen. So wird sichergestellt, dass alle LDAP-Abfragen autorisiert sind, die an den LDAP-Server gesendet werden. Als Schutz vor LDAP-Injection beschränkt das PoLP den Zugriff auf das LDAP-Konto, das das Verzeichnis in einer Anwendung bindet.

Indem Sie die Berechtigungen für LDAP-Bindungskonten auf ein Minimum reduzieren, können Sie die Auswirkungen erfolgreicher Injection-Angriffe begrenzen. Mit dem Zero-Trust-Modell legen Sie außerdem fest, wie lange Administratoren erhöhte Berechtigungen nutzen dürfen, und beschränken diesen Zeitraum. Erwägen Sie neben Passwörtern auch die Integration einer Multi-Faktor-Authentifizierung (MFA) mit LDAP. Bei MFA müssen LDAP-Benutzer, die sich bei einer Anwendung anmelden, zusätzlich zum Passwort einen weiteren Verifizierungsmechanismus verwenden.

Variablen und LDAP-Syntax escapen

Eine weitere Möglichkeit, LDAP-Injections zu verhindern, besteht darin, vom Framework bereitgestellte Funktionen und escapte Variablen zu verwenden. Angreifer können Zeichen wie &, *, ! und | für LDAP-Injection-Angriffe ausnutzen. Sie können Benutzereingaben also bereinigen, indem Sie diese Sonderzeichen escapen. Der RFC 2254 enthält eine Anleitung zum Escapen von Assertion-Werten in der Zeichenfolgendarstellung von LDAP-Suchfiltern. 

LDAP-Injection verhindern

Angreifer nutzen häufig nicht validierte Benutzereingaben, um den LDAP-Abfrageinterpreter zur Ausführung beliebiger Abfragen zu verleiten. Dabei wird die beabsichtigte Struktur der LDAP-Abfrage verändert, sodass der Angreifer unbefugten Zugriff auf sensible Benutzerinformationen erhalten kann. 

Um LDAP-Injections zu verhindern, müssen Sie Eingaben angemessen validieren und bereinigen, escapte Variablen verwenden und das PoLP sowie Zero-Trust-Autorisierungsrichtlinien durchsetzen. Diese Maßnahmen helfen dabei, den Zugriff auf LDAP-Bindungskonten zu kontrollieren und die Auswirkungen eines LDAP-Injection-Angriffs zu minimieren. Auch wenn sich nicht alle möglichen LDAP-Injection-Angriffe ausschließen lassen, können Sie mit diesen Best Practices dafür sorgen, dass Ihre Anwendungen und die Daten ihrer Benutzer so gut wie möglich geschützt bleiben.