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