Was ist Cross-Site Scripting (XSS)?
Cross-Site Scripting (XSS) ist ein Code-Injektionsangriff, bei dem der Akteur schädlichen Code in eine legitime Website injiziert. Der Code startet anschließend ein infiziertes Skript im Webbrowser des Benutzers, mit dem der Angreifer vertrauliche Daten stehlen oder die Identität des Benutzers annehmen kann.
Webforen, Pinnwände, Blogs und sonstige Websites, auf denen Benutzer eigene Inhalte posten können, sind für XSS-Angriffe besonders anfällig. Sofern die Eingabe von der Web-Anwendung nicht überprüft, verifiziert und verschlüsselt wird, wird jedes im Code enthaltene Schadskript automatisch vom Browser des Benutzers ausgeführt. Das Skript kann anschließend auf die Cookies, Sitzungstoken und anderen sensiblen Daten des Benutzers zugreifen, die vom Browser gespeichert und auf der betreffenden Website verwendet werden. Bei sehr raffinierten Angriffen können solche Skripts den Inhalt der infizierten Webseite sogar manipulieren.
Aufgrund ihrer Möglichkeiten zum Umgehen von Schutzmechanismen sind dateilose und skriptbasierte Angriffe wie XSS seit einigen Jahren auf dem Vormarsch. Die Angriffe können mühelos herkömmliche Virenschutzlösungen und Firewalls unterlaufen, was ihre Ausführung relativ einfach macht. Unternehmen sollten XSS-Erkennung und -Prävention in ihre allgemeine Cybersicherheitsstrategie aufnehmen, um die Besucher ihrer Website zu schützen und das Risiko von Rufschäden zu reduzieren.
See Crowdstrike Falcon In Action
Laden Sie den Global Threat Report 2022 herunter, um sich über die Trends zu informieren, die unsere Teams im letzten Jahr mit Blick auf die sich ständig weiterentwickelnden Taktiken, Techniken und Prozeduren von Angreifern beobachtet haben.
Jetzt herunterladenCross-Site-Scripting-Angriffe
Cross-Site-Scripting-Angriffe nutzen Sicherheitsschwachstellen vertrauenswürdiger Websites aus, um schädlichen Code an andere Benutzer zu verteilen.
Obwohl XSS-Angriffe recht häufig vorkommen, haben sie in der Cybersicherheits-Community keine hohe Priorität, da ihre Konsequenzen überschaubar sind. Da sich das schädliche Skript nur auf die Interaktion des Benutzers auf der infizierten Website auswirkt, ist die Aktivität der Angreifer auf die jeweilige Sitzung begrenzt. Hinzukommt, dass die meisten Angriffe in JavaScript durchgeführt werden, wodurch der Zugriff auf das Betriebssystem und auf personenbezogene Daten des Benutzers, die auf dem Gerät gespeichert sind, eingeschränkt ist.
Nichtsdestotrotz können XSS-Angriffe die Benutzerdaten innerhalb der infizierten Website kompromittieren. Angreifer sind also durchaus in der Lage, Anmeldedaten, Kennwörter, Zahlungsinformationen und andere sensible Daten des Benutzers zu erfassen. Der Akteur kann sich auch als der rechtmäßige Benutzer ausgeben und in dessen Namen jede Aktion durchführen, zu der dieser auf der Website berechtigt ist. Angriffe wie diese können gravierende Auswirkungen haben – und zwar dann, wenn Besucher berechtigt sind, Transaktionen durchzuführen oder zu bearbeiten oder Kontoinformationen (einschließlich Kontaktdaten) zu ändern.
XSS-Angriffe sind manchmal auch nur der erste Schritt oder die Kernkomponente eines umfassenderen Angriffs. So kann ein Akteur beispielsweise die bei einem XSS-Angriff erfassten Informationen für Social-Engineering-Taktiken bei Phishing- oder Spoofing-Angriffen nutzen. Diese Aktivitäten können dann zu schwerwiegenderen Sicherheitsproblemen wie Malware, Ransomware oder Trojanern führen.
Arten von XSS-Angriffen
Es gibt drei Hauptarten von Cross-Site-Scripting-Angriffen:
- Reflektiertes oder nicht-persistentes XSS: Das Schadskript wird im Rahmen einer aktiven HTTP-Anfrage ausgeführt und vom Webserver an den Benutzer „reflektiert“.
- Gespeichertes oder persistentes XSS: Das Schadskript wird dauerhaft in der Datenbank der Web-Anwendung gespeichert, z. B. im Besucherprotokoll, Webforum oder Kommentarfeld.
- DOM-basiertes XSS: Die Sicherheitsschwachstelle besteht nicht in serverseitigem Code, sondern in clientseitigem Code, der im Browser ausgeführt wird.
Reflektiertes oder nicht-persistentes XSS
Die einfachste Form von Cross-Site Scripting sind reflektierte XSS-Angriffe. Dabei empfängt eine Web-Anwendung Daten von einer HTTP-Anfrage und antwortet sofort, ohne die Daten vorher zu validieren oder zu verschlüsseln. Da die Anwendung die Daten überhaupt nicht verarbeitet, ist es für den Angreifer ein Leichtes, einen skriptbasierten Angriff gegen andere Benutzer zu starten.
Bei einem reflektierten Angriff gibt sich das injizierte Skript als Fehlermeldung, Suchergebnis oder Ähnliches aus und wird über einen schädlichen Link aktiviert. Die Ausführung des Skripts beginnt, sobald der Benutzer auf den Link klickt. Dadurch kann der injizierte Code zur anfälligen Website vordringen und wird im Browser des Benutzers „reflektiert“. Der Browser führt den Code aus, weil er die Website als vertrauenswürdig einstuft. Anschließend kann das Skript alle Aktionen durchführen, die dem Benutzer in der betreffenden Sitzung zur Verfügung stehen, und alle Daten erfassen, die der Benutzer während der Sitzung übermittelt.
Gespeichertes oder persistentes XSS
Gespeicherte XSS-Angriffe (auch als persistente XSS-Angriffe bezeichnet) finden statt, wenn eine Web-Anwendung Daten aus einer nicht vertrauenswürdigen oder nicht überprüften Quelle in nachfolgenden HTTP-Antworten weitergibt. Bei einem gespeicherten Cross-Site-Scripting-Angriff wird das injizierte Skript dauerhaft auf den Zielservern gespeichert, etwa in einer Datenbank, in einem Pinnwand-Post, in einem Kommentar oder an anderer Stelle. Werden die übermittelten Daten von der Website nicht verarbeitet, kann ein Angreifer mühelos Inhalte mit einem Schadskript einschleusen, die dann andere Benutzer infizieren. Das Opfer empfängt das Schadskript vom Server, sobald es die gespeicherten Informationen anfordert.
DOM-basiertes XSS (Document Object Model)
DOM-basiertes XSS ist eine relativ seltene Variante des Cross-Site-Scriptings. Im Gegensatz zu den beiden anderen Angriffsarten (reflektiertes XSS und persistentes XSS), die es auf den serverseitigen Code abgesehen haben, nutzt ein DOM-basierter XSS-Angriff Sicherheitsschwachstellen im clientseitigen Code oder in Code aus, der im Browser ausgeführt wird. Ein Angriff dieser Art findet statt, wenn eine Web-Anwendung JavaScript-Daten einer nicht vertrauenswürdigen Quelle auf unsichere Art und Weise verarbeitet. DOM-basierte XSS-Angriffe basieren immer auf JavaScript, da Java die einzige Sprache ist, die von allen Browsern unterstützt wird.
Weitere Methoden zur XSS-Klassifizierung
Bei den drei beschriebenen Angriffsarten handelt es sich zwar um separate Kategorien, sie schließen sich jedoch nicht gegenseitig aus. Es gibt gewisse Überschneidungen zwischen den Kategorien, sodass Angreifer durchaus Elemente aus zwei Angriffsarten in einer einzigen Aktion kombinieren können.
Aus diesem Grund unterscheidet man in der Cybersicherheits-Community XSS-Angriffe nach dem Ort, an dem der Code ausgenutzt wird, also auf Serverseite oder auf Clientseite. Man spricht daher auch von Server-XSS oder Client-XSS.
Wie funktioniert Cross-Site Scripting?
Wie bereits erwähnt, variiert der Mechanismus eines XSS-Angriffs je nach Angriffsart. Die meisten Angriffe erfolgen jedoch nach dem gleichen Muster:
- Der Angreifer identifiziert einen Ort und eine Methode für die Injektion von Schadcode in eine Webseite. Dazu muss die Website ihren Benutzern das Hinzufügen von Inhalten erlauben, etwa über Kommentare, Posts oder Kontaktfelder. Nachdem der Angreifer ein Ziel definiert hat, wendet er Social-Engineering-Taktiken (wie Phishing und Spoofing) an, um den Benutzer zum Aufrufen der betreffenden Website zu verleiten. Anderenfalls wäre der Code für den Benutzer sichtbar.
- Das Opfer besucht die Website mit dem injizierten Code. Das Gerät akzeptiert das infizierte Skript und führt es aus, weil es als Teil des Quellcodes einer vertrauenswürdigen Website betrachtet wird. Da der Code nicht sichtbar ist und die meisten Internetnutzer nicht mit gängigen Programmiersprachen wie JavaScript vertraut sind, ist es für den durchschnittlichen Benutzer schwierig, einen XSS-Angriff zu erkennen.
Welches Ziel verfolgen Cyberkriminelle mit einem XSS-Angriff?
Der häufigste Zweck eines XSS-Angriffs ist der Diebstahl der Cookies von Benutzern. Mithilfe der darin gespeicherten Informationen können sie die Identität des Benutzers auf der Website übernehmen und alle Aktionen durchführen, für die der Benutzer berechtigt ist. Der Angreifer kann auch wertvolle personenbezogene Daten wie Anmeldedaten, Kennwörter, Zahlungsinformationen und andere sensible Daten erfassen. Dies erleichtert ihm später die Durchführung anderer Angriffsmethoden, die auf Social-Engineering-Techniken beruhen. Angreifer können aber auch die Website selbst ins Visier nehmen. Zum Beispiel können sie den Inhalt von Webseiten mithilfe ihres eigenen Codes manipulieren oder ändern.
Unterschiedliche Ansätze für Cross-Site Scripting
Ein XSS-Angriff kann überall dort stattfinden, wo Eingaben einer HTTP-Anfrage potenziell zur HTML-Ausgabe gelangen. Die nachfolgende Liste beinhaltet Taktiken, die bei XSS-Angriffen häufig verwendet werden:
- Verwenden eines <script>-Tags zum Referenzieren, Einfügen oder Einbetten von schädlichem JavaScript-Code
- Ausnutzen von JavaScript-Ereignisattributen wie „onload“ und „onerror“ in unterschiedlichen Tags
- Bereitstellen von XSS-Schadcode im <body>-Tag über JavaScript-Ereignisattribute
- Ausnutzen nicht gesicherter Tags wie <img>, <link>, <div>, <table>, <td> oder <object> für den Verweis auf das Schadskript
- Nutzen des <iframe>-Tags zum Einbetten einer Webseite in die vorhandene Seite
Welche Sprachen sind Ziel von XSS?
Jede Webseite oder Web-Anwendung, die unbereinigte Benutzereingaben verwendet, ist für XSS-Angriffe anfällig. XSS-Angriffe sind in jeder Programmiersprache möglich, einschließlich HTML, VBScript, ActiveX, Flash und sogar CSS. Am häufigsten wird jedoch JavaScript verwendet, da diese Programmiersprache sehr stark verbreitet ist.
Welche Gefahren drohen mit XSS?
XSS-Angriffe können erhebliche Probleme für die Opfer verursachen. Im Extremfall verwenden XSS-Angreifer die Cookies eines Benutzers, um sich als rechtmäßiger Benutzer auszugeben. Mit dem injizierten Code können Dateien und Daten gestohlen und Malware auf dem Gerät installiert werden.
Auf Serverseite können XSS-Angriffe für das betreffende Unternehmen zu erheblichen Rufschäden führen. Angreifer könnten beispielsweise Inhalte auf einer Unternehmenswebsite verändern und Falschinformationen zu den Geschäftspraktiken oder anderen Aktivitäten des Unternehmens verbreiten. Der Inhalt der Website kann auch so manipuliert werden, dass Besucher falsche Anweisungen oder Anleitungen erhalten. Eine derartige Kompromittierung ist besonders gefährlich, wenn Hacker in Krisensituationen Websites oder Ressourcen von Regierungseinrichtungen übernehmen und Bürger dadurch falsche Handlungsempfehlungen für den Notfall bekommen.
Leider sind XSS-Angriffe schwer auszumachen – vor allem dann, wenn der Benutzer keine Programmierkenntnisse besitzt. Aber auch fachkundige Entwickler überprüfen selten den Code von vertrauenswürdigen Websites. Nach der Injektion ist es bei gespeichertem XSS oft sehr schwierig, den Schadcode wieder aus der Anwendung zu entfernen.
Wie können Sie sich vor Cross-Site Scripting schützen?
Stellen Sie unbedingt sicher, dass Ihr Unternehmen nicht für XSS-Angriffe anfällig ist. In den letzten Jahren ist die Zahl skriptbasierter und anderer dateiloser Angriffe gestiegen, da es ihnen gelingt, der Erkennung durch neue und herkömmliche Sicherheitstools (z. B. Virenschutzsoftware und Firewalls) zu entgehen.
Um die Sicherheit einer Website zu gewährleisten, sollten die für die Website zuständigen Teams funktionsübergreifend mit dem internen Cybersicherheitsteam oder einem vertrauenswürdigen Partner für Cybersicherheit zusammenarbeiten, um gemeinsam das Risiko für XSS-Angriffe auf der Unternehmenswebsite zu untersuchen.
Für die Verwaltung einer sicheren Website auf Client- und Serverseite ist in der Regel eine Lösung zur Schwachstellenverwaltung erforderlich, die die Website kontinuierlich auf Schwachstellen überprüft. Idealerweise gibt es im Cybersicherheitsteam einen SecOps-Experten, der gemeinsam mit Webentwicklern und anderen Beteiligten bewährte Sicherheitsmethoden für die Entwicklung und Wartung einer Website erarbeitet. Diese Person liefert außerdem Erkenntnisse zu kritischen Schwachstellen, die Ihre Website gegenüber XSS-Angriffen anfällig machen.
Zusätzlich sollten Sie Ihr Cybersicherheitsteam für folgende Grundsätze sensibilisieren, um die Sicherheit Ihrer Web-Umgebung zu gewährleisten:
- Führen Sie in Bereichen mit hohem Ausnutzungsrisiko manuelle Penetrationstests durch.
- Begrenzen Sie die Möglichkeiten Ihrer Benutzer, Inhalte auf der Unternehmenswebsite oder auf anderen Plattformen wie Foren, Blogs oder Gruppen zu erstellen.
- Wenn Sie Benutzerbeiträge zulassen möchten, filtern Sie den Inhalt beim Upload anhand von strengen Filtern und verschlüsseln Sie die Daten bei der Ausgabe.
- Verhindern Sie, dass Schadcode in Antworten injiziert werden kann, die keinen HTML- oder JavaScript-Code enthalten dürfen.
- Bieten Sie regelmäßige Cybersicherheitsschulungen und Entwicklungsmöglichkeiten für Ihr IT-Team sowie für Entwickler, Programmierer und Techniker an, um sie für die Risiken durch XSS zu sensibilisieren und sicherzustellen, dass sie diese mit angemessenen Maßnahmen verhindern.