Wie XSS-Angriffe verhindert werden können

Verhindern Sie die Ausführung böswilliger Skripte und den Diebstahl von Nutzerdaten, indem Sie HTML-Eingaben blockieren, Daten bereinigen, Cookies sichern und Web Application Firewalls (WAFs) einsetzen.

Lernziele

Nach Lektüre dieses Artikels können Sie Folgendes:

  • XSS definieren
  • Funktionsweise von XSS verstehen
  • Erfahren, wie Sie XSS-Angriffe verhindern können

Link zum Artikel kopieren

Was ist XSS?

Cross-site scripting (XSS) ist eine Taktik, bei der ein Angreifer Schadcode über ein oder mehrere Web-Skripte in eine legitime Website oder Web-App einschleust. Wenn ein Nutzer die Website lädt oder die Web-App ausführt, werden diese Skripte im Browser des Nutzers ausgeführt.

Die Skripte können eine Vielzahl böswilliger Aktionen ausführen, z. B. einen Diebstahl von HTTP-Cookies, Sitzungstoken oder anderen sensiblen Nutzerinformationen. Ein Angreifer könnte diese Informationen verwenden, um sich als Nutzer auszugeben und unbefugten Zugriff auf Konten auf verschiedenen Plattformen zu erlangen, wie soziale Medien oder Bankkonten. Darüber hinaus können Skripte Websites verunstalten, Nutzer auf böswillige Seiten umleiten oder vertrauliche Daten aus Web-Apps extrahieren.

Weitere Informationen finden Sie unter Was ist Cross-site scripting?

Welche Arten von XSS-Angriffen gibt es?

Die beiden bekanntesten Arten von XSS-Angriffen sind Reflected XSS (nicht persistent) und Stored XSS (persistent).

Reflected XSS (nicht persistent)

Reflected XSS-Angriffe können auftreten, wenn eine legitime Website die Eingaben der Nutzer nicht validiert oder bereinigt. Diese Angriffe beginnen häufig mit Social Engineering. Dabei versenden die Angreifer Phishing-E-Mails oder hinterlassen Links in Nachrichten in Online-Foren, um die Nutzer zum Anklicken zu verleiten. Der Link enthält in der Regel die URL einer legitimen Website, an die Schadcode angehängt ist.

Wenn ein Nutzer auf den Link klickt, sendet sein Browser eine Anfrage an die legitime Website, die den eingeschleusten Code an den Browser des Nutzers „reflektiert“. Da die Website die Eingabe nicht ordnungsgemäß bereinigt, wird das böswillige Skript im Browser des Nutzers ausgeführt.

Der Code könnte die Cookies des Nutzers kopieren und an den Angreifer senden. Wenn ein Angreifer ein Sitzungscookie erwirbt, könnte er die Kontrolle über die Sitzung übernehmen, was es ihm unter anderem ermöglichen würde, betrügerische Einkäufe zu tätigen, Bankkontoinformationen zu stehlen oder Spam auf Social-Media-Plattformen zu posten.

Diese Art von XSS wird als „reflektierter“ Angriff bezeichnet, da das böswillige Skript vom Webserver reflektiert und im Browser des Nutzers ausgeführt wird. Man spricht auch von „nicht persistent“, weil das Skript nicht kontinuierlich ausgeführt wird, sondern nur beim Laden der Seite im Browser des Nutzers.

Stored XSS (persistent)

Stored XSS-Angriffe sind schwerwiegender als Reflected XSS-Angriffe. Bei Stored XSS wird ein böswilliges Skript dauerhaft auf dem Zielserver gespeichert.

Angreifer führen diese Form von XSS in der Regel aus, indem sie ein böswilliges Skript in ein Formularfeld einbetten, z. B. in ein Kommentarfeld, ein Nutzerprofil oder in ein beliebiges Eingabefeld, das Nutzerinhalt akzeptiert und speichert. Sobald der Beitrag, der Kommentar oder das Formular abgeschickt wurde, wird das Skript in die Web-App eingefügt und in der Datenbank der Web-App gespeichert. Wenn andere Nutzer die betroffene Seite laden, wird das gespeicherte Skript in ihren Browsern ausgeführt. Ähnlich wie bei Reflected XSS-Angriffen kann das Skript Cookies oder andere Benutzerinformationen stehlen, die dann an den Angreifer zurückgeschickt werden können.

Diese Art von XSS wird auch als „persistent“ bezeichnet, da sie bei jedem Zugriff auf die Seite ausgeführt wird. Aus diesem Grund sind Stored XSS-Angriffe besonders gefährlich: Sie können eine große Anzahl von Nutzern treffen, die nichts anderes tun, als die Webseite zu betrachten.

Wie können Nutzer XSS-Angriffe verhindern?

Einzelne Nutzer können verschiedene Maßnahmen ergreifen, um das Risiko von XSS-Angriffen zu verringern:

Verdächtige E-Mails und Nachrichten erkennen

Da viele XSS-Angriffe mit Phishing-Schemata oder anderen Social Engineering-Taktiken beginnen, sollten Nutzer lernen, verdächtige E-Mails und Nachrichten zu erkennen. Durch die Benachrichtigung der zuständigen IT- oder Sicherheitsteams, können Nutzer dazu beitragen, XSS-Angriffe zu stoppen und andere Sicherheitsprobleme anzugehen.

Links genau prüfen

Wenn Nutzer in einem Online-Forum oder in einem Beitrag in einem sozialen Netzwerk einen Link von jemandem sehen, den sie nicht kennen oder dem sie nicht vertrauen, sollten sie es sich zweimal überlegen, ob sie auf den Link klicken. Auch wenn der Link seriös erscheint, ist Vorsicht geboten. Viele Links, die XSS-Angriffe auslösen, scheinen legitim zu sein, da sie legitime URLs enthalten. Nutzer sollten jedoch den gesamten Link sorgfältig prüfen – auch alles, was nach dem Suffix folgt (.com, .org, .gov, oder andere). Ungewöhnlicher Text nach der Seitenadresse könnte Schadcode sein.

Wie können Entwickler XSS-Angriffe verhindern?

Entwickler können eine wichtige Rolle bei der Verhinderung von XSS-Angriffen spielen, indem sie einige wichtige Best Practices implementieren:

Eingaben validieren

Entwickler können Regeln implementieren, die Nutzer daran hindern, Daten auf einer Seite oder in einem Formular einzugeben, wenn diese nicht bestimmten Kriterien entsprechen. Wenn beispielsweise in einem Formular nach einer Sozialversicherungsnummer oder einer Telefonnummer gefragt wird, können Entwickler eine Regel erstellen, nach der diese Eingabe nur Zahlen, Bindestriche oder Klammern enthalten darf. Für eine robustere Prävention von Angriffen können Entwickler Validierungsregeln definieren, die Tags oder Zeichen, die häufig für XSS-Angriffe verwendet werden (z. B. < script > Tags) ausdrücklich ablehnen.

Entwickler können Nutzer auch daran hindern, HTML in Kommentaren, Beiträgen und Formulareingaben zu verwenden. HTML-Inhalt kann verwendet werden, um böswillige Skripte zu posten oder Links mit Schadcode-URL zu verbergen.

Wenn Unternehmen ihren Nutzern erlauben möchten, Rich Content wie formatierten Text oder Bilder zu posten, können sie Markdown (eine ressourceneffiziente Markup-Sprache) verwenden oder Rich-Text-Formatierung innerhalb eines „What-You-See-Is-What-You-Get“ oder kurz WYSIWYG-Editors aktivieren. Beide Methoden sind sicherere Wege zur Unterstützung von Rich Content.

Daten bereinigen

Entwickler können dazu beitragen, Schäden durch XSS-Angriffe zu verhindern, indem sie ein Verfahren implementieren, das Daten überprüft, nachdem sie an den Webserver gesendet wurden, aber bevor sie anderen Nutzern angezeigt werden. Selbst wenn Entwickler beispielsweise die Verwendung von HTML zulassen, können sie alle HTML-Eingaben bereinigen und jeglichen Schadcode herausfiltern, bevor er in einem Browser ausgeführt wird.

Die Ausgabecodierung und das „Escaping“ verfolgen einen ähnlichen Ansatz. Die Idee ist, böswillige Skripte oder anderen Code, der in den Eingaben des Nutzers enthalten ist, in normalen Text umzuwandeln, bevor etwas auf eine Seite geschrieben wird. Bei der Ausgabecodierung wird der Code in ein anderes Format konvertiert; beim Escaping werden dem Code Sonderzeichen (wie Backslashes oder Anführungszeichen) hinzugefügt. In beiden Fällen wird der resultierende Text von einem Browser nicht als Code interpretiert und ausgeführt. Während die Bereinigung den Code herausfiltert, bleibt der Code erhalten und wird gleichzeitig unschädlich gemacht.

Code Reviews und Tests durchführen

Entwickler sollten Sicherheit in den gesamten Entwicklungsprozess von Web-Apps integrieren. Sie sollten beispielsweise Code Reviews durchführen und sich dabei besonders auf Bereiche konzentrieren, in denen Nutzereingaben akzeptiert und angezeigt werden. Sie sollten auch Bedrohungsmodellierung und Tests durchführen, um Schwachstellen zu identifizieren, bevor eine App live geht.

Wie können Sicherheitsteams XSS-Angriffe verhindern und darauf reagieren?

Sicherheitsteams können verschiedene Best Practices anwenden, um XSS-Angriffe zu verhindern und schnell darauf zu reagieren:

Angemessene Web-Server und App-Sicherheitskonfigurationen sicherstellen

Sicherheitsteams können mehrere Schritte unternehmen, um sicherzustellen, dass die Webserver richtig konfiguriert sind, um böswillige Skripte zu blockieren und Angreifer am Stehlen von Nutzer-Cookies zu hindern:

Eine Sicherheitsrichtlinie für Inhalte: Entwickler und Sicherheitsteams sollten zusammenarbeiten, um starke Content Security-Richtlinien (Content Security Policies oder kurz CSPs) für Websites und Web-Apps zu definieren und diese auf Webservern zu implementieren. Eine CSP ist eine zusätzliche Sicherheitsebene, die bestimmte Arten von Angriffen erkennen und abwehren kann. Sie verhindert XSS-Angriffe, indem sie einschränkt, welche Skripte ausgeführt werden können. Webserver können so konfiguriert werden, dass sie CSP-HTTP-Antwortheader zurückgeben, die Browser daran hindern, schädliche Skripte zu laden.

Sichere Cookies: Sicherheitsteams können spezielle Regeln für den Umgang von Webservern mit Cookies festlegen, um die Wahrscheinlichkeit eines Cookie-Diebstahls zu verringern. So können sie beispielsweise Cookies mit bestimmten IP-Adressen verknüpfen. Da die meisten Nutzer dynamische IP-Adressen haben, sind die Verbindungen zwischen einer IP-Adresse und einem Cookie nicht von langer Dauer. Daher können Angreifer diese Cookies nicht stehlen und verwenden.

Darüber hinaus können Sicherheitsteams den Zugriff von JavaScript auf Cookies vollständig blockieren. Eine Möglichkeit besteht darin, Cookies bei der Erstellung mit dem HttpOnly-Flag zu versehen. Dieses Flag weist darauf hin, dass die Cookies sensible Nutzerinformationen wie Sitzungstoken oder Authentifizierungsdaten enthalten können. Ein Browser, der das HttpOnly-Flag unterstützt, gibt diese Informationen nicht preis.

Eine Web Application Firewall implementieren

Eine Web Application Firewall (WAF) kann eine wichtige Verteidigungslinie gegen XSS-Angriffe darstellen. Eine WAF funktioniert wie ein Reverse-Proxy-Server, der vor den Web-Apps platziert wird. Sie schützt diese Anwendungen, indem sie den HTTP-Traffic zwischen den Apps und dem Internet überwacht und filtert. Unternehmen können WAF-Regeln definieren, um URLs auf böswillige Skripte zu überprüfen und zu verhindern, dass diese an die Nutzer reflektiert werden. WAF-Lösungen mit maschinellem Lernen bieten einen noch besseren Schutz, indem sie Versuche zur Umgebung der Regeln und Variationen bekannter Angriffe erkennen.

Schwerpunkt auf Phishing-Erkennung und -Reaktion legen

Da viele XSS-Angriffe mit Phishing beginnen, sollten die Sicherheitsteams die Abwehr von Phishing-Angriffen verstärken. Neben der Schulung der Nutzer in der Erkennung verdächtiger E-Mails und Nachrichten können Sicherheitsteams Sicherheitsfunktionen zum Blockieren von E-Mail-Spam implementieren, einen Browserisolierungs-Dienst einsetzen, um die Ausführung von Schadsoftware zu verhindern, ein sicheres Web Gateway (SWG) installieren, um Nutzer am Herunterladen böswilliger Dateien zu hindern und E-Mail-Sicherheitstools einsetzen, um Phishing-Versuche in Echtzeit zu erkennen und zu blockieren.

Sicherheitstests für die Apps durchführen

Sicherheitsteams sollten Produktionsumgebungen auf Schwachstellen testen. Die Teams können manuelle Penetrationstests durchführen oder automatisierte XSS-Scanner einsetzen.

Einen Notfallplan entwickeln

Trotz umfangreicher Präventionsbemühungen kann es zu XSS-Angriffen kommen. Ein Notfallplan ist für eine schnelle Wiederherstellung unerlässlich. Dieser Plan sollte Strategien zur Überwachung der Web-App-Aktivitäten und zum Ergreifen von Maßnahmen bei verdächtigen Ereignissen enthalten. Anschließend sollten die Teams die Ursachen analysieren und die Angriffsmethoden identifizieren. Sobald der Angriff beendet ist, sollten die gewonnenen Erkenntnisse genutzt werden, um Sicherheitsfunktionen zu verbessern, Richtlinien zu aktualisieren und Sicherheitslücken in Web-Apps zu patchen.

Wie hilft Cloudflare bei der Prävention von XSS-Angriffen?

Cloudflare bietet eine Reihe von Produkten und Funktionen, die Unternehmen und Nutzern helfen, XSS-Angriffe zu verhindern:

  • Die Cloudflare WAF kann Web-Apps vor XSS-Angriffen, DDoS-Angriffen, SQL-Injection und anderen häufigen Bedrohungen schützen
  • Cloudflare Email Security hilft bei der Blockierung von Phishing-E-Mails, mit denen XSS-Angriffe gestartet werden können
  • Cloudflare Browserisolierung verhindert die Ausführung böswilliger Skripte auf den Computern der Nutzer
  • Cloudflare-CSPs können helfen, XSS-Angriffe sowie Content-/Code-Injection, Einbettung böswilliger Ressourcen und die Verwendung von böswilligen Iframes (Clickjacking) zu erkennen und zu bekämpfen

Erfahren Sie mehr über die Cloudflare WAF.