Skip to content

Fladimir97/XSS-Praesentation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cross Site Scripting (XSS)

height:200

Fakultät Informatik - Studiengang IT Security B.Sc.

Modul 13000 - Einführung offensive Security-Methoden

Betreuer: Prof. Dr. Christian Henrich, Dr. Demir, Nurullah

Informationen zum Vortrag von Fabian Hans Flad - 10.01.2025

Inhaltsverzeichnis

  1. Definition: Was ist Cross Site Scripting (XSS)
  2. Grundlagen: Aufbau von Internetseiten
  3. Praktische Umsetzung eines XSS Angriffs
    1. Stored XSS Angriff - Gästebuch
    2. Reflected XSS Angriff - Manipulierte URL
  4. Gegenmaßnahmen
    1. Web Entwickler
    2. Endnutzer
  5. Fazit
  6. Quellen

1. Definition: Was ist Cross Site Scripting (XSS)

„Bei einem Cross-Site-Scripting-Angriff (…), wird Schadcode in ansonsten vertrauenswürdige Webseiten eingeschleust. Der Browser des Opfers erkennt nicht, dass die Skripte nicht vertrauenswürdig sind, und führt sie bedenkenlos aus.“ (vgl. AO Kaspersky Lab 2024)

"Dieser bösartige Code ist dann in der Lage, den Inhalt der Webseite zu verfälschen (z. B. eine Falschmeldung auf der Webseite einer Zeitung zu platzieren) oder vertrauliche Daten auszulesen (z.B. das Passwort des Opfers)." (vgl. Schwenk 2020)

Bei XSS Angriffen wird zwischen Stored und Reflected XSS Angriffen unterschieden:

Stored XSS 💾 Reflected XSS 🔗
Schadcode wird dauerhaft auf dem Server der Zielwebsite gespeichert (persistent) und auch dauerhaft an Besucher der Website übertragen. Der Schadcode wird bei allen Besuchern der Website ausgeführt. Der Schadcode wird nicht dauerhaft auf dem Server der Ziel-Internetseite gespeichert. Er wird meistens über eine manipulierte URL eingeschleust. Bei Reflected XSS Angriffen werden in der Regel gezielt einzelne User angegriffen.

2. Grundlagen: Aufbau von Internetseiten

Internetseiten setzen sich aus HTML, CSS und JavaScript-Code zusammen. Der Code wird vom Server der Website an den Nutzer geschickt. Dieser wird dann vom Browser gelesen und zu einer grafischen Oberfläche zusammengefügt.

Komponente Funktion Symbolisch
HTML Grundgerüst der Internetseite. Definiert die Grundstruktur: Zu welcher Kategorie gehört ein Inahlt? 🦴 Skelett
CSS Sorgt für das "Styling" der Internetseite. Definiert Farbe, Schriftart und Formatierung. 👦 Haut
JavaScript Macht die Internetseite interaktiv. Sorgt dafür, dass Inhalte dynamisch nachgeladen werden und Funktionen ausgeführt werden. 🧠 Gehirn

Grundlegende Funktionsweise von HTML

Die Tags </> ordnen den Text bzw. Inhalt der Website bestimmten Kategorien, wie Überschriften oder Listenelementen, zu.

<html>
<body>
    <h1 id="Titel">Hello World</h1>
    <ul>
        <li>Listenelement Eins</li>
        <li>Listenelement Zwei</li>
    </ul>
</body>
</html>

HTML

Grundlegende Funktionsweise von CSS

Im CSS Style Sheet werde für die HTML-Tags bestimmte Design-Eigenschaften definiert:

body {
    /* Schriftfarbe */
    color: blue; 
     /* Schriftart */
    font-family: sans-serif;
    /* Hintergrund Farbe */
    background: black;
	}        

HTML

Grundlegende Funktionsweise von JavaScript

JavaScript macht die Internetseite interaktiv:

// Zugriff auf Tags mit bestimmer ID
let Titel = document.getElementById("Titel"); 

// Ersetzt Inhalt des HTML-Tags
Titel.innerHTML = "Hallo Kurs"

JS

JavaScript kann über Script Tags in HTML-Dokumente eingebunden werden. Der Code kann direkt zwischen den Script Tags stehen oder verlinkt werden:

<html>
    <head>
        <script>alert("Hello World")</script>
        <script src="Quelle.js"></script>
    </head>
</html>

3. Praktische Umsetzung eines XSS Angriffs

Angriffsvektoren: Schädlicher JavaScript Code kann über User-Eingabefelder oder URL-Parameter auf vertrauenswürdige Ziel-Websiten eingeschleust werden. Auf vielen Internetseiten wird dieser User-Input direkt angezeigt bzw. wird in das Dokument eingebunden:

  • Bei Seiten mit Suchfunktionen wird häufig der Suchbegriff nochmals ausgegeben.
  • In Kommentarspalten oder Gästebüchern wird ebenfalls häufig User-Input dauerhaft angezeigt.
  • Auf Internetseiten können Suchbegriffe oder andere Funktions-Parameter über die URL übergeben werden.

3.1 Stored XSS Angriff - Gästebuch

Wir betrachten als Beispiel die fiktive Website der "Bäckerei Albstadt". Diese hat ein Gästebuch. Über zwei Eingabefelder können der Name und und eine Nachricht eingegeben werden:

Gästebuch 1

Wir testen die Eingabefunktion und geben eine Testnachricht ein:

Gästebuch 2

Der eingegebene Name und die Nachricht werden auf der Website in der Kommentarspalte angezeigt.

Gästebuch 3

Wir prüfen den Quelltext der Internetseite mit den Entwicklungstools. Die Internetseite ordnet jedem Kommentar eine id zu. Die id des Kommentars von Max Mustermann lautet "Kommentar_0". Der von uns eingegebene Kommentar erhielt die id "Kommentar_1"

Gästebuch 4

Wir nutzen diese Informationen. Über die Eingabefunktion wird folgendes Skript injeziert:

<script>
let MaxMustermann = document.getElementById("Kommentar_0");
MaxMustermann.innerHTML = "<b>Name:</b> Max Mustermann <br><b>Nachricht:</b> Schmeckt überhaupt nicht!";
</script> Mir schmeckt's auch nicht!

Gästebuch 5

Die Website hat sich verändert. Das über die Kommentarspalte eingeschleuste Skript wurde in die Website eingebunden und ausgeführt:

let MaxMustermann = document.getElementById("Kommentar_0");
MaxMustermann.innerHTML = "<b>Name:</b> Max Mustermann <br><b>Nachricht:</b>Schmeckt überhaupt nicht!";
  • Der Code greift auf über die id "Kommentar_0" auf den Tag des Kommentars von Max Mustermann zu.
  • Dem Kommentar-Tag von Max Mustermann wird ein neuer HTML-Inhalt zugewiesen. Der Inhalt wurde verfälscht.
  • Der Teil, der außerhalb des <script>-Tags eingegeben wurde: "Mir schmeckt's auch nicht!" wird nicht als Skript interpretiert und daher normal auf der Website im Kommentar-Bereich angezeigt.

Gästebuch 6

Im Quelltext der Website wird sichtbar, wie das Skript in die Website injeziert wurde.

Gästebuch 7

3.2 Reflected XSS Angriff - Manipulierte URL

Wir betrachten als Beispiel die fiktive Website des Stadtarchivs Albstadt. Diese hat eine Suchfunktion. Über ein Eingabefeld können Suchbegriffe eingegeben werden:

URL 1

Wir testen die Suchfunktion und geben den Begriff "Test" ein.

URL 2

URL 3

Der Suchbegriff wird auf der Website nochmals ausgegeben. Darüber hinaus, wird der Suchbegriff in der URL angezeigt: ?suchw=Test.

Die Suche lässt sich über die URL reproduzieren.

URL 4

Wir versuchen ein Skript in über das Suchfeld zu injezieren.

<script>
let password = prompt("Ihre Sitzung ist abgelaufen. Bitte geben Sie Ihr Passwort nochmals ein:");
alert(password)
</script>Stadtgeschichte

URL 5 Die Eingabe wird besätigt. Die Website hat sich verändert. Das über die Suchfunktion eingeschleuste Skript wurde in die Website eingebunden und ausgeführt:

let password = prompt("Ihre Sitzung ist abgelaufen. Bitte geben Sie Ihr Passwort nochmals ein:");

Dieser Code führt dazu, dass ein Dialogfeld auftaucht und den Nutzer dazu auffordert sein Passwort einzugeben. Dieses wird in der Variable "password" gespeichert.

URL 6

alert(password);

Das Passwort wird über ein Fenster ausgegeben.

URL 7

Ein Blick in den Quellcode Ziegt, wie das Skript in die Website eingebunden wurde. Nur der außerhalb des <script>-Tags stehende Text "Stadtgeschichte" wird als normaler Text gelesen.

URL 8

Der Suchtext und damit auch das Skript ist in der URL hinter deer Variable ?suchw= gespeichert.

URL 9

Die URL lässt sich in einem neuen Tab eingeben. Dadurch wird das gleiche Ergebnis reproduziert:

URL 10

Die manipulierte URL kann per Mail an potentielle Opfer übermittelt werden.

URL 11

Der lange Text der manipulierten URL lässt sich in der Mail in einem <a>-Tag "verstecken".

4. Gegenmaßnahmen

Im Folgenden werden Gegenmaßnahmen für die Gruppen "Web Entwickler" und "Endnutzer" diskutiert:

Web Entwickler 👨‍💻 Endnutzer 🧑
Wie lassen sich Websiten sicher gestalten? Wie lassen sich Websiten sicher nutzen?

4.1 Web Entwickler

Security by Design

Sicherheitsaspekte sollten von Anfang an im Entwicklungsprozess berücksichtigt werden. Sicherheitsrelevantes Verhalten von Funktionen und Methoden sollte bei der Entwicklung bedacht werden:

// Unsichere Methode: .innerHTML
let element = document.getElementById("id")
element.innerHTML = userInput 

Bei dieser Methode wird der user Input als HTML-Element interpretiert.

Bessere Alternative:

// Besser: .textContent
let element = document.getElementById("id")
element.textContent = userInput

Bei dieser Methode wird der Input als Text interpretiert.

User Input Filtern

Der Input der User sollte vor einer weiteren Verwendung gefiltert werden. Bei der Filterung von User Input können Black List und White List Verfahren zur Anwendung kommen:

⚫ Black List Verfahren ⚪ White List Verfahren
Aus dem User Input werden gezielt schädliche Zeichen, wie < oder > entfernt. Bei diesem Verfahren werden nur bestimmte, vordefinierte Eingaben akzeptiert. Es wird eine Liste von zulässigen Eingaben erstellt.
Verbotene Zeichen können leicht substituiert werden. Sicherheit ist fragil. Das White List Verfahren ist effektiv, da es die Angriffsfläche reduziert und sicherstellt, dass nur vertrauenswürdige Daten verarbeitet werden.

Empfehlungen des BSI

"Alle Daten aus nicht-vertrauenswürdigen Quellen, die von der Webanwendung verarbeitet werden, müssen in eine einheitliche Form überführt werden (z. B. durch Kanonalisierung) bevor sie validiert und ggf. enkodiert oder maskiert werden. (...) Um Schwachstellen wie beispielsweise Cross-Site-Scripting (XSS) (...) zu vermeiden, müssen für alle Daten entsprechende Validierungs- und ggf. Enkodierungs- und Filterfunktionen verwendet werden." (Goldene-Regeln-Webanwendungen BSI)

4.2 Endnutzer

JavaScript abschalten

In den meisten Internet Browsern kann JavaScript abgeschalten werden. Im Zweifelsfall kann beim Besuch verdächtiger Internetseiten die Ausführung von JavaScript abgeschalten werden.

Vorsicht bei Links

Bei auffällig langen Links ist grundsätzlich Vorsicht geboten. Moderne Internet-Browser und E-Mail Programme können dabei helfen XSS Angriffe frühzeitig zu erkennen.

5. Fazit

  • Sicherheit fängt bereits bei der Entwicklung und Architektur einer Website an und sollte frühzeitig bedacht werden.
  • Input von Nutzern sollte stets kritisch betrachtet werden. User-Input muss stets gefiltert und validiert werden.
  • Bei Links ist Vorsicht geboten.
  • Auch vermeintlich vertrauenswürdige Websiten können mit Schadcode injeziert sein.

6. Quellen

Literatur

  • Ackermann, Philip - Rheinwerk Verlag - JavaScript - Das umfassende Handbuch - 3 Auflage 2021 S. 416 f.
  • Kofler Michael et al - Rheinwerk Verlag - Hacking & Security - Das umfassende Handbuch 3 Auflage 2023 - S. 850 ff.
  • Schwenk Jörg - Springer - Sicherheit und Kryptographie im Internet 5. Auflage S. 449 ff.

Internet-Quellen

About

Vortrag zum Thema Cross Site Scripting (XSS)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages