
Фаззинг-фреймворк, написанный на Python
| Салли: Бу? | Бу: Кис-кис!
Kitty — это модульный и расширяемый фреймворк для фаззинга с открытым исходным кодом,
написанный на Python,
вдохновлённый Sulley <https://github.com/OpenRCE/sulley>_ от OpenRCE
и Peach Fuzzer <http://community.peachfuzzer.com/>_ от Michael Eddington (ныне Deja Vu Security).
Цель
Когда мы начинали писать Kitty, нашей целью было помочь нам фаззить необычные цели
— то есть проприетарные и эзотерические протоколы поверх каналов связи, отличных от TCP/IP —
без необходимости каждый раз писать всё с нуля. Универсальный и абстрактный фреймворк,
который включал бы общую функциональность любого мыслимого процесса фаззинга
и позволял бы пользователю легко расширять и использовать его для тестирования конкретной цели.
Возможности
Исходя из этой цели, следующие возможности были для нас очень важны:
:Модульность:
Каждая часть фаззера существует независимо. Это означает, что вы можете использовать один и тот же код мониторинга для разных приложений или один и тот же генератор полезной нагрузки (он же Data Model) для тестирования разбора одних и тех же данных, полученных по разным каналам.
:Расширяемость:
Если вам нужно протестировать что-то «новое», вам не потребуется изменять ядро Kitty. Большинство (если не все) функций могут быть реализованы в пользовательском коде. Сюда входит мониторинг, управление и взаимодействие с фаззируемой целью.
:Богатое моделирование данных:
Ядро модели данных богато и позволяет описывать сложные структуры данных, включая строки, хэши, длины, условия и многое другое. И, как и большая часть фреймворка, оно спроектировано для дальнейшего расширения по мере необходимости.
:Учет состояния (Stateful):
Поддержка многоэтапных тестов фаззинга. Вы можете не только описать, как будет выглядеть полезная нагрузка отдельного сообщения, но также задать порядок сообщений и даже выполнять фаззинг на уровне последовательности.
:Фаззинг клиента и сервера:
Вы можете фаззить как серверы, так и клиенты, при условии, что у вас есть соответствующий стек. Звучит как большое требование, но это не так: это просто означает, что у вас должны быть средства для взаимодействия с целью, которые в большинстве случаев у вас и так есть.
:Кроссплатформенность:
Работает на Linux, OS X и Windows. Мы не осуждаем ;-)
Что ж, Kitty — это не фаззер. Он также не содержит реализации какого-либо конкретного протокола или канала связи. Вы можете написать с его помощью свой собственный фаззер и использовать код на основе Kitty от других, но это не готовый к использованию «из коробки» фаззер.
Хорошее место для получения (и добавления) реализаций моделей Kitty — это Katnip.
Kitty, как фреймворк, реализует основной цикл фаззера и предоставляет синтаксис для моделирования данных, а также базовые классы для каждого из элементов, используемых для создания полной сессии фаззинга. Однако конкретные реализации классов не являются частью фреймворка Kitty. Это означает, что Kitty определяет интерфейс и базовый класс для выполнения обмена данными с целью, но не предоставляет реализации для передачи данных по HTTP, TCP или UART.
Реализации всевозможных классов можно найти в дополнительном
репозитории — Katnip <https://github.com/cisco-sas/katnip>_.
Установите Kitty:
::
pip install kittyfuzzer
Почитайте документацию на ReadTheDocs <https://kitty.readthedocs.io>_.
Посмотрите примеры
Создайте свой собственный фаззер :-)
#kitty на Freenode <https://webchat.freenode.net/?channels=kitty>_Нашли ошибку?
Откройте issue <https://github.com/cisco-sas/kitty/issues/new>_
Есть исправление?
Отлично! Пожалуйста, отправьте pull request <https://github.com/cisco-sas/kitty/compare>_
Реализовали интересный контроллер/монитор/цель?
Пожалуйста, отправьте pull request в репозиторий Katnip <https://github.com/cisco-sas/katnip>_
Нашли интересную ошибку с помощью фаззера на основе Kitty? Нам было бы интересно узнать об этом! Напишите нам
|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