DistFuzz
Programm
Nimi on küll beta, sest mul on plaanis seda edasi arendada, kuid reaalselt on kõik sellel tasemele vajalik programmis olemas. Kasutajaõpetus jms tulevad eraldi.
Kirjeldus
Programmi näol on tegemist distributed fuzzeriga, ehk siis programmiga, mis on võimeline tegema valmistarkvara sisendite (antud juhul ainult failide) "rumalat" fuzzimist korraga mitme masina peal, olles samal ajal juhitav kesksest kohast. Programm koosneb kahest osast. Üheks on kliendi rakendused, mis töötavad mitmete masinate pealt ja saavad käsklusi kesksest kohast. Teiseks on serveri rakendus, mis juhib kliendi rakenduste tööd.
Eesmärk
Kuna fuzzimise abil turvavigade leidmisel on väga oluliseks testitavate sisendite hulk, siis on mõistlik teostada fuzzimist võimalikult paljude masinate peal üheaegselt. See muudab aga fuzzimise juhtimise, kontrollimise ja monitoorimise väga ebamugavaks. Antud programm peaks seda tegevust oluliselt lihtsustama, andes võimaluse fuzzimist juhtida ning tulemusi näha kesksest kohast. Programm peab võimaldama serveri kaudu testimise mahte automaatselt laiali jaotada ning leitud tulemid kokku korjata. Samuti peab programm võimaldama seadistada testimise parameetreid, korduste hulki ja muid omadusi.
Analüüs
Kuna tarkvara koosneb kahest osast, siis analüüsin rakenduse kliendi ja serveri poolt eraldi, sest kuigi nad on tükid samast tarkvarast, siis neil ühised osad praktiliselt puuduvad (v.a. andmevahetuse osa loomulikult).
Klient
Klient tarkvara on lihtne konsooli rakendus, mis käivitades vajab sisendina infot keskserveri kohta (IP aadress ja port). Selle alusel võtab klient peale käivitamist ühendust serveriga ja asub ootama käsklusi. Käsklused, mis temani jõuavad, koosnevad mitmest osast:
1) Info testitava programmi kohta (tema asukoht süsteemis, maksimaalne käivitusaeg, viis kuidas programmi kokku jooksmist tuvastatakse jne)
2) Info testimise moodulite kohta (esialgu on arvatavasti kõigest 1 moodul), mis sisaldab infot tehtavate muudatuste arvu ja kuju osas
3) Fail, mida asutakse muutma
Peale eelnevalt kirjeldatud info saamist, hakkab kliendirakendus valitud mooduli abil panema toime muudatusi serverilt saadud failis ning kasutama tulemuseks
saadud faili testitava programmi vastu. Kui programm kokku jookseb, siis saadab kliendirakendus selle põhjustanud faili serverisse. Samuti teavitab rakendus
pidevalt serverit sellest, kui kaugel ta testimisega on.
Kui rakendus töö serverilt saadud andmetega lõptab, siis küsib ta serverilt uusi testandmeid.
Server
Serveri puhul on tegemist graafilise kasutajaliidesega varustatud rakendusega, mis saab kasutajalt järgnevad sisendid:
1) Info testitava programmi kohta (tema asukoht süsteemis, maksimaalne käivitusaeg, viis kuidas programmi kokku jooksmist tuvastatakse jne)
2) Info testimise moodulite kohta (esialgu on arvatavasti kõigest 1 moodul), mis sisaldab infot tehtavate muudatuste arvu ja kuju osas
3) Failide nimekiri mida kasutatakse testimiseks
Need saanud, asub server ootama kliente kes temaga ühenduksid. Peale ühenduse tekkimist saadab server kliendile punktides 1 ja 2 kirjeldatud andmed ning ühe
failidest punktist 3 (igale kliendile eraldi faili). Peale seda hoiab server iga kliendiga ühendust üleval ning saab selle kaudu pidevat tagasisidet olukorrast.
Kui mõni klient avastab faili mis põhjustab testitava programmi kokku jooksmist, siis võtab server vastu info selle kohta ja salvestab kokku jooksmise tekitanud
faili enda süsteemi. Kui klient on töö ühe sisendfailiga lõpetanud, siis annab server talle uue faili kolmanda punkti nimekirjast (ühtegi faili ei anta mitu korda
välja).
Kui kõik sisendfailid on klientide poolt läbi käidud, siis kuvab server kasutajale raporti, kus toob välja tehtud testide hulga, aja ja avastatud kokku jooksmiste
koguarvu ning seda põhjustanud failid. Samuti saab kasutaja kogu seda infot jälgida jooksvalt testimise ajal.
Funktsionaalsus mis peab olema
Kliendi osa
Kliendi rakendus peab olema võimeline jooksutama suvalisi rakendusi ning detekteerima nende crashe
Kliendi rakendus peab olema võimeline säilitama rakenduse crashi loonud olukorra ning selle taasloomiseks vajaliku info
Kliendi rakendus peab olema võimeline saama kõik enda tööks vajaliku info ja andmed serverist
Kliendi rakendus peab olema võimeline saatma testimise tulemid serverisse
Serveri osa
Server peab võimaldama kliendi rakenduste jälgimist
Server peab võimaldama kliendi rakendustele testimiseks vajaliku info edastamise
Server peab võimaldama kliendi rakenduste testide tulemuste säilitamist
Funktsionaalsus mis võiks olla
Kliendi osa
Erinevad crashide detekteerimise võimalused
Erinevad andmete fuzzimise meetodid
Serveri osa
Kliendite eraldi ja koos seadistamised
Klientide jaotamine ja grupeerimine
Testiplaani etteandmine failina
Võimalikud probleemid
Kõige suuremaid probleeme võib tekitada kliendi ja serveri vaheline suhtlus, mis peab edasi andma väga erinevat infot, alates suurtest failides ja lõpetades seadistus konfiguratsiooni ning monitooringuks vajaliku infoga.
Töö protsess
Kuna tegemist oli üksinda tehtud projektiga, siis väga palju rääkida ei ole töö jaotumise jms osas. Probleeme üldiselt peale ajapuuduse ei olnud, kuid siiski võttis andmevahetuse sünkrooni saamine tiba aega ning siiani tekib mõningatel juhtudel probleeme, kus üks pooltest arvab, et objekt on edukalt teisele poole üle serialiseeritud, kuid teine pool pole seda sellisel kujul kätte saanud. See lõppeb socketi timeoutiga ning kuna selline olukord võib ka muudel juhtudel tekkida ning see ei mõjuta programmi toimimist (ühendus luuakse tagasi üles ja tööd jätkatakse õigelt kohalt), siis ei ole see praegusel juhul väga suur prioriteet.