DOM XSS > Erkennen + abwehren [Cross-Site-Scripting]

Hacker Manipulieren Steffen Lippke Hacking Series
Hacker Manipulieren Steffen Lippke Hacking Series

DOM XSS ist die Waffe von Hackern gegen Deine Webseite!

Die Hacker manipulieren Deine Webseite mit Cross-Site-Scripting (XSS), sodass …

… Deine Besucher selbst infiziert werden.

Wie kann ein Hacker auf meiner Webseite Inhalte verändern? Das klärt dieser Guide auf.

Was ist DOM Based XSS?

DOM Based XSS ist eine Art des Cross Site Scripting, welches Deinen Webseiten-Aufbau (DOM) temporär verändert. Dabei bleibt der grundlegende HTML-Code gleich, während der Angreifer versucht die DOM zu manipulieren.

Schadfunktionen und Selbstbereicherung für Hacker

DOM Based XSS versucht bösartigen Code auf einer fremden Webseite auszuführen, um eine schädliche Funktion im Browser jedes Webseiten-Besuchers zu aktivieren.

Einige Hacker haben in der Vergangenheit auf bekannten Webseiten Bitcoin-Mining Algorithmen eingefügt. Während der Nutzer „normal“ die Webseiten gelesen hat, hat der Browser für die Kriminellen im Hintergrund Bitcoins berechnet.

Häufige Schwachstellen auf Deiner Webseite

Mögliche Schwachstellen für DOM Based XSS können…

… auf Deiner Webseite sein. Ein JavaScript-Schadcode kann bis zu den Datenbanken vordringen und dort die Daten verändern oder löschen. Wenn andere Webseiten-Besucher die gleiche Webseite aufrufen, führt Deine eigene Webseite den Schadcode aus.

Injection über die GET Parameter
Injection über die GET Parameter

Zusammengefasst: Hacker können viel Mist mit XSS betreiben.

Grundlagen XSS + DOM einfach erklärt

DOM – Document Object Model

… ist die API zwischen HTML und Deinem JavaScript-Code.

Die DOM besitzt eine baumartige Struktur für die HTML-Objekte wie

  • p
  • img
  • a
  • form
  • input

Der Zugriff auf die DOM ermöglicht den Aufruf, die Veränderung, Löschung und Erstellung (Angular JS Framework Renderer2) einzelner Tags z. B. einem Link, einen Textblock oder einer DIV-Box.

Exemplarische DOM in HTML
Exemplarische DOM in HTML

Das W3C definiert den Aufbau der DOM, sodass wir heute eine einheitliche Struktur auf allen gültigen Webseiten haben.

Der Begriff DOM ist falsch: Eigentlich müsst das W3C die Abkürzung DOM in „Webseiten-Interface“ umbenennen.

Steffen Lippke

Du kannst Deine DOM mit dem W3C-Validatior bestätigen lassen. Eine „gut aussehende“ Webseite muss nicht zwangsläufig 100 % korrekt geschrieben sein, aber die Browser müssen die Fehler ignorieren.

Persistente und nicht-Persistente XSS

Das Persistente XSS basiert darauf, dass der Server permanent die Script-Datei speichert und bei Aufruf der richtigen Webseite führt das XSS-Skript sich selbst aus.

Persistente XSS ist findbar in Datenbanken
Persistente XSS ist findbar in Datenbanken

Das führt dazu, dass andere ahnungslose Nutzer ungewollte Aktionen bei Aufruf ausführen. Nicht-persistente XSS ist direkt in einem Link oder in der HTML-Seite eingebettet.

Hack it: DOM XSS selbst bauen

Die Programmiersprache JavaScript ermöglicht Hackern Deine Webseite in Form und Inhalt zu ändern. Z. B. kann JavaScript ganze HTML-Elemente wie Bilder, Texte oder Videos mit der DOM-Methode document.write() hinzufügen.

Das Kommando document.getElementById("") kann ein bestimmtes Objekt auf der Webseite ansprechen und verändern. So können Hacker z.B. gezielt mit einem Login mit einer Attrappe überblenden.

Dieser Login kann mit XSS generiert sein
Dieser Login kann mit XSS generiert sein

Das Kommando document.write() generiert auf der Seite des Opfers ein HTML-Formular. Die eingegebenen Login-Daten vergleicht das Formular nicht mit den echten Passwörtern, sondern speichert die Passwörter in Klartext auf unserer Hacking-Datenbank.

Wenn der Nutzer auf einer komprimierten Webseite den Nutzernamen und das Passwort im Fake-Login absendet, gibt unser Fake Login die Nachricht aus:

„Wir sind im Wartungsmodus! Versuchen Sie die Anmeldung später noch einmal.“

… auf einer gehackten Webseite

Die Zugangsdaten sind im Besitz des Hackers (,solange sich der User sich nicht beim ersten Versuch vertippt hat).

DOM XSS: Fake-Logins geht noch besser

Eine Steigerung des Fake-Logins ist das Realtime-Auslesen des „echten Logins“.

Ein JavaScript Click-Listener (z. B. mit jQuery) liegt auf dem Anmeldebutton. Nach Eingabe des Benutzernamens und des Passworts liest der JavaScript-Code die Inhalte der Textfelder aus und sendet diese an unseren Server.

Der Nutzer merkt davon nichts, weil er sich „ganz normal“ in das bekannte System einloggen konnte.

Mehr Traffic von Hackern

Auf manchen Plattformen kannst Du Dir Traffic für Deine Webseite „einkaufen“. Viel Traffic sollte nach Google nur die Webseitenbesitzer erhalten, die guten Content produzieren. Die Black-Hat-SEO nutzt die Lücke auf anderen Webseiten aus.

Ein paar Zeilen JavaScript Code leitet den gesamten Traffic von der Opfer-Seite direkt auf die Kundenseite um. Dazu legen wir über die gesamte Seite einen durchsichtigen Button.

Der Nutzer möchte auf einen darunterliegenden Link klicken, landet aber auf einer völlig andere Webseite – Nach Google ist diese Art von Traffic nicht vorteilhaft für das Ranking, da die Absprungquote überdurchschnittlich hoch ist.

(bzw. das ist Hacking)!

Sicherung: JavaScript Segen und Fluch

Im Jahr 1995 entwickelte Brendan Eich den Vorläufer von JavaScript.

Seitdem diskutiert die Online-Community, ob diese Client-Sprache eine riesige Sicherheitslücke im Web ist oder ob die Sprache unverzichtbar ist.

Einzelne Internet Explorer Versionen deaktivierten JavaScript ganz.

Internet Explorer akzeptiert inzwischen JavaScript
Internet Explorer akzeptiert inzwischen JavaScript

Heute basieren viele Homepages, Web-Apps, Progressive Webs und Single Page Apps auf JavaScript zu 100 %. Programmierer entwickeln auf der Grundlage eines JavaScript-Frameworks die Webseiten!

Steffen Lippke

Ohne JavaScript läuft hier nichts mehr.

Umwandlung von Code in Text

Viele Foren unterdrücken die Kompilierung von JavaScript bei der Erstellung von Posts komplett.

Die meisten Eingabefelder und URL-Parameter wandeln „bösen“ JavaScript Code in einen encoded Klartext um. Das erhöht die Sicherheit vor XSS.

Formulare sind der XSS Klassiker
Formulare sind der XSS Klassiker

Die Umwandlung von Script-Code in Fließtext basiert auf der Konvertierung der typischen JavaScript Auszeichnungen:

  • Alle & ändern zu &
  • Alle < ändern zu &lt;
  • Alle > ändern zu &gt;
  • Alle " ändern zu &quot;
  • Alle ' -- ändern zu > &#x27; (SQL-Injection)

PHP fügt die Zeichenkette innerhalb eines div oder span Tags einfügen. Wenn Du in Deinem Code JavaScript nutzt und Strings von einem Eingabefeld stammen, sollten PHP diese vorher konvertieren.

Das Gleiche gilt bei URLs. Die GET-Parameter kann ein Hacker für JavaScript-Injections missbrauchen.

<script>var eineVarible = “BOSER CODE KANN HIER REIN?!“;:</script>

Ein aufmerksamer Programmierer sollte auch bei CSS vorsichtig sein. Wenn Daten von außerhalb kommen, kann der Aufruf der CSS den JavaScript-Code ausführen:

  • { background-url : "javascript:alert(‘Das ist boese XSS’)"; }
  • { text-size: "expression(alert(‘Das ist boese XSS’))"; }
XSS in CSS ist etwas spezieller
XSS in CSS ist etwas spezieller

Maximale Sicherheit mit Header

Eine Content Security Policy erstellt eine Whitelist mit den Ressourcen, die auf einer Domain aufgerufen werden dürfen. Entfernte Scripts haben somit keine Chance mehr. Der Browser lädt nur die Ressourcen, die sich auf Deiner Webseite befinden.

Credits

Icons made by Gregor Cresnar from www.flaticon.com is licensed by CC 3.0 BY  – Icons made by dDara from www.flaticon.com is licensed by CC 3.0 BY – Icons made by Icomoon from www.flaticon.com is licensed by CC 3.0 BY –Icons made by Those Icons from www.flaticon.com is licensed by CC 3.0 BY

Quellenangabe Bilder: Icons und SVG-Grafiken im Titelbild von Microsoft PowerPoint 2019, frei verfügbar nach EULA

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.