Was ist Cross-Site-Scripting (XSS)?
Die als Cross-Site-Scripting (XSS) bezeichnete Angriffsmethode attackiert Sicherheitslücken in Webanwendungen. Dabei übergibt der Cyberkriminelle nicht vertrauenswürdigen Code in einen vertrauenswürdigen Kontext und startet so den Angriff. Der Angriff findet zwischen verschiedenen Aufrufen der Seite statt, daher die Bezeichnung „Cross-Site“. Unterschiedliche Webseiten müssen nicht involviert sein. In der Ausführung setzen die meisten Angreifer auf die Scriptsprache JavaScript, aus diesem Grund heißt die Angriffsform für Cyberattacken Cross-Site-Scripting (XSS).
Wie funktioniert Cross-Site-Scripting (XSS)?
Cross-Site-Scripting (XSS) ist immer dann möglich, wenn eine Webanwendung Benutzereingaben aus dem Browser ohne Überprüfung des Inhalts weitersendet, es ist eine Art von HTML Injection. Bei solchen Lücken spricht man von XSS-Löchern, über diese gelangen die schädlichen Skripte auf den Client des Betroffenen. Ohne Überprüfung können Angreifer Skripte indirekt an den Zielbrowser senden und auf dem Clientrechner Schadcode ausführen. Die Parameterübergabe an ein serverseitiges Skript zur Erzeugung einer dynamischen Webseite ist ein Beispiel. Für die XSS-Angriffe ist jede von Browsern interpretierbare Skriptsprache geeignet, auch VB-Skript oder ActiveScript sind möglich. In der Folge können Angreifer zum Beispiel serverseitige Skripte wie Login-Formulare manipulieren und eine Weitergabe der Eingabedaten einrichten.
Ziel von XSS-Angriffen ist nicht immer den betroffenen Client direkt zu schaden oder private Daten zu stehlen. Die Angriffs-Skripte sind ebenso im Einsatz, um den betroffenen Client als Initiator von Malware- und Phishing-Angriffen auszunutzen. Die Verursacher der Angriffe bleiben dabei häufig anonym im Hintergrund verborgen. Drei XSS-Arten sind zu unterscheiden.
Das reflektierte Cross-Site-Scripting (XSS)
Das schädliche Skript wird zum Webserver gesendet, dort nicht gespeichert, und ungeprüft an den Client zurückgesendet.
Beispiel: Der Angreifer verwendet eine präparierten Link, verbreitet diesen über E-Mails, und leitet den Empfänger der E-Mail auf einen Fake-Anmeldebildschirm des Online-Banking-Anbieters weiter.
Das persistente Cross-Site-Scripting (XSS)
Beim beständigen Cross-Site-Scripting (XSS) erfolgt die Speicherung der schädlichen Skripte auf dem Webserver und sie werden bei jedem Aufruf an den jeweiligen Client gesandt. Es eignen sich Webanwendungen wie Foren und Blogs, die Benutzereingaben auf dem Server speichern und ungeprüft ausgeben.
Beispiel: Beiträge von Benutzern speichert das CMS in der Datenbank ohne Überprüfung und Verschlüsselung ab. Angreifer hängen ein schädliches Skript an einen Beitrag an und Betrachter der Webseite führen das Skript dann mit dem Aufruf aus.
Das DOM-basierte Cross-Site-Scripting (XSS)
Auch als lokales XSS bezeichnet, erfolgt der Angriff hier über eine manipulierte URL. Der Schadcode wird in einem clientseitigen Skript ungeprüft ausgeführt, der Webserver ist nicht betroffen. Dadurch sind auch statische Websites gefährdet und können mit dieser Scripting-Variante attackiert werden.
Wie kann ich mich vor Cross-Site-Scripting (XSS) schützen?
Seitenbesucher riskieren bei XSS-Angriffen den Verlust ihrer Daten oder werden unbemerkt selbst Teil folgender Angriffe. Betreiber müssen die Kundendaten schützen und das System vor Abstürzen bewahren. Andernfalls sinken die Besucherzahlen und Abmahnungen von Google mit schlechteren Ranking-Platzierungen sind die Folge. Internetnutzer und Webseiten-Betreiber sollten gleichermaßen schützende Maßnahmen einleiten.
Tipps für Internetnutzer
Anwender schützen sich am besten, indem sie die Java-Unterstützung des Browsers ausschalten. Bei deaktiviertem Active Scripting haben DOM-basierte Angriffe mit JavaScript keine Wirkung. Links aus fragwürdigen E-Mails sollten in keinem Fall geöffnet werden. Das Ausschalten von JavaScript schützt allerdings nur vor echten XSS-Attacken. Wird der Betroffene mit einer HTML-Injection (zum Beispiel mit `<iframe>`) angegriffen, schützt das Abschalten von Active Scripting im Browser nicht. Zusätzlichen Schutz bieten Browsererweiterungen wie das Plugin NoScript für Firefox-Browser. Solch eine Erweiterung blockiert alle aktiven Inhalte, dazu gehören neben JavaScript auch Microsoft Silverlight, Adobe Flash und Java-Applets. Über eine Positivliste werden vertrauenswürdige Seiten freigegeben, fremde Inhalte können in einer freigegeben Webseite dank des XSS-Schutzes keinen Schadcode mehr ausführen. Inzwischen gibt es für alle Browser entsprechende Erweiterungen, in Google Chrome ist das Konzept mit der Erweiterung ScriptSafe implementiert.
Tipps für Webseiten-Betreiber
Web-Application-Firewalls können theoretisch einfache XSS-Attacken abwehren. Häufig ist das Cross-Site-Scripting (XSS) nur der Beginn und es folgen schwerwiegendere Angriffe. Webseitenbetreiber müssen alle eingehenden Eingabewerte als unsicher ansehen und diese prüfen, bevor der Webserver die Daten empfängt. Dabei ist es sinnvoll, die erlaubten Eingaben genau zu definieren (eine Weiße Liste anlegen) und nur solche zuzulassen. DOM-Injections zu verhindern, ist für Webseiten-Betreiber schwierig, denn die Benutzereingaben können nicht vom Server geprüft werden. Da diese Angriffsmethode den Server umgeht, muss der Browser des Clients die Eingabedaten prüfen. Metazeichen müssen bei der Ausgabe ersetzt werden, meist integrieren die Skript- und Programmiersprachen Funktionen, mit denen sich Metazeichen ersetzen lassen. Um Cross-Site-Scripting effektiv zu verhindern, kann der Webseitenbetreiber Content Security Policies einsetzen und erlaubte Quellen für Webseiten-Bestandteile definieren. Mit geeigneten Vorsichtsmaßnahmen wird ein guter Schutz vor Cross-Site-Scripting (XSS) erreicht.