Fehlende Praxiserfahrung? DVWA schafft Abhilfe

Ein legaler Weg Schwachstellen auszunutzen

[IT-Sicherheit] - 24.05.2019 Aus eigener Erfahrung weiß ich, dass es manchmal eine Herausforderung darstellen kann ein bestimmtes Konzept der IT-Sicherheit zu begreifen. Dies liegt jedoch meist nicht daran, dass dieses tatsächlich unmöglich zu verstehen ist.

Oftmals werden diese Konzepte recht trocken, theoretisch und wenig praxisnah vermittelt. Das Problem daran ist, dass das Ausnutzen von Sicherheitslücken in der Praxis oft einfacher ist als den Vorgang zu beschreiben. Und in vielen Fällen haben Leser bestimmte weiterführende Fragen die selten in den Beschreibungen einer bestimmten Sicherheitslücke beantwortet werden. Theorie kann die Praxis nicht ersetzen - nur unterstützen Ein einfaches Beispiel hierzu ist das Ausnutzen eines unsicheren JSONP Endpunktes. JSONP ermöglicht es die Same Origin Policy (SOP) auszuhebeln und dadurch Daten an Websites mit einer anderen Domain freizugeben. Hierfür werden die Daten einfach im JSON Format ausgeliefert und von der anderen Website mittels <script> tag eingebunden. Damit dies funktioniert, wird der JSON String in einen JavaScript Funktionsaufruf eingebettet. Dies sieht dann folgendermaßen aus.

URL: https://example.com/user?callback=jsonp
Serverantwort:
HTTP/1.1 200 OK
Content-Type: application/javascript
X-Content-Type-Options: nosniff
Server: Apache


jsonp({“username”: “user1”});

Typische Fragen die dabei auftauchen sind beispielsweise:

  • Ist JSONP grundsätzlich gefährlich auch wenn die zur Verfügung gestellten Daten harmlos sind?
  • Ist es nötig dass der Content-Type Header den Wert application/javascript enthält?
  • Weshalb sind die JSON-Daten im jsonp Funktionsaufrauf eingebettet?
  • Was ist die Funktion des X-Content-Type-Options headers? Hat er etwas mit JSONP zu tun oder wurde er aus anderen Gründen gesetzt?
  • Wie ist es möglich von einer anderen Website an die Daten zu gelangen?
  • Wieso können JSON-Daten nicht ohne diesen Funktionsaufrauf ausgelesen werden?

Oftmals werden solche Fragen nicht hinreichend beantwortet, da sie mit dem Thema nur bedingt etwas zu tun haben. Es ist natürlich sinnvoll all diese Themengebiete früher oder später zu behandeln, allerdings hilft es dem Leser nicht erst dutzende verschiedene Blogartikel, Wikipedia-Einträge und Dokumentationen zu lesen nur um eine Schwachstelle zu verstehen.

Praxiserfahrung sammeln

Eine viel effektivere Methode ist es, eine Website aufzusetzen, einen eigenen JSONP Endpunkt zu erstellen und selbst auszuprobieren was passiert wenn einzelne HTTP Response-Header weggelassen oder verändert werden, wie es möglich ist JSONP auszunutzen und weshalb es nötig ist die Daten in einen Funktionsaufruf zu schreiben.

Das eigenständige Beantworten dieser Fragen durch ein praxisnahes Beispiel und Tests hilft nicht nur dabei eine Flut an nicht unmittelbar nützlichen Informationen zu vermeiden, sondern bestätigt auch, dass man das erlernte tatsächlich verstanden hat, indem man so eine Schwachstelle selbst ausnutzt.

Erst wenn man dies geschafft hat macht es Sinn dabei gewonnene Erkenntnisse zu überprüfen, indem man beispielsweise weitere Artikel über zusätzliche Konzepte (wie den X-Content-Type-Options Header oder Content-Types) liest. Und durch die bereits gewonnene Praxiserfahrung wird es einfacher sein diese zu verstehen.

Das Problem mit Praxiserfahrung im Rahmen der IT-Sicherheit

Praxiserfahrung zu sammeln ist einer der wichtigsten Aspekte vieler Berufe und mittlerweile ist diese oft ein wichtiges Kriterium bei der Auswahl von Bewerbern auf eine Stelle. Während es in anderen Berufen schon oft schwer sein kann diese zu erhalten, ist es im Bereich der IT-Sicherheit noch ein wenig komplizierter. Denn für das Aufspüren und Ausnutzen von Sicherheitslücken bedarf es generell einer Genehmigung der zu testenden Seite.

Natürlich kann man sich jederzeit Open Source Software bedienen, jedoch ist es für Anfänger meist überwältigend durch die große Menge an Codezeilen zu navigieren und Problemfelder zu erkennen, insbesondere, wenn derjenige noch nicht sonderlich sicher im Ausnutzen von Sicherheitslücken ist. Denn die Ausnutzung der Schwachstellen gerät dadurch in den Hintergrund und die Frustration ist oftmals groß.

Verdammt unsichere Webanwendungen

Allerdings gibt es nicht nur gewöhnliche Open Source Webanwendungen in denen man erst eventuelle Schwachstellen suchen muss um diese auszunutzen. Stattdessen gibt es absichtlich unsicher gestaltete Webseiten mit denen es möglich ist, eigene Erfahrungen mit Sicherheitslücken zu sammeln. Die wohl bekannteste unter ihnen ist DVWA, die Abkürzung für Damn Vulnerable Web Application.

Das Prinzip ist recht einfach. Es gibt verschiedene Schwachstellen die man ausprobieren kann, beispielsweise Cross Site Scripting (XSS) oder Local File Inclusions (LFI). Diese haben jeweils verschiedene Sicherheitslevel die man setzen kann.

Low: Einfach auszunutzen
Medium: Etwas schwieriger auszunutzen, einige Einschränkungen
High: Sehr schwer auszunutzen
Impossible: Unmöglich auszunutzen, sichere Implementierung

Das gute daran ist, dass es den Nutzer dazu animiert, die Schwierigkeit allmählich zu steigern. Denn teilweise ist es so, dass Entwickler sehr wohl um die Gefahr einzelner Schwachstellen wissen, sie jedoch nicht korrekt verhindern

Die Installation der DVWA

Es gibt mehrere Methoden DVWA zu installieren um die Anwendung zu testen. Man kann beispielsweise das auf Github liegende git Repository klonen. Einfacher ist allerdings die Installation mit Hilfe eines Docker Containers. Wie dies funktioniert kann hier nachvollzogen werden. Wem das ein Schritt zu viel ist, kann sich vorher die Installationsanleitung von Docker durchlesen. Grob gesagt sind die folgenden Schritte notwendig:

  1. Installation von Docker
  2. Das Aufsetzen des Containers mit dem folgenden Befehl:
  3. docker run --rm -it -p 80:80 vulnerables/web-dvwa
  4. Aufrufen der Seite über http://localhost
  5. Drücken des “Create / Reset Database” Buttons
  6. Einloggen mit
  7. Nutzername: admin
  8. Passwort: password

Diese Schritte können im oben angegebenen Link noch einmal ausführlich nachvollzogen werden.