► Korisnički unos može dovesti do zloupotrebe sigurnosnih
propusta u softveru ► Analiza konteksta izvršavanja zahteva vreme ► Umesto toga koriste se softverski alati za sprovođenje napada (exploit) ► Evolutivni pristup zasniva se na rasplinutom testiranju softvera i genetskim algoritmima Rasplinuto testiranje (Fuzz testing)
► Testiranjem se utvrđuju razlike između stvarnih i očekivanih uslova rada
► Osnovne strategije testiranja: 1. White box testing 2. Black box testing 1. White box testing (VERIFIKACIJA) - utvrđivanje da li se proces razvoja odvija u skladu sa zadatim uslovima ► Podrazumeva dostupnost izvornog koda i njegovu analizu 2. Black box testing (VALIDACIJA) - utvrđivanje da li softver odgovara korisničkim zahtevima ► Dostupna je specifikacija, ali ne i izvorni kod ► Utvrđuje da li stvarni odziv programa odgovara očekivanom Rasplinuto testiranje (Fuzz testing) ► White box testing – Skupo i vremenski zahtevno ► Rasplinuto testiranje zasnovano je na principu crne kutije
► Graf funkcijskih poziva
► 1 čvor – 1 funkcija ► Čvor označava funkciju podložnu napadu (npr. gets,scanf… ) ► Cilj je utvrđivanje ulaznih podatka koji vode do Izvođenje grafa funkcijskih poziva ► Konstruisanje grafa - Reverzni inženjering ► Primer: Izvođenje grafa na osnovu analize stanja pozivnog steka u toku izvršenja programa ► Izvorni kod: Prosleđivanje parametra 1 Prosleđivanje parametra 2 Zaključak
► Praćenjem stanja na steku mogu se utvrditi redosledi pozivanja funkcija
► Prosleđivanje samo neparnih brojeva detektovalo bi samo čvorove main i f2, kao i granu koja ih spaja ► Generisanje slučajnih ulaza – Problem: 1. Vreme 2. Iskustvo 3. „Slepo napipavanje“ ► Kvalitet ulaznih podataka je ključan za izvođenje grafa funckijskih poziva
► Bez uvida u izvorni kod ne može se izvesti kompletan skup ulaznih argumenata ► Za izvođenje parcijalnog grafa nije potreban uvid u izvorni kod Tail call optimization
► Optimizacija repnih poziva funkcije
► Ugrađena komponenta nekih prevodioca – Ubrzava izvršavanje ► Može imati uticaj na organizaciju steka prilikom poziva funkcije ► Primer: funkcija fa poziva funkciju fb ► Bez sprovođenja optimizacije: Tail call optimization
► Primer: poslednja operacija u fa predstavlja poziv funkcije fb
► Povratna vrednost funkcije fb je i povratna vrednost funkcije fa ► Optimizacijom se konvertuje poziv funkcije fb u skok na adresu funkcije fb gde se sprovodi njeno izvršavanje, bez kreiranja novog okvira na steku za fb ► Instrukcija RET funkcije fb, predstavlja povratak iz funkcije fa ► Analizom stanja na pozivnom steku, ne može se zaključiti da funkcija fa poziva funkciju fb Tail call optimization