
Framework de fuzzing écrit en Python
| Sulley : Boo ? | Boo : Kitty !
Kitty est un framework de fuzzing modulaire et extensible open-source
écrit en Python,
inspiré de Sulley <https://github.com/OpenRCE/sulley>_ d'OpenRCE
et du Peach Fuzzer <http://community.peachfuzzer.com/>_ de Michael Eddington
(et maintenant de Deja Vu Security).
Objectif
Quand nous avons commencé à écrire Kitty, notre objectif était de nous aider à fuzzer des cibles inhabituelles
— c'est-à-dire des protocoles propriétaires et ésotériques sur des canaux de communication non TCP/IP —
sans avoir à tout réécrire à chaque fois. Un framework générique et
abstrait qui inclurait les fonctionnalités communes de chaque
processus de fuzzing auquel nous pouvions penser, et permettrait à l'utilisateur de l'étendre
et de l'utiliser facilement pour tester sa cible spécifique.
Fonctionnalités
Avec cet objectif en tête, les caractéristiques suivantes étaient très importantes pour nous :
:Modularité :
Chaque partie du fuzzer est indépendante. Cela signifie que vous pouvez utiliser le même code de surveillance pour différentes applications, ou le même générateur de charge utile (alias Data Model) pour tester l'analyse des mêmes données reçues via différents canaux.
:Extensibilité :
Si vous devez tester quelque chose de « nouveau », vous n'aurez pas besoin de modifier le code noyau de Kitty. La plupart, sinon la totalité, des fonctionnalités peuvent être implémentées dans le code utilisateur. Cela inclut la surveillance, le contrôle et la communication avec la cible fuzzée.
:Modélisation de données riche :
Le noyau du modèle de données est riche et permet de décrire des structures de données avancées, y compris des chaînes, des hachages, des longueurs, des conditions et bien plus encore. Et, comme la plupart du framework, il est conçu pour être étendu encore davantage si nécessaire.
:Avec état (Stateful) :
Prise en charge des tests de fuzzing multi-étapes. Non seulement vous pouvez décrire à quoi ressemblera la charge utile d'un message individuel, mais vous pouvez également décrire l'ordre des messages, et même effectuer du fuzzing sur l'ordre de la séquence.
:Fuzzing client et serveur :
Vous pouvez fuzzer à la fois les serveurs et les clients, à condition d'avoir une pile compatible. Cela semble être une exigence lourde, mais ça ne l'est pas : cela signifie simplement que vous devez avoir les moyens de communiquer avec la cible, ce que vous avez probablement dans la plupart des cas.
:Multi-plateforme :
Fonctionne sous Linux, OS X et Windows. Nous ne jugeons pas ;-)
Eh bien, Kitty n'est pas un fuzzer. Il ne contient pas non plus d'implémentation de protocole ou de canal de communication spécifique. Vous pouvez écrire votre propre fuzzer avec lui, et vous pouvez utiliser du code basé sur Kitty écrit par d'autres, mais ce n'est pas un fuzzer prêt à l'emploi.
Un bon endroit pour obtenir (et ajouter) des implémentations de modèles Kitty est Katnip.
Kitty, en tant que framework, implémente la boucle principale du fuzzer et fournit une syntaxe pour modéliser les données et des classes de base pour chacun des éléments qui sont utilisés pour créer une session de fuzzing complète. Cependant, les implémentations spécifiques des classes ne font pas partie du framework Kitty. Cela signifie que Kitty définit l'interface et la classe de base pour effectuer des transactions de données avec une cible, mais ne fournit pas d'implémentations pour la transmission de données via HTTP, TCP ou UART.
Les implémentations de toutes sortes de classes peuvent être trouvées dans le dépôt
complémentaire - Katnip <https://github.com/cisco-sas/katnip>_.
Installez Kitty :
::
pip install kittyfuzzer
Lisez une partie de la documentation sur ReadTheDocs <https://kitty.readthedocs.io>_.
Jetez un œil aux exemples
Construisez votre propre fuzzer :-)
#kitty on Freenode <https://webchat.freenode.net/?channels=kitty>_Vous avez trouvé un bug ?
Ouvrez un issue <https://github.com/cisco-sas/kitty/issues/new>_
Vous avez un correctif ?
Super ! veuillez soumettre une pull request <https://github.com/cisco-sas/kitty/compare>_
Vous avez implémenté un contrôleur/moniteur/cible intéressant ?
Veuillez soumettre une pull request dans le dépôt Katnip <https://github.com/cisco-sas/katnip>_
Vous avez trouvé un bug intéressant en utilisant un fuzzer basé sur Kitty ? Nous serions ravis d'en entendre parler ! envoyez-nous un message
|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