Фазз-тестирование или фаззинг - это техника тестирования программного обеспечения методом "черного ящика", которая в основном заключается в поиске ошибок реализации с помощью введения недостоверных/полунедостоверных данных в автоматизированной задаче.
Этот анализ является техникой тестирования программного обеспечения, используемой разработчиками и тестерами на проникновение для проверки своих приложений против неожиданных, недопустимых и случайных наборов вводимых данных. В ответ на это приложение выдает исключение или сбой. Это действие показывает нам некоторые из основных уязвимостей в приложении, которые невозможно обнаружить иным способом. К ним относятся переполнение буфера, форматные строки, инъекции кода, висячие указатели, условия гонки, условия отказа в обслуживании и многие другие типы уязвимостей.
Нечеткий анализ - это относительно простое и эффективное решение, которое может быть включено в процессы обеспечения качества и тестирования безопасности. Именно поэтому нечеткий анализ также иногда называют тестированием на устойчивость или негативным тестированием.
История фаззинга
Классическое фазз-тестирование было разработано в Университете Висконсин-Мэдисон в 1989 году профессором Бартоном Миллером и студентами. Она в основном ориентирована на фаззинг командной строки и пользовательского интерфейса, и показывает, что современные операционные системы уязвимы даже для простого фаззинга.
Типы атак в фаззинге
Обычно фаззер (программа для фаззинга) пробует комбинации атак на:
- числа (целые числа со знаком/без знака/плоские числа и т.д.).
- символы (урлы, вводы командной строки).
- метаданные: вводимый пользователем текст (тег id3).
- чистые двоичные последовательности.
Общий подход к fuzzing заключается в определении списков "известных опасных значений" (fuzz vectors) для каждого типа, и внедрении их или их комбинаций.
- Для целых чисел: ноль, возможно, отрицательные или очень большие числа.
- Для символов: экранированные, интерпретируемые символы / инструкции (например: для SQL-апросов, кавычки / команды и т.д.).
- Для двоичных чисел: случайные единицы.
- Для символов: экранированные, интерпретируемые символы / инструкции (например: для SQL-запросов, кавычки / команды и т.д.).
Почему фаззинг важен для тестирования безопасности?
Цель фаззинга основана на предположении, что в каждой программе есть ошибки, которые ждут своего часа. Значит, систематический подход рано или поздно должен их обнаружить.
Фаззинг может добавить другую перспективу к классическим методам тестирования программного обеспечения (ручной просмотр кода, отладка), поскольку это нечеловеческий подход. Он не заменяет их, но является разумным дополнением, благодаря ограниченной работе, необходимой для внедрения процедуры.