Die Axt im Walde
Fuzzing hilft bei der automatischen Suche nach Programmierfehlern in Anwendungen. Unterstützung bieten dabei Tools für spezifische Anwendungen und Protokolle. Wir haben uns drei davon angeschaut.
Die Schwachstellensuche mit Fuzzing ist spätestens seit dem "Month of the Browser Bug" [1] (MoBB) vielen Sicherheitsspezialisten ein Begriff. Innerhalb von 30 Tagen veröffentlichte H. D. Moore 25 Schwachstellen im Internet Explorer. Der größte Teil davon fand sich in fehlerhaften Funktionen von ActiveX-Controls, die Moore mit Hilfe eines selbstgeschriebenen Fuzzing-Tools entdeckt hatte.
AxMan
AxMan besteht im Wesentlichen aus zwei Teilen: Das Windows-Tool axman.exe, das auf dem Windows-PC sämtliche COM-Objekte, also auch ActiveX-Controls erfasst, analysiert und für jedes einzelnes ein JavaScript mit einem Array sämtlicher Methoden in ein vorgegebenes Log-Verzeichnis schreibt [1 [2]]. Dazugesellen sich Skripte, die im zweiten Schritt den eigentlichen Fuzzing-Vorgang mit Hilfe eines Webservers steuern. Je nach Zahl der auf dem PC vorhandenen Controls kann die Analyse von AxMan bis zu mehrere Stunden dauern. Das über die Eingabeaufforderung zu startende Tool ruft dazu ein Reihe von ActiveX-Modulen auf dem Computer auf. Dabei öffnen und schließen sich etwa Office-Programme und viele weitere Anwendungen wie von Geisterhand.
Anschließend muss das Log-Verzeichnis zusammen mit einer zu AxMan gehörigen Skriptsammlung im Root-Verzeichnis eines Webservers gespeichert werden – alle erforderlichen Dateien finden sich im Archiv der herunterladbaren AxMan-Datei. Im nächsten Schritt ruft man die index.html-Seite im Root-Verzeichnis des Webservers mit dem Internet Explorer auf. Dem Anwender präsentiert sich nun eine Oberfläche, die anzeigt, wie viele Controls zum Testen zur Verfügung stehen; in unserem Test waren das 3733 Objekte. Darüber hinaus lässt sich in der GUI über Optionen festlegen, welche Teile der Eigenschaften und Methoden dem Fuzzing unterzogen werden.
Ohne weitere Vorgaben werden beim Start sämtliche Objekte durchprobiert. Es lassen sich aber auch einzelne Objekte fuzzen, sofern man deren CLSID kennt. Während des Durchlaufs zeigt die GUI die ID des gerade gefolterten Objekts sowie die getestete Eigenschaft und Methode an. Im Internet Explorer können sich dabei die unterschiedlichsten Dinge abspielen – bis zum Absturz des Browsers. In Kombination mit einem Debugger und der Information über die fehlerhafte Methode lassen sich dann Informationen für weitere manuelle Analysen gewinnen und ob sich die Lücke auch zum Einschleusen von Code eignet. Damit der Fuzzing-Prozess fortan nicht immer am selben Objekt hängen bleibt und man in der Folge keine weiteren Objekte untersuchen kann, muss die CLSID des verursachenden Controls in die Datei blacklist.js eingetragen werden.
Im Test fanden wir innerhalb kürzester Zeit eine Schwachstelle in einem Objekt für Microsoft Data Access Components (MDAC) in der Bibliothek msado15.dll, die zum Absturz des Internet Explorer führte. AxMan liefert zwar schnell die ersten Ergebnisse, kann jedoch nur Hinweise geben, wo ein Entwickler nacharbeiten muss.
FTPStress Fuzzer
FTPStress Fuzzer
FTP-Clients können FTP-Server durch eine Vielzahl von Befehlen steuern. Ein Großteil der Befehle erfordert die Angabe von Parametern, die der Server einlesen und auswerten muss. Gerade hier patzen FTP-Server oft, wenn etwa der übergebene Parameter größer als der reservierte Puffer ist. Aber auch Sonderzeichen können einen Server durchaus aus dem Tritt bringen. Das kostenlose Windows-Tool FTPStress Fuzzer des Herstellers Infigo testet sämtliche FTP-Befehle mit verschiedenen Parametern durch [2 [3]]. Der Anwender kann dabei festlegen, welche Befehle der FTP-Fuzzer an den Server schicken soll und in welchen Grenzen die Parameter manipuliert werden. Ein Parameter kann so etwa 200.000-mal den Buchstaben A oder 9000-mal eine vorgegebene Zeichenkette enthalten. Das Tool bietet hier bereits eine vordefinierte Liste möglicher Zeichenketten an, die es für jeden Befehl durchgeht. Alternativ kann der Anwender eine einzige Zeichenkette pro Befehl selbst angeben.
Ist die Konfiguration abgeschlossen, genügt ein Klick auf den Start-Knopf und der Fuzzer legt los. In seiner GUI zeigt FTPStress Fuzzer in einem Protokollfenster alle gesendeten Befehle und die dazugehörige Reaktion des Servers an. Bei einem Test des FTP-Servers ProFTP war schon nach kurzer Zeit keine weitere Verbindung zum Server mehr aufzubauen. Der FTP-Server hatte sich mit einem Absturz verabschiedet. Auf ähnliche Weise hat der Hersteller Infigo nach Fehlern in weiteren FTP-Servern gesucht und wurde fündig. Im G6 FTP Server, ArGoSoft FTP Server, FileZilla, WarFTPd und Golden FTP ließen sich die Fehler sogar zum Einschleusen von Code benutzen [3 [4]].
FTPStress Fuzzer ist leicht zu bedienen und gibt dem Entwickler eine Möglichkeit an die Hand, sein Programm zumindest hinsichtlich der Verarbeitung der Benutzerparameter auf grobe Schnitzer zu testen. Leider ermöglicht das Tool auch Script-Kiddies, verwundbare Server im Handumdrehen abzuschießen.
FileFuzz
FileFuzz
Das kostenlose Tool FileFuzz des Sicherheitsdienstleisters iDefense erzeugt auf dem Windows-PC fehlerhafte Dateien für diverse Programe und ruft sie mit der jeweils verknüpften Anwendung auf [4 [5]]. Dabei protokolliert es die Reaktion der Anwendung und zeigt unter anderem in seiner GUI an, ob ein Pufferüberlauf aufgetreten ist. FileFuzz unterstützt derzeit nur wenige Dateitypen: jpg, wmf, pdf, vcf, wab, chm, ht, rm und einige selten benutzte.
Vor dem Start des eigentlichen Fuzzing muss der Anwender über das Create-Menü des Tools die fehlerhaften Dateien erzeugen. Dazu nimmt er als Vorlage eine fehlerfreie Datei, etwa ein JPG-Bild, und überschreibt nach Nutzervorgaben bestimmte Bytes mit Nullen. Dabei lassen sich auch mehrere fehlerhafte Dateien in einem Zug erzeugen, bei denen jeweils an anderer Stelle in der Datei etwas verändert wurde.
Auf die so erzeugten Dateien lässt man im Execute-Menü des Tools eine der bereits vordefinierten Anwendungen los. Bei JPG-Bildern kann man sogar zwischen dem Internet Explorer und der Bibliothek shimgvw.dll wählen – in letzterer fand sich auch die Anfang 2006 entdeckte Lücke bei der Verarbeitung von präparierten WMF-Bildern. Abweichend von den eingebauten Vorgaben kann der Anwender die Datei aber auch mit einer eigenen Applikation starten, indem er den Pfad zu der vordefinierten Anwendung einfach durch den zur eigenen Anwendung ersetzt.
Zu jeder aufgerufenen Datei zeigt FileFuzzer Informationen an, ob und welche Datei zu einer Ausnahme im aufgerufenen Programm führte, etwa eine Speicherzugriffsverletzung oder einen Pufferüberlauf. Dabei präsentiert das Tool sogar einen Auszug aus den dazugehörigen Prozessorregistern.
Bei einem kurzen Test mit manipulierten PDF-Dokumenten ließen sich zahlreiche Pufferüberläufe im Acrobat Reader provozieren, die allerdings alle nicht ausnutzbar waren. Die Probe aufs Exempel mit fehlerhaften JPG-Bildern ließ sogar den mitlaufenden Virenscanner von AVG Alarm schlagen. Ursache war die heuristische Erkennung des Programms, das hinter den fehlerhaften Bildern einen Schädling vermutete.
FileFuzz kann wertvolle Hinweise liefern, ob in den Verarbeitungsfunktionen der jeweiligen Anwendung alles mit rechten Dingen zugeht und ob Fehler wenigstens ordentlich abgefangen werden. Zu beachten ist, dass FileFuzz die Standardpfade der englischensprachigen Versionen von Windows verwendet. In den Vorgaben ist dann etwa "Program Files" gegen "Programme" auszutauschen.
Fazit
Fazit
Die drei hier vorgestellten Fuzzing-Tools geben einen ersten Einblick in die angewandte Fuzzing-Technik. In ihrem Funktionsumfang sind sie allerdings begrenzt. Daneben gibt es eine Vielzahl weiterer Fuzzing-Tools unter Windows und Linux für vielerlei Netzwerkprotokolle, Dateiarten und Anwendungen. Einige bieten leicht zu bedienende Benutzeroberflächen, andere sind nur über eine Befehlszeile mit zahlreichen Parametern zu starten, Letztere sind aber in der Regel flexibler als ein GUI-Tool.
Besonders anpassungsfähig sind Fuzzing-Frameworks wie Smudge und Spikefile, die dem Anwender allerdings eine längere Einarbeitungszeit abverlangen. Wer sich näher mit den theoretischen Grundlagen von Fuzzing beschäftigen möchte, sollte sich den Artikel "Datensalat" in der c't 18/06 ab Seite 210 zu Gemüte führen.
Fuzzing-Tools geben sowohl Sicherheitsspezialisten als auch Entwicklern eine Möglichkeit, potenzielle Sicherheitslücken schnell aufzudecken. Allerdings werden die Sicherheitsmailing-Listen schon jetzt mit Fehlerberichten überhäuft, in denen offenbar völlig unreflektiert und ohne weitere Analyse jeder Absturz eines Programmes bei einem Fuzzing-Test gleich als Sicherheitsproblem eingestuft wird. Zwar sind auch Abstürze aufgrund möglicher DoS-Attacken ein mögliches Sicherheitsproblem, oftmals wird ihnen aber das Potenzial für "Remote-Code-Execution" einfach angedichtet. Für einen Sicherheitsverantwortlichen oder Administrator wird es damit zukünftig immer schwieriger, wirklich kritische Lücken von eher harmlosen zu unterscheiden.
Tools
[1] AxMan [6]
[4] Vulnerability Summary for the Week of May 1, 2006 [8], Fehlerreport des US-CERT
[4] FileFuzzer [9] (dab [10])
URL dieses Artikels:
https://www.heise.de/-270818
Links in diesem Artikel:
[1] https://www.heise.de/news/Luecke-in-Safari-beendet-Month-of-the-Browser-Bug-147263.html
[2] #uelit-u3
[3] #uelit-u3
[4] #uelit-u3
[5] #uelit-u3
[6] http://metasploit.com/users/hdm/tools/axman/
[7] http://www.infigo.hr/en/in_focus/tools
[8] http://www.us-cert.gov/cas/bulletins/SB06-128.html
[9] http://labs.idefense.com/labs-software.php?show=3
[10] mailto:dab@ct.de
Copyright © 2006 Heise Medien