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

Documentos relacionados