Was sind LDAP-Injection-Angriffe und wie kann man sie verhindern?
Code-Injection-Angriffe gehören zu den häufigsten und erfolgreichsten Online-Angriffen. Webanwendungen, mobile Apps, Desktop-Programme, API S, Datenbanken , Webserver usw. können alle anfällig für Code-Injection-Angriffe sein, wenn sie Benutzereingaben ohne ordnungsgemäße Validierung akzeptieren.
Einer der häufigsten Code-Injection-Angriffe ist die LDAP-Injection, und darüber werden wir in diesem Beitrag sprechen. Wir werden uns ansehen, was LDAP ist, wie die LDAP-Injection funktioniert, und Tipps zur Abwehr dieses Angriffs geben.
Was ist LDAP?
LDAP steht für Lightweight Directory Access Protocol. Es handelt sich um ein Verzeichnisdienstprotokoll, das zum Nachschlagen von Verzeichniseinträgen in einer LDAP-Datenbank verwendet wird, am häufigsten nach Benutzernamen und Passwörtern. Wie der Name schon sagt, ist LDAP sehr leichtgewichtig, lässt sich daher sehr gut skalieren und wird heute von einer großen Anzahl von Organisationen verwendet.
Ein LDAP-Verzeichnis besteht aus Attributen, die auf dem LDAP-Schema basieren. Jeder Eintrag im Schema/Verzeichnis wird mit einer eindeutigen Kennung versehen, die als Distinguished Name (DN) bezeichnet wird. Unten finden Sie ein Beispiel für einen Eintrag für den Scheinbenutzer Johnnyny Theguy.
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
Viele Organisationen verwenden LDAP für Einmalige Anmeldung um Mitarbeitern Zugriff auf mehrere Apps innerhalb des Unternehmensnetzwerks zu ermöglichen, ohne dass sie sich bei jeder einzelnen App anmelden müssen. Doch über die bloße Validierung von Benutzeranmeldeinformationen hinaus wird LDAP zur Beantwortung von Informationsanfragen verwendet und umfasst auch verschiedene Befehle zur Verwaltung der LDAP-Datenbanken. Und das macht Sinn, wenn man bedenkt, wie viele Informationen (über Benutzernamen und Passwörter hinaus) LDAP-Datenbanken enthalten – was auch die Gefahren von LDAP-Injection-Angriffen verdeutlicht.
LDAP-Abfragen
Die an den Server übermittelten LDAP-Abfragen werden als LDAP-Suchfilter bezeichnet und mithilfe der Präfixnotation erstellt. Eine typische LDAP-Abfrage umfasst normalerweise Folgendes:
- Sitzungsverbindung : Der Benutzer stellt eine Verbindung zum LDAP-Server her.
- Anfrage : Der Benutzer sendet eine Anfrage an den Server (z. B. eine Benutzersuche).
- Antwort : Das LDAP-Protokoll fragt das Verzeichnis ab, findet die angeforderten Informationen und stellt sie dem Benutzer bereit.
- Fertigstellung : Der Benutzer trennt die Verbindung zum LDAP-Server.
Sobald Benutzer sich in der Datenbank befinden, können sie Abfragen formulieren, um Vorgänge über den LDAP-Server auszuführen. Nachfolgend finden Sie eine Liste allgemeiner Vorgänge, die die LDAP-Datenbank/der LDAP-Server ausführen kann:
- Hinzufügen : Wird verwendet, um der Datenbank neue Daten hinzuzufügen.
- Binden (authentifizieren) : Wird zur Authentifizierung und Verschlüsselung verwendet.
- Löschen : Wird zum Löschen von Daten aus der Datenbank verwendet.
- Suchen und vergleichen : Die Suchoperation dient zum Suchen und Lesen von Einträgen.
- Ändern : Wird von LDAP-Clients verwendet, um den LDAP-Server aufzufordern, Änderungen an vorhandenen Einträgen vorzunehmen
- Lösen : Wird verwendet, um die Verbindung zu schließen.
Innerhalb seiner Abfragen unterstützt LDAP die folgenden Metazeichen:
- & Boolesches UND
- | Boolesches ODER
- ! Boolesches NICHT
- = Gleich
- ~= Ca
- >= Größer als
- <= Weniger als
- * Jeder Charakter
- () Gruppierungsklammern
Hier sind einige Beispiele für LDAP-Abfragen.
Eine typische Benutzerauthentifizierungsanfrage (d. h. eine Benutzeranmeldung) würde wie folgt aussehen:
|_+_|
Wenn die gesendeten Anmeldeinformationen mit denen auf dem LDAP-Server übereinstimmen, wird der Benutzer Johnny authentifiziert.
Weitere Beispiele wären:
Finden Sie alle Benutzer, die bei der nächsten Anmeldung ihr Passwort ändern müssen:
|_+_|
Diese Abfrage würde eine Liste aller in der Datenbank gefundenen Benutzer zurückgeben, die das Attribut pwdLastSet mit dem Wert 0 haben.
Finden Sie alle Benutzer mit „pass“ oder „pwd“ in ihrer Beschreibung
|_+_|
Diese Abfrage würde eine Liste aller in der Datenbank gefundenen Benutzer zurückgeben, bei denen die Pass- oder PWD-Attribute aufgeführt sind.
LDAP-Injektion
Nachdem wir nun verstanden haben, was LDAP ist und wie es funktioniert, wenden wir uns der LDAP-Injektion zu.
Ein LDAP-Injection-Angriff kann für Ihr Unternehmen absolut verheerende Folgen haben. Das liegt an der Menge an hochwertigen Informationen, die eine LDAP-Datenbank enthalten kann. Wir sprechen über Namen, Benutzernamen, Passwörter, E-Mail-Adressen, Telefonnummern, Berufsbezeichnungen, Berechtigungen usw.
Hinzu kommt, dass ein LDAP-Injection-Angriff viele Dinge bedeuten kann. Mit anderen Worten: LDAP-Injection-Angriffe erfolgen über mehrere Vektoren. Ein Angreifer kann ein unsicheres LDAP-System auf viele verschiedene Arten ausnutzen. Sie könnten Schadcode einschleusen, der es ihnen ermöglicht, alle in der Datenbank enthaltenen Benutzernamen und Passwörter einzusehen. Oder sie fügen sich selbst als Benutzer mit Systemadministratorrechten in die LDAP-Datenbank ein. Ein Angreifer könnte die Anforderung von Benutzernamen und Passwörtern sogar vollständig umgehen. Der Kern eines LDAP-Injection-Angriffs besteht darin, dem Server eine Abfrage zu übermitteln, die ihn dazu verleitet, die Abfrage als wahr oder gültig zu validieren.
Für den Erfolg oder Misserfolg eines LDAP-Injection-Angriffs spielen viele Faktoren eine Rolle: zum Beispiel das Wissen und Können des Angreifers, die IT-Sicherheitsmaßnahmen des Unternehmens und die in der LDAP-Datenbank enthaltenen Informationen. Aber in jedem Fall ist ein erfolgreicher LDAP-Injection-Angriff in der Regel ein großer Gewinn für den Angreifer und ein erheblicher Schmerz für das angegriffene Unternehmen.
Schauen wir uns einige Beispiele an, wie dies erreicht werden könnte.
Beispiele für LDAP-Injection-Angriffe
Umgehen der Authentifizierung mit dem Metazeichen „&“.
Nehmen wir oben unser erstes Abfragebeispiel einer Benutzeranmeldung:
|_+_|
In einer anfälligen LDAP-Datenbank könnte ein böswilliger Akteur den Authentifizierungsmechanismus vollständig umgehen, indem er eine böswillige Abfrage erstellt, indem er das Metazeichen & zwischen den Benutzer- und Kennwortattributen der Abfrage einfügt. Das würde so aussehen:
|_+_|
Da LDAP nur die ersten beiden Attribute analysiert, entspricht die Anweisung der folgenden:
|_+_|
Wenn die obige Abfrage auf einer anfälligen LDAP-Datenbank/einem anfälligen LDAP-Server ausgeführt würde, würde das Ergebnis „true“ zurückgeben und unser böswilliger Benutzer „was auch immer“ würde authentifiziert.
Umgehen der Authentifizierung mit den Metazeichen „*“ und „|“.
Nehmen wir ein ähnliches Beispiel wie oben („cn“ steht für Common Name):
|_+_|
Mit * und | können wir dasselbe wie oben erreichen Metazeichen. Wenn wir den Benutzernamenwert auf |_+_| setzen, wird der Suchfilter zu:
|_+_|
Da LDAP nur die ersten beiden Attribute analysiert, wird die obige Abfrage immer als wahr zurückgegeben. Diese Abfrage würde es einem Angreifer ermöglichen, den Authentifizierungsmechanismus von LDAP ohne ordnungsgemäße Eingabevalidierung zu umgehen.
Auflistung aller Benutzer in der Datenbank mit „*“
Die folgende Abfrage ist eine LDAP-Suchabfrage.
|_+_|
Die obige Präfixfilternotation weist die Abfrage an, einen LDAP-Knoten mit dem angegebenen Benutzernamen und Passwort zu finden. Wenn die LDAP-Datenbank jedoch anfällig für LDAP-Injection ist, könnte ein Angreifer den CN und das Passwort im obigen Beispiel durch * ersetzen, etwa so:
|_+_|
Dadurch würde sich die beabsichtigte Bedeutung der Abfrage ändern und die Datenbank würde eine Liste aller Benutzer zurückgeben.
Die mit der LDAP-Injektion verbundenen Risiken
Die Schäden, die durch LDAP-Injection-Angriffe entstehen können, ähneln denen anderer Injection-Angriffe. Das Einschleusen von Code in einen Server setzt die Fähigkeit voraus, Informationen abzurufen und zu ändern. Daher können LDAP-Injection-Angriffe zu Folgendem führen:
Verlust sensibler Daten
Wie wir in unserem letzten Beispiel gesehen haben, ist es möglich, an einen anfälligen Server gesendete LDAP-Abfragen zu manipulieren, um unbeabsichtigte Informationen aufzulisten. In unserem obigen Beispiel haben wir gezeigt, wie eine in böser Absicht erstellte Abfrage dazu führen kann, dass die Datenbank die Liste aller Benutzer in der Datenbank ausgibt.
Wenn der Server jedoch anfällig für LDAP-Injection ist, könnte er manipuliert werden, um andere sensible Daten auszugeben. LDAP-Datenbanken speichern tendenziell mehr Daten als nur Benutzernamen und Passwörter – was bereits schädlich genug wäre, wenn es durchsickern würde. Aus diesem Grund könnte ein Angreifer LDAP-Abfragen erstellen, um an vertrauliche Informationen wie E-Mail-Adressen, Telefonnummern und sogar Sozialversicherungsnummern zu gelangen. Zusätzlich zu kompromittierten Konten und unbefugtem Zugriff auf Unternehmensressourcen (was verheerende Folgen haben kann) könnte die LDAP-Injection auch zu gezieltem Identitätsdiebstahl führen Phishing Kampagnen usw. Böse.
Denial-of-Service-Angriffe
Auch LDAP-Injection-Angriffe können unkompliziert und sehr effektiv sein Denial-of-Service-Angriffe (DoS). . Dieser Angriff kann gegen die Anwendung erfolgen, die mit dem Verzeichnisserver interagiert, oder gegen den Verzeichnisserver selbst. Wenn ein Angreifer genügend bösartige LDAP-Abfragen erstellen kann, die sehr zeitaufwändig und ressourcenintensiv sind, könnte er alle verfügbaren Ressourcen verbrauchen, sodass andere Anfragen nicht durchkommen.
Nehmen wir außerdem an, dass die Anwendung so konzipiert ist, dass sie alle von einer Suchabfrage zurückgegebenen Einträge im Speicher speichert. In diesem Fall könnte eine Abfrage, die viel mehr Einträge als erwartet zurückgeben soll, dazu führen, dass die Anwendung den gesamten verfügbaren Speicher für die Verarbeitung dieser Anforderung verbraucht. Die Folge wäre ein Absturz der Anwendung.
Veränderte Dateien und Datenbeschädigung
Wir haben gesehen, wie eine in böser Absicht erstellte Abfrage dem Angreifer unbeabsichtigte Daten offenlegen kann. Es ist aber auch möglich, die Datenbank dazu zu verleiten, unbeabsichtigte Dateien zu aktualisieren, entweder mit Junk, um die Datei zu beschädigen, oder indem die Passwörter so geändert werden, dass sie vom Angreifer festgelegt wurden. Wenn der Angreifer die Anwendung dazu verleiten kann, nach falschen Einträgen zu suchen, kann er sie dazu verleiten, falsche Einträge zu aktualisieren, was zu Datenverlust oder -beschädigung führen kann.
So verhindern Sie LDAP-Injection-Angriffe
Nachdem Sie nun die Bedrohungen kennen, finden Sie hier einige Vorsichtsmaßnahmen, die Sie ergreifen können, um LDAP-Injection-Angriffe zu verhindern.
Erzwingen Sie die Eingabevalidierung
Mit anderen Worten: Vertrauen Sie Benutzereingaben nicht. Betrachten Sie diese Eingabe unabhängig vom Benutzertyp (authentifiziert, intern oder öffentlich) als nicht vertrauenswürdig. Verhindern Sie nach Möglichkeit, dass Ihre Anwendungen vom Benutzer kontrollierbare Daten in LDAP-Abfragen kopieren. Wenn dies nicht möglich ist, überprüfen Sie die Benutzereingaben unbedingt anhand einer Liste zulässiger Zeichenfolgen oder Zeichen. Und diese Validierung sollte immer serverseitig erfolgen, auch wenn die Eingabe zuvor clientseitig validiert wurde.
Sie können ein starkes reguläres Ausdrucksmuster verwenden, um strukturierte Eingaben wie Sozialversicherungsnummern, Telefonnummern und E-Mail-Adressen zu validieren. Eingaben wie Benutzernamen sollten anhand eines genehmigten Zeichensatzes validiert werden, der LDAP-Metazeichen ausschließt. Zu den Zeichen, die blockiert werden sollten, gehören: ( ) ;, * | &= Und Leerzeichen
Escape-Eingabe mit Codierung
Escapen Sie benutzergesteuerte Eingabezeichenfolgen, damit etwaige Steuerzeichen in der Eingabe die beabsichtigte Bedeutung des LDAP-Suchfilters nicht ändern. Beispielsweise können in einer Java-Anwendung die Metazeichen einer LDAP-Abfrage mit Backslashes als Escape-Zeichen eingegeben werden. Auf diese Weise werden nicht vertrauenswürdige Eingaben als literale Zeichenfolgenwerte und nicht als LDAP-Prädikate an eine Suchabfrage angehängt.
Es wird außerdem dringend empfohlen, vorhandene Bibliotheken zum Escapen zu verwenden – schreiben Sie keine eigenen, da Sie sonst das Risiko eingehen, unbeabsichtigte Schwachstellen einzuführen.
Implementieren Sie das Prinzip der geringsten Privilegien
Das Prinzip der geringsten Rechte ist eine IT-Sicherheitsrichtlinie, die besagt, dass man einem Benutzer, der Zugriff auf eine Ressource benötigt, nur die minimal erforderlichen Rechte zuweisen sollte. Diese Rechte sollten auch für die kürzestmögliche Dauer gelten. Insbesondere sollte der Zugriff auf das LDAP-Konto, das zum Binden des Verzeichnisses in einer Anwendung verwendet wird, eingeschränkt sein. Es sollten nur autorisierte LDAP-Anfragen an den LDAP-Server ausgeführt werden.
Einpacken
Das sind also die Besonderheiten von LDAP-Injection-Angriffen. Sie sind ziemlich schlimm und können, wie viele (wenn nicht die meisten) Online-Angriffe, katastrophale Folgen haben. Wie so oft bei Angriffen dieser Art ist die Bereinigung von Benutzereingaben hier die wichtigste Abwehrmaßnahme. Wenn Sie die Eingaben Ihrer Benutzer nicht bereinigen, ist das so, als ob Sie die Haustür Ihres Hauses aufschließen würden – jeder kann einfach den Knopf drehen und eintreten. Das ist nicht das, was Sie mit einer Webanwendung/einem Webserver wollen. Hoffentlich helfen Ihnen die oben aufgeführten Tipps dabei, dieses Szenario zu vermeiden.
Bleiben Sie wie immer gesund.