Spaces. Smartes Cloud Hosting für anspruchsvolle Webprojekte. Loslegen und Spaces testen. Von Mittwald.
Rene Schmidt 31. März 2008

Sturmlauf gegen Websites – Fuzzing mit GreaseMonkey

Kein Beitragsbild

uzzing ist eine relativ simple Software-Testmethode, mit der versteckte Programmfehler aufgedeckt werden können. Web-Entwickler können mit dem Firefox-Plugin GreaseMonkey diese Methode einsetzen, um die Sicherheit ihrer Programme zu erhöhen.

Wie für alle GreaseMonkey-Artikel gilt auch hier: Etwas mehr als grundlegende Javascript-Kenntnisse sind nützlich, um das volle Potenzial von GreaseMonkey zu entfalten. Ansonsten gilt: „Don’t try this at home.“ GreaseMonkey kann in falschen oder unerfahrenen Händen durchaus gefährlich sein.

Das GreaseMonkey-Plugin finden Sie auf addons.mozilla.org. Wie Sie GreaseMonkey-Skripte installieren, lesen Sie im Dr. Web-Artikel Greasemonkey-Skripte selbstgemacht – so gehts.

Voraussetzung
Web-Anwendungen oder Websites, die Benutzereingaben über ein Formular oder eine AJAX-Schnittstelle entgegen nehmen, sind nichts Ungewöhnliches. Dabei besteht immer die Gefahr von Cross-Site-Scripting– oder Code-Injection-Angriffen. Bei solchen Angriffen werden den verarbeitenden Skripten Benutzereingaben untergejubelt, die hinterher zu unerwünschten Effekten führen können. Beispielsweise werden SQL-Kommandos direkt an die Datenbank geschickt oder fremde Inhalte in die Anwendung geschleust. Normalerweise präpariert ein Skript vor der weiteren Verarbeitung die Benutzereingaben so, dass sie keinen Schaden anrichten können. Eine andere mögliche Gegenmaßnahme wäre, „unangebrachte“ Benutzereingaben einfach abzulehnen.

Das Problem dabei ist, dass Entwickler selten wirklich alle möglichen Eingaben erfassen können. Zu unterschiedlich sind die Anforderungen, um alles 100%ig vorherzusehen. Bei Registrierungsformularen sind viele verschiedene Eingabeformate zugelassen. E-Mail-Adressen, Telefonnummern und Postadressen haben jeweils ihre eigenen Anforderungen. Was für E-Mails zulässig ist, muss für Postadressen noch lange nicht erlaubt sein und so weiter. Jeder Entwickler gibt sein Bestes und dennoch kommt es oft genug im Produktionsbetrieb zu Problemen, weil Nutzer etwas eingegeben haben, was das System hätte besser bereinigen oder gleich ablehnen sollen. Im besten Fall geht alles gut. Schlimmer wird es, wenn die Datenbank Inkonsistenzen aufweist oder Kriminellen auf diese Weise Sicherheitslücken präsentiert werden. Oft genug gerät auch nur die Web-Anwendung aus dem Tritt und zeigt eine Fehlermeldung an.

Was tun? Fuzzing!
Die Frage ist nun, wie Web-Entwickler feststellen können, ob eine Software mit Eingaben jeglicher Art zurechtkommt. Eine einfache Methode ist das Fuzzing, bei dem Software mit Zufallseingaben solange bombardiert wird, bis sie mit einer Systemfehlermeldung oder einem Absturz kapituliert oder sich dem Test als gewachsen erweist und den Fehler gekonnt abfängt, beispielsweise mit einer stillen Bereinigung der Eingabe oder der Meldung, dass die Eingabe abgelehnt wurde. Um eine große Bandbreite an Eingaben abzudecken, werden idealerweise nicht nur Buchstaben, Satzzeichen oder Ziffern verwendet, sondern auch Sonderzeichen und solche, die auf keiner Tastatur zu finden sind.

Fuzzing
Fuzzing in Aktion. Ob das Formular-Skript mit dem Datenmüll zurechtkommt?

Grundlage für das Dr. Web-Fuzzing-Script für GreaseMonkey ist Random Filler von Adam Knutson, welches Formulare nach dem Zufallsprinzip ausfüllt. Es wurde für DrWeb um die Fähigkeit erweitert, auf Tastendruck Zufallszeichenketten zu erzeugen und in Input- sowie Textarea-Felder einzutragen. Hier ein Ausschnitt mit den wichtigsten Änderungen:

Fuzzing
Die Länge der Zufallsstrings können sie jeweils mit den Variablen „len“ angeben.

Wenn Sie das Skript installiert haben, aktualisieren Sie die aktuelle Seite und drücken dann STRG+SHIFT+F gleichzeitig. Alle Select-, Checkbox-, Radio-, Text- und Textarea-Felder der aktuellen Seite werden dann zufällig ausgewählt oder mit Zufallszeichenketten gefüllt. Die Zeichenketten werden aus den ASCII-Zeichen 32 bis 255 zusammengestellt.

Probieren Sie alle eigenen Formulare und Skripte mit dem Fuzzing-Skript aus. Spielen Sie auch mit den beiden „len“-Variablen (siehe Screenshot). Mit diesen Variablen geben Sie an, wie lang die zu erzeugenden Zeichenketten sein sollen. Selbst, wenn in einem nur zum Beispiel 32 Zeichen erlaubt sind, sollte ein Skript mit Eingaben von 1000 oder mehr Zeichen zurechtkommen. Viel Erfolg beim Absichern!

Links zum Thema:

  • GreaseMonkey-Plugin für Firefox
  • DrWeb-Fuzzing-Skript für GreaseMonkey
  • Cross-Site-Scripting erklärt
  • SQL-Injection
  • Greasemonkey und Firefox – Features en masse
  • Greasemonkey-Skripte selbstgemacht – so gehts
  • Random-Filler-Skript

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.