Какво е Fuzzing?

Какво е размиване

Въведение: Какво е Fuzzing?

През 2014 г. китайските хакери хакнат в здравните системи на Общността, американска болнична верига с печалба, и открадна 4.5 милиона данни на пациенти. Хакерите използваха грешка, наречена Heartbleed, която беше открита в криптографската библиотека OpenSSL няколко месеца преди хакването.

Heartbleed е пример за клас вектори за атака, които позволяват на нападателите да получат достъп до цел чрез изпращане на неправилно формулирани заявки, достатъчно валидни, за да преминат предварителните проверки. Въпреки че професионалистите, които работят върху различни части на приложение, правят всичко възможно, за да осигурят неговата сигурност, невъзможно е да се измислят всички ъглови случаи, които биха могли да счупят приложение или да го направят уязвимо по време на разработката.

Тук се намесва „размиването“.

Какво е Fuzzing атака?

Fuzzing, fuzz test или fuzzing атака е техника за автоматизирано софтуерно тестване, използвана за подаване на произволни, неочаквани или невалидни данни (наречени fuzz) в програма. Програмата се следи за необичайно или неочаквано поведение като препълване на буфер, сривове, изтичане на памет, спиране на нишки и нарушения на достъпа за четене/запис. След това инструментът за размиване или фузър се използва за разкриване на причината за необичайното поведение.

Fuzzing се основава на предположението, че всички системи съдържат грешки, чакащи да бъдат открити, и може да им се даде достатъчно време и ресурси за това. Повечето системи имат много добри парсери или предотвратяване на валидиране на въвеждане киберпрестъпници от използване на всякакви хипотетични грешки в програма. Въпреки това, както споменахме по-горе, покриването на всички ъглови случаи по време на разработката е трудно.

Fuzzers се използват в програми, които приемат структуриран вход или имат някакъв вид граница на доверие. Например, програма, която приема PDF файлове, ще има известно валидиране, за да гарантира, че файлът има разширение .pdf и анализатор за обработка на PDF файла.

Един ефективен fuzzer може да генерира входове, достатъчно валидни, за да преминат тези граници, но достатъчно невалидни, за да предизвикат неочаквано поведение по-надолу в програмата. Това е важно, защото самото преминаване през проверките не означава много, ако не се причиняват допълнителни вреди.

Fuzzers откриват вектори на атаки, много подобни и включващи подобни на SQL инжектиране, междусайтови скриптове, препълване на буфер и атаки за отказ на услуга. Всички тези атаки са резултат от подаването на неочаквани, невалидни или произволни данни в системата. 

 

Видове фузъри

Фузърите могат да бъдат класифицирани въз основа на някои характеристики:

  1. Атакувайте цели
  2. Метод за създаване на мъх
  3. Осъзнаване на входната структура
  4. Познаване на структурата на програмата

1. Атакувайте цели

Тази класификация се основава на вида платформа, която fuzzer се използва за тестване. Fuzzers обикновено се използват с мрежови протоколи и софтуерни приложения. Всяка платформа има определен тип входни данни, които получава, и следователно изисква различни типове размити.

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

Fuzzers, работещи с комуникационни протоколи, трябва да се справят с пакети. Fuzzers, насочени към тази платформа, могат да генерират подправени пакети или дори да действат като проксита, за да променят прихванатите пакети и да ги възпроизвеждат.

2. Метод за създаване на мъх

Fuzzers също могат да бъдат класифицирани въз основа на това как създават данни, с които да се размиват. В исторически план fuzzers създават fuzz чрез генериране на произволни данни от нулата. Така първоначално го е направил професор Бартън Милър, инициаторът на тази техника. Този тип fuzzer се нарича a базиран на поколение fuzzer.

Въпреки това, въпреки че теоретично може да се генерират данни, които ще заобиколят границата на доверие, това ще отнеме значително време и ресурси. Следователно този метод обикновено се използва за системи с прости входни структури.

Решение на този проблем е да се видоизменят данни, за които е известно, че са валидни, за да се генерират достатъчно валидни данни, за да преминат граница на доверие, но достатъчно невалидни, за да причинят проблеми. Добър пример за това е a DNS fuzzer който взема име на домейн и след това генерира голям списък с имена на домейни, за да открие потенциално злонамерени домейни, насочени към собственика на посочения домейн.

Този подход е по-умен от предишния и значително стеснява възможните пермутации. Fuzzers, които използват този метод, се наричат базирани на мутации fuzzers

Има трети по-скорошен метод, който използва генетични алгоритми за събиране на оптималните размити данни, необходими за изкореняване на уязвимостите. Той работи, като непрекъснато усъвършенства своите размити данни, като взема предвид ефективността на всеки тестови данни, когато се въвежда в програма. 

Най-лошите набори от данни се премахват от набора от данни, докато най-добрите се променят и/или комбинират. След това новото поколение данни се използва отново за размито тестване. Тези fuzzers се наричат фузъри, базирани на еволюционни мутации.

3. Познаване на входната структура

Тази класификация се основава на това дали fuzzer е наясно и използва активно входната структура на програмата при генериране на fuzz данни. А тъп пушач (размиващ елемент, който не е наясно с входната структура на програмата) генерира размити по предимно случаен начин. Това може да включва както поколение, така и базирани на мутация размити. 


Ако на fuzzer бъде предоставен входният модел на програма, fuzzer може след това да се опита да генерира или промени данни, така че да съответстват на предоставения входен модел. Този подход допълнително намалява количеството ресурси, изразходвани за генериране на невалидни данни. Такъв fuzzer се нарича a интелигентен fuzzer.

4. Познаване на структурата на програмата

Fuzzers могат също да бъдат класифицирани въз основа на това дали са наясно с вътрешната работа на програмата, която размятат, и да използват това знание, за да подпомогнат генерирането на fuzz данни. Когато fuzzers се използват за тестване на програма, без да се разбира нейната вътрешна структура, това се нарича тестване в черна кутия. 

Fuzz данните, генерирани по време на тестване на черна кутия, обикновено са произволни, освен ако fuzzer е базиран на еволюционна мутация fuzzer, където той „се учи“, като наблюдава ефекта от своя fuzzing и използва това информация за да прецизира своя набор от размити данни.

От друга страна, тестването в бяла кутия използва модел на вътрешната структура на програмата за генериране на размити данни. Този подход позволява на fuzzer да стигне до критични места в програмата и да я тества. 

Популярни инструменти за Fuzzing

Има много размити инструментите използвани от тестери на писалки. Някои от най-популярните са:

Ограничения на Fuzzing

Въпреки че Fuzzing е наистина полезна техника за тестване на писалка, тя не е без недостатъци. Някои от тях са:

  • Отнема доста дълго време за бягане.
  • Сривове и други неочаквани поведения, открити по време на тестване на черна кутия на програма, могат да бъдат трудни, ако не и невъзможни за анализ или отстраняване на грешки.
  • Създаването на шаблони за мутация за базирани на интелигентни мутации fuzzers може да отнеме много време. Понякога може дори да не е възможно поради това, че входният модел е патентован или неизвестен.

 

Въпреки това, това е доста полезен и необходим инструмент за всеки, който иска да открие грешки преди лошите.

Заключение

Fuzzing е мощна техника за тестване на писалка, която може да се използва за разкриване на уязвимости в софтуера. Има много различни видове фузъри и непрекъснато се разработват нови фузъри. Въпреки че размиването е невероятно полезен инструмент, той има своите ограничения. Например, fuzzers могат да намерят толкова много уязвимости и могат да изискват доста ресурси. Въпреки това, ако искате да изпробвате тази невероятна техника сами, ние имаме безплатен DNS Fuzzer API, който можете да използвате на нашата платформа. 

И така, какво чакате? 

Започнете да размивате днес!

Конфигуриране на Tor Browser за максимална защита

Конфигуриране на Tor Browser за максимална защита

Конфигуриране на браузъра Tor за максимална защита Въведение Защитата на вашата онлайн поверителност и сигурност е от първостепенно значение и един ефективен инструмент за постигане на това е Tor

Прочети повече »
Как да декриптирате хешове

Как да декриптирате хешове

Как да декриптирате хешове Въведение Hashes.com е стабилна платформа, широко използвана при тестване за проникване. Предлага набор от инструменти, включително хеш идентификатори, хеш верификатор,

Прочети повече »