Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Fuzzer Seminar Internet-Technologie Fachgebiet Praktische Informatik

Ähnliche Präsentationen


Präsentation zum Thema: "Fuzzer Seminar Internet-Technologie Fachgebiet Praktische Informatik"—  Präsentation transkript:

1 Fuzzer Seminar Internet-Technologie Fachgebiet Praktische Informatik
Referent: Mirko Schäfer, FB 16 Informatik

2 Gliederung Ideen und Motivation Kategorisierung für Softwaretests
Begriffsdefinition Historisches Fuzzing Techniken Aktuelle Implementierungen Praxisbeispiele Fuzzing einer FTP Server Implementierung Fuzzing Framework Peach Fazit und Ausblick Fragen Literatur #

3 Erstellung eines möglichst einfachen, objektiven und universellen
Ideen und Motivation Einfache Bedienung Verlässliche Fehlererkennung Plattform unabhängig Suche nach ALLEN Fehlermöglichkeiten Für jeden Softwaretyp einsetzbar Erstellung eines möglichst einfachen, objektiven und universellen Testverfahren , um Schwachstellen zu finden, die sonst niemand aufdecken würde. #

4 Kategorisierung für Softwaretests
Zugriff auf Programmquellcode und Binarys z.B. Open Source Software (Linux Kernel) Zugriff auf Binarys z.B. Closed Source SW (Internet Explorer…) Kein Zugriff auf Binarys oder Quellcode (Black Box Fuzzing) z.B Webserver, FTP Server, SMTP…. #

5 Begriffsdefinition Robustheitstest für Software / Softwaredienste in Bezug auf Manipulation der Eingabedaten ZIEL Überprüfung des Programmcodes durch Provokation eines Programmabsturzes oder fehlerhafte Datenverarbeitung #

6 Historisches Geburtstag als „fuzz“ Unix-Kommando 1990 in einer Forschungsgruppe um Barton Miller[2] Tool zum Testen von gängigen Unix Kommandos mit Random Eingabedaten variabler Länge Abstürze u.A. bei emacs, ftp, ident medienwirksames Beispiel der Fuzzing Technik: IFrame-Lücke im IE 2005[3] Resultat: MyDoom Wurm[4] #

7 Fuzzing Technik Generation von möglichst effektiven Testdaten
Testdaten müssen zum zu testenden Programm passen Zu beachten: bei Kapselung (OSI-Layer) Erwartung eines definierten Formates (Bilddateien…) Prüfsummen (CRC) Reduktion durch Optimierung der gültigen Eingabedaten (Eingaberaum) ZIEL #

8 Fuzzing Techniken Vergleich der gängigen Ansätze
Eingabedatenanalyse Datenmutation gezieltes Suchen und Testen von möglichen Schwachstellen Wahllose Datenmutation in Inhalt und Länge + sehr kleiner Eingaberaum + Test auf alle Möglichkeiten schnell einsetzbar übersehen von Fehlern langwierige Programmanalyse - riesiger Eingaberaum #

9 Aktuelle Implementierungen
Programmbezogene Fuzzer Fuzzing Frameworks Unix-Fuzz Unix System Kommandos ISIC TCP/IP Stacks FTP-Stress FTP Protokoll MangleMe HTML-Tags und Code Spike Netzwerkprotokolle Sprache: C OS: Linux / Unix Peach Universell einsetzbar Sprache: Python OS: alle BeD Web Applikationen OS:alle - hohe Spezialisierung auf Einsatzgebiet #

10 Praxisbeispiel 1 FTP Server Fuzzing – FTP Stress [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 #

11 Praxisbeispiel 1 FTP 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 #

12 Praxisbeispiel 2 Einsatz eines Fuzzing Frameworks – PEACH[7]
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: gen = Static('Hello world') print gen.getValue() Hello World #

13 Praxisbeispiel 2 Einsatz eines Fuzzing Frameworks - PEACH
gen = gen = Block([ Static('GET / HTTP/1.0rn'), Static(‚Host: Repeater(group, Static('A'), 1, 4), Static('rn'),]) while True: print gen.getValue() group.next(); GET / HTTP/1.0 Host: GET / HTTP/1.0 Host: GET / HTTP/1.0 Host: GET / HTTP/1.0 Host: #

14 Praxisbeispiel 2 Einsatz eines Fuzzing Frameworks - PEACH
gen = gen = Block([ Static('GET / HTTP/1.0rn'), Static(‚Host: 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: GET / HTTP/1.0 Host: GET / HTTP/1.0 Host: GET / HTTP/1.0 Host: #

15 Fazit und Ausblick Starke 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 #

16 Literaturverzeichnis
Vielen Dank für eure Aufmerksamkeit ! Literaturverzeichnis [1] Heise Verlag / Ct Ausgabe 18,2006 Artikel S.201ff Wikipedia dt, en Version [2]ftp://ftp.cs.wisc.edu/paradyn/technical_papers/fuzz.pdf UNIX-fuzz Kommando [3]MS Internet Explorer I-Frame Lücke [4]My-Doom Würmer [5]FTP-Stress Tool [6]FTP-Fuzzing mit dem FTP-Stress Tool [7] PEACH Fuzzing Framework

17 Meinungsbild Wer hat : Von Fuzzing / Fuzzern noch nie etwas gehört?
Den Begriff schon gehört, aber nicht im konkreten Zusammenhang mit Software Testing Tools? Schonmal einen Fuzzing Tool benutzt um Software zu testen? Schonmal einen Fuzzer selber erstellt um Software zu testen?


Herunterladen ppt "Fuzzer Seminar Internet-Technologie Fachgebiet Praktische Informatik"

Ähnliche Präsentationen


Google-Anzeigen