?

Log in

No account? Create an account

Американский пушистый вислоухий - Общество дровосеков Бердичева по изучению Мишны

May. 19th, 2017

12:38 am - Американский пушистый вислоухий

Previous Entry Share Next Entry

Это с одной стороны кролик, а с другой - утилита для случайного тестирования.





Программа afl-fuzz, с помощью которой были найдены ошибки и уязвимости во многих популярных библиотеках и программах, позволяет находить наборы входных данных для тестируемой программы, приводящие к как можно более разнообразным путям исполнения линейных участков. Тестируемая программа инструментируется путем перехвата ассемблерного кода внутри компилятора: к началу каждого линейного участка добавляется код, вычисляющий хэш из уникальных номеров предыдушего и текущего участков, и инкременту элемента массива (размером 64 кб) по полученному хэш-индексу.

Массив находится в общей памяти, разделяемой между сервером и анализируемой программой, поэтому по ее завершении сервер тут же видит всю статистику путей выполнения, оценивает новизну, решает, как изменить входные данные для максимизации вероятности получить новый путь, и повторяет процедуру, обычно со скоростью от нескольких тысяч до нескольких сотен раз в секунду, в зависимости от длины входных данных и сложности анализируемой программы. Для нахождения скрытых ошибок в нетривиальных программах, тем не менее, могут потребоваться дни или даже недели непрерывной работы.

Входные данные, приводящие к зависанию или аварийному завершению, запоминаются отдельно.

Разумеется, можно не полагаться на автоматическую инструментовку, а написать работу с массивом самостоятельно. При этом можно выбирать по вкусу, что считать "линейным участком", что - путём между ними, и т.п. Таким образом можно тестировать программы на многих разных языках, от Python до JS, а также программы в кодах на эмулируемых процессорах.

На картинке выше, как нетрудно видеть, программа работает с массивом самостоятельно, поэтому за считаные минуты обнаружилось бешеное количество "путей выполнения" и вся хэш-таблица оказалась забита под завязку (показатель заполнения становится тревожно-красного цвета, если таблица заполнена более чем на 70%).

This entry was originally posted at http://spamsink.dreamwidth.org/1050596.html. Please comment there using OpenID.