Что такое фаззинг (Fuzzing)?

Фазз-тестирование или фаззинг - это техника тестирования программного обеспечения методом "черного ящика", которая в основном заключается в поиске ошибок реализации с помощью введения недостоверных/полунедостоверных данных в автоматизированной задаче.

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

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

История фаззинга

Классическое фазз-тестирование было разработано в Университете Висконсин-Мэдисон в 1989 году профессором Бартоном Миллером и студентами. Она в основном ориентирована на фаззинг командной строки и пользовательского интерфейса, и показывает, что современные операционные системы уязвимы даже для простого фаззинга.

Типы атак в фаззинге

Обычно фаззер (программа для фаззинга) пробует комбинации атак на:

  • числа (целые числа со знаком/без знака/плоские числа и т.д.).
  • символы (урлы, вводы командной строки).
  • метаданные: вводимый пользователем текст (тег id3).
  • чистые двоичные последовательности.

Общий подход к fuzzing заключается в определении списков "известных опасных значений" (fuzz vectors) для каждого типа, и внедрении их или их комбинаций.

  • Для целых чисел: ноль, возможно, отрицательные или очень большие числа.
  • Для символов: экранированные, интерпретируемые символы / инструкции (например: для SQL-апросов, кавычки / команды и т.д.).
  • Для двоичных чисел: случайные единицы.
  • Для символов: экранированные, интерпретируемые символы / инструкции (например: для SQL-запросов, кавычки / команды и т.д.).

Почему фаззинг важен для тестирования безопасности?

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

Фаззинг может добавить другую перспективу к классическим методам тестирования программного обеспечения (ручной просмотр кода, отладка), поскольку это нечеловеческий подход. Он не заменяет их, но является разумным дополнением, благодаря ограниченной работе, необходимой для внедрения процедуры.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий