Фаззинг
Фа́ззинг (англ. fuzzing или англ. fuzz testing, буквально «испытание пушинками/волосинками», от англ. fuzz — с изначальным значением «делать неопрятным», «с прилипшими волосками», затем переносным «затуманивать», «путать»), также тестирование мусорными данными[1] — техника тестирования программного обеспечения, часто автоматическая или полуавтоматическая, заключающаяся в передаче приложению на вход неправильных, неожиданных или случайных данных. Предметом интереса являются падения и зависания, нарушения внутренней логики и проверок в коде приложения, утечки памяти, вызванные такими данными на входе. Фаззинг является разновидностью выборочного тестирования (random testing), часто используемого для проверки проблем безопасности в программном обеспечении и компьютерных системах.
При проверке безопасности наибольший интерес вызывают проверки на границе доверия[2]. Например, намного важнее провести фаззинг формы загрузки файлов неавторизованным пользователем, чем загрузку конфигурационного файла авторизованным привилегированным пользователем.
История
Случайные данные применялись при тестировании приложений и раньше. К примеру, приложение «Обезьяна» (The Monkey) под Mac OS, созданное Стивом Капсом ещё в 1983 году, генерировала случайные события, которые направлялись на вход тестируемым программам для поиска багов. Оно использовалось, в частности, при тестировании MacPaint[англ.][3].
Термин «fuzz» появился в 1988 году на семинаре Бартона Миллера в Университете Висконсина[4], во время которого была создана простая программа fuzzer, предназначенная для командной строки, с целью тестирования надежности приложений под Unix. Она генерировала случайные данные, которые передавались как параметры для других программ до тех пор, пока они не останавливались с ошибкой. Это стало не только первым в истории тестированием с использованием случайных неструктурированных данных, но и первым специализированным приложением для тестирования широкого круга программ под разнообразные операционные системы, и с систематическим анализом типов ошибок, возникающих при таком тестировании. Создатели проекта открыли исходные коды своего приложения, а также публичный доступ к процедурам тестирования и сырым результатам. Тест был повторен в 1995 году — приложение доработали для тестирования приложений с GUI, сетевых протоколов и системных библиотек под Mac OS и Windows.
Схожие техники тестирования существовали задолго до появления термина и формализации процедуры. Так, известно, что Джерри Вейнберг использовал набор карт со случайными числами, чтобы передавать их на вход программ ещё в 1950-х годах[5].
В 1991 году было выпущено приложение crashme, созданное для тестирования надежности операционных систем путем исполнения случайного набора процессорных инструкций[6].
В настоящее время фаззинг является составной частью большинства проверок безопасности и надёжности программного обеспечения и компьютерных систем.
См. также
- Переполнение буфера
- Код ошибки
- Обратная разработка
- Утечка динамической памяти
- Динамический анализ кода
- Статический анализ кода
- Синий экран смерти
- Control-flow integrity
Примечания
- ↑ Фаззинг или тестирование мусорными данными . Дата обращения: 3 февраля 2024. Архивировано 3 февраля 2024 года.
- ↑ John Neystadt. Automated Penetration Testing with White-Box Fuzzing . Microsoft (февраль 2008). Дата обращения: 14 мая 2009. Архивировано 30 июля 2017 года.
- ↑ Macintosh Stories: Monkey Lives . Folklore.org (22 февраля 1999). Дата обращения: 28 мая 2010. Архивировано 21 марта 2021 года.
- ↑ Michael Sutton; Adam Greene; Pedram Amini. Fuzzing: Brute Force Vulnerability Discovery (англ.). — Addison-Wesley, 2007. — ISBN 0-321-44611-9.
- ↑ Gerald M. Weinberg. Fuzz Testing and Fuzz History . Дата обращения: 6 февраля 2017. Архивировано 24 августа 2017 года.
- ↑ crashme . CodePlex. Дата обращения: 26 июня 2012. Архивировано из оригинала 11 августа 2012 года.
Ссылки
- University of Wisconsin Fuzz Testing (the original fuzz project) Source of papers and fuzz software.
- Look out! It’s the Fuzz! (IATAC IAnewsletter 10-1)
- Designing Inputs That Make Software Fail, conference video including fuzzy testing
- Link to the Oulu (Finland) University Secure Programming Group Архивная копия от 10 января 2016 на Wayback Machine
- Building 'Protocol Aware' Fuzzing Frameworks
- Video training series about Fuzzing, Fuzz testing, and unknown vulnerability management