spamsink: (Default)
[personal profile] spamsink
Это с одной стороны кролик, а с другой - утилита для случайного тестирования.





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

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

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

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

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

Profile

spamsink: (Default)
spamsink

June 2017

S M T W T F S
    1 23
4 5 678910
111213 141516 17
18 1920 21 222324
252627282930 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 28th, 2017 05:10 am
Powered by Dreamwidth Studios