Fuzz-тестирование
Fuzz Testing или Fuzzing - это метод тестирования программного обеспечения, заключающийся в помещении неверных или случайных данных, называемых FUZZ, в программную систему для обнаружения ошибок кодирования и лазеек в системе безопасности. Целью нечеткого тестирования является вставка данных с использованием автоматизированных или полуавтоматических методов и тестирование системы на различные исключения, такие как сбой системы или сбой встроенного кода и т. Д.
Нечеткое тестирование было первоначально разработано Бартоном Миллером в Университете Висконсина в 1989 году. Нечеткое тестирование или фаззинг - это метод тестирования программного обеспечения и тип тестирования безопасности .
Зачем делать Fuzz-тестирование?
- Обычно нечеткое тестирование обнаруживает наиболее серьезную ошибку или дефект безопасности.
- Fuzz-тестирование дает более эффективный результат при использовании с тестированием черного ящика, бета-тестированием и другими методами отладки.
- Fuzz-тестирование используется для проверки уязвимости программного обеспечения. Это очень рентабельные методы тестирования.
- Fuzz-тестирование - это один из методов тестирования черного ящика. Фаззинг - один из наиболее распространенных методов, используемых хакерами для поиска уязвимостей системы.
Как проводить Fuzz-тестирование
Этапы нечеткого тестирования включают в себя основные этапы тестирования:
Шаг 1) Определите целевую систему
Шаг 2) Определите входы
Шаг 3) Создайте нечеткие данные
Шаг 4) Выполните тест, используя нечеткие данные
Шаг 5) Отслеживайте поведение системы
Шаг 6) Регистрируйте дефекты
Примеры фаззеров
-
Фаззеры на основе мутаций изменяют существующие выборки данных для создания новых тестовых данных. Это очень простой и понятный подход, он начинается с действительных образцов протокола и продолжает искажать каждый байт или файл.
-
Фаззеры на основе генерации определяют новые данные на основе входных данных модели. Он начинает генерировать ввод с нуля на основе спецификации.
-
PROTOCOL-BASED-fuzzer , наиболее успешный фаззер должен иметь подробные знания тестируемого формата протокола. Понимание зависит от спецификации. Он включает в себя запись массива спецификации в инструмент, а затем, используя технику генерации тестов на основе модели, проходим спецификацию и добавляем нерегулярность в содержимое данных, последовательность и т. Д. Это также известно как тестирование синтаксиса, проверка грамматики, проверка устойчивости и т. Д. и т.д. Fuzzer может генерировать тестовые примеры из существующего, или они могут использовать допустимые или недопустимые входные данные.
Есть два ограничения фаззинга на основе протоколов:
- Тестирование не может продолжаться, пока спецификация не будет сформирована.
- Многие полезные протоколы являются расширением опубликованных протоколов. Если нечеткое тестирование основано на опубликованных спецификациях, охват тестированием для новых протоколов будет ограничен.
Самая простая форма техники фаззинга - это отправка случайных входных данных в программное обеспечение либо в виде пакетов протокола, либо в виде события. Этот метод передачи случайного ввода очень эффективен для поиска ошибок во многих приложениях и службах. Доступны и другие методы, и их очень легко реализовать. Чтобы реализовать эти методы, нам просто нужно изменить существующие входные данные. Мы можем изменить ввод, просто поменяв местами биты ввода.
Типы ошибок, обнаруженных с помощью Fuzz Testing
-
Ошибки утверждения и утечки памяти. Эта методология широко используется для больших приложений, в которых ошибки влияют на безопасность памяти, что является серьезной уязвимостью.
- Некорректный ввод
При фаззинге фаззеры используются для генерации неверных входных данных, которые используются для тестирования процедур обработки ошибок, и это важно для программного обеспечения, которое не контролирует свои входные данные. Простой фаззинг может быть известен как способ автоматизации отрицательного тестирования.
- Ошибки корректности
Нечеткость также можно использовать для обнаружения некоторых типов ошибок "правильности". Например, поврежденная база данных, плохие результаты поиска и т. Д.
Инструменты тестирования Fuzz
Инструменты, которые используются в веб-безопасности, могут широко использоваться в нечетком тестировании, например Burp Suite, Peach Fuzzer и т. Д.
- Персиковый фаззер
Peach Fuzzer обеспечивает более надежное и безопасное покрытие, чем сканер. Другие инструменты тестирования могут искать только известные потоки, тогда как Peach Fuzzer позволяет пользователям находить известные и неизвестные потоки.
- Прокси-сервер Spike
Это инструмент профессионального уровня для поиска уязвимостей на уровне приложений в веб-приложениях. SPIKE Proxy охватывает основы, такие как внедрение SQL и межсайтовый скриптинг, но это полностью открытая инфраструктура Python. SPIKE Proxy доступен для Linux и Windows.
- Webscarab
Webscarab написан на Java, поэтому переносится на многие платформы. Для анализа приложений используется фреймворк Webscarab, которые общаются по протоколам HTTP и HTTPS.
Пример: Webscarab работает как перехватывающий прокси, он позволяет оператору просматривать и изменять запросы, созданные браузером, до того, как они будут получены сервером. И позволяют просматривать и обновлять ответ, сгенерированный сервером, до того, как он был получен браузером. Таким образом, если веб-скарабей найдет какую-либо лазейку, он внесет в список обнаруженных проблем.
- OWASP WSFuzzer
WSFuzzer - это программа под GPL, написанная на Python. Программа под GPL в настоящее время нацелена на веб-службы. В текущей версии OWASPWSFuzzer основной целью являются службы SOAP на основе HTTP.
Преимущества Fuzz-тестирования
- Fuzz-тестирование улучшает тестирование безопасности программного обеспечения.
- Ошибки, обнаруженные в фаззинге, иногда бывают серьезными и чаще всего используются хакерами, включая сбои, утечку памяти, необработанные исключения и т. Д.
- Если какая-либо из ошибок не может быть замечена тестировщиками из-за ограниченности времени и ресурсов, эти ошибки также обнаруживаются в Fuzz-тестировании.
Недостатки Fuzz-тестирования
- Само по себе Fuzz-тестирование не может дать полной картины общей угрозы или ошибок безопасности.
- Fuzz-тестирование менее эффективно для борьбы с угрозами безопасности, не вызывающими сбоев программы, такими как некоторые вирусы, черви, трояны и т. Д.
- Fuzz-тестирование может обнаруживать только простые ошибки или угрозы.
- Для эффективного выполнения потребуется значительное время.
- Установка граничного условия со случайными входными данными очень проблематична, но теперь с помощью детерминированных алгоритмов, основанных на пользовательских входных данных, большинство тестеров решают эту проблему.
Резюме:
В программной инженерии Fuzz-тестирование показывает наличие ошибок в приложении. Фаззинг не может гарантировать полное обнаружение ошибок в приложении. Но использование техники Fuzz гарантирует надежность и безопасность приложения, поскольку этот метод помогает выявить большинство распространенных уязвимостей.
Эта статья предоставлена Priyanka Kothe