Coders Conquer Security: Share & Learn Series - LDAP-Injektionen

Veröffentlicht Jan 17, 2019
von Jaap Karan Singh
FALLSTUDIE

Coders Conquer Security: Share & Learn Series - LDAP-Injektionen

Veröffentlicht Jan 17, 2019
von Jaap Karan Singh
Ressource anzeigen
Ressource anzeigen

Die große Mehrheit der Computersysteme verwendet das Lightweight Directory Access Protocol (LDAP). Es wird verwendet, um verteilte Verzeichnisinformationsdienste über ein beliebiges Internet Protocol (IP)-Netzwerk zu verwalten. Es dient also im Wesentlichen dazu, den Überblick über die Benutzer zu behalten.

LDAP wird häufig als Authentifizierungsquelle von Anwendungen verwendet, um festzustellen, ob ein Benutzer die Berechtigung hat, verschiedene Aktionen durchzuführen, insbesondere in Bezug auf seine definierte Rolle innerhalb einer Organisation. So können beispielsweise nur Mitarbeiter der Buchhaltung die Buchhaltungssoftware des Unternehmens nutzen. Anwendungen werden oft so programmiert, dass sie eine LDAP-Tabelle überprüfen, um sicherzustellen, dass die Benutzer innerhalb ihrer festgelegten Berechtigungen handeln.

Probleme können auftreten, wenn böswillige Benutzer eine LDAP-Abfrage manipulieren können. Dadurch kann der empfangende Server dazu gebracht werden, ungültige Abfragen auszuführen, die normalerweise nicht erlaubt wären, oder sogar ungültigen oder unsicheren Benutzern ohne Kennwort Zugang auf hoher Ebene oder als Administrator zu gewähren.  

LDAP-Injektionen können knifflig sein, aber in dieser Folge lernen wir es:

  • Wie sie funktionieren
  • Warum sie so gefährlich sind
  • Wie Sie Abwehrmaßnahmen ergreifen können, um sie zu stoppen.

Wie nutzen Angreifer LDAP Injection?

Einer der Gründe, warum LDAP-basierte Angriffe seit Jahren beliebt sind, ist die Tatsache, dass fast jedes Computersystem es verwendet. LDAP ist quelloffen und funktioniert extrem gut, sodass nicht viele Alternativen geschaffen wurden.

Im Kern ist LDAP eine Datenbank, die gültige Benutzer innerhalb eines IP-basierten Computersystems oder Netzwerks verfolgt. Es kann Benutzern ermöglichen, Informationen über Systeme, Netzwerke, Server, Anwendungen und sogar andere Benutzer im selben Netzwerk auszutauschen.

Informationen werden von LDAP in dem Äquivalent einer Datenbankzeile oder eines Datensatzes gespeichert, der als Distinguished Name bezeichnet wird, oft abgekürzt als DN. Jeder DN ist eindeutig. So könnte zum Beispiel ein DN für einen Benutzer aussehen, der in der Buchhaltung eines großen Unternehmens in Chicago arbeitet.

cn=James Smith, ou=Corporate Accounts, dc=Chicago, do=Parkview  

Um sicherzustellen, dass jeder DN eindeutig ist, können dem Datensatz verschiedene Codes hinzugefügt werden, wie "+", "/", "=" und einige andere. Es können auch Leerzeichen vor oder nach einem Datensatz eingefügt werden, um sicherzustellen, dass selbst wenn es zwei James Smiths gibt, die im Chicago Parkview Office in der Abteilung Corporate Accounts arbeiten, sie jeweils individuelle DNs haben.

Anwendungen verwenden LDAP im Allgemeinen, um Benutzern die Möglichkeit zu geben, Abfragen über bestimmte DNs zu senden, wie z. B. beim Versuch, den richtigen Ansprechpartner in der Lohnbuchhaltung zu finden, um über einen Fehler auf dem Scheck zu sprechen. LDAP-Injektionen können auftreten, wenn keine Validierung der vom Benutzer bereitgestellten Parameter in Suchanfragen erfolgt. In diesem Fall können Hacker gutartige Suchanfragen manipulieren, um Authentifizierungsmechanismen zu umgehen oder zusätzliche beliebige Abfragen auszuführen. Dies kann den Server dazu bringen, Ergebnisse anzuzeigen, die nicht erlaubt sein sollten, wie z. B. Benutzerpasswörter, oder sogar eine Anwendung dazu veranlassen, Zugriff auf hochsichere Bereiche innerhalb des Netzwerks zu gewähren, mit oder ohne gültiges Passwort.

Warum sind LDAP-Injektionen so gefährlich?

Die größte Gefahr bei LDAP-Injektionen ist wahrscheinlich die weite Verbreitung des Protokolls in den meisten IP-Computernetzwerken weltweit. Es ist ein leichtes Sprungbrett für Hacker, die Informationen stehlen oder ihre Privilegien in einem Netzwerk erhöhen wollen. Kein geschulter Hacker wird es versäumen, zu prüfen, ob LDAP-Injections möglich sind, daher müssen Sicherheitsteams sicherstellen, dass diese Löcher immer geschlossen sind.

Konkret sind etliche Anwendungen so programmiert, dass sie gültigen Benutzern helfen, begrenzte Informationen über Benutzer und Gruppen innerhalb einer Organisation oder andere in den DNs enthaltene Informationen zu finden. Zum Beispiel könnte eine Anwendung jemandem erlauben, mit LDAP nach den Kontaktinformationen von Buchhaltern in Chicago zu suchen, was unseren Freund James Smith aus dem obigen Beispiel zurückbringen würde. Abhängig von den Berechtigungen ist dies wahrscheinlich eine vollkommen gültige Verwendung einer LDAP-Abfrage.

Die Gefahr entsteht, wenn ein böswilliger Benutzer der Abfrage ungefilterte Parameter hinzufügen kann, wodurch die Art der Suche verändert und der Server dazu gebracht wird, Informationen bereitzustellen, die normalerweise nicht gegeben werden sollten. Durch Hinzufügen einer user=*-Zeichenkette könnten Angreifer beispielsweise Informationen über jeden einzelnen Benutzer einer ganzen Organisation erhalten, was wahrscheinlich niemals erlaubt sein sollte.

Bei Anwendungen, die LDAP zur Authentifizierung verwenden, kann das Problem sogar noch größer sein. Angreifer können z. B. die Zeichenfolge (&) am Ende einer LDAP-Abfrage verwenden, um dem Server vorzugaukeln, dass das Argument wahr ist. Wenn eine Anwendung LDAP zur Überprüfung eines Kennworts verwendet, kann das Erzwingen eines "True"-Arguments durch eine LDAP-Injektion es einem nicht autorisierten Benutzer ermöglichen, sich als Administrator im Netzwerk anzumelden, auch ohne ein Kennwort.

Machen Sie LDAP-Injection zu einem L-DON'T in Ihrem Netzwerk

Eine der besten Möglichkeiten, LDAP-Injektionen zu verhindern, besteht darin, etwas wie LINQtoAD oder andere Frameworks zu implementieren, die speziell dafür entwickelt wurden. Dies ist möglicherweise nicht möglich, wenn es in einem Netzwerk bereits Anwendungen gibt, die LDAP-Abfragen nutzen. Aber selbst in diesem Fall ist es immer noch eine gute Idee, für jede neue Anwendung injektionsresistente Frameworks zu verwenden.

Vorhandene Anwendungen, die LDAP verwenden, können auch durch die Verwendung von Whitelist-Validierung und Eingabensanitisierung gegen Injektionen gehärtet werden. Beschränken Sie die Benutzereingabe nach Möglichkeit auf eine begrenzte Anzahl vertrauenswürdiger Werte. Andernfalls sollten Benutzereingaben, die Teil einer LDAP-Abfrage sind, zuerst bereinigt werden. Vergessen Sie nicht, GET- und POST-Parameter, Cookies und HTTP-Header mit einzubeziehen, da diese ebenfalls als Angriffsvektoren dienen können. Schreiben Sie keine eigenen Funktionen, um die Eingabensanitisierung durchzuführen; verwenden Sie stattdessen eine vertrauenswürdige, auf Sicherheit fokussierte Bibliothek eines Drittanbieters oder integrierte Framework-APIs.

Neben gezielten Korrekturen können auch gute Computerpraktiken helfen, wie z. B. die Zuweisung von LDAP-abfragenden Anwendungen mit den geringsten Berechtigungen, die in einem Netzwerk benötigt werden. Auf diese Weise kann im schlimmsten Fall, wenn eine LDAP-Injektion durchkommt, der Schaden gemindert werden.

Weitere Informationen über LDAP-Injektionen

Weitere Informationen finden Sie im OWASP-Artikel über LDAP-Injektionen oder im Spickzettel zur Vermeidung von Injektionen. Sie können Ihr neu erworbenes Verteidigungswissen auch mit der kostenlosen Demo der Secure Code Warrior Plattform testen, die Cybersecurity-Teams zu den ultimativen Cyber-Kriegern ausbildet. Wenn Sie mehr darüber erfahren möchten, wie Sie diese Sicherheitslücke und andere Bedrohungen abwehren können, besuchen Sie den BlogSecure Code Warrior .

Ressource anzeigen
Ressource anzeigen

Autor

Jaap Karan Singh

Sie wollen mehr?

Tauchen Sie ein in unsere neuesten Erkenntnisse über sichere Kodierung im Blog.

Unsere umfangreiche Ressourcenbibliothek zielt darauf ab, die menschliche Herangehensweise an eine sichere Weiterbildung im Bereich der Programmierung zu stärken.

Blog ansehen
Sie wollen mehr?

Holen Sie sich die neuesten Forschungsergebnisse zur entwicklergesteuerten Sicherheit

Unsere umfangreiche Ressourcenbibliothek ist voll von hilfreichen Ressourcen, von Whitepapers bis hin zu Webinaren, die Ihnen den Einstieg in die entwicklungsorientierte sichere Programmierung erleichtern. Erforschen Sie sie jetzt.

Ressourcendrehscheibe

Coders Conquer Security: Share & Learn Series - LDAP-Injektionen

Veröffentlicht Jan 17, 2019
Von Jaap Karan Singh

Die große Mehrheit der Computersysteme verwendet das Lightweight Directory Access Protocol (LDAP). Es wird verwendet, um verteilte Verzeichnisinformationsdienste über ein beliebiges Internet Protocol (IP)-Netzwerk zu verwalten. Es dient also im Wesentlichen dazu, den Überblick über die Benutzer zu behalten.

LDAP wird häufig als Authentifizierungsquelle von Anwendungen verwendet, um festzustellen, ob ein Benutzer die Berechtigung hat, verschiedene Aktionen durchzuführen, insbesondere in Bezug auf seine definierte Rolle innerhalb einer Organisation. So können beispielsweise nur Mitarbeiter der Buchhaltung die Buchhaltungssoftware des Unternehmens nutzen. Anwendungen werden oft so programmiert, dass sie eine LDAP-Tabelle überprüfen, um sicherzustellen, dass die Benutzer innerhalb ihrer festgelegten Berechtigungen handeln.

Probleme können auftreten, wenn böswillige Benutzer eine LDAP-Abfrage manipulieren können. Dadurch kann der empfangende Server dazu gebracht werden, ungültige Abfragen auszuführen, die normalerweise nicht erlaubt wären, oder sogar ungültigen oder unsicheren Benutzern ohne Kennwort Zugang auf hoher Ebene oder als Administrator zu gewähren.  

LDAP-Injektionen können knifflig sein, aber in dieser Folge lernen wir es:

  • Wie sie funktionieren
  • Warum sie so gefährlich sind
  • Wie Sie Abwehrmaßnahmen ergreifen können, um sie zu stoppen.

Wie nutzen Angreifer LDAP Injection?

Einer der Gründe, warum LDAP-basierte Angriffe seit Jahren beliebt sind, ist die Tatsache, dass fast jedes Computersystem es verwendet. LDAP ist quelloffen und funktioniert extrem gut, sodass nicht viele Alternativen geschaffen wurden.

Im Kern ist LDAP eine Datenbank, die gültige Benutzer innerhalb eines IP-basierten Computersystems oder Netzwerks verfolgt. Es kann Benutzern ermöglichen, Informationen über Systeme, Netzwerke, Server, Anwendungen und sogar andere Benutzer im selben Netzwerk auszutauschen.

Informationen werden von LDAP in dem Äquivalent einer Datenbankzeile oder eines Datensatzes gespeichert, der als Distinguished Name bezeichnet wird, oft abgekürzt als DN. Jeder DN ist eindeutig. So könnte zum Beispiel ein DN für einen Benutzer aussehen, der in der Buchhaltung eines großen Unternehmens in Chicago arbeitet.

cn=James Smith, ou=Corporate Accounts, dc=Chicago, do=Parkview  

Um sicherzustellen, dass jeder DN eindeutig ist, können dem Datensatz verschiedene Codes hinzugefügt werden, wie "+", "/", "=" und einige andere. Es können auch Leerzeichen vor oder nach einem Datensatz eingefügt werden, um sicherzustellen, dass selbst wenn es zwei James Smiths gibt, die im Chicago Parkview Office in der Abteilung Corporate Accounts arbeiten, sie jeweils individuelle DNs haben.

Anwendungen verwenden LDAP im Allgemeinen, um Benutzern die Möglichkeit zu geben, Abfragen über bestimmte DNs zu senden, wie z. B. beim Versuch, den richtigen Ansprechpartner in der Lohnbuchhaltung zu finden, um über einen Fehler auf dem Scheck zu sprechen. LDAP-Injektionen können auftreten, wenn keine Validierung der vom Benutzer bereitgestellten Parameter in Suchanfragen erfolgt. In diesem Fall können Hacker gutartige Suchanfragen manipulieren, um Authentifizierungsmechanismen zu umgehen oder zusätzliche beliebige Abfragen auszuführen. Dies kann den Server dazu bringen, Ergebnisse anzuzeigen, die nicht erlaubt sein sollten, wie z. B. Benutzerpasswörter, oder sogar eine Anwendung dazu veranlassen, Zugriff auf hochsichere Bereiche innerhalb des Netzwerks zu gewähren, mit oder ohne gültiges Passwort.

Warum sind LDAP-Injektionen so gefährlich?

Die größte Gefahr bei LDAP-Injektionen ist wahrscheinlich die weite Verbreitung des Protokolls in den meisten IP-Computernetzwerken weltweit. Es ist ein leichtes Sprungbrett für Hacker, die Informationen stehlen oder ihre Privilegien in einem Netzwerk erhöhen wollen. Kein geschulter Hacker wird es versäumen, zu prüfen, ob LDAP-Injections möglich sind, daher müssen Sicherheitsteams sicherstellen, dass diese Löcher immer geschlossen sind.

Konkret sind etliche Anwendungen so programmiert, dass sie gültigen Benutzern helfen, begrenzte Informationen über Benutzer und Gruppen innerhalb einer Organisation oder andere in den DNs enthaltene Informationen zu finden. Zum Beispiel könnte eine Anwendung jemandem erlauben, mit LDAP nach den Kontaktinformationen von Buchhaltern in Chicago zu suchen, was unseren Freund James Smith aus dem obigen Beispiel zurückbringen würde. Abhängig von den Berechtigungen ist dies wahrscheinlich eine vollkommen gültige Verwendung einer LDAP-Abfrage.

Die Gefahr entsteht, wenn ein böswilliger Benutzer der Abfrage ungefilterte Parameter hinzufügen kann, wodurch die Art der Suche verändert und der Server dazu gebracht wird, Informationen bereitzustellen, die normalerweise nicht gegeben werden sollten. Durch Hinzufügen einer user=*-Zeichenkette könnten Angreifer beispielsweise Informationen über jeden einzelnen Benutzer einer ganzen Organisation erhalten, was wahrscheinlich niemals erlaubt sein sollte.

Bei Anwendungen, die LDAP zur Authentifizierung verwenden, kann das Problem sogar noch größer sein. Angreifer können z. B. die Zeichenfolge (&) am Ende einer LDAP-Abfrage verwenden, um dem Server vorzugaukeln, dass das Argument wahr ist. Wenn eine Anwendung LDAP zur Überprüfung eines Kennworts verwendet, kann das Erzwingen eines "True"-Arguments durch eine LDAP-Injektion es einem nicht autorisierten Benutzer ermöglichen, sich als Administrator im Netzwerk anzumelden, auch ohne ein Kennwort.

Machen Sie LDAP-Injection zu einem L-DON'T in Ihrem Netzwerk

Eine der besten Möglichkeiten, LDAP-Injektionen zu verhindern, besteht darin, etwas wie LINQtoAD oder andere Frameworks zu implementieren, die speziell dafür entwickelt wurden. Dies ist möglicherweise nicht möglich, wenn es in einem Netzwerk bereits Anwendungen gibt, die LDAP-Abfragen nutzen. Aber selbst in diesem Fall ist es immer noch eine gute Idee, für jede neue Anwendung injektionsresistente Frameworks zu verwenden.

Vorhandene Anwendungen, die LDAP verwenden, können auch durch die Verwendung von Whitelist-Validierung und Eingabensanitisierung gegen Injektionen gehärtet werden. Beschränken Sie die Benutzereingabe nach Möglichkeit auf eine begrenzte Anzahl vertrauenswürdiger Werte. Andernfalls sollten Benutzereingaben, die Teil einer LDAP-Abfrage sind, zuerst bereinigt werden. Vergessen Sie nicht, GET- und POST-Parameter, Cookies und HTTP-Header mit einzubeziehen, da diese ebenfalls als Angriffsvektoren dienen können. Schreiben Sie keine eigenen Funktionen, um die Eingabensanitisierung durchzuführen; verwenden Sie stattdessen eine vertrauenswürdige, auf Sicherheit fokussierte Bibliothek eines Drittanbieters oder integrierte Framework-APIs.

Neben gezielten Korrekturen können auch gute Computerpraktiken helfen, wie z. B. die Zuweisung von LDAP-abfragenden Anwendungen mit den geringsten Berechtigungen, die in einem Netzwerk benötigt werden. Auf diese Weise kann im schlimmsten Fall, wenn eine LDAP-Injektion durchkommt, der Schaden gemindert werden.

Weitere Informationen über LDAP-Injektionen

Weitere Informationen finden Sie im OWASP-Artikel über LDAP-Injektionen oder im Spickzettel zur Vermeidung von Injektionen. Sie können Ihr neu erworbenes Verteidigungswissen auch mit der kostenlosen Demo der Secure Code Warrior Plattform testen, die Cybersecurity-Teams zu den ultimativen Cyber-Kriegern ausbildet. Wenn Sie mehr darüber erfahren möchten, wie Sie diese Sicherheitslücke und andere Bedrohungen abwehren können, besuchen Sie den BlogSecure Code Warrior .

Wir bitten Sie um Ihre Erlaubnis, Ihnen Informationen über unsere Produkte und/oder verwandte Themen der sicheren Codierung zuzusenden. Wir werden Ihre persönlichen Daten immer mit äußerster Sorgfalt behandeln und sie niemals zu Marketingzwecken an andere Unternehmen verkaufen.

Senden
Um das Formular abzuschicken, aktivieren Sie bitte "Analytics"-Cookies. Sie können die Cookies wieder deaktivieren, sobald Sie fertig sind.