57 lines
2.4 KiB
Markdown
57 lines
2.4 KiB
Markdown
|
# Инструкция по использованию [clusterfuzz](https://github.com/google/clusterfuzz)
|
||
|
|
||
|
Основывается на:
|
||
|
* https://google.github.io/clusterfuzz/
|
||
|
* https://google.github.io/oss-fuzz/getting-started/new-project-guide/go-lang/
|
||
|
* https://github.com/google/oss-fuzz/blob/master/infra/base-images/base-builder/compile_native_go_fuzzer
|
||
|
|
||
|
## Поднятие локального инстанса
|
||
|
|
||
|
Работает на следующих ОС:
|
||
|
|
||
|
* 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
|
||
|
|
||
|
```bash
|
||
|
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` выполнить:
|
||
|
```bash
|
||
|
python butler.py run_bot --name my-bot ./my-bot
|
||
|
```
|
||
|
|
||
|
Для просмотра логов бота:
|
||
|
```bash
|
||
|
cd ./my-bot/clusterfuzz/bot/logs
|
||
|
tail -f bot.log
|
||
|
```
|
||
|
|
||
|
## Фаззинг проекта на go
|
||
|
|
||
|
```bash
|
||
|
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.
|