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

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

Hacker können Deine Webseiten-Features als Waffe gegen Dich verwenden!

Mit Cross-Site-Scripting (XSS) können Dich Hacker manipulieren.

… und Deine Besucher leiden darunter.

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

Aufgabe: JavaScript als Passwort-Krake

Um was geht’s? – 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.

Knappe Einordnung

DOM Based XSS gehört zu den Cross Site Scripting Arten, welche zum Ziel hat bösartigen Code auf einer fremden Webseite ausführen zu können.

Das geht soweit, dass eine Zeit lang Hacker auf einer bekannten Webseite Bitcoin-Mining-Algorithmen einfügen könnten. Während der Nutzer „normal“ die Webseiten gelesen hat, hat der Browser verdeckt für die Kriminellen im Hintergrund Bitcoins erstellt.

Mögliche Schlupflöcher können die Formulare, die Suchfelder oder die URL mit GET-Parameter auf Deiner Webseite sein. Ein „professioneller“ JavaScript-Schadcode kann bis zu den Datenbanken vordringen und dort die Daten verändern oder löschen. Wenn anderen 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: HTML und JavaScript

XSS + DOM einfach erklärt

DOMDocument Object Model ist die API zwischen HTML und Deinem JavaScript-Code.

Die DOM besitzt einen baumartige Struktur für die HTML-Objekte wie p, img, a, form, input… Der Zugriff auf die DOM ermöglicht den Aufruf, 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 fehl am Platz: Eigentlich müsst das W3C die DOM in „Webseiten-Interface“ unbenennen.

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

Persistente und nicht-Persistente XSS – Persistente XSS basiert darauf, dass der Server permanent die Script-Datei speichert und bei Aufruf der richtigen Webseite führt das XSS-Script 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: Mit JavaScript Unfug machen

Blick in den JS- Code

Die Programmiersprache JavaScript ermöglicht Hackern Deine Webseite in Form und Inhalt zu ändern. Z. B. kann JavaScript ganze HTML-Elemente mit dem DOM-Methode document.wirte().

document.getElementById(„“) kann ein bestimmtes Objekt auf der Webseite ansprechen und verändern. So können Hacker z.B. eine gezielt mit einem Fake-Login den echten überblenden.

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

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

Wenn der Nutzer auf einer „gekaperten“ 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.“

Die Zugangsdaten sind aber schon in unserem Besitz (solang sich der User nicht vertippt hat)

Fake-Logins geht noch besser

Eine Steigerung vom diesem Fake-Login ist das Auslesen des „echten Logins“.

JavaScript legt einen Click-Listener (z.B mit JQuery)auf den 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 Webseitenbesitzen bekommen, der guten Content produzieren. „Black-Hat“-SEO nutzen die schlechte SEO Agentur:

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 eine 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: Eine Welt ohne JavaScript?

Sicherungsmaßnahme – Segen und Fluch

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

Seitdem diskutiert die Online-Community, ob diese Sprache eine riesige Sicherheitslücke im Web ist oder ob die Sprache unverzichtbar ist. Einzelne „Internet Explorer“ Versionen deaktivierten JavaScript komplett – Die Realität ist anderes:

Internet Explorer akzeptiert inzwischen JavaScript
Internet Explorer akzeptiert inzwischen JavaScript

Heute basieren viele Firmen-Homepages auf dem Konzept der „Single-Page-Application“. Diese entwickeln Programmierer auf der Grundlage eines Frameworks wie Ionic (Einsteiger Tutorial) und Angular Apps.

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 „harmlosen“ Klartext um. Das erhöht die Sicherheit vor XSS enorm.

Formulare sind der XSS Klassiker
Formulare sind der XSS Klassiker

Die Umwandlung von Script-Code in Fließtext basiert auf der Konvertierung der Typen Script-Zeichen:

  • Alle & ändern zu &
  • Alle < ändern zu &lt;
  • Alle > ändern zu &gt;
  • Alle “ ändern zu &quot;
  • Alle ‚ — ändern zu > &#x27;

Diese Zeichenkette kann z. B. PHP innerhalb eins 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>

Selbst bei CSS sollt ein aufmerksamer Programmierer vorsichtig sein. Wenn Daten von außen 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

Der nächste Schritt

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 noch die Ressourcen laden, 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

1 Star2 Stars3 Stars4 Stars5 Stars (8 votes, average: 4,25 out of 5)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.