
RESTler — это первый инструмент фаззинга REST API с сохранением состояния для автоматического тестирования облачных сервисов через их REST API и поиска ошибок безопасности и надежности в этих сервисах.
RESTler — это первый инструмент для фаззинга REST API с учётом состояния, предназначенный для автоматического тестирования облачных сервисов через их REST API и поиска уязвимостей и ошибок надёжности в этих сервисах. Для заданного облачного сервиса со спецификацией OpenAPI (ранее Swagger) RESTler анализирует всю его спецификацию, а затем генерирует и выполняет тесты, которые задействуют сервис через его REST API.
RESTler интеллектуально выводит зависимости типа «производитель-потребитель» между типами запросов из определения OpenAPI. Во время тестирования он проверяет определённые классы ошибок и динамически учится поведению сервиса на основе предыдущих ответов сервиса. Этот интеллект позволяет RESTler исследовать более глубокие состояния сервиса, достижимые только через определённые последовательности запросов, и находить больше ошибок.
RESTler описан в следующих рецензируемых исследовательских статьях:
Если вы используете RESTler в своих исследованиях, пожалуйста, процитируйте (по умолчанию) статью ICSE'2019 (BibTeX).
RESTler включает несколько стратегий генерации тестов. Чтобы получить всестороннее сравнительное представление относительно (i) эффективности (т.е. как быстро RESTler может находить сбои) и (ii) результативности (т.е. сколько сбоев RESTler может найти за заданный промежуток времени), мы рекомендуем сравнивать все документированные fuzzing_mode(s), потому что каждый из них обеспечивает различный компромисс между широтой и глубиной исследования пространства состояний. Также мы рекомендуем запускать режим test перед любым фаззингом, как описано ниже, чтобы обнаружить и исправить проблемы настройки (например, добавить необходимые значения обязательных параметров в словарь) до начала фаззинга.
RESTler был создан в Microsoft Research и всё ещё находится в активной разработке.
Обзор и демонстрацию начальных шагов см. в Webinar - Fuzzing to Improve the Security and Reliability of Cloud Services.

RESTler разработан для работы на 64-битных машинах с Windows или Linux. Экспериментальная поддержка macOS также включена.
В корне репозитория выполните
docker build -t restler .
В полученном docker-контейнере RESTler будет доступен в директории /RESTler/restler с основным двоичным файлом Restler.
Затем вы можете использовать этот образ docker как основу для добавления тестируемого приложения для выполнения фаззинга внутри изолированных docker-контейнеров.
Предварительные требования: Установите Python 3.12.8 и .NET 8.0 для вашей операционной системы.
Создайте директорию, в которую вы хотите поместить двоичные файлы RESTler:
mkdir restler_bin
Перейдите в корневую директорию репозитория и выполните следующий скрипт Python:
python ./build-restler.py --dest_dir <полный путь к restler_bin выше>
Примечание: если при сборке возникает ошибка nuget NU1403, быстрым решением может быть очистка кэша с помощью команды
dotnet nuget locals all --clear
RESTler работает в 4 основных режимах (по порядку):
Для быстрого ознакомления с простыми примерами см. этот Учебник.
Чтобы быстро попробовать RESTler на своем API, см. Быстрый старт.
В настоящее время существует две категории ошибок, найденных RESTler.
500 ("Внутренняя ошибка сервера") сообщается как ошибка.Когда ошибка найдена, RESTler сообщает об ошибках, сгруппированных в блоки ошибок, и предоставляет журнал воспроизведения, который можно использовать для воспроизведения ошибки (см. Воспроизведение).
Советы по эффективному использованию RESTler см. в Лучшие практики и Улучшение покрытия API.
См. также Часто задаваемые вопросы.
Если вас интересует использование RESTler в масштабе как части вашего CI/CD конвейера, ознакомьтесь с самостоятельно размещённой службой REST API Fuzz Testing.
Если у вас есть запрос/предложение/вопрос, пожалуйста, создайте issue. Инструкции см. в Contributing.md.