Инструменты пользователя

Инструменты сайта


courses:testing:fuzzing

Fuzzing

Выполняется одно из заданий на выбор. В случае выполнения второго задания: к финальному результату теста в конце курса прибавляется 1 балл по 5-балльной шкале (возможно, после устной беседы по некоторым особенностям реализации второго задания).

Уронить приложение

В каталоге afl-instrumented выложен исполняемый файл формата ELF, собранный под архитектуру AMD64 без дополнительных библиотек-зависимостей, кроме системных, типа libc.6. Программа принимает на вход 1 параметр - строку из стандартного потока ввода, и считывает из файла `generated-seed` число:

./buggy-soft 
"test string"

Файл инструментирован с помощью afl-fuzzer (версия 4.32c).

Генерация содержимого файла `generated-seed`:

  • Запустить исполняемый файл `seed`
  • В ответ выведется машинозависимое число (возможно, каждый раз разное при нескольких запусках)
  • Любое из выведенных чисел нужно сохранить в файл `generated-seed`

Fuzzing:

  • Для определения какой-либо строки, на которой произодёт падение требуется использовать утилиту afl-fuzz (можно ставить/настраивать локально, можно, и предпочтительно, использовать docker-образ версии 4.32 - на нём поведение проверено) `docker pull aflplusplus/aflplusplus:v4.32c`
  • В файл answer нужно добавить строку, на которой приложение упадёт с segmentation faul
  • В файл screen.png приложить вырезанный участок экрана со статистикой работы fuzzer (консольное окно, что выводится сразу полсе начала запуска, но с состоянием на момент нахождения ошибочной строки)

Сломать сервер

Усложнённый вариант задания (при его выполнении первый можно не выполнять).

Последнее время в том числе начали набирать популярность REST-fuzzers, например:

Суть задания в применении любого из средств REST API Fuzzing к тестовому сервису. Что предполагается сделать:

  • Спроектировать OpenAPI-спецификацию сервиса (может быть даже 1 метод) и выложить файл с именем test-openapi.json. Спецификация должна соответствовать стандарту с возможностью импортирования в стандартные средства типа Postman
  • Реализовать сервис на python с кодом загрушки и любой исключительной ситуации. Код закоммитить с файлом requirements.txt для возможности установки / сборки
  • Создать и выложить Dockerfile с образом настроенного выбранного средства и тестовым сервисом так, чтобы при запуске собранного контейнера сразу запускалось тестирование запущенного сервиса
  • Сделать PR с пометкой в имени (REST-fuzzing)

Все наработки располагать в каталоге `rest-fuzzing`

Подсказки

AFL

  • Заранее известно, что строка, на которой происходит падение приложений имеет длину не более 10 символов и не менее 1
  • Также мы знаем, что параметр - текст
courses/testing/fuzzing.txt · Последнее изменение: 127.0.0.1