# Фазинг-тестування (Fuzz testing)

FUZZ testing (fuzzing) - це тип тестування безпеки, який виявляє помилки кодування та лазівки у програмному забезпеченні, операційних системах чи мережах. Фазинг включає введення величезної кількості випадкових даних, званих fuzz, в програмне забезпечення, що тестується, щоб змусити його дати збій або прорвати його захист. Фазинг часто виявляє уразливості, які можуть бути використані за допомогою SQL-ін'єкції, переповнення буфера, відмови в обслуговуванні (DOS) та XSS. Fuzz-тестування виконується за допомогою фазера – програми, яка автоматично вводить напіввипадкові дані у програму та виявляє помилки. Fuzz-тестування зазвичай виконується автоматично.

Зазвичай fuzzing виявляє найбільш серйозні помилки або дефекти безпеки. Це дуже економічно ефективний метод тестування. Fuzzing - один із найпоширеніших методів хакерів, які використовуються для виявлення вразливості системи (сюди відносяться популярні SQL- або скриптові ін'єкції). Приклади фазерів:

* Mutation-Based Fuzzers: Цей тип фазера найпростіше створити, оскільки він змінює існуючі зразки даних для створення нових тестових даних. Це стосується тупого фазера, але його можна використовувати з більш інтелектуальними фазерами. Ми можемо це зробити, виконавши певний рівень аналізу зразків, щоб гарантувати, що він змінює лише певні частини або не порушує загальну структуру введення;
* Generation-Based Fuzzers: Цей тип фазера вимагає більшого інтелекту створення тестових даних із нуля, тобто. нові тестові дані створюються з урахуванням вхідний моделі. Зазвичай він розбиває протокол або формат файлу на фрагменти, які потім вишиковуються в допустимому порядку, і ці фрагменти випадково розподіляються незалежно один від одного;
* PROTOCOL-BASED-fuzzer: найуспішніший фазер - це детальне знання формату протоколу, що тестується. Розуміння залежить від специфікації. Це включає запис масиву специфікації в інструмент, а потім за допомогою методу генерації тестів на основі моделі проходить специфікація і додається нерівномірність вміст даних, послідовність і т. д. Це також відомо як синтаксичне тестування, граматичне тестування, тестування надійності, і т д. Fuzzer може генерувати Test case з існуючого або використовувати допустимі або недійсні вхідні дані;

Типи помилок, які виявляються Fuzz testing:

* Збої асертів та витоку пам'яті (Assertion failures and memory leaks). Ця методологія широко використовується для великих програм, де помилки впливають на безпеку пам'яті, що є серйозною вразливістю;
* Некоректне введення (Invalid input). Фазери використовуються для генерування неправильного введення, яке використовується для тестування процедур обробки помилок, і це важливо для програмного забезпечення, яке не контролює його введення. Простий фазинг може бути способом автоматизації негативного тестування;
* Виправлення помилок (Correctness bugs). Fuzzing також можна використовувати для виявлення деяких типів помилок «правильності». Наприклад, пошкоджена база даних, погані результати пошуку тощо;

Джерела:

* [Fuzz Testing Guide](https://translate.google.com/website?sl=auto\&tl=uk\&hl=uk\&u=https://www.softwaretestingmaterial.com/fuzz-testing/)
* [Fuzz Testing(Fuzzing) Tutorial: What is, Types, Tools & Example](https://translate.google.com/website?sl=auto\&tl=uk\&hl=uk\&u=https://www.guru99.com/fuzz-testing.html)

Дод. матеріал:

[Фазинг тестування веб-інтерфейсу. Розшифровка доповіді](https://translate.google.com/website?sl=auto\&tl=uk\&hl=uk\&u=https://habr.com/ru/company/tensor/blog/527304/)
