DistFuzz: Difference between revisions

From ICO wiki
Jump to navigationJump to search
No edit summary
No edit summary
 
(21 intermediate revisions by the same user not shown)
Line 1: Line 1:
= Programm =
Nimi on küll beta, sest mul on plaanis seda edasi arendada, kuid reaalselt on kõik sellele tasemele vajalik programmis olemas.
[https://www.dropbox.com/s/u3tbazq8vewiixr/DistFuzz_beta.zip DistFuzz-Beta]
= Kirjeldus =
= 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.  
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===
=Eesmärk=
Kuna fuzzimise abil turvavigade leidmiseks on väga oluliseks läbi 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.
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=


===Funktsionaalsus mis peab olema===
==Kliendi osa==
==Kliendi osa==
Kliendi rakendus peab olema võimeline jooksutama suvalisi rakendusi ning detekteerima nende crashe
Kliendi rakendus peab olema võimeline jooksutama suvalisi rakendusi ning detekteerima nende crashe
Line 14: Line 60:


Kliendi rakendus peab olema võimeline saatma testimise tulemid serverisse
Kliendi rakendus peab olema võimeline saatma testimise tulemid serverisse
==Serveri osa==
==Serveri osa==
Server peab võimaldama kliendi rakenduste jälgimist
Server peab võimaldama kliendi rakenduste jälgimist
Line 23: Line 67:
Server peab võimaldama kliendi rakenduste testide tulemuste säilitamist
Server peab võimaldama kliendi rakenduste testide tulemuste säilitamist


===Funktsionaalsus mis võiks olla===
 
 
=Funktsionaalsus mis võiks olla=
==Kliendi osa==
==Kliendi osa==
Erinevad crashide detekteerimise võimalused
Erinevad crashide detekteerimise võimalused


Erinevad andmete fuzzimise meetodid
Erinevad andmete fuzzimise meetodid
==Serveri osa==
==Serveri osa==
Kliendite eraldi ja koos seadistamised
Kliendite eraldi ja koos seadistamised
Line 37: Line 81:
Testiplaani etteandmine failina
Testiplaani etteandmine failina


===Võimalikud probleemid===
 
 
=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.

Latest revision as of 12:31, 15 January 2014

Programm

Nimi on küll beta, sest mul on plaanis seda edasi arendada, kuid reaalselt on kõik sellele tasemele vajalik programmis olemas.

DistFuzz-Beta

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.