Fuzzing - технология поиска уязвимостей
Автор: Хакер 17.08.2018 17:45
В нынешних программах имется очень много уязвимостей: утечка памяти, переполнение буфера, не достаточно хорошее шифрование и д.р. Этот факт неудивителен, т.к. большинство приложений появляются на свет только ради обогащения владельца, безопасность которых часто хромает.
Расходы на закрытие дыр равны 1\3 прибыли от продаж, а иногда даже превышают эту цифру. Для примера возьмём Microsoft. На баг-треках можно найти кучу багов и эксплоитов с описанием. Хакеры могут воспользоваться этими багами для написания вредоносных приложений. Для того, чтобы подобного не произошло, я хочу рассказать об одном из способов поиска багов - фаззинг.
Начало
Фаззинг - перспективная технология тестирования приложений, суть которой заключается в том, что вместо одижаемых данных приложению передаются рандомные данные или сециально составленные данные. Большую часть составляют случайные данные. Смысл этой проверки заключается в том, что разработчик не может знать, какие данные будут предоставленны его приложению\протоколу, следовательно, чтобы предотвратить возможную уязвимость, нужно проверить столько вариантов, сколько будет возможно проверить. Программные интерфейсы, на вход которых передаются данные включают:
- API
- Файлы
- Сетевые порты
Если приложение зависает или завершает рабоут аварийно, то это считается обноружение дефекта в нем, который может привести к нахождению уязвимости. Хакер может сделать запрос, который вызовет переполнение. Программа может не завершить работу, но выполнит код. Так же дело обстоит и с обработкой данных из файлов и протоколов, обработкой передаваемых параметров функции и прочим.
Найденные ошибки с помощью технологии фаззинга в таких файлах, как PPT, XLS, BMP, DOC могут служить примером неправильной файловой обработке. Это не вызывает удивления, ведь синтаксический анализ сложных структур данных – не лёгкая задача, замысловатый код почти всегда имеет ошибки, которые могут выявить уязвимость в безопасности. Такие куски кода, занимающиеся анализом каких либо данных, должны быть проверены в первую очередь. Дать Пример? Посмотрите баг-трак за 8 октября 2009 на xakep.ru.
Смотрим уязвимость (http://xakep.ru/post/49703), в описании к ней сказанно, что с помошью неё хакер может выполнить код. Она существует из-за того, что имеется ошибка в проверке входных данных при обработке содержимого файлов AVI и их заголовках. Это и есть пример ошибки, которую можно было бы избежать путем фаззинга. Что обрабатывается неправильно можете посмотреть в эксплоите, который находится на странице с описанием уязвимости (ссылка выше).
Фаззинг - это динамическая технология проверки безопасности. Статической технологией я называю любые приложения, которые тестируют код по определенным шаблонам.Эти 2 технологии различаются тем, что фаззинг не имеет шаблонов, может быть автоматезирован и работает случайным образом, поэтому может иметь проблемы с глубокими частями кода, чего не скажешь о статичной технологии.
Из этого следует, что лучшем вариантом окажется совмещение этих способов:
- Обноружение багов человеком
- Тестирование статическим анализатором
- Фаззинг
Такой метод анализа не гарантирует отсутствие ошибок в коде, но позволяет достичь максимального результата.
Преимуществ фаззинга существует довольно много:
- Лёгкая автоматизация
- Находится много ошибок
- Огромный обьём тестрирования с множеством вариантов
- Обноруживает много проблем связанных надежностью(иногие проблемы также являются проблемами безопасности)
В России фаззинг не очень популярен, следовательно и специалистов в этом направлении мало. Это обоснованно тем, что в нашей стране не так много литературы на русском. В конце будут привидены несколько книг по данной тематике.
Софт для фаззинга
Фаззер – приложение или фреймворк, дающие возможность проводить автоматизированный фаззинг приложений, кода, файлов и т.п. В настоящее время фаззеров не много. В большинстве своём фаззеры написаны для UNIX, но есть также и для Windows.
Рассмотрим лучшие :
1. OWASP JBroFuzz – фаззер, позволяющий работать с такими протоколами, как XML, LDAP, HTTP, SOAP и т.д. Этот фаззер поддерживает большое колличество проверок на:
- XSS
- SQL-inj
- BFO
- FSE
- INT
- и множество других уязвимостей крайне не обычными методами.
Отличительно чертой данного фаззера является возможность редактирования содержимого генераторов. Скачать http://owasp.org/index.php/Category:OWASP_JBroFuzz
2. Bunny the Fuzzer
Этот фаззер преднозначен для анализа программ написанных на C. Работает под nix. Скачать http://code.google.com/p/bunny-the-fuzzer
3. SPIKE
SPIKE - приложение для тестрирования новых сетевых протоколов. Работает только на Linux. Скачать http://php-security.org/downloads/minerva-1.0.tar.bz2
4. PFF
Утилита, для поиска ошибок в PHP. Работает на UNIX. Скачать http://php-security.org/downloads/minerva-1.0.tar.bz2
5. ProxyFuzz
Фаззер, написанный на питоне, предназначен для тестирования сетевых протоколов. Скачать http://theartoffuzzing.com/joomla/index.php?option=com_content&;task=view&id=21&Itemid=40.
Для дальнейшего ознокомления советую почитать :
«The Security Development Lifecycle» - Способы фаззинга исходников на C++, средства для фаззинга.
«Искусство взлома и защиты систем» - Способы тестированя приложений от самых маленьких, до больших.