Фазинг (англ. fuzzing,fuzz testing) — техніка автоматизованого тестування програмного забезпечення, яка полягає в тому, що на вхід програми подаються недійсні, невідповідні або випадково згенеровані дані. Таким чином відбувається перевірка на обробку виключних ситуацій, випадкові падіння тощо. Як правило, фазери використовуються для тестування програм, які сприймають на ввід визначені структури даних, наприклад, файли відомого формату. Ефективний фазер може згенерувати потік даних, який стане «досить валідним» для того, щоб пройти початкові перевірки парсера, але при подальшій обробці виявить поведінку програми при перевищенні допустимих значень для певних параметрів або інші неочікувані ситуації.
З міркувань безпеки найцікавішим є тестування коду, який порушує «рівні довіри». Наприклад, важливо перевірити код, який перевіряє формат файлів перед відправленням їх до сервера на обробку, або парсить конфігураційний файл, який задає налаштування користувача з підвищеними правами.
Історія
Історія фазингового тестування починається у 1950х, коли для введення даних використовувались перфокарти. Програмісти застосовували використані перфокарти, взяті з контейнерів для сміття або випадковим чином пробиті карти для перевірки поточних програм на некоректну поведінку або баги.
Різновидом таких перевірок стало або мавпячі тести.
У 1981 році з'явились наукові публікації, присвячені випадковому тестуванню ПЗ. Хоча воно визначалось неефективним, автори пропонували його як дешевшу альтернативу звичайному тестуванню.
У 1983 програміст [en] розробив програму «The Monkey», яка подавала потік випадково згенерованих даних програмам для Mac OS. Назва програми була відсилкою до теореми про те, що серед нескінченої кількості мавп, посаджених за клавіатури, знайдеться хоча б одна, здатна набрати літературний текст.
Термін «фазинг» з'явився у курсі, що викладався Бартоном Міллером в університеті Вісконсину в 1988.Курс передбачав створення програми для Unix, яка б генерувала випадкові файли та аргументи командного рядка. Передбачалось тестування надійності інших програм шляхом подавання на вхід великої кількості рандомізованих даних. Для заохочення подальших досліджень усі вихідні коди утиліти та інші матеріали проекту були зроблені публічно доступними .
У вересні 2014 року стало відомо про сімейство багів у командній оболонці bash, що отримало загальну назву [en]. Більшість з цих багів було виявлено завдяки фазеру («american fuzzy lop»).
Різновиди
Умовно фазери можна поділити на такі групи:
- За тим, як змінюються дані в процесі тестування: на основі мутацій або на основі поколінь.
- За наявністю знань про код програми: методом "чорної скриньки", білої або сірої
- За використанням знань про структуру вхідних даних: прості (англ. dumb) та розумні (англ. smart)
Фазери з мутаційним підходом під час тестування модифікують деякий набір відомих зразків. Наприклад, для перевірки роботи бібліотеки, що обробляє зображення, користувач повинен буде підготувати ряд файлів; у процесі фазер буде їх змінювати, щоб знайти більше помилок. Відповідно до іншого підходу, фазери на основі поколінь генерують усі вхідні дані від самого початку, а тому їх результати не залежать від якості вхідного набору даних.
Простими називають фазери, що не використовують дані про структуру вводу програми, такі як формат файлу або мережевий протокол. При цьому ефективний фазер може «вгадати» правильну структуру вхідних даних і використовувати її у роботі. Розумні фазери з самого початку знайомі зі структурою вхідних даних і генерують тестові дані відповідно до певних правил.
Відомі проекти
- american fuzzy lop (AFL) — простий фазер, що використовує генетичні алгоритми для ефективнішого покриття коду тестами. Розробляється програмістом Michal Zalewski, назва походить від назви породи кроликів. Використовувався для пошуку багів у ряді проектів з відкритим кодом, таких як X.Org Server, PHP, OpenSSL, pngcrush, bash, Firefox, BIND та Qt.
- libFuzzer — бібліотека,що лінкується з кодом і може використовуватись для перевірки роботи окремих функцій.
- radamsa — фазер, що генерує тест-кейси на основі заздалегідь підготованих файлів-зразків.
Див. також
Примітки
- Gerald M. Weinberg. . Архів оригіналу за 24 серпня 2017. Процитовано 6 лютого 2017.
- Joe W. Duran; Simeon C. Ntafos (9 березня 1981). . Proceedings of the ACM SIGSOFT International Conference on Software Engineering (ICSE'81). Архів оригіналу за 5 травня 2019. Процитовано 26 серпня 2017.
- Joe W. Duran; Simeon C. Ntafos (1 липня 1984). . IEEE Transactions on Software Engineering (TSE). Архів оригіналу за 28 травня 2018. Процитовано 26 серпня 2017.
- . Folklore.org. 22 лютого 1999. Архів оригіналу за 21 березня 2021. Процитовано 28 травня 2010.
- Barton Miller (2008). «Preface». In Ari Takanen, Jared DeMott and Charlie Miller, Fuzzing for Software Security Testing and Quality Assurance,
- . University of Wisconsin-Madison. Архів оригіналу за 20 січня 2021. Процитовано 14 травня 2009.
- Perlroth, Nicole (25 вересня 2014). . New York Times. Архів оригіналу за 5 квітня 2019. Процитовано 25 вересня 2014.
- Zalewski, Michal (1 жовтня 2014). Bash bug: the other two RCEs, or how we chipped away at the original fix (CVE-2014-6277 and '78). lcamtuf's blog. Процитовано 13 березня 2017.
- John Neystadt (February 2008). . Microsoft. Архів оригіналу за 30 липня 2017. Процитовано 14 травня 2009.
- Michael Sutton; Adam Greene; Pedram Amini (2007). Fuzzing: Brute Force Vulnerability Discovery. Addison-Wesley. ISBN .
- . Архів оригіналу за 23 серпня 2017. Процитовано 26 серпня 2017.
- . Архів оригіналу за 1 квітня 2017. Процитовано 26 серпня 2017.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Fazing angl fuzzing fuzz testing tehnika avtomatizovanogo testuvannya programnogo zabezpechennya yaka polyagaye v tomu sho na vhid programi podayutsya nedijsni nevidpovidni abo vipadkovo zgenerovani dani Takim chinom vidbuvayetsya perevirka na obrobku viklyuchnih situacij vipadkovi padinnya tosho Yak pravilo fazeri vikoristovuyutsya dlya testuvannya program yaki sprijmayut na vvid viznacheni strukturi danih napriklad fajli vidomogo formatu Efektivnij fazer mozhe zgeneruvati potik danih yakij stane dosit validnim dlya togo shob projti pochatkovi perevirki parsera ale pri podalshij obrobci viyavit povedinku programi pri perevishenni dopustimih znachen dlya pevnih parametriv abo inshi neochikuvani situaciyi Interfejs programi AFL Z mirkuvan bezpeki najcikavishim ye testuvannya kodu yakij porushuye rivni doviri Napriklad vazhlivo pereviriti kod yakij pereviryaye format fajliv pered vidpravlennyam yih do servera na obrobku abo parsit konfiguracijnij fajl yakij zadaye nalashtuvannya koristuvacha z pidvishenimi pravami IstoriyaIstoriya fazingovogo testuvannya pochinayetsya u 1950h koli dlya vvedennya danih vikoristovuvalis perfokarti Programisti zastosovuvali vikoristani perfokarti vzyati z kontejneriv dlya smittya abo vipadkovim chinom probiti karti dlya perevirki potochnih program na nekorektnu povedinku abo bagi Riznovidom takih perevirok stalo abo mavpyachi testi U 1981 roci z yavilis naukovi publikaciyi prisvyacheni vipadkovomu testuvannyu PZ Hocha vono viznachalos neefektivnim avtori proponuvali jogo yak deshevshu alternativu zvichajnomu testuvannyu U 1983 programist en rozrobiv programu The Monkey yaka podavala potik vipadkovo zgenerovanih danih programam dlya Mac OS Nazva programi bula vidsilkoyu do teoremi pro te sho sered neskinchenoyi kilkosti mavp posadzhenih za klaviaturi znajdetsya hocha b odna zdatna nabrati literaturnij tekst Termin fazing z yavivsya u kursi sho vikladavsya Bartonom Millerom v universiteti Viskonsinu v 1988 Kurs peredbachav stvorennya programi dlya Unix yaka b generuvala vipadkovi fajli ta argumenti komandnogo ryadka Peredbachalos testuvannya nadijnosti inshih program shlyahom podavannya na vhid velikoyi kilkosti randomizovanih danih Dlya zaohochennya podalshih doslidzhen usi vihidni kodi utiliti ta inshi materiali proektu buli zrobleni publichno dostupnimi U veresni 2014 roku stalo vidomo pro simejstvo bagiv u komandnij obolonci bash sho otrimalo zagalnu nazvu en Bilshist z cih bagiv bulo viyavleno zavdyaki fazeru american fuzzy lop RiznovidiUmovno fazeri mozhna podiliti na taki grupi Za tim yak zminyuyutsya dani v procesi testuvannya na osnovi mutacij abo na osnovi pokolin Za nayavnistyu znan pro kod programi metodom chornoyi skrinki biloyi abo siroyi Za vikoristannyam znan pro strukturu vhidnih danih prosti angl dumb ta rozumni angl smart Fazeri z mutacijnim pidhodom pid chas testuvannya modifikuyut deyakij nabir vidomih zrazkiv Napriklad dlya perevirki roboti biblioteki sho obroblyaye zobrazhennya koristuvach povinen bude pidgotuvati ryad fajliv u procesi fazer bude yih zminyuvati shob znajti bilshe pomilok Vidpovidno do inshogo pidhodu fazeri na osnovi pokolin generuyut usi vhidni dani vid samogo pochatku a tomu yih rezultati ne zalezhat vid yakosti vhidnogo naboru danih Prostimi nazivayut fazeri sho ne vikoristovuyut dani pro strukturu vvodu programi taki yak format fajlu abo merezhevij protokol Pri comu efektivnij fazer mozhe vgadati pravilnu strukturu vhidnih danih i vikoristovuvati yiyi u roboti Rozumni fazeri z samogo pochatku znajomi zi strukturoyu vhidnih danih i generuyut testovi dani vidpovidno do pevnih pravil Vidomi proektiamerican fuzzy lop AFL prostij fazer sho vikoristovuye genetichni algoritmi dlya efektivnishogo pokrittya kodu testami Rozroblyayetsya programistom Michal Zalewski nazva pohodit vid nazvi porodi krolikiv Vikoristovuvavsya dlya poshuku bagiv u ryadi proektiv z vidkritim kodom takih yak X Org Server PHP OpenSSL pngcrush bash Firefox BIND ta Qt libFuzzer biblioteka sho linkuyetsya z kodom i mozhe vikoristovuvatis dlya perevirki roboti okremih funkcij radamsa fazer sho generuye test kejsi na osnovi zazdalegid pidgotovanih fajliv zrazkiv Div takozhMutacijne testuvannyaPrimitkiGerald M Weinberg Arhiv originalu za 24 serpnya 2017 Procitovano 6 lyutogo 2017 Joe W Duran Simeon C Ntafos 9 bereznya 1981 Proceedings of the ACM SIGSOFT International Conference on Software Engineering ICSE 81 Arhiv originalu za 5 travnya 2019 Procitovano 26 serpnya 2017 Joe W Duran Simeon C Ntafos 1 lipnya 1984 IEEE Transactions on Software Engineering TSE Arhiv originalu za 28 travnya 2018 Procitovano 26 serpnya 2017 Folklore org 22 lyutogo 1999 Arhiv originalu za 21 bereznya 2021 Procitovano 28 travnya 2010 Barton Miller 2008 Preface In Ari Takanen Jared DeMott and Charlie Miller Fuzzing for Software Security Testing and Quality Assurance ISBN 978 1 59693 214 2 University of Wisconsin Madison Arhiv originalu za 20 sichnya 2021 Procitovano 14 travnya 2009 Perlroth Nicole 25 veresnya 2014 New York Times Arhiv originalu za 5 kvitnya 2019 Procitovano 25 veresnya 2014 Zalewski Michal 1 zhovtnya 2014 Bash bug the other two RCEs or how we chipped away at the original fix CVE 2014 6277 and 78 lcamtuf s blog Procitovano 13 bereznya 2017 John Neystadt February 2008 Microsoft Arhiv originalu za 30 lipnya 2017 Procitovano 14 travnya 2009 Michael Sutton Adam Greene Pedram Amini 2007 Fuzzing Brute Force Vulnerability Discovery Addison Wesley ISBN 0 321 44611 9 Arhiv originalu za 23 serpnya 2017 Procitovano 26 serpnya 2017 Arhiv originalu za 1 kvitnya 2017 Procitovano 26 serpnya 2017