www.wikidata.de-de.nina.az
Cross Site Scripting XSS deutsch Webseitenubergreifendes Skripting bezeichnet das Ausnutzen einer Computersicherheitslucke in Webanwendungen indem Informationen aus einem Kontext in dem sie nicht vertrauenswurdig sind in einen anderen Kontext eingefugt werden in dem sie als vertrauenswurdig eingestuft werden Aus diesem vertrauenswurdigen Kontext kann dann ein Angriff gestartet werden Ziel ist es meist an sensible Daten des Benutzers zu gelangen um beispielsweise seine Benutzerkonten zu ubernehmen Identitatsdiebstahl Inhaltsverzeichnis 1 Terminologie 2 Funktionsweise 3 Angriffsarten 3 1 Reflektiert oder nicht persistent 3 2 Persistent oder bestandig 3 3 DOM basiert oder lokal 4 Schutz 4 1 Schutzmassnahmen fur Webseitenbetreiber 4 2 Schutzmassnahmen fur Webseitennutzer 5 Weblinks 6 EinzelnachweiseTerminologie BearbeitenDie Bezeichnung Cross Site bezieht sich darauf dass der Angriff zwischen verschiedenen Aufrufen einer Seite stattfindet in der Regel jedoch nicht darauf dass unterschiedliche Websites beteiligt sind Meist werden fur diese Angriffsart aufgrund ihrer weiten Verbreitung Script Sprachen insbesondere JavaScript genutzt daher Scripting Das X wird im Englischen als Abkurzung fur cross Kreuz verstanden Trotz der Namensahnlichkeit sind das Cross Site Cooking und die Cross Site Request Forgery sowie deren Anwendungen wie etwa die Cross Site Authentication Attacke keine Formen von Cross Site Scripting Funktionsweise BearbeitenCross Site Scripting ist eine Art der HTML Injection Cross Site Scripting tritt dann auf wenn eine Webanwendung Daten annimmt die von einem Nutzer stammen und diese Daten dann an einen Browser weitersendet ohne den Inhalt zu uberprufen Damit ist es einem Angreifer moglich auch Skripte indirekt an den Browser des Opfers zu senden und damit Schadcode auf der Seite des Clients auszufuhren Ein klassisches Beispiel fur Cross Site Scripting ist die Ubergabe von Parametern an ein serverseitiges Skript das eine dynamische Webseite erzeugt Dies kann etwa das Eingabeformular einer Webseite sein wie in Webshops Foren Blogs und Wikis ublich Die eingegebenen Daten werden auf der Webseite wieder als Seiteninhalt ausgegeben wenn die Seite von Benutzern aufgerufen wird So ist es moglich manipulierte Daten an alle Benutzer zu senden sofern das Serverskript dies nicht verhindert Diese Daten sind oft Code einer clientseitigen Skriptsprache meist JavaScript Haufige Angriffsarten sind das Entfuhren von Benutzer Sessions Website Defacements das Einstellen negativer Inhalte Phishing Angriffe und die Ubernahme der Kontrolle des Benutzerbrowsers Besonders gefahrlich wird dies wenn die Webseite auf der der Schadcode untergebracht wurde im lokalen Browser mit besonderen Sicherheitsrechten Privilegien ausgestattet ist Der Schadcode kann dann in Abhangigkeit von der Machtigkeit der Skriptsprache verschiedene Dinge tun die mit den Rechten des lokalen Benutzers moglich sind Da aus Bequemlichkeit auf Microsoft Windows Systemen vor Windows Vista der lokale Benutzer haufig mit Administrator Rechten ausgestattet ist ist dies bereits eine sehr gefahrliche Konstellation Aber auch ohne Administrator Rechte kann der Angreifer versuchen durch Ausnutzung von Sicherheitslucken bei der Ausfuhrung der betreffenden Skriptsprache diese Rechte zu erlangen In der Regel wird XSS etwa in Foren breit gestreut und nicht zielgerichtet an ausgewahlte Personen gerichtet Dies ist jedoch ebenfalls moglich Neben dem klassischen XSS im Webbrowser interpretieren haufig auch E Mail Programme Scriptcode was einen Angriff per E Mail ermoglicht Dazu schiebt der Angreifer dem Opfer ein von ihm prapariertes HTML Dokument unter das per E Mail verschickt wird Oder der Angreifer lasst dem Opfer einen Hyperlink zukommen der auf eine vom Angreifer praparierte Webseite weist oder selbst den Schadcode enthalt Haufig werden dazu auch Kurz URLs URL Spoofing Techniken und andere Kodierungsverfahren eingesetzt um den Link zu verschleiern oder vertrauenswurdig erscheinen zu lassen Neuerdings werden auch Webspider missbraucht um XSS und SQL Injection Attacken auszufuhren Hierzu wird ein praparierter Link auf einer Webseite veroffentlicht Sobald ein Webspider diesem Link folgt lost er die Attacke aus Dadurch taucht die IP Adresse des Spiders und nicht die des eigentlichen Angreifers in den Protokollen des angegriffenen Systems auf Der Angreifer kann somit anonym agieren In schwerwiegenden Fallen ware es aber dennoch moglich die IP Adresse des Computers der den manipulierten Link veroffentlicht hat herauszufinden Eine spezielle Inkarnation von XSS ist das Cross Site Tracing Hierbei wird eine Diagnose Funktion eines Webservers sich zu Nutze gemacht Angriffsarten BearbeitenEs gibt drei grundlegende Arten 1 von Cross Site Scripting Angriffen reflektierte persistente und DOM basierte Diese werden im Folgenden erlautert In den Beispielen wird zur Veranschaulichung der einfache JavaScript Code alert XSS verwendet der mithilfe des script Elements in ein HTML Dokument eingebunden wird lt script type text javascript gt alert XSS lt script gt Dieser JavaScript Code beschreibt zwar nur einen harmlosen Warnhinweis Dialog mit dem Text XSS Doch auf gleiche Weise kann auch jeder andere JavaScript Code eingeschleust werden Reflektiert oder nicht persistent Bearbeiten Das nicht persistente non persistent oder reflektierte reflected Cross Site Scripting ist ein Angriff bei dem eine Benutzereingabe direkt vom Server wieder zuruckgesendet wird Enthalt diese Eingabe Skriptcode der vom Browser des Benutzers anschliessend interpretiert wird kann dort Schadcode ausgefuhrt werden Hierbei wird ausgenutzt dass dynamisch generierte Webseiten ihren Inhalt oft an uber URL HTTP GET Methode oder Formulare HTTP POST Methode ubergebene Eingabewerte anpassen Nicht persistent heisst dieser Typ da der Schadcode nur temporar bei der jeweiligen Generierung der Webseite eingeschleust nicht aber gespeichert wird Ruft man die Seite danach ohne die manipulierte URL oder das manipulierte Formular auf ist der Schadcode nicht mehr enthalten Beispiel Eine Suchfunktion soll das Durchsuchen samtlicher Dokumente einer Website ermoglichen Dabei wird auf der Ergebnisseite der Suchbegriff nochmals gesondert angezeigt reflektiert Der Funktion kann der Suchbegriff entweder per URL Argument oder uber ein Formular ubergeben werden Eine solche Anfrage sieht damit etwa so aus http example com suche i Suchbegriff i Die ubergebenen Suchbegriffe werden nun von einer serverseitigen Webapplikation ungepruft auf der Ergebnisseite wieder ausgegeben lt p gt Sie suchten nach Suchbegriff lt p gt Wurde nun hier folgender Suchbegriff verwendet lt script type text javascript gt alert XSS lt script gt wurde dann folgender HTML Code erzeugt lt p gt Sie suchten nach lt script type text javascript gt alert XSS lt script gt lt p gt Nach dem gleichen Prinzip kann auch uber manipulierte Formulare oder Formulareingaben Schadcode eingeschleust werden Hierbei muss das Opfer auf eine Webseite mit einem manipulierten Formular gelockt werden Das Formular kann dabei in einem iframe unsichtbar im Hintergrund geladen und per JavaScript automatisch abgeschickt werden so dass eine Interaktion des Benutzers nicht erforderlich ist Persistent oder bestandig Bearbeiten Persistentes persistent oder bestandiges stored Cross Site Scripting unterscheidet sich vom reflektierten XSS prinzipiell nur dadurch dass der Schadcode auf dem Webserver gespeichert wird wodurch er bei jeder Anfrage ausgeliefert wird Dies ist bei jeder Webanwendung moglich die Benutzereingaben serverseitig speichert und diese spater wieder ausliefert solange keine Prufung der Benutzereingaben bzw eine geeignete Kodierung der Ausgabe stattfindet Beispiel Eine Webseite bietet ein Gastebuch in dem Besucher Nachrichten oder Grusse hinterlassen konnen Die eingetragenen Daten werden serverseitig in einer Datenbank gespeichert und bei jedem Aufruf wieder ausgegeben Wird nun hier als Nachricht Folgendes eingegeben Eine wirklich sehr informative Website lt script type text javascript gt alert XSS lt script gt wurde diese bei jedem Aufruf ausgeliefert und das Skript vom Browser des Benutzers ausgefuhrt DOM basiert oder lokal Bearbeiten Diese Art des Angriffs wird DOM basiertes Dom Injection oder lokales local Cross Site Scripting genannt 2 Im Gegensatz zu den oben genannten gangigen XSS Varianten ist hier die Webapplikation auf dem Server gar nicht beteiligt Somit sind auch an sich statische HTML Seiten mit JavaScript Unterstutzung anfallig fur diesen Angriff Der Schadcode wird zur Ausfuhrung direkt an ein clientseitiges Skript ubergeben Dies kann beispielsweise ein JavaScript sein das einen URL Argumentwert zur Ausgabe von Daten verwendet ohne diesen ausreichend zu prufen Ein solcher Angriff bedarf des gezielten Aufrufs einer kompromittierten URL Beispiel Eine clientseitige Skriptsprache wie etwa JavaScript liest einen Argumentwert aus der URL aus http example com foobar html arg i Argumentwert i Und fugt diesen nach folgendem Schema ungepruft in das HTML Dokument ein lt p gt Sie haben an die URL diesen String angehangt Argumentwert lt p gt Wird nun die aufrufende URL folgendermassen manipuliert http example com foobar html arg i lt script type text javascript gt alert XSS lt script gt i wurde der durch das clientseitige Skript erzeugte HTML Code wie folgt aussehen lt p gt Sie haben an die URL diesen String angehangt lt script type text javascript gt alert XSS lt script gt lt p gt Somit wurde obiges Skript im Kontext der aufrufenden Seite ausgefuhrt werden Dieses einfache Beispiel funktioniert in Firefox nicht ohne weiteres da dieser die Zeichen einer URL in einem Link implizit kodiert Es sind aber DOM Injections bekannt fur die auch Firefox anfallig ist 2 Schutz BearbeitenSchutzmassnahmen fur Webseitenbetreiber Bearbeiten Zunachst einmal sollte sichergestellt werden dass die heutzutage selten verwendete HTTP TRACE Methode ausgeschaltet ist siehe Cross Site Tracing Um durch eine Webanwendung keine Basis fur XSS Angriffe zu bieten mussen alle eingehenden Eingabewerte als unsicher betrachtet und vor der weiteren Verarbeitung auf der Serverseite gepruft werden 3 Dabei sollte man sich nicht darauf verlassen bose Eingaben zu definieren Schwarze Liste um diese herauszufiltern da man nicht genau wissen kann welche Angriffsmethoden 4 es gibt Besser ist es daher die guten Eingaben exakt zu definieren Weisse Liste und nur solche Eingaben zuzulassen Dieses Verfahren zahlt ganz allgemein zu den Best practices der Programmierung und sollte wo immer moglich angewandt werden um unerwartetes Programmverhalten zu verhindern Allerdings ist es je nach Anwendung nicht immer ohne weiteres in der Praxis umzusetzen besonders wenn die erlaubten Eingabewerte sehr zahlreich sind Eine DOM Injection zu verhindern ist weit weniger einfach da Benutzereingaben nicht serverseitig gepruft werden konnen Da dieser Angriff unter Umgehung des Servers stattfindet muss die Gultigkeitsprufung fur Eingabedaten auf Clientseite im Browser erfolgen was allerdings wiederum leicht manipulierbar ist Um eine Ausgabe abzusichern insbesondere bei reflektiertem und persistentem XSS ist es notig die HTML Metazeichen durch entsprechende Zeichenreferenzen zu ersetzen damit sie als normale Zeichen und nicht als Metazeichen behandelt werden Erfolgt die Ausgabe als Teil von URLs dann muss die URL Kodierung auf die Eingabewerte angewendet werden Bei der Ausgabe in JavaScript Code mussen die Zeichen mit einem umgekehrten Schragstrich maskiert werden Dabei ist zu beachten dass bei diesen drei Kontexten HTML URL JavaScript unterschiedliche Zeichen eine Metafunktion haben zum Beispiel ist fur HTML kein Metazeichen es muss also immer eine an das Ausgabemedium angepasste Kodierung verwendet werden Die meisten Programmier sowie Skriptsprachen verfugen uber vordefinierte Funktionen zur Ersetzung der Metazeichen Die Losungsmoglichkeiten sind in den einzelnen Programmiersprachen vielfaltig wobei sie dennoch immer einem ahnlichen Prinzip folgen So konnen in Java die problematischen Zeichen ersetzt oder maskiert werden In PHP htmlspecialchars und Perl HTML Entities encode entities stehen entsprechende Funktionen zur Verfugung die die problematischen HTML Zeichen maskieren 5 Zusatzlich konnen durch Einsatz von Web Application Firewalls WAF zumindest in der Theorie einfache primitive XSS Attacken verhindert werden Praktisch sind sichere Anwendungen jeder WAF vorzuziehen Durch Einsatz von Content Security Policy kann der Webseitenbesitzer durch das Definieren von erlaubten Quellen fur Webseiten Bestandteile wie Javascript Cross Site Scripting verhindern allerdings ist die Konfiguration nicht trivial Schutzmassnahmen fur Webseitennutzer Bearbeiten Durch Ausschalten der JavaScript Unterstutzung Active Scripting im Browser kann man sich gegen clientseitige XSS Angriffe schutzen Allerdings bieten einige Browser weitere Angriffsvektoren Dies gilt allerdings nur fur echtes XSS also solches welches mit JavaScript arbeitet Wenn nur HTML Injection z B mit lt iframe gt verwendet wird dann hilft das Abschalten von Active Scripting im Browser nicht Fur einige Browser gibt es auch Erweiterungen mit denen gezielt mogliche XSS Angriffe erkannt und verhindert werden Siehe NoScript Weblinks BearbeitenBundesamt fur Sicherheit in der Informationstechnik BSI Sicherheit von Webanwendungen Massnahmenkatalog und Best Practices Cross Site Scripting Dokumentation Analyse amp Techniken PDF 3 5 MB deutsch wissenschaftlich How Prevalent Are XSS Vulnerabilities Memento vom 31 Oktober 2009 im Internet Archive Michael Suttons Blog englisch XSS Attacken Apache Foundation englisch Einzelnachweise Bearbeiten Christiane Rutten Tobias Glemser Sicherheit von Webanwendungen Heise Security 2006 abgerufen am 6 Oktober 2012 a b Amit Klein DOM Based Cross Site Scripting or XSS of the Third Kind Web Application Security Consortium 2005 abgerufen am 18 Mai 2008 CLASP Security Principles Input Validation OWASP Projekt englisch abgerufen am 19 Mai 2008 XSS Cross Site Scripting Cheat Sheet Memento vom 11 September 2012 im Internet Archive ha ckers org englisch Eigene HTML Zeichen maskieren Memento vom 11 Marz 2015 im Internet Archive im Selfhtml Wiki Abgerufen von https de wikipedia org w index php title Cross Site Scripting amp oldid 230205501