Использование множества ядер:
- Рекомендуется запускать экземпляры с кэшированием тестовых примеров.
AFL_TESTCACHE_SIZE
, значение между 50-500MB. - Перед запуском фазера объявить переменную
AFL_FINAL_SYNC=1
.
Должен быть один главный фаззер (опция -M main-$HOSTNAME - установите также AFL_FINAL_SYNC=1) и столько вторичных фаззеров (например, -S variant1), сколько у вас ядер, которые вы используете. Каждая запись -M/-S должна иметь уникальное имя (которое может быть любым), однако для всех экземпляров должно использоваться одно и то же местоположение выходного каталога -o.
for i in $(seq 1 19); do
afl-fuzz -i input_dir -o output_dir -S slave$i -- ./target_binary @@ &
done
Для каждого вторичного фаззера должна быть своя вариация, например:
- несколько целей, скомпилированы с активированными санитайзерами (export AFL_USE_ASAN=1 ; export AFL_USE_UBSAN=1 ; export AFL_USE_CFISAN=1).
- один или два должны выполнить проверку цели с помощью CMPLOG/redqueen.
- от одного до трех фаззеров должны фаззить цель, скомпилированную с помощью laf-intel/COMPCOV (Если запущенно несколько фаззеров laf-intel/COMPCOV, то для чтобы они делились своими промежуточными результатами, главный фаззер (-M) должен быть одним из них (хотя на самом деле это не рекомендуется)).
Монтирование tmpfs:
sudo mount -t tmpfs -o size=6g tmpfs /home/fuzzing