XMPP-Fuzzing

Hi Leute,

im Bereich Netzsicherheit haben wir an der Uni die Aufgabe bekommen, einen von uns aufgesetzten XMPP-Server zu fuzzen.

Zum einen haben wir uns einige Fuzzing-Programme angesehen. Zum anderen sehe ich mir momentan an, wie die Server-Authentifizierung bei XMPP funktioniert und versuche, sie in Java (ohne Bibliothek wie Smack) zu implementieren.

Außerdem lese ich mir gerade diese RFCs durch: http://xmpp.org/xmpp-protocols/rfcs/

Ich habe schon Stunden mit Google verbracht und bin leider auf keinen Grünen Zweig gekommen, was diese Authentifizierung angeht.

Könnt ihr mir irgendwelche Tipps zum weiteren Vorgehen geben? Ich habe keine Idee, wie ich das in Java machen könnte. Vermutlich helfen mir auch schon ein paar Begriffe, die ich googeln kann.

Habt ihr vielleicht auch andere Ideen zu Fuzzing-Methoden?

Viele Grüße
Tom
 
Zuletzt bearbeitet:
Zunächst solltest du dir im klaren darüber sein, was du überhaupt Fuzztesten möchtest. XAMPP besteht aus mehreren Programmen (Apache, PHP, MySQL, Perl, ProFTP, OpenSSL.. die komplette Liste gibt es auf der Website). Wenn du dich für Programm entschieden hast, welches du testen möchtest, solltest du dir überlegen welchen Teil des Programmes du untersuchen möchtest, zB wie (un)sicher verarbeitet Perl RegEx-Ausdrücke oder Apache XML.

Als nächstes musst duch dich entscheiden, wie die Testfälle generiert werden sollen. Dafür gibt es zwei Ansätze: Blackbox und Whitebox. Blackbox bedeutet, du sammelst eine große Menge valider Beispieldaten und reduzierst diese Menge dann soweit, dass jede weitere Reduzierung bedeuten würde, dass auch Codecoverage abnimmt. Anschließend schreibst du dir ein Programm, welches zufällig Bits flipt und testest damit das Programm. Beim Whitebox-Fuzzing musst du dich in den verwendeten Standard einarbeiten und potentielle Schwachstellen identifizieren. Dann gilt es auch hier einen Testfallgenerator zu schreiben oder einen fertigen zu finden und die Testfälle zu generieren.

Außerdem solltest du dir Gedanken darüber machen, wie du die Umgebung, in der getestet werden soll, gestaltest. Wichtig ist eine Methode um einen Absturz festzustellen, möglichst genau zu protokollieren (Input, Grund, Umgebungsvariblen..) und wie sich diese Umgebung nach jedem Test (möglichst effizient) zurücksetzen lässt, damit man ausschließen kann, dass sich die Testfälle gegenseitig beeinflusst haben.
 
Zunächst solltest du dir im klaren darüber sein, was du überhaupt Fuzztesten möchtest. XAMPP besteht aus mehreren Programmen (Apache, PHP, MySQL, Perl, ProFTP, OpenSSL.. die komplette Liste gibt es auf der Website).

Danke erstmal für deine detaillierte Antwort. Leider meinte ich nicht XAMPP sondern XMPP (also das Jabber-Protokoll).

Trotzdem denke ich, dass deine Antwort auch auf XMPP übertragbar ist. Ich werd mir mal darüber Gedanken machen :)
 
Oh, ein bisschen stupid von mir.. Aber egal wie du schon geschrieben hast, lässt sich das Konzept auf alles übertragen. Wenn du weißt welcher Server aufgesetzt wurde, kannst du auch die eingesetzten Bibliotheken direkt testen. Geschwindigkeit ist auch ein wichtiger Faktor. Außerdem würde ich empfehlen eine Scriptsprache zu verwenden, da man damit idR schneller programmieren kann.
 
Außerdem würde ich empfehlen eine Scriptsprache zu verwenden, da man damit idR schneller programmieren kann.
Vielen Dank für die Antwort. Da der Server in Java geschrieben ist und ich aus Zeitmangel keine zusätzliche Skriptsprache für das Projekt lernen kann, werden wir in Java weitermachen.

Trotzdem würde mich interessieren, welche Skriptsprache du dafür empfehlen kannst.

Als Server benutzen wir openFire (auch in Java implementiert). Da wir die Sourcen zur Verfügung haben, können wir auch direkt Methoden testen. Danke für den Tipp.

Sonst noch irgendwelche Methoden/Tipps/Hinweise?
 
Trotzdem würde mich interessieren, welche Skriptsprache du dafür empfehlen kannst.
Im Laufe des letzten Jahres habe ich Python sehr schätzen gelernt. Sehr einfache Syntax, es existiert fast für alles ein Wrapper/Bibliothek und es ist in mehreren Programmen integriert, zB OllyDbg, IDA.. Ruby scheint mir aber auch ein guter Kandidat zu sein.


Sonst noch irgendwelche Methoden/Tipps/Hinweise?
Ein hoher Grad an Automatisierung ist sehr vorteilhaft ;)
 
hab zwar keine Ahnung von fuzzing, aber vom googlen :D

such mal nach ava latrope da gibts ein Defcon Vortrag von ihr zum Thema XMMP Fuzzing

vielleicht hilft dir das ja etwas...
 
Zurück
Oben