Zum Inhalt springen

„Directory Traversal“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
+Redundanzbaustein
Inhalte von Forceful Browsing hier eingebaut
Zeile 4: Zeile 4:
|12=f|2=März 2017|1=[[Benutzer:Trustable|Trustable]] ([[Benutzer Diskussion:Trustable|Diskussion]]) 11:40, 14. Mär. 2017 (CET)}}
|12=f|2=März 2017|1=[[Benutzer:Trustable|Trustable]] ([[Benutzer Diskussion:Trustable|Diskussion]]) 11:40, 14. Mär. 2017 (CET)}}


Unter '''Directory Traversal''' versteht man eine [[Sicherheitslücke]] in einem [[Webserver]] oder einer [[Webanwendung]], bei der durch Eingabe von [[URL]]s auf beliebige Dateien und Verzeichnisse zugegriffen werden kann, die dafür eigentlich nicht vorgesehen waren. Diese kann so ausgenutzt werden, dass sensible Daten wie Passwörter preisgegeben werden.
Als '''Directory Traversal''' (oder auch ''Forceful Browsing'') bezeichnet man eine [[Sicherheitslücke]] in einem [[Webserver]] oder einer [[Webanwendung]], bei der durch Eingabe von [[URL]]s auf Dateien und Verzeichnisse zugegriffen werden kann, die dafür eigentlich nicht vorgesehen waren. Mögliche Ziele sind Dateien mit sensible Daten wie [[Postanschrift|Adressdaten]], [[Kreditkarte]]nnummern oder auch [[Kennwort|Passwörtern]].


== Details ==
== Details ==
Zeile 11: Zeile 11:


Grundlegend für diesen Angriff ist, dass man mit der Angabe von <code>../</code> sich in der [[Verzeichnisstruktur]] eine Ebene nach oben beziehungsweise mit <code>/</code> zur Wurzel der Verzeichnisstruktur bewegt.
Grundlegend für diesen Angriff ist, dass man mit der Angabe von <code>../</code> sich in der [[Verzeichnisstruktur]] eine Ebene nach oben beziehungsweise mit <code>/</code> zur Wurzel der Verzeichnisstruktur bewegt.

== Durchführung ==
{{Belege fehlen}}
Durch Analyse der Webanwendung versucht der Angreifer Informationen zu gewinnen, wie Parameter und aufgerufene URLs ausgewertet werden. Dies können sowohl dynamische Formulardaten, die ungenügend geprüft werden, wie auch statische Dokumente sein. Im Falle von Dokumenten ist die Vorgehensweise recht einfach. Befindet sich z.&nbsp;B. ein Dokument mit dem Namen „Jahresbericht_2008.pdf“ auf dem Server, und wird dieses durch den URL <tt><nowiki>http://firma/berichte/Jahresbericht_2008.pdf</nowiki></tt> referenziert, so könnte der Angreifer daraus schließen, dass auch Dokumente für andere Jahre existieren und dies durch Abfrage des entsprechend abgewandelten URLs überprüfen. Ziel können auch [[Backup]]s oder alte Versionen von Skripten sein, die möglicherweise sensible Daten enthalten. Ein [[PHP]]-Skript „database.php“ kann z.&nbsp;B. die Zugangsdaten zu einem [[Datenbank]] Management System enthalten. Diese Daten werden aber nicht an den Benutzer geschickt, sondern nur intern durch den [[Interpreter]] zur Verbindung zur Datenbank verwendet. Existiert nun aber ein Backup dieser Datei unter dem Namen „database.php.bak“, so wird der Inhalt der Datei möglicherweise als reiner Text erkannt und direkt an den Benutzer gesendet, der auf diesem Wege die Zugangsdaten im Klartext zu Gesicht bekommt.

Die Manipulation von Parametern funktioniert auf gleiche Weise. Bekommt ein Anwender beispielsweise unter einem URL <tt><nowiki>http://bank/kontostand?nr=12345</nowiki></tt> seine eigenen Kontodaten angezeigt, könnte er versuchen, durch Veränderung der Kontonummer im URL die Daten zu fremden Konten zu erlangen. Damit dieser Angriff funktioniert muss allerdings vorausgesetzt werden, dass die Anwendung den Parameter nicht insoweit überprüft, ob der Benutzer auch das Recht hat, diese Aktion durchzuführen.


== Beispiel ==
== Beispiel ==
Zeile 31: Zeile 37:


Als Gegenmaßnahme einfach nach <code>../</code> in einem Pfad zu suchen reicht nicht aus. Es muss auch berücksichtigt werden, dass einzelne Zeichen durch [[URL-Kodierung]] ersetzt sein könnten. (So bewirkt z.&nbsp;B. <code>%2e%2e%2f</code> in einer URL genau dasselbe wie <code>../</code>.)
Als Gegenmaßnahme einfach nach <code>../</code> in einem Pfad zu suchen reicht nicht aus. Es muss auch berücksichtigt werden, dass einzelne Zeichen durch [[URL-Kodierung]] ersetzt sein könnten. (So bewirkt z.&nbsp;B. <code>%2e%2e%2f</code> in einer URL genau dasselbe wie <code>../</code>.)

== Rechtslage ==

=== Deutschland ===
{{Belege fehlen}}
In Deutschland befindet sich diese Art von Angriff in einer rechtlichen Grauzone. Insbesondere dann, wenn der Angreifer sich einen Nutzen aus den Daten verschafft, liegt eine Straftat vor – auch wenn der Ersteller die Daten scheinbar öffentlich [[Netzpublikation|ins Netz gestellt]] hat.

== Weblinks ==
* [https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/Studien/WebSec/WebSec.pdf?__blob=publicationFile&v=1 Bundesamt für Sicherheit in der Informationstechnik (BSI): Maßnahmenkatalog und Best Practices für die Sicherheit von Webanwendungen] (PDF; 884&nbsp;kB)


[[Kategorie:Sicherheitslücke]]
[[Kategorie:Sicherheitslücke]]

Version vom 22. März 2017, 22:21 Uhr

Als Directory Traversal (oder auch Forceful Browsing) bezeichnet man eine Sicherheitslücke in einem Webserver oder einer Webanwendung, bei der durch Eingabe von URLs auf Dateien und Verzeichnisse zugegriffen werden kann, die dafür eigentlich nicht vorgesehen waren. Mögliche Ziele sind Dateien mit sensible Daten wie Adressdaten, Kreditkartennummern oder auch Passwörtern.

Details

Normalerweise sollte von außen nicht auf Dateien eines Webservers außerhalb des Web-Verzeichnisses oder dessen Unterverzeichnisse zugegriffen werden können. Bei einem Directory-Traversal-Angriff versucht ein Angreifer nun mittels manipulierter Pfadangaben auf Dateien außerhalb dieser Verzeichnisse zuzugreifen.

Grundlegend für diesen Angriff ist, dass man mit der Angabe von ../ sich in der Verzeichnisstruktur eine Ebene nach oben beziehungsweise mit / zur Wurzel der Verzeichnisstruktur bewegt.

Durchführung

Durch Analyse der Webanwendung versucht der Angreifer Informationen zu gewinnen, wie Parameter und aufgerufene URLs ausgewertet werden. Dies können sowohl dynamische Formulardaten, die ungenügend geprüft werden, wie auch statische Dokumente sein. Im Falle von Dokumenten ist die Vorgehensweise recht einfach. Befindet sich z. B. ein Dokument mit dem Namen „Jahresbericht_2008.pdf“ auf dem Server, und wird dieses durch den URL http://firma/berichte/Jahresbericht_2008.pdf referenziert, so könnte der Angreifer daraus schließen, dass auch Dokumente für andere Jahre existieren und dies durch Abfrage des entsprechend abgewandelten URLs überprüfen. Ziel können auch Backups oder alte Versionen von Skripten sein, die möglicherweise sensible Daten enthalten. Ein PHP-Skript „database.php“ kann z. B. die Zugangsdaten zu einem Datenbank Management System enthalten. Diese Daten werden aber nicht an den Benutzer geschickt, sondern nur intern durch den Interpreter zur Verbindung zur Datenbank verwendet. Existiert nun aber ein Backup dieser Datei unter dem Namen „database.php.bak“, so wird der Inhalt der Datei möglicherweise als reiner Text erkannt und direkt an den Benutzer gesendet, der auf diesem Wege die Zugangsdaten im Klartext zu Gesicht bekommt.

Die Manipulation von Parametern funktioniert auf gleiche Weise. Bekommt ein Anwender beispielsweise unter einem URL http://bank/kontostand?nr=12345 seine eigenen Kontodaten angezeigt, könnte er versuchen, durch Veränderung der Kontonummer im URL die Daten zu fremden Konten zu erlangen. Damit dieser Angriff funktioniert muss allerdings vorausgesetzt werden, dass die Anwendung den Parameter nicht insoweit überprüft, ob der Benutzer auch das Recht hat, diese Aktion durchzuführen.

Beispiel

Eine URL sehe folgendermaßen aus:

http://www.example.com/index.foo?item=datei1.html

Das item-Argument dient hierbei zur Angabe einer Datei, die ausgegeben werden soll. Wenn das index.foo-Skript den Argumentwert nicht ausreichend prüft, liegt eine Directory-Traversal-Schwachstelle vor.

Ein Angreifer kann nun eine andere Datei angeben, die auch in einem völlig anderen Verzeichnis liegen kann, da man in einem Pfad durch Angabe von ../ eine Verzeichnisebene nach oben gehen kann. Angenommen das Web-Verzeichnis liege drei Verzeichnisebenen tief auf dem Laufwerk C:, so würde folgende URL auf einem Windows-Webserver die Datei C:/Config.sys ausgeben, wenn das index.foo-Skript Lesezugriff auf diese Datei hat.

http://www.example.com/index.foo?item=../../../Config.sys

Die genaue Verzeichnistiefe ist einem Angreifer normalerweise zwar nicht bekannt, kann dann aber durch Ausprobieren ermittelt werden.

Ist der Webserver selbst anfällig, so könnten nicht nur beliebige Dateien ausgelesen, sondern auch beliebige Anwendungen aufgerufen werden, etwa durch:

http://www.example.com/index.foo?item=../../../Windows/System32/cmd.exe?/C+dir+C:\

Als Gegenmaßnahme einfach nach ../ in einem Pfad zu suchen reicht nicht aus. Es muss auch berücksichtigt werden, dass einzelne Zeichen durch URL-Kodierung ersetzt sein könnten. (So bewirkt z. B. %2e%2e%2f in einer URL genau dasselbe wie ../.)

Rechtslage

Deutschland

In Deutschland befindet sich diese Art von Angriff in einer rechtlichen Grauzone. Insbesondere dann, wenn der Angreifer sich einen Nutzen aus den Daten verschafft, liegt eine Straftat vor – auch wenn der Ersteller die Daten scheinbar öffentlich ins Netz gestellt hat.