Fuzzing - cleeus.de
Transcrição
Fuzzing - cleeus.de
Fuzzing Fuzzing Robert Buchholz, Kai Dietrich, Björn Lohrmann Rechnersicherheit Praktikum WS 2007 26. Januar 2008 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License. Fuzzing 1/26 Fuzzing Einführung Fahrplan Einführung Implementation eines Fuzzers Identikation von Eintrittspunkten Identikation Überschrittener Trust Boundaries Selektieren der Eintrittspunkte Generierung semi-valider Daten Erkennung von Fehlern Erkennung von Fehlern: Oene Fragen Zusammenfassung Fuzzing 2/26 Fuzzing Einführung Was ist Fuzzing? Was ist Fuzzing? Allgemein: I Testmethode mit automatisch generierten Testfällen I Testen von Grenzfällen mittels semi-valider Eingabedaten I Ziel: Finden von Sicherheitslücken Aus Sicht von Qualitätssicherung: I Negatives Testen: Programm macht nichts, was es nicht soll I Funktionales Testen: Programm macht, was es soll Fuzzing = Negatives Testen Fuzzing 3/26 Fuzzing Einführung Beispiele für Fuzzing Beispiele für Fuzzing Was lässt sich z.B. sinnvoll mittels Fuzzing testen? I Implementierungen von Netzwerkprotokollen Beispiel: Ein DNS-Proxy :-) I I I Fuzzing Programme zur Verarbeitung bestimmter Dateitypen Beispiel: Ein Video-Player Programmbibliotheken Beispiel: Eine Bibliothek für Reguläre Ausdrücke Programm das seine Kommandozeilenparameter verarbeitet Beispiel: Shell-Script, das für gegebene URL entsprechendes Programm startet 4/26 Fuzzing Einführung Motivation Motivation Warum Fuzzing zum Finden von Sicherheitslücken? I I I I Fuzzing Weniger personal- und zeitintensiv als z.B. Code Audits Stark automatisiert ⇒ Hohe Anzahl an Testfällen Reproduzierbarkeit der Testfälle Hohe Eektivität 5/26 Fuzzing Einführung Motivation Motivation Sheet2 Fazit: Potenzielle Schwachstellen in 8 Tools gefunden Fuzzing Ergebnisse SIP Fuzzing 100 Fehlgeschlagene Testgruppen [%] Beispiel: Fuzzing Ergebnisse ([OLOU]) I Gefuzztes Protokoll: Submenge von SIP I 4527 Testfälle in 54 Testgruppen I 9 Programme getestet (User Agents und Proxies) 90 80 70 60 50 40 30 20 10 0 SIP Implementierungen 6/26 Fuzzing Implementation eines Fuzzers Fahrplan Einführung Implementation eines Fuzzers Identikation von Eintrittspunkten Identikation Überschrittener Trust Boundaries Selektieren der Eintrittspunkte Generierung semi-valider Daten Erkennung von Fehlern Erkennung von Fehlern: Oene Fragen Zusammenfassung Fuzzing 7/26 Fuzzing Implementation eines Fuzzers Identikation von Eintrittspunkten Identikation von Eintrittspunkten Identikation von Eintrittspunkten I I Welche Kanäle für Programmzugri? Welche Formate/Protokolle der einzelnen Kanäle? Beispiele: I I Fuzzing Webapplication: HTTP Requests (Kanal), JSON (Format) Programmbibliothek: Funktionsaufrufe (Kanal), Datenstrukturen (Format) 8/26 Fuzzing Implementation eines Fuzzers Identikation von Eintrittspunkten Identikation von Eintrittspunkten: Beispiel TeamSpeak 2 TeamSpeak 2: I VoiceCom für Gruppen I Sternförmige Architektur (Server/Client) I UDP-basiertes Protokoll Fuzzing 9/26 Fuzzing Implementation eines Fuzzers Identikation von Eintrittspunkten Identikation von Eintrittspunkten: Beispiel TeamSpeak 2 Fuzzing 10/26 Fuzzing Implementation eines Fuzzers Identikation von Eintrittspunkten Identikation von Eintrittspunkten: Beispiel TeamSpeak 2 Fuzzing 11/26 Fuzzing Implementation eines Fuzzers Identikation von Eintrittspunkten Identikation von Eintrittspunkten: Beispiel TeamSpeak 2 Fuzzing 12/26 Fuzzing Implementation eines Fuzzers Identikation von Eintrittspunkten Identikation von Eintrittspunkten: Beispiel TeamSpeak 2 Fuzzing 13/26 Fuzzing Implementation eines Fuzzers Identikation Überschrittener Trust Boundaries Identikation Überschrittener Trust Boundaries Trust Boundary: I Übergang von Daten/Kontrolluss von einem Trust Level zu anderem I Ort, an dem Schwachstellen zu Privilegienausweitung führen Trust Level: Menge von Privilegien und Ressourcen Frage: Welche Trust Boundaries bestehen bei vorher identizierten Eintrittspunkten? Beispiel: I Aufruf einer Kernelfunktion I Eingaben an SUID-Binary Fuzzing 14/26 Fuzzing Implementation eines Fuzzers Identikation Überschrittener Trust Boundaries Identikation Überschrittener Trust Boundaries: Beispiel Trust Boundaries in TeamSpeak: I Web-Admin Authorisierungsdialog I Telnet vor der Authorisierung I VoIP Trac im TeamSpeak Protokoll I UDP Connect Packet im TeamSpeak Protokoll Fuzzing 15/26 Fuzzing Implementation eines Fuzzers Selektieren der Eintrittspunkte Selektieren der Eintrittspunkte Optimierung von Kosten und Nutzen: I Überschrittene Trust Boundary I Komplexität der Eingabedaten I Erwartete Fehlerdichte Fuzzing 16/26 Fuzzing Implementation eines Fuzzers Selektieren der Eintrittspunkte Selektieren der Eintrittspunkte: Beispiel Alle 3 Dienste gleich mächtig: I User → Admin I User → teamspeak2 Systembenutzer Ausgewählter Eintrittspunkt: UDP Connect Packet: I Web und Telnet können durch Firewall gesperrt werden I UDP Connect Packet kann nicht gesperrt werden Fuzzing 17/26 Fuzzing Implementation eines Fuzzers Generierung semi-valider Daten Generierung semi-valider Daten Ursprung der Daten I Generieren nach Formatdenition I Mutation existierender Daten Format der Daten I Protokollwissen im Fuzzer (intelligent) I Blinder Fuzzer Fuzzing 18/26 Fuzzing Implementation eines Fuzzers Generierung semi-valider Daten (Beispiele) Generierung semi-valider Daten (Beispiele) Protokollwissen Generieren Mutieren PROTOS (SIP) SPIKE, zzuf Blind cat /dev/random | ./app Fuzzing QueFuzz 19/26 Fuzzing Implementation eines Fuzzers Generierung semi-valider Daten (Beispiele) Generierung semi-valider Daten (Beispiele): TeamSpeak 2 Connect Packet Demo Fuzzing 20/26 Fuzzing Implementation eines Fuzzers Erkennung von Fehlern Erkennung von Fehlern In-Band: über den Eingangskanal I Beobachte Antworten I Wie erkenne ich Fehler? I Wie erkenne ich Funktion? Out-of-Band: auf Zielplattform I Instrumentierung / Dynamische Code-Analyse (Debugger, Valknut) I Ausgaben, Logdateien I Ressourcenverbrauch Fuzzing 21/26 Fuzzing Implementation eines Fuzzers Erkennung von Fehlern: Oene Fragen Erkennung von Fehlern: Oene Fragen I I I Fuzzing Was sind valide Antworten? Reproduzierbarkeit Ursprung vs. Manifestation von Fehlern 22/26 Fuzzing Zusammenfassung Fahrplan Einführung Implementation eines Fuzzers Identikation von Eintrittspunkten Identikation Überschrittener Trust Boundaries Selektieren der Eintrittspunkte Generierung semi-valider Daten Erkennung von Fehlern Erkennung von Fehlern: Oene Fragen Zusammenfassung Fuzzing 23/26 Fuzzing Zusammenfassung Zusammenfassung I I I Fuzzing ist eine Testmethode Negative, automatisch generierte Testfälle Implementation eines Fuzzers: 1. Eintrittspunkte und Trust Boundaries 2. Priorisierung der Eintrittspunkte 3. Datengenerierung 4. Fehlererkennung Fuzzing 24/26 Fuzzing Fragen Fuzzing 25/26 Fuzzing Wichtigste Quellen [OLOU] PROTOS Test-Suite: c07-sip, Im Internet unter: http://www.ee.oulu.fi/research/ouspg/protos/testing/c07/sip/ Computer Engineering Laboraty, University of Oulu, Stand vom 24.1.2008 [OE05] Peter Oehlert : Violating Assumptions with Fuzzing, Security & Privacy Magazine, IEEE, March-April 2005 [DM06] Jared DeMott: The Evolving Art of Fuzzing Unveröentlicht. Im Internet unter: http://www.vdalabs.com/tools/The_Evolving_Art_of_Fuzzing.pdf [AI02] Dave Aitel: The Advantages of Block-Based Protocol Analysis for Security Unveröentlicht. Im Internet unter: http://www.net-security.org/dl/articlesadvantages_of_block_based_analysis.pdf [SP05] Ilja van Sprundel: Fuzzing: Breaking software in an automated software Unveröentlicht. Im Internet unter: http://events.ccc.de/congress/2005/fahrplan/attachments/582-paper_fuzzing.pdf Fuzzing 26/26