Mis on fuzz-testimine?

Hägutestimine ehk fuzzing on meetod kontrollimaks, kuidas arvutiprogramm või süsteem reageerib erinevatele, mõnikord juhuslikele sisenditele ja teabele. Protsess hõlmab teatud tüüpi andmete genereerimist, kas täiesti juhuslikult või teatud piirangute piires, ja seejärel nende andmete sisestamist programmi, et testida, kuidas see ootamatu teabega ümber käiakse. Kõige elementaarsem udutestimise vorm hõlmab juhusliku klahvivajutuste või märkide jada saatmist programmi ja kontrollimist, kas see töötleb neid õigesti. Fuzz-testi keerukam versioon kasutab struktureeritud andmeid, mida seejärel juhuslikult manipuleeritakse ja programmi saadetakse. Andmed võivad jõuda programmi süsteemisündmuste, klaviatuurisisendite, võrgusignaalide või isegi laaditavate failidena.

Arvutiprogrammis on erinevaid osi, mida saab fuzzi generaatoriga testida. Graafilist kasutajaliidest (GUI) saab testida, luues juhuslike hiire- ja klaviatuurisündmuste jada ning kontrollides, kas GUI suudab sisendiga hakkama saada ilma krahhi, hangumise või ootamatu ülesande täitmiseta. Võrguprotokolle saab testida, lubades fuzzi generaatoril juhuslikult muuta kehtiva andmepaketi osi ja seejärel tagada, et protokoll saaks pärast vigaste andmete saamist jätkata toimimist. Peaaegu iga programmi põhilisi sisendelemente saab kontrollida nende võime suhtes vigadele vastu seista, näiteks sisend, mis on salvestustüübi jaoks liiga pikk, oodatust erinevat tüüpi sisend ja millegipärast mittetäielik või vale sisend.

Arvutiturbetööstus saab kasutada fuzz-testimist tagamaks, et teatud süsteemides ei esineks ilmseid turvaauke. Seda saab teha arvutiturbe testimiseks mõeldud fuzzi generaatori abil. Need programmid püüavad kasutada süsteemi märksõnu, teadaolevaid administraatori vaikeparoole, programmi kasutatavate teekide funktsioone ja juhuslikke väljakutseid süsteemifunktsioonidele, et näha, kuidas programm reageerib.

Erinevat tüüpi fuzz-testimise tüüpe saab kohandada nii, et need jääksid teatud vahemikku või isegi testiks ainult teatud tüüpi sisendeid. See tähendab, et programmile võivad olla saadetud ainult kehtivad käsud, kuid need võivad olla mõttetus järjekorras. On olemas keerukamad fuzz-testiprogrammid, mis võivad võtta sihtprogrammi elemente ja neid manipuleerida, et tekitada olukordi, mida võidakse pahatahtlikult ära kasutada. See võib hõlmata tekitatud protsesside järjekorra muutmist, õiguste muutmist või põhiandmete ja teegifailide muutmist.

Hägutestimise lõpptulemus on näha, kas programm on turvaline ja käitub ootamatus olukorras nii, nagu peaks. Kui seda kasutatakse koos profileerimis- ja analüüsitarkvaraga, suudab see tuvastada ka mälulekkeid programmi valdkondades, nagu veakäsitlus või jõudluse kitsaskohad. Arvutiturbe korral saab õige seadistuse korral tabada ohtlikke probleeme, nagu ülevoolud, mis võivad süsteemi kahjustada. Fuzz-testimist ei saa aga kasutada ainsa tarkvara testimise meetodina ja see peab olema osa suuremast kvaliteedi tagamise ja tarkvara kontrollimise protsessist.