вторник, 9 февраля 2016 г.

О файззинге

Что такое файззинг?


Файззинг - техника тестирования программного обеспечения, главная образом связанная с отправкой приложению случайные или специально сформированные (сгенерированных) данных. Главными целями проверки являются обнаружение брешей в безопасности продукта и выявления ошибок в логике условий. 

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

Немного примеров

Простой пример файззинга

import sys

if __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"

Комментариев нет:

Отправить комментарий