Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fuzzing исследование уязвимостей методом грубой силы.pdf
Скачиваний:
1127
Добавлен:
13.03.2016
Размер:
5.96 Mб
Скачать

448

Глава 22. Автоматический анализ протокола

Генетические алгоритмы

Генетические алгоритмы (ГА) – это метод приближенных исследова$ ний, используемый программами, моделирующими эволюцию. ГА про$ изводит мутации на базе популяции, тогда так наследственные качест$ ва переходят к следующим поколениям. Законы естественного отбора применяются при выборе основных, самых приспособленных к окру$ жающей среде образцов. Выбранные образцы затем снова мутируют, и процесс продолжается. Обычно для определения ГА требуются три компонента:

представление о том, как должно выглядеть решение;

функция отбора для представления о том, какими качествами дол$ жен обладать выбранный экземпляр;

репродуктивная функция, осуществляющая мутации и смешива$ ния между двумя решениями.

Для лучшей иллюстрации этих проложений рассмотрим простой при$ мер и его решение с помощью ГА. Фундаментальная проблема, кото$ рую мы постараемся решить, – увеличение количества единиц в дво$ ичной строке длиной 10. Представление и функция отбора для этой проблемы очевидны. Возможное решение видится как последователь$ ность двоичных цифр, а функция отбора – как число единиц в строке. Для репродуктивной или спаривающей функции мы выбрали замену двух строк на позициях 3 и 6 и случайный перескок бита в результате. Спаривающая функция может быть и не столь эффективна, но она удовлетворяет нашим потребностям. Правило замены позволяет пред$ кам обмениваться информацией, а перескок ведет к случайным мута$ циям. ГА работает так:

1.В начале случайным образом выбирается множество решений.

2.К каждому решению применяется функция отбора, выбираются наиболее «сильные».

3.К выбранным решениям применяется спаривающая функция.

4.Результат – потомство – заменяет начальный массив, и процесс по$ вторяется.

Чтобы увидеть этот процесс в действии, рассмотрим массив из четырех случайных строк (решений) и вычислим «силу» каждого:

0100100000 2

1000001010 3

1110100111 7

0000001000 1

Центральная пара (выделена жирным шрифтом) оказалась наиболее жизнеспособной, и именно ее мы подвергнем мутациям (повезло па$ рочке). Замена на позиции 3 производит одну пару потомков, а замена на позиции 6 – другую:

Генетические алгоритмы

 

 

 

 

 

 

449

1000001010

3

100

+

0100111

> 1000100111

1110100111

7

111

+

0001010

> 1110001010

1000001010

3

100000 +

0111

>

1000000111

1110100111

7

111010 +

1010

>

1110101010

Затем потомство подвергается случайной мутации (выделено жирным шрифтом). Вновь применяется функция отбора:

1000100111

>

1010100111

6

1110001010

>

1110000010

4

1000000111

>

1000001111

5

1110101010

>

1110101110

7

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

Заметим, что ГА использует глобальные стохастические оптимизато$ ры. Другими словами, так как в алгоритме есть случайный элемент, выходные данные постоянно изменяются. Тем не менее несмотря на то, что ГА будет продолжать искать лучшие решения, наилучшего он может не найти из$за ограниченности времени работы.

Применение генетических алгоритмов для улучшения фаззинговых технологий было темой исследований группы из университета Цен$ тральной Флориды (УЦФ); результаты были представлены на конфе$ ренции BlackHat US 2006 в США.1 Команда УЦФ представила инстру$ мент, названный Sidewinder, способный автоматически предоставлять входные данные для усиления назначенной выполняемой ветви. Ре$ шения ГА в этом случае – это сгенерированные фазз$данные, представ$ ленные в контекстно$независимой грамматике. Нетрадиционный ме$ тод фаззинга был выбран для определения функции отбора. Вместо ге$ нерации данных и наблюдения за ошибками потенциально уязвимые места, такие как небезопасные вызовы API (например, strcpy), изна$ чально расположены фиксированно. Этот этап процесса сходен с тем, как Autodafej локализует точки кода для применения усиленного веса к маркерам, как показано в предыдущей главе. Затем исследуется ал$ горитм полного обхода (control$flow graph, CFG; не путать с бесконтек$ стной грамматикой2) для всего двоичного кода объекта, извлекаются субграфы между точками сокетных данных (запросами к recv) и потен$ циально уязвимые участки кода. На рис. 22.5 показан пример CFG, со$ держащего все эти точки. Детальное определение и описание CFG можно найти в главе 23 «Фаззинговый трекинг».

1http://www.blackhat.com/html/bh+usa+06/bh+usa+06+speakers.html#Embleton

2http://en.wikipedia.org/wiki/Context+free_grammar

450

Глава 22. Автоматический анализ протокола

 

recv

 

strcpy

 

Рис. 22.5. Алгоритм полного обхода, содержащий потенциальные уязвимости

На следующем этапе должны быть определены узлы на всех маршру$ тах, соединяющих точку входа и уязвимый код – цель. На рис. 22.6 темным цветом показан тот же CFG с узлами вдоль соединяющих мар$ шрутов.

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

Получив окончательный CFU, можно определить функцию отбора. Команда УСФ, основываясь на вероятности перехода некоторых час$ тей, для вычисления этой функции применяла к результирующему CFU процесс Маркова. В приложении и простейших примерах имеют$ ся следующие шаги. Дебаггер прикрепляется к целевому процессу и ставит метки на входных, выходных, целевых узлах и всех узлах вдоль коммуникационных маршрутов. Обработка повторяется до тех пор, пока не достигается выходной узел. Входные данные генерируют$ ся фаззером и используются в целевом процессе. Входные данные с наи$ большей жизнеспособностью выбираются для репродукции, и процесс повторяется до тех пор, пока не достигается целевой узел, содержа$ щий уязвимость.

Генетические алгоритмы

451

recv

 

strcpy

 

Рис. 22.6. Алгоритм полного обхода с выделенным путем связи

 

recv

strcpv

Рис. 22.7. Алгоритм полного отхода с выделенными узлами выхода

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]