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

Что такое фаззинг

Введение: что такое фаззинг?

В 2014 году китайские хакеры взломаны системы общественного здравоохранения, коммерческую сеть больниц в США, и украла данные 4.5 миллионов пациентов. Хакеры воспользовались ошибкой под названием Heartbleed, которая была обнаружена в криптографической библиотеке OpenSSL за несколько месяцев до взлома.

Heartbleed — это пример класса векторов атаки, которые позволяют злоумышленникам получить доступ к цели, отправляя искаженные запросы, достаточно достоверные для прохождения предварительных проверок. В то время как профессионалы, работающие над различными частями приложения, делают все возможное для обеспечения его безопасности, невозможно продумать все краеугольные камни, которые могут сломать приложение или сделать его уязвимым во время разработки.

Вот тут-то и появляется «фаззинг».

Что такое фаззинговая атака?

Нечеткое тестирование, нечеткое тестирование или нечеткая атака — это метод автоматизированного тестирования программного обеспечения, используемый для подачи случайных, неожиданных или недействительных данных (называемых нечеткими) в программу. Программа отслеживается на предмет необычного или неожиданного поведения, такого как переполнение буфера, сбои, утечка памяти, зависание потоков и нарушения доступа для чтения/записи. Затем для выявления причины необычного поведения используется инструмент фаззинга или фаззер.

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

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

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

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

 

Типы фаззеров

Фаззеры можно классифицировать по некоторым признакам:

  1. Цели атаки
  2. Метод создания пуха
  3. Осведомленность о структуре ввода
  4. Знание структуры программы

1. Цели атаки

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

Например, при работе с приложениями все попытки фаззинга происходят в различных входных каналах приложения, таких как пользовательский интерфейс, терминал командной строки, ввод форм/текста и загрузка файлов. Таким образом, все входные данные, генерируемые фаззером, должны соответствовать этим каналам.

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

2. Метод создания пуха

Фаззеры также можно классифицировать на основе того, как они создают данные для фаззинга. Исторически фаззеры создавали фазз, генерируя случайные данные с нуля. Так изначально поступал профессор Бартон Миллер, инициатор этой методики. Этот тип фаззера называется фаззер на основе генерации.

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

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

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

Существует третий, более новый метод, который использует генетические алгоритмы для сходимости на оптимальных нечетких данных, необходимых для устранения уязвимостей. Он работает, постоянно уточняя свои нечеткие данные, принимая во внимание производительность каждого теста данных при вводе в программу. 

Наихудшие наборы данных удаляются из пула данных, а лучшие изменяются и/или объединяются. Затем новое поколение данных снова используется для фазз-теста. Эти фаззеры называются фаззеры, основанные на эволюционных мутациях.

3. Осведомленность о структуре ввода

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


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

4. Осведомленность о структуре программы

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

Нечеткие данные, сгенерированные во время тестирования черного ящика, обычно случайны, если только фаззер не является фаззером, основанным на эволюционных мутациях, где он «обучается», наблюдая за эффектом своего фаззинга и используя это. информация для уточнения набора нечетких данных.

С другой стороны, тестирование белого ящика использует модель внутренней структуры программы для генерации нечетких данных. Этот подход позволяет фаззеру добраться до критических мест в программе и протестировать ее. 

Популярные инструменты фаззинга

Есть много фаззинга инструменты там используется тестерами пера. Вот некоторые из самых популярных:

Ограничения фаззинга

Хотя фаззинг — действительно полезный метод пентеста, он не лишен недостатков. Вот некоторые из них:

  • Бегать нужно довольно долго.
  • Сбои и другие непредвиденные действия, обнаруженные во время тестирования программы методом «черного ящика», могут быть трудными, если не невозможными, для анализа или отладки.
  • Создание шаблонов мутаций для умных фаззеров на основе мутаций может занять много времени. Иногда это может быть даже невозможно из-за того, что входная модель является частной или неизвестной.

 

Тем не менее, это довольно полезный и необходимый инструмент для всех, кто хочет обнаруживать ошибки раньше, чем плохие парни.

Заключение

Фаззинг — это мощная техника ручного тестирования, которую можно использовать для обнаружения уязвимостей в программном обеспечении. Существует множество различных типов фаззеров, и постоянно разрабатываются новые фаззеры. Хотя фаззинг — невероятно полезный инструмент, у него есть свои ограничения. Например, фаззеры могут найти ограниченное количество уязвимостей, и они могут быть довольно ресурсоемкими. Однако, если вы хотите попробовать эту удивительную технику на себе, у нас есть бесплатный DNS Fuzzer API, который вы можете использовать на нашей платформе. 

И так, чего же ты ждешь? 

Начните фаззить сегодня!

Письма кобольдов: фишинговые атаки по электронной почте на основе HTML

Письма кобольдов: фишинговые атаки по электронной почте на основе HTML

Письма Кобольда: Фишинговые атаки по электронной почте на основе HTML 31 марта 2024 года компания Luta Security опубликовала статью, проливающую свет на новый сложный вектор фишинга — Письма Кобольда.

Подробнее »
Google и миф об инкогнито

Google и миф об инкогнито

Google и миф об инкогнито 1 апреля 2024 года Google согласилась урегулировать иск, уничтожив миллиарды записей данных, собранных в режиме инкогнито.

Подробнее »