Выполняется одно из заданий на выбор. В случае выполнения второго задания: к финальному результату теста в конце курса прибавляется 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`