
Fuzzing-Framework geschrieben in Python
| Sulley: Boo? | Boo: Kitty!
Kitty ist ein quelloffenes, modulares und erweiterbares Fuzzing-Framework,
geschrieben in Python,
inspiriert von OpenRCE's Sulley <https://github.com/OpenRCE/sulley>_
und Michael Eddington's (und jetzt Deja Vu Security's) Peach Fuzzer <http://community.peachfuzzer.com/>_.
Ziel
Als wir mit der Entwicklung von Kitty begannen, war unser Ziel, uns dabei zu helfen,
ungewöhnliche Ziele zu fuzzen — also proprietäre und esoterische Protokolle über
Nicht-TCP/IP-Kommunikationskanäle — ohne jedes Mal alles von Grund auf neu schreiben
zu müssen. Ein generisches und abstraktes Framework, das die gemeinsame Funktionalität
jedes uns einfallenden Fuzzing-Prozesses enthalten würde und dem Benutzer erlauben
würde, es leicht zu erweitern und für sein spezifisches Ziel zu testen.
Funktionen
Mit diesem Ziel im Hinterkopf waren die folgenden Funktionen für uns sehr wichtig:
:Modularität:
Jeder Teil des Fuzzers ist eigenständig. Das bedeutet, dass Sie denselben Überwachungscode für verschiedene Anwendungen oder denselben Payload-Generator (auch Datenmodell genannt) zum Testen des Parsings derselben Daten, die über verschiedene Kanäle empfangen werden, verwenden können.
:Erweiterbarkeit:
Wenn Sie etwas „Neues“ testen müssen, müssen Sie den Kerncode von Kitty nicht ändern. Die meisten, wenn nicht alle Funktionen können im Benutzercode implementiert werden. Dies umfasst Überwachung, Steuerung und Kommunikation mit dem gefuzzten Ziel.
:Umfangreiche Datenmodellierung:
Der Kern des Datenmodells ist reichhaltig und erlaubt die Beschreibung fortgeschrittener Datenstrukturen, einschließlich Zeichenketten, Hashes, Längen, Bedingungen und vielem mehr. Und wie die meisten Teile des Frameworks ist es darauf ausgelegt, bei Bedarf noch weiter erweitert zu werden.
:Zustandsbehaftet:
Unterstützung für mehrstufige Fuzzing-Tests. Sie können nicht nur beschreiben, wie die Nutzlast einer einzelnen Nachricht aussieht, sondern auch die Reihenfolge der Nachrichten beschreiben und sogar das Fuzzing auf die Reihenfolge der Sequenz anwenden.
:Client- und Server-Fuzzing:
Sie können sowohl Server als auch Clients fuzzen, vorausgesetzt Sie haben einen passenden Stack. Das klingt nach einer großen Anforderung, ist es aber nicht: Es bedeutet nur, dass Sie die Mittel haben sollten, mit dem Ziel zu kommunizieren, was Sie in den meisten Fällen ohnehin haben.
:Plattformübergreifend:
Läuft auf Linux, OS X und Windows. Wir urteilen nicht ;-)
Nun, Kitty ist kein Fuzzer. Es enthält auch keine Implementierung eines bestimmten Protokolls oder Kommunikationskanals. Sie können damit Ihren eigenen Fuzzer schreiben, und Sie können Kitty-basierten Code von anderen verwenden, aber es ist kein Out-of-the-Box-Fuzzer.
Ein guter Ort, um Implementierungen von Kitty-Modellen zu erhalten (und hinzuzufügen), ist Katnip.
Kitty, als Framework, implementiert die Hauptschleife des Fuzzers und bietet Syntax zur Modellierung von Daten sowie Basisklassen für jedes der Elemente, die zur Erstellung einer vollständigen Fuzzing-Sitzung verwendet werden. Allerdings sind spezifische Implementierungen von Klassen nicht Teil des Kitty-Frameworks. Das bedeutet, dass Kitty die Schnittstelle und die Basisklasse zur Durchführung von Datentransaktionen mit einem Ziel definiert, aber keine Implementierungen für die Datenübertragung über HTTP, TCP oder UART bereitstellt.
Implementierungen aller Arten von Klassen finden Sie im komplementären
Repository – Katnip <https://github.com/cisco-sas/katnip>_.
Kitty installieren:
::
pip install kittyfuzzer
Lesen Sie einige der Dokumentationen auf ReadTheDocs <https://kitty.readthedocs.io>_.
Werfen Sie einen Blick auf die Beispiele
Bauen Sie Ihren ganz eigenen Fuzzer :-)
#kitty on Freenode <https://webchat.freenode.net/?channels=kitty>_Einen Fehler gefunden?
Eröffnen Sie ein Issue <https://github.com/cisco-sas/kitty/issues/new>_
Haben Sie eine Lösung?
Großartig! Bitte reichen Sie einen Pull-Request <https://github.com/cisco-sas/kitty/compare>_ ein
Einen interessanten Controller/Monitor/Target implementiert?
Bitte reichen Sie einen Pull-Request im Katnip-Repository <https://github.com/cisco-sas/katnip>_ ein
Einen interessanten Fehler mit einem Kitty-basierten Fuzzer gefunden? Wir würden uns freuen, davon zu hören! Schreiben Sie uns eine Nachricht
|docs| |travis| |coverage| |gitter|
.. |docs| image:: https://readthedocs.org/projects/kitty/badge/?version=latest :alt: Documentation Status :scale: 100% :target: https://kitty.readthedocs.io/en/latest/?badge=latest
.. |travis| image:: https://travis-ci.org/cisco-sas/kitty.svg?branch=master :alt: Build Status :scale: 100% :target: https://travis-ci.org/cisco-sas/kitty
.. |coverage| image:: https://coveralls.io/repos/github/cisco-sas/kitty/badge.svg?branch=master :alt: Test Coverage Status :scale: 100% :target: https://coveralls.io/github/cisco-sas/kitty?branch=master
.. |gitter| image:: https://badges.gitter.im/cisco-sas/kitty.svg :alt: Chat on Gitter :scale: 100% :target: https://gitter.im/cisco-sas/kitty?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge