Что такое файззинг?
Файззинг - техника тестирования программного обеспечения, главная образом связанная с отправкой приложению случайные или специально сформированные (сгенерированных) данных. Главными целями проверки являются обнаружение брешей в безопасности продукта и выявления ошибок в логике условий.
Данная техника может быть использована широким кругом специалистов - экспертами по безопасности в качестве выявления уязвимостей, инженерами по качеству для нахождения критичных ошибок (например связанных с падение программ), разработчиками для выявления утечек памяти и переполнения стека.
Немного примеров
Простой пример файззинга
import sysif __name__ == "__main__":
key, value = sys.argv[1], sys.argv[2]
>>> python arg.py --key
Traceback (most recent call last):
File "arg.py", line 5, in <module>
key, value = sys.argv[1], sys.argv[2]
IndexError: list index out of range
Пример фаззинга переменных среды
import os
if __name__ == "__main__":
path = os.path.split(os.path.getenv("HOME"))[0]
>>> python env.py
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
На выявление каких ошибок нацелен файззер?
Ошибки контроля доступа. Выявление несанкционного доступа.Ошибки в логике. Вызов сбоя программ при отправлении некорректных данных (например, бесконечная обработка одного сообщения), проверка граничных значений и проч.
Повреждение памяти. Переполнение стека и хипа, DoS веб-серверов, и т.д.
Где можно использовать?
Фаззинг переменной среды и фаззинг аргументов коммандной строки
Локальный тип фазинга, нацеленный на тестирование программы, которая находится на той же машине где проводится тестирование. В качестве некоррекных входныъ данных (векторов) используютя либо переменные окружения, используемые программой в процессе своей работы, либо аргументы командной строки самой программы.Фаззинг сетевого протокола
В данную группа объектов, подвергаемых фаззингу подпадает практически все компоненты OSI (Open Systems Interconnection Basic Reference Model)-модели (за исключением пожалуй только физического уровня).Например, на сетевом уроне, в качестве входных данных могут выступать измененные TCP-пакеты. На сессионном уровне фаззингу чаще всего пожалуй подвергался RPC.
Фаззинг веб-приложений и серверов
Особый вид сетевого файззинга, нацеленый на нахождение дефектов и уязвимостей в веб-приложениях или компонентах инфраструктуры (например БД). Примером таких приложений могут выступать электронная почта, сайты, форумы и проч.В качестве векторов ввода некорректных данных чащевсего выспупают
HTTP-протокол. Причем файзингу пдаются все его компоненты - заголовки, методы, доп. атрибуты.
Cookies. Файззят ключи, значения, с дальнейшем отправление запроса на сервер с использование локальных куков.
URI. Под фаззинг попадают ключи и значания в GET-запросах
Для начала про уязвимости советую почитать [1]
Фаззинг формата файла
Cпециальный метод фаззинга конкретно указанных объектов. Как правило, этими объектами являются клиентские приложения, например медиаплееры, веб-броузеры и офисные пакеты приложений. Тем не менее, объектами могут быть и сервееры, например сканеры антивирусных шлюзов, спам-фильтры и даже обычные серверы электронной почты. Конечная цель фаззинга формата файла – обнаружить уязвимое звено в процессе парсинга определеннного типа файла, осуществляемого приложением.Фаззинг оперативной памяти
Фаззинг, направленный на изменение или подмену поведения исполняемой программы.Известно два способа фаззинга
Mutation Loop Insertion (MLI) - это может быть изменение поведение одной из исполняемых инструкций программы во время выполнения.
Snapshot Restoration Mutation (SRM) - методика похожа на MLI, но не менет исполняемые инструкции, а вносит мутации во входные и ввозвращаемые данные, воздейтсвуя на работоспособность программы.
Источники
Если есть желание более подробно ознакомиться с техниками фаззинга предлагаю ознакомиться со следующими источниками.[1] http://www.amazon.com/gp/product/0321446119
[2] http://www.openrce.org/articles/
[3] http://www.fuzzing.org/
[4] https://xakep.ru/2010/07/19/52726/
[5] https://en.wikipedia.org/wiki/Fuzz_testing
[6] http://www.vr-online.ru/?q=content/fuzzing-tehnologija-ohoty-za-bagami-752
На русском можно найти перевод книги "Fuzzing: Brute Force Vulnerability Discovery"
Комментариев нет:
Отправить комментарий