Pull to refresh

Comments 3

Фаззинг это отлично. Я бы добавил, что для многих современных фаззеров программа это не черный ящик, для программы формируются отладочные символы, а для каждого исполнения фаззера - покрытие кода. Фаззер стремится увеличить покрытие кода, что сильно помогает поиску багов. Второе улучшение (актуально для С++, не знаю нужно ли для Го) - это исполнение программы под "санитайзером" (обычно asan), который замечает обращение к случайным адресам памяти - в примере с grep, даже если программа не упала бы, он заметит если адрес не выделен нормальными методами или уже был освобождён.

Всё так, с точки зрения фаззера программа не черный ящик, про черный ящик я писал с точки зрения кода самого фаззинг-теста. Конечно, часто и код фаззинг тестов многое знает о тестируемой программе и совсем черных ящиков не бывает, тут речь скорее о шкале "черноящечности".

По воводу asan - это один из способов контролировать инварианты программы, и он подтверждает основную мысль: чем больше инвариантов автоматически контролируется, тем больше фаззер найдет в итоге багов

Да, все продолжение исходных идей. Но практически использование code coverage улучшило скорость и качество фаззинга радикально, и часто называется white box fuzzing, чтобы отличать от простых фаззеров без code coverage.

https://dl.acm.org/doi/10.1145/2093548.2093564

https://dl.acm.org/doi/10.1145/2090147.2094081

Sign up to leave a comment.