FuzzerFuzzer
Seminar Internet-TechnologieSeminar Internet-Technologie
Fachgebiet Praktische InformatikFachgebiet Praktische Informatik
Referent: Mirko Schäfer, FB 16 InformatikReferent: Mirko Schäfer, FB 16 Informatik
GliederungGliederung1.1. Ideen und Motivation Ideen und Motivation 2.2. Kategorisierung für SoftwaretestsKategorisierung für Softwaretests3.3. BegriffsdefinitionBegriffsdefinition4.4. HistorischesHistorisches5.5. Fuzzing TechnikenFuzzing Techniken6.6. Aktuelle ImplementierungenAktuelle Implementierungen7.7. PraxisbeispielePraxisbeispiele
1.1. Fuzzing einer FTP Server ImplementierungFuzzing einer FTP Server Implementierung2.2. Fuzzing Framework PeachFuzzing Framework Peach
8.8. Fazit und AusblickFazit und Ausblick9.9. Fragen Fragen 10.10. LiteraturLiteratur
#
Ideen und MotivationIdeen und Motivation
Erstellung eines möglichst einfachen, objektiven und universellenErstellung eines möglichst einfachen, objektiven und universellenTestverfahren , um Schwachstellen zu finden, die sonst niemand Testverfahren , um Schwachstellen zu finden, die sonst niemand
aufdecken würde.aufdecken würde.
Einfache Bedienung
Plattform unabhängig
Verlässliche Fehlererkennung
Für jeden Softwaretyp einsetzbar
Suche nach ALLEN
Fehlermöglichkeiten
#
Kategorisierung für Kategorisierung für SoftwaretestsSoftwaretests
1.1. Zugriff auf Programmquellcode und BinarysZugriff auf Programmquellcode und Binarys z.B. Open Source Software (Linux Kernel)z.B. Open Source Software (Linux Kernel)
2.2. Zugriff auf BinarysZugriff auf Binarys z.B. Closed Source SW (Internet Explorer…)z.B. Closed Source SW (Internet Explorer…)
3.3. Kein Zugriff auf Binarys oder QuellcodeKein Zugriff auf Binarys oder Quellcode (Black Box (Black Box Fuzzing)Fuzzing)
z.B Webserver, FTP Server, SMTP….z.B Webserver, FTP Server, SMTP….
#
BegriffsdefinitionBegriffsdefinition
Überprüfung des Programmcodes durch
Provokation eines Programmabsturzes
oder
fehlerhafte Datenverarbeitung
Robustheitstest für Software / Softwaredienste in Bezug auf Manipulation der Eingabedaten
ZIEL
#
HistorischesHistorisches Geburtstag als „fuzz“ Unix-Kommando 1990 in einer Geburtstag als „fuzz“ Unix-Kommando 1990 in einer
Forschungsgruppe um Barton MillerForschungsgruppe um Barton Miller[2][2]
Tool zum Testen von gängigen Unix Kommandos mit Random Tool zum Testen von gängigen Unix Kommandos mit Random Eingabedaten variabler LängeEingabedaten variabler Länge
Abstürze u.A. bei emacs, ftp, identAbstürze u.A. bei emacs, ftp, ident
medienwirksames Beispiel der Fuzzing Technik: IFrame-Lücke im IE 2005medienwirksames Beispiel der Fuzzing Technik: IFrame-Lücke im IE 2005 [3][3] Resultat: MyDoom WurmResultat: MyDoom Wurm[4][4]
#
Fuzzing TechnikFuzzing Technik Generation von möglichst effektiven TestdatenGeneration von möglichst effektiven Testdaten Testdaten müssen zum zu testenden Programm passen Testdaten müssen zum zu testenden Programm passen
Zu beachten:Zu beachten: bei Kapselung (OSI-Layer)bei Kapselung (OSI-Layer) Erwartung eines definierten Formates (Bilddateien…)Erwartung eines definierten Formates (Bilddateien…) Prüfsummen (CRC)Prüfsummen (CRC)
Reduktion durch Optimierung der gültigen Eingabedaten (EingaberaumReduktion durch Optimierung der gültigen Eingabedaten (Eingaberaum))
ZIEL
#
Fuzzing Techniken Fuzzing Techniken Vergleich der gängigen AnsätzeVergleich der gängigen Ansätze
DatenmutationDatenmutation
gezieltes Suchen und Testen von möglichen Schwachstellen
EingabedatenanalyseEingabedatenanalyse
+ sehr kleiner Eingaberaum
- übersehen von Fehlern - langwierige Programmanalyse
Wahllose Datenmutation in Inhalt und Länge
- riesiger Eingaberaum
+ Test auf alle Möglichkeiten + schnell einsetzbar
#
Aktuelle Aktuelle ImplementierungenImplementierungen
Unix-Unix-FuzzFuzz
Unix System Unix System KommandosKommandos
ISICISIC TCP/IP StacksTCP/IP Stacks
FTP-FTP-StressStress
FTP ProtokollFTP Protokoll
MangleMangleMeMe
HTML-Tags HTML-Tags und Codeund Code
Programmbezogene Fuzzer Fuzzing Frameworks
- hohe Spezialisierung auf Einsatzgebiet
SpikSpikee
NetzwerkprotokollNetzwerkprotokollee
Sprache: CSprache: C
OS: Linux / UnixOS: Linux / Unix
PeacPeachh
Universell Universell einsetzbareinsetzbar
Sprache: Python Sprache: Python
OS: alleOS: alle
BeDBeD Web ApplikationenWeb Applikationen
Sprache: CSprache: C
OS:alleOS:alle #
Praxisbeispiel 1Praxisbeispiel 1FTP Server Fuzzing – FTP Stress FTP Server Fuzzing – FTP Stress [6][6]
Testumgebung:
FTP Server Golden FTPd Server auf lokalem Recher
FTP Stress Fuzzer[5]
Getestet werden alle FTP Kommandos mit Übergabeparametern variabler Länge und Textinhalt „A“
Programmabsturz
Programm terminiert nach Ausführung des CWD/CDUP Kommandos mit einem Übergabeparameter einer bestimmten Länge
#
Praxisbeispiel 1Praxisbeispiel 1FTP Server Fuzzing – FTP StressFTP Server Fuzzing – FTP Stress
Einsatz eines Programm Debuggers
EIP Register Inhalt entspricht Testtext
Ungültiges Sprungadressziel
Durch Anpassung der Länge des Übergabewertes ist Manipulation des Sprungzieles möglich!
Buffer Overflow Problem
#
Praxisbeispiel 2Praxisbeispiel 2Einsatz eines Fuzzing Frameworks – Einsatz eines Fuzzing Frameworks –
PEACHPEACH[7][7]
gen = Static('Hello world') print gen.getValue()
Hello World
Scriptsprache Python
Objekt Orientierter Programmansatz
beinhaltet Generatoren für Vielzahl von Datenpaketen und Inhalten
MS .net und Eclipse Plugins verfügbar
Plattformunabhängig
Integration von „Selbsttest- Routinen“
DAS Beispiel:
#
Praxisbeispiel 2 Praxisbeispiel 2 Einsatz eines Fuzzing Frameworks - Einsatz eines Fuzzing Frameworks -
PEACHPEACHgen = www.http(*,/dev/stdout); gen = Block([
Static('GET / HTTP/1.0rn'), Static(‚Host: http://'), Repeater(group, Static('A'), 1, 4), Static('rn'),]) while True: print gen.getValue() group.next();
GET / HTTP/1.0 Host: http://A
GET / HTTP/1.0 Host: http://AA
GET / HTTP/1.0 Host: http://AAA
GET / HTTP/1.0 Host: http://AAAA
#
Praxisbeispiel 2 Praxisbeispiel 2 Einsatz eines Fuzzing Frameworks - Einsatz eines Fuzzing Frameworks -
PEACHPEACHgen = www.http(*,/dev/stdout); gen = Block([
Static('GET / HTTP/1.0rn'), Static(‚Host: http://'), Repeater(group, Static('A'), 1, 4), Static(‘/input.php?value=‘), Repeater(group, Static(‚b'), 1, 4), Static('rn'),]) while True: print gen.getValue() group.next();
GET / HTTP/1.0 Host: http://A/input.php?value=b
GET / HTTP/1.0 Host: http://AA/input.php?value=bb
GET / HTTP/1.0 Host: http://AAA/input.php?value=bbb
GET / HTTP/1.0 Host: http://AAAA/input.php?value=bbbb
#
Fazit und AusblickFazit und AusblickStarke Zunahme der verfügbaren Tools und
Plattformen
durch Frameworks wenig Fachwissen nötig
„Script-kiddies“
Überschwemmung der Entwickler mit Fehlern
Priorisierung und Kategorisierung der Fehler schwierig
Zukunftsträchtige Technik mit jedoch hohem Forschungs- bzw. Optimierungsbedarf
#
LiteraturverzeichnisLiteraturverzeichnis [1] Heise Verlag / Ct Ausgabe 18,2006 Artikel S.201ff[1] Heise Verlag / Ct Ausgabe 18,2006 Artikel S.201ff Wikipedia dt, en VersionWikipedia dt, en Version [2]ftp://ftp.cs.wisc.edu/paradyn/technical_papers/fuzz.pdf UNIX-fuzz [2]ftp://ftp.cs.wisc.edu/paradyn/technical_papers/fuzz.pdf UNIX-fuzz
Kommando Kommando [3]MS Internet Explorer I-Frame Lücke [3]MS Internet Explorer I-Frame Lücke
http://www.heise.de/newsticker/meldung/53841http://www.heise.de/newsticker/meldung/53841 [4]My-Doom Würmer [4]My-Doom Würmer
http://www.heise.de/security/news/meldung/53052http://www.heise.de/security/news/meldung/53052 [5]FTP-Stress Tool http://www.infigo.hr/files/ftpfuzz.zip[5]FTP-Stress Tool http://www.infigo.hr/files/ftpfuzz.zip [6]FTP-Fuzzing mit dem FTP-Stress Tool [6]FTP-Fuzzing mit dem FTP-Stress Tool
http://www.infigo.hr/files/INFIGO-TD-2006-04-01-Fuzzing-eng.pdfhttp://www.infigo.hr/files/INFIGO-TD-2006-04-01-Fuzzing-eng.pdf [7] PEACH Fuzzing Framework http://peachfuzz.sourceforge.net/[7] PEACH Fuzzing Framework http://peachfuzz.sourceforge.net/
Vielen Dank für eure Vielen Dank für eure Aufmerksamkeit !Aufmerksamkeit !
MeinungsbildMeinungsbild
Wer hat :Wer hat : Von Fuzzing / Fuzzern noch nie etwas gehört?Von Fuzzing / Fuzzern noch nie etwas gehört? Den Begriff schon gehört, aber nicht im konkreten Den Begriff schon gehört, aber nicht im konkreten
Zusammenhang mit Software Testing Tools?Zusammenhang mit Software Testing Tools? Schonmal einen Fuzzing Tool benutzt um Software Schonmal einen Fuzzing Tool benutzt um Software
zu testen?zu testen? Schonmal einen Fuzzer selber erstellt um Software Schonmal einen Fuzzer selber erstellt um Software
zu testen?zu testen?