Mittwoch, 8. Februar 2012 |
Das Lightweight Directory Access Protocol LDAP dient der Abfrage von Verzeichnisdiensten. Auch in LDAP-Abfragen kann analog zum Vorgehen bei einer SQL- oder XPath-Injection zusätzlicher Code eingefügt werden, mit dem die Abfrage manipuliert und auf eigentlich nicht zugängliche Daten zugegriffen werden kann.
LDAP dient dem Zugriff auf hierarchisch organisierte Verzeichnisse, die prinzipiell beliebige Daten enthalten können. Häufig werden sie für die Speicherung von persönlichen Informationen wie Namen, Telefonnummern, E-Mail-Adressen, Aufgabenbereichen etc. verwendet. Ein typisches Beispiel ist auch Windows Active Directory mit den Informationen über das lokale Netzwerk. Im Rahmen von Webanwendungen wird LDAP z.B. zum Zugriff auf Mitarbeiter- oder Benutzerverzeichnisse verwendet. Als Beispiel soll im folgenden ein Mitarbeiterverzeichnis dienen.
Die Datenstruktur jedes LDAP-Verzeichnisses ist ein hierarchischer Baum mit
Wurzel, Zweigen und Blättern. Das oberste Datenobjekt ist die Wurzel
(root), darunter verzeigen sich die darüber liegenden Strukturen. Im
Mitarbeiterverzeichnis ist die Organisation im Form des Unternehmens
'FurchtBar' die Wurzel: o=FurchtBar. Die einzelnen Mitarbeiter
können in Zweigen unterhalb der Wurzel gespeichert werden:
ou=mitarbeiter,o=FurchtBar. Das gleiche gilt für die
Abteilungen: ou=abteilung,o=FurchtBar.
Für die Organisation der Daten wird ein vorgegebenes Schema verwendet,
das die zu verwendenden Objektklassen mit ihren Attributen definiert, z.B.
die Klasse Mitarbeiter oder Abteilung. Die einzelnen
Verzeichniseinträge werden LDAP-Objekte genannt und gehören zu
mindestens einer Objektklasse. Identifiziert werden sie durch den
eindeutigen Distinguished Name (DN), z.B.
uid=emustermann,ou=mitarbeiter,ou=IT-Abteilung,c=de,o=FurchtBar.
Die Typenbezeichnungen der Attribute sind meist einfach zu merkende
Kürzel wie z.B. cn (common name), ou
(organizational unit) oder c (country). Bei der Suche im
LDAP-Verzeichnis können die einzelnen Zweige adressiert und Objekte
daraus ausgewählt werden.
Als Beispiel soll eine Webanwendung eine Suchfunktion für Mitarbeiter bereit stellen, die entsprechenden Informationen sind in einem LDAP-Verzeichnis gespeichert.
|
Mitarbeitersuche Ergebniss(e)
|
Wird als zu suchender Name z.B. Ratlos eingegeben, wird von
der Anwendung daraus die folgende LDAP-Abfrage gebildet:
<LDAP://ldap.furchtbar.example>;(givenName=Ratlos);cn,abteilung,email
Die Abfrage enthält zwei Schlüsselelemente:
givenName=Ratlos
cn,abteilung,email
Wird die Benutzereingabe ungeprüft und ungefiltert übernommen, kann ein Angreifer die Abfrage manipulieren.
Um andere als die vorgegebenen Attribute abzufragen, muss der Angreifer zuerst die Klammer um den Suchfilter schließen und dann seine eigenen Attribute angeben. Eine mögliche Eingabe ist
Ratlos);telefon,cn;
mit der sich daraus ergebenden LDAP-Abfrage
<LDAP://ldap.furchtbar.example>;(givenName=Ratlos);telefon,cn;);cn,abteilung,email
Die manipulierte Abfrage liefert eine zusätzliche Spalte mit der Telefonnummer des Benutzers zurück:
|
Mitarbeitersuche Ergebniss(e)
|
Die 2. Spalte der Tabelle enthält den unsinnigen Attributnamen
cn;);cn, für den es keine Ausgabe gibt. Da die Attribute
der Abfrage aus einer durch Komma getrennten Liste bestehen, wird alles
zwischen einem Komma und dem nächsten als Attributname aufgefasst. Im
Falle eines nicht existierenden Attributnamens gibt der LDAP-Server eine
Fehlermeldung aus. Ungültige Namen, die mit einem gültigen
Attributnamen gefolgt von einem Semikolon beginnen, werden dagegen
toleriert: Durch die Angabe von cn; in der Eingabe wird die
Fehlermeldung unterdrückt.
Der Angriff kann nahezu beliebig ausgeweitet werden, indem weitere Attribute angegeben und als Suchfilter ein Stern eingegeben wird, der als Wildcard-Zeichen fungiert:
*);cn,telefon,c,cn;
liefert die gewünschten Attribute für alle vorhandenen Benutzer:
|
Mitarbeitersuche Ergebniss(e)
|
Manchmal wird die Benutzereingabe nicht direkt in den Suchfilter übernommen, sondern als Teil eines komplexeren Filters verwendet. Dadurch kann z.B. die Suche auf Mitarbeiter aus dem jeweiligen Land oder aus bestimmten Abteilungen beschränkt werden. Ein Angreifer kann dann versuchen, durch eine entsprechend formulierte Suchanfrage die vorhandene Anwendungslogik zu manipulieren und auf eigentlich nicht zugängliche Daten zuzugreifen. Wie das funktioniert und wie LDAP-Injection-Schwachstellen gefunden und verhindert werden können, erfahren Sie in der nächsten Folge.
Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen!