Verzeichnistraversalangriff

A Verzeichnistraversal (oder Pfad Traversal) Attacke Heldentaten Unzureichende Sicherheitsvalidierung oder Bereinigung von von Benutzer bereitgestellten Dateinamen, so dass Zeichen, die "Übergang zum übergeordneten Verzeichnis" darstellen, an das Betriebssystem übergeben werden Dateisystem -API. Eine betroffene Anwendung kann ausgenutzt werden, um unbefugten Zugang zur Dateisystem.

Verzeichnistraversal ist auch als die bekannt ../ (Dot Dot Slash) Angriff, Verzeichnisklettern und Backtracking. Einige Formen dieses Angriffs sind auch Kanonisierung Anschläge.

Beispiel

Ein typisches Beispiel für eine verletzliche Anwendung in Php Code ist:

 $ Vorlage = 'Red.php'; wenn (Ausgabe($ _Cookie['SCHABLONE']))) {  $ Vorlage = $ _Cookie['SCHABLONE']; } enthalten "/home/user/phpguru/templates/" . $ Vorlage; 

Ein Angriff gegen dieses System könnte darin bestehen, die folgende HTTP -Anfrage zu senden:

ERHALTEN /vulnerable.php Http/1.0 Plätzchen: Vorlage = ../../../../../../../../../etc/passwd 

Der Server würde dann eine Antwort generieren wie:

Http/1.0 200 OK Inhaltstyp: Text/HTML Server: Apache Wurzel: FI3SED95IBQR6: 0: 1: Systembetreiber:/:/bin/ksh Daemon:*: 1: 1 ::/tmp: phpguru: f8fk3j1oif31 .: 182: 100: Entwickler:/home/user/phpguru/:/bin /csh

Das wiederholte ../ Charaktere danach /home/user/phpguru/templates/ verursacht habenenthalten() Um zum Stammverzeichnis zu fahren, und dann die UNIX -Passwortdatei eingeben /etc/passwd.

Unix /etc/passwd ist eine gemeinsame Datei, die zum Nachweis von Verzeichnistraversal verwendet wird, wie sie oft verwendet wird Cracker versuchen knacken die Passwörter. In neueren Unix -Systemen ist jedoch die /etc/passwd Die Datei enthält nicht die Hashed -Passwörter und befinden sich stattdessen in der /etc/Shadow Datei, die nicht von nicht privilegierten Benutzern auf dem Computer gelesen werden kann. Sogar in diesem Fall jedoch lesen /etc/passwd Zeigt immer noch eine Liste von Benutzerkonten an.

Variationen

Verzeichnistraversal in seiner einfachsten Form verwendet die ../ Muster. Einige häufige Variationen sind unten aufgeführt:

Microsoft Windows

Microsoft Windows und DOS Verzeichnistraversal verwendet die .. \ oder ../ Muster.[1]

Jede Partition hat ein separates Root -Verzeichnis (gekennzeichnet C:\ wobei C eine Partition sein könnte) und es gibt kein gemeinsames Wurzelverzeichnis darüber. Dies bedeutet, dass die Angriffe für die meisten Verzeichnis Schwachstellen unter Windows auf eine einzelne Partition beschränkt sind.

Das Verzeichnistraversal war die Ursache für zahlreiche Microsoft -Schwachstellen.[2][3]

Prozent Codierung in URIs

Einige Webanwendungen versuchen, das Verzeichnis durchzuführen, indem der Pfad einer Anfrage gescannt wird Uri für Muster wie z. ../. Diese Überprüfung wird manchmal fälschlicherweise zuvor durchgeführt prozentuale Dekodierung, verursachen URIs mit Mustern wie %2e%2e/ akzeptiert werden, obwohl er dekodiert wurde in ../ vor dem tatsächlichen Gebrauch.[4]

Doppelcodierung

Die prozentuale Dekodierung kann versehentlich mehrmals durchgeführt werden. Einmal vor der Validierung, aber danach, wodurch die Anwendung anfällig für Doppelprozent-kodierende Angriffe[5] in denen illegale Zeichen durch ihre doppelt prozentierten Form ersetzt werden, um die Sicherheits-Gegenmaßnahmen zu umgehen.[6] Zum Beispiel in einem doppelzprozentig-kodierenden Angriff,, ../ kann durch seine doppelprozentkodierte Form ersetzt werden %252e%252e%252f.[7] Diese Art von Verwundbarkeit betroffene Versionen 5.0 und früher von Microsoft's Iis Webserver -Software.[8]

UTF-8

Eine schlecht implementierte UTF-8 Decoder kann Zeichen akzeptieren, die mit mehr Bytes als nötig kodiert werden, was zu alternativen Charakterdarstellungen führt, wie z. %2e und %c0%ae beide repräsentieren .. Dies ist ausdrücklich durch den UTF-8-Standard verboten,[9] hat aber immer noch zu Verzeichnistraversalen Schwachstellen in Software wie dem geführt Iis web server.[10]

Archiv

Etwas Archivformate wie Postleitzahl Ermöglichen Sie Verzeichnisanschläge: Dateien im Archiv können so geschrieben werden, dass sie Dateien im Dateisystem durch Backtracking überschreiben. Code, der Archivdateien extrahiert, kann geschrieben werden, um zu überprüfen, ob die Pfade der Dateien im Archiv nicht an Pfadtraversal beteiligt sind.

Verhütung

Ein möglicher Algorithmus zur Verhinderung des Verzeichnistraversals wäre::

  1. Verarbeiten Sie URI -Anforderungen, die nicht zu einer Dateianforderung führen, z. B. ein Hook in den Benutzercode, bevor Sie unten fortgesetzt werden.
  2. Wenn eine URI -Anfrage für eine Datei/ein Verzeichnis erfolgen soll, erstellen Sie einen vollständigen Pfad zum Datei/zum Verzeichnis, wenn sie existiert, und normalisieren Sie alle Zeichen (z. B.,. %20 auf Leerzeichen umgewandelt).
  3. Es wird angenommen, dass ein voll qualifizierter, normalisierter Pfad "Dokumentwurzel" bekannt ist und diese Zeichenfolge eine Länge hat N. Angenommen, keine Dateien außerhalb dieses Verzeichnisses können zugestellt werden.
  4. Stellen Sie sicher, dass der erste N Zeichen des voll qualifizierten Pfades zur angeforderten Datei sind genau das gleiche wie das "Dokumentroot".
  5. Wenn ja, lassen Sie die Datei zurückgegeben.
  6. Wenn nicht, geben Sie einen Fehler zurück, da die Anfrage eindeutig außerhalb der Grenzen des Webservers ist.

Die Verwendung einer hartcodierten vordefinierten Dateierweiterung zum Suffix beschränkt der Pfad nicht unbedingt den Umfang des Angriffs auf Dateien dieser Dateierweiterung.

 enthalten($ _Get['Datei'] . '.html'); 

Der Benutzer kann die verwenden Nullcharakter (Angabe des Ende der Zeichenfolge), um alles nach dem zu umgehen $_GET. (Dies ist PHP-spezifisch.)

Siehe auch

Verweise

  1. ^ "Benennung von Dateien, Pfaden und Namespaces". Microsoft. Datei-E/A-Funktionen in der Windows-API konvertieren '/' zu '\' als Teil des Konvertierens des Namens in einen Namen im NT-Stil
  2. ^ Burnett, Mark (20. Dezember 2004). "Sicherheitslöcher, die tief laufen". SecurityFocus.
  3. ^ "Microsoft: Sicherheitslücken (Verzeichnistraversal)". CVE -Details.
  4. ^ "Pfad Traversal". Owasp.
  5. ^ "CWE-174: Doppeldecodierung derselben Daten". cwe.mitre.org. Abgerufen 24. Juli 2022. Die Software decodiert denselben Eingang zweimal, was die Wirksamkeit jedes Schutzmechanismus zwischen den Dekodierungsvorgängen einschränken kann.
  6. ^ "CAPEC-120: Doppelcodierung". capec.mitre.org. Abgerufen 23. Juli 2022. Diese [doppelte Codierung] kann es dem Gegner ermöglichen, Filter zu umgehen, die versuchen, illegale Zeichen oder Zeichenfolgen zu erkennen, z. [...] Versuchen Sie es mit Doppelkodierung für Teile der Eingabe, um zu versuchen, die Filter zu überwinden.
  7. ^ "Doppelcodierung". owasp.org. Abgerufen 23. Juli 2022. Zum Beispiel repräsentieren ../ (dot-dot-slash) Zeichen%2E%2E%2f in hexadezimaler Darstellung. Wenn das % -Symbol erneut codiert wird, beträgt seine Darstellung im Hexadezimalcode % 25. Das Ergebnis aus dem Doppelcodierungsprozess ../ (Dot-dot-Slash) wäre%252E%252E%252f
  8. ^ "CVE-2001-0333". Gemeinsame Schwachstellen und Expositionen.
  9. ^ "RFC 2279 - UTF -8, Ein Transformationsformat von ISO 10646". Ietf.
  10. ^ "CVE-2002-1744". Gemeinsame Schwachstellen und Expositionen.

Ressourcen

Externe Links