Skip to content

Latest commit

 

History

History

FAQ

Практические истории и примеры как делать надо и не надо

Общий порядок действий

Кейсы рекомендуется помещать в типовые контенеры, за основу оформления взят контейнер Статическое инструментирование и фаззинг Postgres.

Сборка контейнера осуществляется командой наподобие (параметры --build-arg позволяют пробросить uid/gid в контенер для облегчения файловой синхронизации при небходимости и не влияют на приведенные описания с точки зрения их логики):

docker build --build-arg cuid=$(id -u) --build-arg cgid=$(id -g) --build-arg cuidname=$(id -un) --build-arg cgidname=$(id -gn) -t ИМЯ_ОБРАЗА -f ИМЯ_ДОКЕРФАЙЛА .

Выполнить загрузку и распаковку актуальной версии Crusher в контейнер можно с использованием скрипта загрузки актуальной версии crusher за авторством Николая из компании PostgresPro https://gitlab.com/dhyannataraj

Запуск контейнера для выполнения экспериментов осуществляется командой наподобие:

docker run -it --name=ИМЯ_КОНТЕЙНЕРА ИМЯ_ОБРАЗА /bin/bash

где:

  • ИМЯ_ДОКЕРФАЙЛА это выбранный пример докерфайла
  • ИМЯ_ОБРАЗА - произвольное, назначаемое экспериментирующим, имя образа
  • ИМЯ_КОНТЕЙНЕРА - произвольное, назначаемое экспериментирующим имя контейнера.

Полную очистку результатов работы можно осуществить выполнив команду:

docker kill ИМЯ_КОНТЕЙНЕРА ; docker rm ИМЯ_КОНТЕЙНЕРА ; docker rmi ИМЯ_ОБРАЗА

Особенности использования Crusher

При использовании Crusher необходимо добавить в строку запуска контенйнера --network host (для взаимодействия с сетевым (красным) хаспом), либо --privileged (если хасп локальный (черный) и подключен к хосту, в котором выполняется docker). Также режим --priviliged позволяет пропатчить отказ от сохранения core dump, что по умолчанию требуется для работы фаззера.

1. Особенности использования clang-компиляторов из комплекта AFL++ при статическом инструментировании

Описание кейса

Контейнер для экспериментов

2. Формирование статической библиотеки, содержащей фаззинг-цель

Описание кейса

Контейнер для экспериментов

4. Persistence mode и борьба с линкером

Описание кейса

Скрипт загрузки актуальной версии crusher

Контейнер для экспериментов

5. Фаззинг C#-кода в Linux-среде

Вводную лекцию по принципам и целям фаззинга управляемого кода можно посмотреть например здесь.

Основным фаззером - к сожалению с непонятным статусом поддержки - является sharpfuzz. По ссылке приведён подробный пример как его установить и использовать.

Ещё один пример, а также имплементация механизма Structure Aware Fuzzing для C#, доступен в репозитории FuzzedDataProviderCS.

Сбор покрытия для C#-кода можно выполнить с помощью например minicover, по краткой инструкции