Mi az a Fuzzing?

Mi a fuzzing

Intro: Mi az a Fuzzing?

2014-ben a kínai hackerek feltörték a közösségi egészségügyi rendszereket, egy profitorientált amerikai kórházlánc, és 4.5 millió beteg adatait lopta el. A hackerek kihasználták a Heartbleed nevű hibát, amelyet néhány hónappal a feltörés előtt fedeztek fel az OpenSSL kriptográfiai könyvtárban.

A Heartbleed egy példa a támadási vektorok egy osztályára, amely lehetővé teszi a támadók számára, hogy hibásan formázott kérések küldésével hozzáférjenek a célponthoz, és elég érvényesek ahhoz, hogy átmenjenek az előzetes ellenőrzéseken. Míg az alkalmazás különböző részein dolgozó szakemberek mindent megtesznek annak biztonsága érdekében, lehetetlen minden olyan sarokesetre gondolni, amely tönkreteheti vagy sebezhetővé teheti az alkalmazást a fejlesztés során.

Itt jön a képbe a „fuzzing”.

Mi az a fuzzing támadás?

A fuzzing, a fuzz tesztelés vagy a fuzzing támadás egy automatizált szoftvertesztelési technika, amelyet véletlen, váratlan vagy érvénytelen adatok (úgynevezett fuzz) betáplálására használnak egy programba. A program figyeli a szokatlan vagy váratlan viselkedéseket, például a puffertúlcsordulást, az összeomlásokat, a memóriaszivárgást, a szálak lefagyását és az olvasási/írási hozzáférési jogsértéseket. Ezután az elmosó eszközt vagy fuzzert használják a szokatlan viselkedés okának feltárására.

A fuzzing azon a feltételezésen alapul, hogy minden rendszer tartalmaz felderítésre váró hibákat, és elegendő időt és erőforrást lehet kapni ehhez. A legtöbb rendszernek nagyon jó elemzője vagy bemeneti érvényesítés-gátlója van kiberbűnözők attól, hogy kihasználja a programban található esetleges hibákat. Azonban, ahogy fentebb említettük, a fejlesztés során nehéz minden sarok esetet lefedni.

A fuzzereket olyan programokon használják, amelyek strukturált bemenetet vesznek fel, vagy valamilyen bizalmi határral rendelkeznek. Például egy PDF-fájlokat elfogadó programnak van némi ellenőrzése annak biztosítására, hogy a fájl .pdf kiterjesztéssel és értelmezővel rendelkezzen a PDF-fájl feldolgozásához.

Egy hatékony fuzzer képes olyan bemeneteket generálni, amelyek elég érvényesek ahhoz, hogy átlépjék ezeket a határokat, de elég érvénytelenek ahhoz, hogy váratlan viselkedést idézzenek elő a programban. Ez azért fontos, mert a hitelesítések túllépése nem jelent sokat, ha nem okoz további károkat.

A fuzzerek olyan támadási vektorokat fedeznek fel, amelyek nagyon hasonlóak az SQL-injektáláshoz, a helyek közötti parancsfájlokhoz, a puffertúlcsorduláshoz és a szolgáltatásmegtagadási támadásokhoz, és magukban foglalják azokat. Mindezek a támadások a váratlan, érvénytelen vagy véletlenszerű adatok rendszerbe való betáplálásának eredménye. 

 

Fuzzerek típusai

A fuzzereket néhány jellemző alapján osztályozhatjuk:

  1. Célok támadása
  2. Fuzz létrehozási módszer
  3. A bemeneti struktúra ismerete
  4. A program felépítésének ismerete

1. Célpontok támadása

Ez a besorolás azon alapul, hogy a fuzzert milyen platformon tesztelik. A fuzzereket általában hálózati protokollokhoz és szoftveralkalmazásokhoz használják. Minden platformnak van egy bizonyos típusú bemenete, amelyet kap, és ezért különböző típusú fuzzereket igényel.

Például, amikor alkalmazásokkal foglalkozunk, minden összezavarási kísérlet az alkalmazás különböző beviteli csatornáin történik, mint például a felhasználói felületen, a parancssori terminálon, az űrlapokon/szövegbeviteleken és a fájlfeltöltéseken. Tehát a fuzzer által generált összes bemenetnek meg kell egyeznie ezekkel a csatornákkal.

A kommunikációs protokollokkal foglalkozó fuzzereknek csomagokkal kell foglalkozniuk. Az ezt a platformot megcélzó fuzzerek hamisított csomagokat generálhatnak, vagy akár proxyként is működhetnek az elfogott csomagok módosításához és újrajátszásához.

2. Fuzz létrehozási módszer

A fuzzereket aszerint is besorolhatjuk, hogy hogyan hoznak létre adatokat a fuzzoláshoz. Történelmileg a fuzzerek véletlenszerű adatokat generáltak a semmiből. Barton Miller professzor, a technika elindítója kezdetben így csinálta. Ezt a típusú fuzzert a generáció alapú fuzzer.

Mindazonáltal, bár elméletileg lehet olyan adatokat generálni, amelyek megkerülik a bizalmi határokat, ehhez jelentős időre és erőforrásokra lenne szükség. Ezért ezt a módszert általában egyszerű bemeneti struktúrájú rendszerekben használják.

A probléma megoldása az érvényesnek ismert adatok mutációja, hogy olyan adatokat állítsanak elő, amelyek elég érvényesek ahhoz, hogy átlépjék a megbízhatósági határt, de elég érvénytelenek ahhoz, hogy problémákat okozzanak. Jó példa erre a DNS-fuzzer amely felvesz egy tartománynevet, majd létrehoz egy nagy listát a tartománynevekről, hogy észlelje a potenciálisan rosszindulatú tartományokat, amelyek a megadott tartomány tulajdonosát célozzák.

Ez a megközelítés okosabb, mint az előző, és jelentősen leszűkíti a lehetséges permutációkat. Az ezt a módszert alkalmazó fuzzereket ún mutáció alapú fuzzerek

Létezik egy harmadik, újabb módszer, amely genetikai algoritmusokat használ a sebezhetőségek kiküszöböléséhez szükséges optimális fuzz adatok konvergálására. Úgy működik, hogy folyamatosan finomítja a fuzz-adatait, figyelembe véve az egyes tesztadatok teljesítményét, amikor egy programba betáplálják őket. 

A legrosszabbul teljesítő adatkészleteket eltávolítják az adatkészletből, míg a legjobbakat mutálják és/vagy kombinálják. Az adatok új generációját ezután újra fuzz tesztre használják. Ezeket a fuzzereket úgy hívják evolúciós mutáció alapú fuzzerek.

3. A bemeneti struktúra tudatossága

Ez a besorolás azon alapul, hogy a fuzzer ismeri-e és aktívan használja-e egy program bemeneti struktúráját a fuzz adatok generálásához. A buta fuzzer (egy fuzzer, amely nem ismeri a program bemeneti szerkezetét) többnyire véletlenszerűen generál fuzzt. Ez magában foglalhatja a generáláson és a mutáción alapuló fuzzereket is. 


Ha egy fuzzer egy program bemeneti modelljével van ellátva, a fuzzer megpróbálhat adatokat generálni vagy mutálni úgy, hogy azok megfeleljenek a megadott bemeneti modellnek. Ez a megközelítés tovább csökkenti az érvénytelen adatok generálására fordított erőforrások mennyiségét. Az ilyen fuzzert a okos fuzzer.

4. A program felépítésének ismerete

A fuzzereket aszerint is besorolhatjuk, hogy tisztában vannak-e az általuk fuzzírozott program belső működésével, és ezt a tudatosságot a fuzz adatok generálásának elősegítésére használják. Ha fuzzereket használnak egy program tesztelésére anélkül, hogy megértenék annak belső szerkezetét, ezt feketedobozos tesztelésnek nevezik. 

A black-box tesztelés során generált fuzz adatok általában véletlenszerűek, kivéve, ha a fuzzer egy evolúciós mutáció alapú fuzzer, ahol „tanul” azáltal, hogy figyeli a fuzzer hatását és ezt használja. információ hogy finomítsa a fuzz adatkészletét.

A fehérdobozos tesztelés viszont a program belső struktúrájának modelljét használja a fuzz adatok generálásához. Ez a megközelítés lehetővé teszi, hogy a fuzzer elérje a program kritikus helyeit, és tesztelje azt. 

Népszerű Fuzzing eszközök

Sok elmosódott szerszámok kint a tolltesztelők használják. Néhány a legnépszerűbbek közül:

A Fuzzing korlátai

Noha a Fuzzing egy igazán hasznos tolltesztelési technika, nem mentes a hibáitól. Ezek közül néhány a következő:

  • Elég hosszú ideig tart a futás.
  • A program feketedobozos tesztelése során észlelt összeomlásokat és egyéb váratlan viselkedéseket nehéz, ha nem lehetetlen elemezni vagy hibakeresni.
  • A mutációs sablonok létrehozása intelligens mutáció alapú fuzzerekhez időigényes lehet. Néha előfordulhat, hogy ez nem is lehetséges, mivel a bemeneti modell védett vagy ismeretlen.

 

Mindazonáltal ez egy nagyon hasznos és szükséges eszköz mindenkinek, aki a rosszfiúk előtt szeretné felfedezni a hibákat.

Következtetés

A fuzzing egy hatékony tolltesztelési technika, amely felhasználható a szoftverek sebezhetőségeinek feltárására. Sokféle fuzzer létezik, és folyamatosan új fuzzereket fejlesztenek ki. Bár a fuzzing hihetetlenül hasznos eszköz, megvannak a korlátai. Például a fuzzerek csak annyi sebezhetőséget tudnak találni, amelyek meglehetősen erőforrásigényesek lehetnek. Ha azonban saját maga szeretné kipróbálni ezt a csodálatos technikát, nálunk a ingyenes DNS Fuzzer API, amelyet platformunkon használhat. 

Nos akkor mire vársz még? 

Kezdje el a fuzzolást még ma!