You are on page 1of 13

Evolutivni pristup automatskoj

analizi sigurnosnih propusta u


softveru
Uvod

► 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

You might also like