9 популярных инструментов для фаззинга

9 популярных инструментов для фаззинга

В этой статье пойдет речь о 9 популярных программах для осуществления фаззинга. Читатели подробнее узнают об их особенностях и уникальных чертах.

Принцип фаззинга

Фаззинг – это автоматизированный процесс, который почти всегда применяется относительно конечного кода. Это делает его похожим на инструменты Dynamic Application Security Testing (DAST), которые также необходимы для полной компиляции программы. Однако инструменты DAST и фаззинг нацелены на совершенно разные вещи. Инструменты DAST будут сканировать приложение на наличие уязвимостей, таких как возможность использовать программу для выполнения удаленных вызовов или наличие слабой защиты открытых интерфейсов HTTP и HTML. Инструменты фаззинга тестируют приложение на неожиданный вход, чтобы выяснить, приведет ли это к странным или непредсказуемым результатам и ошибкам.

Один из самых простых способов представить себе те проблемы, которые может выявить фаззинг, — это подумать о таких программах, как банковские приложения или инструменты электронной коммерции, которые предназначены для работы с известными входными данными (=целыми числами). Например, в банковской сфере, подобные программы были разработаны для того, чтобы пользователи могли переводить деньги с одного счета на другой. Вместо ввода положительного значения в поле сумма для перевода пользователь неожиданно вводит отрицательное число. Как программа отреагирует на это? Вдруг она положит деньги на счет вместо того, чтобы отправить их, или это приведет к появлению средств, которых раньше не существовало. Что произойдет с программой электронной коммерции, когда кто-то попытается положить миллионы или даже миллиарды товаров в свою корзину? Приведет ли это к краху всего сайта или даст возможность хакеру получить все бесплатно?

Если программист был внимателен во время написания кода, большинство из этих недостатков бизнес-логики уже были предвидены и предотвращены. Однако никто не может продумать каждый возможный случай наперед. Неожиданное поведение характерно для программы не только тогда, когда пользователи дурачатся с цифрами в полях ввода. Что делать, если злоумышленник отправляет функции командной строки с зашифрованным содержимым, командами для операционной системы или необработанным кодом на том же языке, на котором написано само приложение?

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

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

Разработчики используют довольно много инструментов фаззинга с открытым исходным кодом, несколько коммерческих приложений и даже целые фреймворки, посвященные этому процессу. Ниже приведены популярные инструменты, которые сейчас являются актуальными на рынке.

American Fuzzy LOP

Программа American Fuzzy LOP предназначена для развертывания без особой настройки. Она была создана на основе множества исследований о том, как работают лучшие фаззеры и какие результаты наиболее полезны для тестировщиков. Программа также подойдет для минимизации времени, необходимого для компиляции запроса и получения результатов, при минимальном воздействии на систему, где бы она ни была установлена.

На самом деле, разработчик American Fuzzy LOP настолько уверен в способности фаззера работать без вмешательства пользователя, что не добавил почти никаких элементов управления. Пользователи видят приятный интерфейс в стиле ретро, где видно, что делает фаззер и результаты его активности.

Несмотря на то, что разработчик уверен в способности American Fuzzy LOP находить любые ошибки в тестируемых программах, инструмент также совместим и с другими фаззерами. Он может генерировать данные тестирования, которые при необходимости будут загружены в другие, более специализированные, инструменты фаззинга. Это потенциально способно повысить эффективность других инструментов, а также сократить время выполнения тестирования.

Radamsa

Radamsa – это передовой фаззер, предназначенный для отправки примеров запросов программам, что способны привести к неожиданным результатам. Инструмент обеспечивает высокую степень точности, поскольку сперва принимает образцы действительных данных. Затем он анализирует эти данные, чтобы разработать план фаззинга, наполненный информацией, которая почти, но не до конца соответствует ожиданиям тестируемого приложения.

Самым большим преимуществом Radamsa является ее точность. На странице разработчика в GitLab есть много примеров реальных ошибок, которые фаззер нашел в популярном программном обеспечении. Со стороны пользователя потребуется немного усилий для создания корректных входных данных для отправки, но если этот процесс приведет к большему количеству реалистичных, исправимых ошибок, то это не зря потраченное время.

Honggfuzz

Фаззер Honggfuzz, ориентированный на безопасность, оптимизирован и многопоточен: он способен задействовать все системные ресурсы. Для достижения поставленной цели многие инструменты фаззинга должны запускать несколько экземпляров, но Honggfuzz автоматически использует все доступные ядра процессора для ускорения процесса.

Honggfuzz доступен для установки не только на Windows. Он может тестировать приложения, работающие в средах Linux, Mac и даже Android. Благодаря своей способности работать на нескольких платформах, Honggfuzz поставляется с полным каталогом тестовых примеров, которые пользователи могут использовать или изменять для своих собственных нужд. Помимо этого, можно научиться настраивать свой собственный режим фаззинга.

Вероятно, благодаря способности Honggfuzz работать на нескольких платформах, страница трофеев, где разработчики фаззера показывают найденные ошибки, обнаруженные их инструментом, довольно велика. По словам разработчиков, это был единственный инструмент фаззинга, который обнаружил критическую уязвимость в OpenSSL, что привело к выпуску апдейтов системы безопасности.

Libfuzzer

Инструмент Libfuzzer находится в разработке – время от времени появляются его новые версии. Таким образом, те, кто использует этот инструмент, должны убедиться, что у них установлена последняя версия, прежде чем начинать процесс фаззинга.

Libfuzzer разработан как так называемый инструмент эволюционного фаззинга. Как это работает – инструмент отправляет фаззированные входные данные в определенную точку входа или поле ввода в целевой программе. Затем он отслеживает, какие части кода задействуются, на основе реакции тестируемого приложения на запросы. Вооружившись новой информацией, Libfuzzer изменяет свои запросы, чтобы посмотреть, сможет ли он проникнуть еще глубже.

Цель Libfuzzer – генерировать более релевантные результаты по сравнению с тем, что может быть выявлено с помощью традиционных инструментов фаззинга. По словам разработчиков, программа уже добилась большого успеха и продолжает совершенствоваться для еще большей точности результатов.

OSS-Fuzz

Инструмент OSS-Fuzz был разработан для работы с программным обеспечением с открытым исходным кодом. Разработчики хотели поддержать сообщество с открытым исходным кодом, поэтому OSS-Fuzz был оптимизирован для работы с приложениями и программами, развернутыми таким образом.

OSS-Fuzz поддерживает программы с открытым исходным кодом, написанные на C, C++, Rust и Go, хотя разработчики утверждают, что он также может работать и с другими языками. Просто в настоящее время они не поддерживаются.

По-видимому, его цель – помочь сообществу разработчиков с открытым исходным кодом создавать более безопасные приложения. OSS-Fuzz уже обнаружил более 14 000 ошибок в 200 программах с открытым исходным кодом.

Sulley Fuzzing Framework

Названный в честь размытого синего существа из фильма «Корпорация монстров», фреймворк Sulley Fuzzing является как механизмом фаззинга, так и фреймворком тестирования. В отличие от большинства механизмов фаззинга, Sulley разработан таким образом, чтобы иметь возможность бесперебойно работать в течение нескольких дней подряд, постоянно проверяя приложение на наличие странных ответов на нечеткие входные данные, а затем записывать полученные результаты. Программа была создана для пользователей, которые хотят активировать механизм фаззинга, а затем перейти к работе над чем-то другим. Когда они вернутся через несколько часов или дней, у Sulley Fuzzing будет готов отчет обо всем, что он нашел.

У Sulley есть несколько дополнительных функций, таких как возможность параллельной работы, в зависимости от аппаратной платформы, на которой он размещен. Инструмент также может автоматически определять, без настроек пользователя, какая уникальная последовательность тестовых случаев вызовет сбои.

Фреймворк Sulley Fuzzing хорошо известен в сообществах фаззинга с открытым исходным кодом, но в течение некоторого времени активно не апдейтился. Тем не менее, последняя версия, которая доступна на GitHub бесплатно, все еще пользуется спросом.

boofuzz

Инструмент boofuzz был разработан на основе фреймворка Sulley Fuzzing. Он был назван в честь Бу, маленькой девочки из фильма «Корпорация монстров». Проект boofuzz начался, когда стало ясно, что Sulley больше не получает обновлений. Инструмент использует основной код Sulley и также стремится улучшить его. Он устанавливается на ПК как библиотека Python.

С момента запуска проекта boofuzz разработчики добавили онлайн-документацию, поддержку большего количества средств связи, расширяемое обнаружение сбоев и более простой в использовании интерфейс. Поддержка последовательного фазирования, Ethernet и UDP-трансляции также были добавлены в качестве функций по умолчанию. Пользователи boofuzz могут экспортировать свои результаты в CSV-файл, поэтому электронные таблицы всех вызванных сбоев будут изучены в качестве первого шага в устранении обнаруженных ошибок.

Многие из известных ошибок в Sulley были устранены в boofuzz – инструмент активно обновляется и доступен на GitHub.

BFuzz

Один из новейших инструментов фаззинга, активно используемых сегодня, BFuzz технически все еще находится в бета-версии. Он доступен бесплатно – пользователей просят сообщать о любых проблемах, с которыми они сталкиваются при использовании программы, чтобы разработчики могли их исправить. С учетом сказанного, у BFuzz уже есть небольшой трофей с ошибками, в том числе одна обнаруженная уязвимость, которая привела к выпуску исправления для Epiphany Web, и другая, связанная с Mozilla Firefox, которая вызвала переполнение буфера.

BFuzz разработан фаззером на основе ввода, который использует .html и браузеры в качестве входного вектора. В этом смысле он напоминает инструменты DAST и хорошо подходит для организаций, которые в значительной степени полагаются на них. BFuzz использует аналогичные методы тестирования, но находит больше ошибок.

PeachTech Peach Fuzzer

PeachTech Peach Fuzzer – это коммерческий инструмент для фаззинга, в котором компания PeachTech уже проделала большую часть работы для тестировщиков. Его принцип работы заключается в том, что пользователь загружает и настраивает механизм фаззинга с помощью того, что компания называет «персиковыми косточками».

«Персиковые косточки» (англ. «Peach Pits») — это предварительно написанные тесты, которые охватывают множество различных платформ. PeachTech говорит, что каждая «косточка» содержит спецификации, соответствующие конкретным целям, таким как структура данных, которые использует цель, и способ передачи данных на тестируемое устройство или приложение и из него. Такой подход дает возможность тестировщикам полностью контролировать свое тестирование с небольшой настройкой. Технология Peach также позволяет пользователям легко создавать свои собственные «косточки», так что инструмент Peach Fuzzer может работать с проприетарными системами.

Из-за уникальных способов, которыми движок Peach Fuzzer может быть запрограммирован с использованием «персиковых косточек», почти ни одна система не может быть совместима с инструментом. Конечно, он работает на Mac, Windows и Linux. Его также можно использовать для фаззинга сетевых протоколов, встроенных систем, драйверов, устройств Интернета вещей и практически всего остального, что принимает команды и, следовательно, подвержено фаззингу.

Автор переведенной статьи: John Breeden II.

Игорь Б
Автор: Игорь Б
Представитель редакции CISOCLUB. Добавляю статьи на сайт.
Комментарии: