Mastodon Mastodon Mastodon Mastodon

Фазинг

Оновлено: · CyberSecureFox Editorial Team

Фазинг (fuzz-тестування) — автоматизована методика тестування, за якої програмі подають величезну кількість некоректних, неочікуваних чи випадкових вхідних даних, щоб знайти збої, помилки роботи з пам’яттю та вразливості.

Як працює фазинг

Фазер багаторазово генерує вхідні дані, запускає з ними цільову програму й стежить за аварійними завершеннями, зависаннями та спрацюванням перевірок (assertions). Цікаві вхідні дані зберігаються, щоб розробники могли відтворити помилку. Ідея з’явилася 1988 року, коли студенти Бартона Міллера з Університету Вісконсину «валили» безліч утиліт Unix випадковим введенням. Основні підходи:

  • На основі мутацій — зразки файлів чи повідомлень змінюють: інвертують біти, вставляють байти, склеюють фрагменти різних входів.
  • На основі генерації — вхідні дані будують за граматикою або специфікацією протоколу; це корисно для складних форматів.
  • Зі зворотним зв’язком за покриттям — програму інструментують і зберігають входи, що відкривають нові шляхи виконання. Цей підхід популяризували American Fuzzy Lop (AFL, 2013) і libFuzzer з LLVM.

Фазери зазвичай поєднують із санітайзерами, наприклад AddressSanitizer, які перетворюють непомітне пошкодження пам’яті на негайний і зрозумілий збій.

Чому це важливо

Фазинг — один із найефективніших способів знайти переповнення буфера, помилки use-after-free і вади парсерів у коді на C та C++. Сервіс Google OSS-Fuzz, запущений 2016 року, безперервно фазить сотні проєктів із відкритим кодом і знайшов багато тисяч помилок, значна частина яких — вразливості. Зловмисники й брокери експлойтів теж фазять популярне ПЗ, а дослідники використовують фазинг у програмах bug bounty, щоб знаходити проблеми в браузерах, операційних системах і мережевих протоколах.

Як застосовують фазинг на практиці

  • Вбудовувати фаз-цілі в CI/CD, щоб кожну зміну тестували безперервно.
  • Насамперед фазити код, що розбирає недовірені дані: формати файлів, мережеві протоколи, бібліотеки зображень і шрифтів.
  • Запускати фазери із санітайзерами й підтримувати корпус якісних початкових входів.
  • Поєднувати фазинг з рев’ю коду, статичним аналізом і мовами з безпечною роботою з пам’яттю.
Синоніми:
fuzzing, фазинг-тестування, fuzz-тестування, фаззінг