fuzzing-helper/clusterfuzz/instruction.md
2024-05-06 14:12:06 +03:00

2.4 KiB

Инструкция по использованию clusterfuzz

Основывается на:

Поднятие локального инстанса

Работает на следующих ОС:

  • Ubuntu (16.04, 17.10, 18.04, 18.10, 20.04)
  • Debian 8 (jessie) or later
  • Recent versions of macOS with homebrew (experimental)
  • Note: Only x86 architectures are currently supported
git clone https://github.com/google/clusterfuzz
cd clusterfuzz
git pull
git checkout tags/v2.6.0
local/install_deps.bash
pipenv shell
python butler.py run_server --bootstrap

Флаг --bootstrap в последней команде необходим только при первом запуске локального сервера.

В выводе команды будет строка наподобие этой: [INFO] Listening at: http://0.0.0.0:9000. По указанному адресу можно зайти на web интерфейс.

Далее необходимо поднять т.н. бота. Находясь в pipenv shell выполнить:

python butler.py run_bot --name my-bot ./my-bot 

Для просмотра логов бота:

cd ./my-bot/clusterfuzz/bot/logs
tail -f bot.log

Фаззинг проекта на go

git clone https://git.frostfs.info/TrueCloudLab/policy-engine.git
go get git.frostfs.info/TrueCloudLab/policy-engine
go install github.com/AdamKorcz/go-118-fuzz-build@latest
go get github.com/AdamKorcz/go-118-fuzz-build/testing
go-118-fuzz-build -tags gofuzz -o fuzz_unmarshall.a -func FuzzUnmarshal ~/policy-engine/pkg/chain
clang++ -fsanitize=address,fuzzer fuzz_unmarshall.a -o ~/policy-engine/out/fuzz_unmarshall
zip fuzzer.zip fuzz_unmarshall

Полученный архив следует загрузить через интерфейс web интерфейс clusterfuzz.

Важно, что фаззинг go использует под капотом libFuzzer, поэтому в названии job для фаззинга это должно быть указано. Можно также использовать встроенный шаблон для libFuzzer.