
Framework de fuzzing escrito en python
| Sulley: ¿Boo? | Boo: ¡Kitty!
Kitty es un framework de fuzzing modular y extensible de código abierto
escrito en Python,
inspirado por Sulley <https://github.com/OpenRCE/sulley>_ de OpenRCE
y Peach Fuzzer <http://community.peachfuzzer.com/>_ de Michael Eddington (y ahora de Deja Vu Security).
Objetivo
Cuando empezamos a escribir Kitty, nuestro objetivo era ayudarnos a fuzzing de objetivos inusuales
— es decir, protocolos propietarios y esotéricos sobre canales de comunicación que no son TCP/IP —
sin tener que escribir todo desde cero cada vez. Un marco genérico y
abstracto que incluyera la funcionalidad común de cada
proceso de fuzzing que pudiéramos imaginar, y que permitiera al usuario
extenderlo y usarlo fácilmente para probar su objetivo específico.
Características
Con este objetivo en mente, las siguientes características fueron muy importantes para nosotros:
:Modularidad:
Cada parte del fuzzer funciona por sí sola. Esto significa que puedes usar el mismo código de monitoreo para diferentes aplicaciones, o el mismo generador de carga útil (también conocido como Modelo de datos) para probar el análisis de los mismos datos recibidos a través de diferentes canales.
:Extensibilidad:
Si necesitas probar algo "nuevo", no tendrás que cambiar el código central de Kitty. La mayoría, si no todas, las funcionalidades pueden implementarse en el código del usuario. Esto incluye monitoreo, control y comunicación con el objetivo fuzzeado.
:Modelado de datos enriquecido:
El núcleo del modelo de datos es rico y permite describir estructuras de datos avanzadas, incluyendo cadenas, hashes, longitudes, condiciones y muchos más. Y, como la mayor parte del framework, está diseñado para ser extendido aún más según sea necesario.
:Con estado:
Soporte para pruebas de fuzzing de múltiples etapas. No solo puedes describir cómo será la carga útil de un mensaje individual, sino también el orden de los mensajes, e incluso realizar fuzzing en el orden de la secuencia.
:Fuzzing de cliente y servidor:
Puedes fuzzing tanto servidores como clientes, asumiendo que tienes una pila compatible. Suena como un gran requisito, pero no lo es: solo significa que debes tener los medios para comunicarte con el objetivo, que en la mayoría de los casos ya deberías tener.
:Multiplataforma:
Funciona en Linux, OS X y Windows. No juzgamos ;-)
Bueno, Kitty no es un fuzzer. Tampoco contiene implementación de ningún protocolo o canal de comunicación específico. Puedes escribir tu propio fuzzer con él, y puedes usar código basado en Kitty de otros, pero no es un fuzzer listo para usar.
Un buen lugar para obtener (y agregar) implementaciones de modelos de Kitty es Katnip.
Kitty, como framework, implementa el bucle principal del fuzzer y proporciona sintaxis para modelar datos y clases base para cada uno de los elementos que se utilizan para crear una sesión de fuzzing completa. Sin embargo, las implementaciones específicas de clases no forman parte del framework Kitty. Esto significa que Kitty define la interfaz y la clase base para realizar transacciones de datos con un objetivo, pero no proporciona implementaciones para la transmisión de datos a través de HTTP, TCP o UART.
Se pueden encontrar implementaciones de todo tipo de clases en el repositorio
complementario: Katnip <https://github.com/cisco-sas/katnip>_.
Instala Kitty:
::
pip install kittyfuzzer
Lee parte de la documentación en ReadTheDocs <https://kitty.readthedocs.io>_.
Échale un vistazo a los ejemplos.
Construye tu propio fuzzer :-)
#kitty en Freenode <https://webchat.freenode.net/?channels=kitty>_¿Encontraste un error?
Abre un issue <https://github.com/cisco-sas/kitty/issues/new>_.
¿Tienes una corrección?
¡Genial! Por favor, envía un pull request <https://github.com/cisco-sas/kitty/compare>_.
¿Implementaste un controlador/monitor/objetivo interesante?
Por favor, envía un pull request en el repositorio de Katnip <https://github.com/cisco-sas/katnip>_.
¿Encontraste un error interesante usando un fuzzer basado en Kitty? ¡Nos encantaría saberlo! Escríbenos.
|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