Що таке Fuzz тестування?

Тестування Fuzz, також відоме як тестування fuzzing або monkey, є методикою, яка використовується для тестування програмного забезпечення для невідомих уразливостей. Процес тестування fuzz автоматизований за допомогою програми, відомої як fuzzer, яка складається з великою кількістю даних для передачі цільовій програмі в якості вхідних даних. Якщо цільова програма збої або поводиться небажано, fuzzer робить журнал входу, який викликав помилку.

Хакери часто використовують fuzzers для пошуку вразливостей програмного забезпечення, перевіряючи його на слабкі місця, які вони можуть використовувати. Розробники програмного забезпечення можуть використовувати fuzzer, щоб передбачити і захищати від цих видів атак.

Походження

Перший fuzzer був написаний на початку 1980-х років розробником Стівом Каппсом для перевірки слабкості програм для комп'ютера Macintosh. Він назвав свою програму "Мавпа", посилаючись на класичну приказку мавпи, що натискає випадкові клавіші на друкарській машинці на нескінченну кількість часу. Теорія полягає в тому, що, маючи достатньо часу, мавпа врешті-решт напише повні твори Шекспіра. Хоча цей підхід до тестування програмного забезпечення зазвичай називається "фьюзинг", його також називають "тестуванням мавп" через програму Capps.

Список Fuzzers

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

Нижче наведено список fuzzers, більшість з яких є відкритими джерелами, і багато хто з них все ще активно розвиваються.

Ім’я / URL-адреса фюзераОпис
Засоби для дезінфекції GoogleГрупа з чотирьох дезинфікуючих даних, розроблена в Google, які використовують fuzzing для виявлення помилок програми:
  • AddressSanitizer, який виявляє помилки адреси пам'яті в програмах C і C ++.
  • LeakSanitizer, який виявляє витоки пам'яті.
  • ThreadSanitizer, який виявляє умови гонки в C ++ і Go.
  • Memory Sanitizer, який виявляє неініціалізовану пам'ять.
afl-fuzzAmerican Fuzzy Lop, інструмент, який використовує генетичні алгоритми для перевірки безпеки складених програм.
BackfuzzПротокол fuzzing інструментарій.
BrundleFuzzРозподілений fuzzer для Windows і Linux.
CERT FOEFailure Observation Engine, інструмент, розроблений CERT, який використовує мутаційні fuzzing для виявлення вразливостей у програмах Windows.
CERTfuzzВихідний код CERT FOE.
ЧоронзонЕволюційний фузсер.
DiffyІнструмент, розроблений Twitter для виявлення вразливостей у веб-службах.
ЗапамороченняБібліотека Fuzzing для Python
dfuzzerFuzzing інструмент для тестування процесів, які зв'язуються за допомогою D-Bus IPC і механізму RPC.
dotdotpwnІнструмент для тестування веб-додатків для виявлення вразливостей шляхів.
DranzerТестер fuzz для елементів керування ActiveX.
EMFFuzzerПокращений тест fuzz для тестування.
ВикористовуєтьсяРозширення для GDB (GNU debugger), який аналізує виконувані файли Linux і класифікує їх помилки за ступенем суворості згідно з відомими експлуататами. Спочатку розроблений на CERT.
Go-fuzzПрогравач fuzz для програм Go, який заповнює їх об'єкти випадковими значеннями.
гррПеретворює 32-бітні двійкові файли на 64-бітні, використовуючи їх як частину процесу.
honggfuzzЕволюційний, керований зворотним зв'язком fuzzer для апаратного та програмного забезпечення.
HTTP / 2 FuzzerФьюзер для додатків HTTP / 2, все ще доступний для завантаження, але більше не активно розвивається.
Годор"Трохи більше, ніж повністю німий" (груба сила) fuzzer.
iFuzzerФюзер, написаний на Python, який використовує Mercurial і Valgrind.
KEMUfuzzerФьюзер для віртуальних машин, що працюють на платформах емуляції QEMU, VMware, VirtualBox або BHOCS.
KernelFuzzerФюзер для системних викликів ядра
LibFuzzerБібліотека для процесу, еволюційного, керованого тестуванням fuzz.
NetzobФьюзер для зворотньо-інженерних комунікаційних протоколів.
Нейронний fuzzerФьюзер, який використовує машинне навчання (нейронні мережі) для виконання його тестування.
КошмарРозподілений fuzzer з веб-засобами адміністрування.
PathgrindДинамічний аналіз на основі шляхів для 32-розрядних додатків.
ПерфораторФюзер, спеціально призначений для перевірки системного виклику perf_event_open () в ядрі Linux.
ПульсарФьюзер, який "дізнається" протоколи.
PyJFuzzПіксеновий флузер JSON.
QuickFuzzЕкспериментальний розпилювач граматики, написаний на Haskell.
RadamsaФьюзер загального призначення.
РендіПростий fuzzer Python, який генерує випадкові вхідні дані для перевіреної програми.
sfuzzПростий пух. - Точно, як це звучить - простий фюзер. Входить до складу набору інструментів Kali Linux.
skipfishУ Google розроблено сканер безпеки веб-додатків.
syntribiosАвтоматизований тестер fuzz для веб-API, написаний на Python і підтримуваний OpenStack Security Group.
TriforceAFLПовна система fuzzer, яка використовує QEMU.
WapitiСканер уразливості веб-додатків.
WfuzzПеремикач для веб-додатків.
zzufДетерміністичний, прозорий вхідний fuzzer, який випадковим чином змінює біти у вхідних операціях файлу.

Нижче наведено fuzzing джгути або рамки, які допоможуть вам керувати тестуванням fuzz.

Fuzzing FrameworkОпис
CERT BFFBFF (Basic Fuzzing Framework), розроблений CERT, призначений для виявлення вразливостей у програмах Windows, MacOS і Linux.
FuzzFlowFuzzing фреймворк в AngularJS.
FuzzinatorСтруктура для випадкового тестування fuzz.
FuzzLabsЗагальноприйнята система тестування fuzz.
ПодрібнювачАвтоматизатор тестування fuzz / фреймворк для тестування веб-браузерів.
КітіСтруктура тестування fuzz, написана на Python.
ofuzzFuzzing framework, написаний на OCaml.
NodefuzzСтруктура тестування fuzz для веб-браузерів, написана на nodejs.
PassiveFuzzFrameworkOSXФьюзер для тестування вразливостей ядра macOS.
Персиковий FuzzerПлатформа для тестування fuzz, яка може "перевірити практично будь-яку систему з невідомими вразливостями".
RamFuzzФьюзер для тестування окремих параметрів об'єктних методів.
Sulley"Повністю автоматизований і без нагляду, чистий Python" fuzzing рамки.
FunFuzzerPython fuzzing джгут для двигунів JavaScript і DOM-рендери, від Mozilla.

Помилка, терміни програмування, умови безпеки, тестування програмного забезпечення