Фаззинг на 0x04. Практика для разработчиков, тестировщиков и исследователей безопасности
Что такое фаззинг и о чем поговорим на воркшопе в рамках 0x04
В зависимости от того, где осуществляется манипуляции с данными, фаззинг разделяется на множество категорий. Один из самых простых видов — файловый фаззинг, подразумевающий, что некой программе предлагается открыть некорректно составленный файл. Возьмем, к примеру, прогу для просмотра картинок. Если взять JPEG-файл и интересным образом поменять несколько байтов, то эта программа вполне возможно выругается: “Что это ты мне подсунул?”. А, возможно, вообще не сможет его переварить и вылетит, к примеру, с проблемой переполнения буфера. Значит, ее теоретически можно расковырять, доведя дело до рабочего эксплойта.
Если говорить о способе манипуляции с данными, то фаззинг распределяется на генерацию и мутацию. Генерация — это случайным образом придуманный набор байтов, который подсовывается той же проге для просмотра картинок со словами: “Это на самом деле JPEG-файл, читай его”. Мутация — прием намного более изящный, подразумевающий внесение изменений в “хороший”, то есть вполне корректный файл. Если в случае с файловым фаззингом еще можно использовать “генерацию”, то в таких вещах, как сетевые протоколы, имеет смысл применять исключительно подход мутации. Более того, крайне желательно иметь представление, за что отвечает то или иное поле пакета и намеренно манипулировать с теми данными, которые могут быть некорректно обработаны. В зависимости от интеллекта, фаззеры бывают глупые и умные:
- Глупый (dump) фаззер ничего не знает о структуре файлов. Если говорить о сетевых протоколах, то единственное, что он может сделать — это изменить несколько байтов в исходном пакете и отправить его в надежде, что это может вызвать сбой.
- Умный (smart) фаззер имеет некоторое представленные о структуре данных. Вместо того, чтобы полностью надеяться на удачу, он может играться только с теми данными, которые отвечают, например, за размер буфера. Или подставлять в поля такие значения, которые заведомо, с учетом известного формата, будут некорректными.
Фаззинг, фаззить, фаззер: ищем уязвимости в программах, сетевых сервисах, драйверах (https://xakep.ru/2010/07/19/52726/)
На воркшопе же мы
- Рассмотрим эволюцию инструментов для фаззинг-тестирования: от /dev/random к радамсе и afl, конколикам и qsym
- Попробуем фаззить модельный уязвимый сервер и реальные приложения
Расскажет это нам исследователь ИБ и системный разработчик, который занимается в основном средним уровнем — сервисами и демонами. Стронник этичного хакинга и программирования Wire Snark из сообщества DC7831 (Нижний Новгород).
Ах, да, ссылка на воркшоп https://dc20e6.ru/meetup/0x04/#workshop ;)