Що таке Фаззинг?

Що таке фузинг

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

У 2014 році китайські хакери зламано систему охорони здоров’я громади, комерційної мережі лікарень США, і викрали дані 4.5 мільйонів пацієнтів. Хакери скористалися помилкою під назвою Heartbleed, яка була виявлена ​​в криптографічній бібліотеці OpenSSL за кілька місяців до злому.

Heartbleed є прикладом класу векторів атак, які дозволяють зловмисникам отримати доступ до цілі, надсилаючи некоректні запити, достатньо дійсні для проходження попередніх перевірок. У той час як професіонали, які працюють над різними частинами програми, роблять усе можливе, щоб забезпечити її безпеку, неможливо придумати всі кутові випадки, які можуть зламати програму або зробити її вразливою під час розробки.

Ось тут і з’являється «фузинг».

Що таке Fuzzing Attack?

Фаззинг, фазз-тестування або фаззинг-атака — це техніка автоматизованого тестування програмного забезпечення, яка використовується для введення в програму випадкових, неочікуваних або недійсних даних (так звані фазз). Програма відстежується на предмет незвичайної або неочікуваної поведінки, як-от переповнення буфера, збої, витоки пам’яті, зависання потоків і порушення доступу для читання/запису. Потім для виявлення причини незвичайної поведінки використовується інструмент фаззингу або фаззер.

Фаззинг базується на припущенні, що всі системи містять помилки, які очікують на виявлення, і їм можна надати достатньо часу та ресурсів для цього. Більшість систем мають дуже хороші парсери або запобігання перевірці введення кіберзлочинці від використання будь-яких гіпотетичних помилок у програмі. Однак, як ми зазначали вище, охопити всі кутові випадки під час розробки складно.

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

Ефективний фаззер може генерувати вхідні дані, достатньо дійсні, щоб подолати ці межі, але достатньо недійсні, щоб викликати неочікувану поведінку далі в програмі. Це важливо, тому що просто можливість пройти перевірку не має великого значення, якщо не завдано подальшої шкоди.

Фаззери виявляють вектори атак, дуже схожі на ін’єкції SQL, міжсайтові сценарії, переповнення буфера та атаки на відмову в обслуговуванні. Усі ці атаки є результатом передачі неочікуваних, недійсних або випадкових даних у систему. 

 

Типи фаззерів

Фаззери можна класифікувати за деякими характеристиками:

  1. Атака цілей
  2. Метод створення пуху
  3. Усвідомлення структури входу
  4. Усвідомлення структури програми

1. Атакувати цілі

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

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

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

2. Метод створення пуху

Фаззери також можна класифікувати залежно від того, як вони створюють дані, з якими використовують футз. Історично фаззери створювали пух, генеруючи випадкові дані з нуля. Так спочатку робив професор Бартон Міллер, ініціатор цієї методики. Цей тип фаззера називається a фаззер на основі генерації.

Однак, хоча теоретично можна генерувати дані, які обійдуть межу довіри, для цього знадобиться значний час і ресурси. Тому цей метод зазвичай використовується для систем з простими вхідними структурами.

Рішення цієї проблеми полягає в тому, щоб змінити дані, які, як відомо, є дійсними, щоб створити дані, достатньо дійсні, щоб подолати межу довіри, але достатньо недійсні, щоб викликати проблеми. Хорошим прикладом цього є a Фазер DNS який бере доменне ім’я, а потім створює великий список доменних імен для виявлення потенційно шкідливих доменів, націлених на власника вказаного домену.

Цей підхід розумніший за попередній і значно звужує можливі перестановки. Фазери, які використовують цей метод, називаються фазери на основі мутацій

Існує третій новіший метод, який використовує генетичні алгоритми для зближення оптимальних нечітких даних, необхідних для усунення вразливостей. Він працює шляхом постійного вдосконалення своїх нечітких даних, беручи до уваги продуктивність кожного тестового даних, що подається в програму. 

Найгірші набори даних видаляються з пулу даних, тоді як найкращі змінюються та/або об’єднуються. Потім нове покоління даних знову використовується для фазз-тесту. Ці фаззери називаються фаззери на основі еволюційних мутацій.

3. Усвідомлення структури вхідних даних

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


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

4. Поінформованість про структуру програми

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

Дані фазів, створені під час тестування чорної скриньки, зазвичай є випадковими, якщо тільки фаззер не є фазером на основі еволюційних мутацій, де він «навчається», відстежуючи ефект свого фаззингу та використовуючи це інформація щоб уточнити свій набір даних Fuzz.

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

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

Є багато розмитості інструменти використовується тестувальниками ручок. Деякі з найпопулярніших:

Обмеження фаззингу

Хоча Фаззинг є дійсно корисною технікою тестування пера, він не позбавлений недоліків. Деякі з них:

  • На біг потрібно досить багато часу.
  • Збої та інша несподівана поведінка, виявлена ​​під час тестування програми за допомогою чорної скриньки, може бути складною, а то й неможливою для аналізу чи налагодження.
  • Створення шаблонів мутацій для розумних фаззерів на основі мутацій може зайняти багато часу. Іноді це може бути навіть неможливим через те, що модель введення є запатентованою або невідомою.

 

Тим не менш, це досить корисний і необхідний інструмент для тих, хто хоче виявити помилки раніше поганих хлопців.

Висновок

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

Так чого ти чекаєш? 

Почніть фуззити вже сьогодні!

Google і міф про інкогніто

Google і міф про інкогніто

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

Детальніше »