slinkinone
@slinkinone
Агент "Везде успеть"

Фаззинг blackbox-а — как происходит мутация входных данных в отсутвии исходного кода (llvm, clang, libFuzzer)?

Доброго времени суток!
Вопрос касается фаззинга с помощью библиотеки libFuzzer.
Как я понял, при использовании libFuzzer (github) мы компилируем код посредством clang-а с флагами санитайзера:
-fsanitize=address -fsanitize-coverage=trace-pc-guard

trace-pc-guard отвечает за построение code-coverage, на основе которого будут мутироваться входные данные с целью захватить "непройденные участки" кода.

Верно ли следующее:
Если используемое приложение цепляет либу (пусть будет libStatistic.so - скомпилирована gcc и без санитайзера) и вызывает её функции, то хуки и коллбеки не будут вставлены в код (asm) вызываемой библиотеки, в следтсвии чего, будет "неполный" code-coverage, неоптимальная мутация и снижение эффективности фаззера?
  • Вопрос задан
  • 318 просмотров
Решения вопроса 1
@Dor1s
Да, все верно. Фаззер не будет получать информацию о покрытии от кода, который не инструментирован.

Кстати, в последних версиях лучше компилировать с флагом `-fsanitize=fuzzer` вместо `-fsanitize-coverage=%something%`. Данная опция включает разные фишки для инструментации.

llvm.org/docs/LibFuzzer.html#fuzzer-usage

Я видел следующий проект, который вроде как позволяет инструментировать бинарники и использовать libFuzzer, но без понятия насколько хорошо оно работает на самом деле: https://github.com/trailofbits/mcsema/blob/master/...

Когда я последний раз интересовался, ответили, что с большими проектами не очень работает: https://twitter.com/Dor3s/status/841661600473976833
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы