DistFuzz: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Line 13: Line 13:
Klient tarkvara on lihtne konsooli rakendus, mis käivitades vajab sisendina infot keskserveri kohta (IP aadress ja port). Selle alusel võtab 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:
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)
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
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
3) Fail, mida asutakse muutma


Peale eelnevalt kirjeldatud info saamist, hakkab kliendirakendus valitud mooduli abil panema toime muudatusi serverilt saadud failis ning kasutama tulemuseks
Peale eelnevalt kirjeldatud info saamist, hakkab kliendirakendus valitud mooduli abil panema toime muudatusi serverilt saadud failis ning kasutama tulemuseks
Line 21: Line 25:
pidevalt serverit sellest, kui kaugel ta testimisega on.
pidevalt serverit sellest, kui kaugel ta testimisega on.
Kui rakendus töö serverilt saadud andmetega lõptab, siis küsib ta serverilt uusi testandmeid.
Kui rakendus töö serverilt saadud andmetega lõptab, siis küsib ta serverilt uusi testandmeid.


==Server==
==Server==

Revision as of 22:12, 30 November 2013

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 peab server iga kliendiga ühendust üleval ning saab seda 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.