Web (link www) je tradicionalno jedan od najčešćih oblika korištenja osobnog računala, u tolikoj mjeri da su termini Internet i WWW postali sinonimi (premda nisu jedno te isto). Kao takav sadrži ogromnu količinu sadržaja, trenutno 20 milijardni indeksiranih stranica. Također, procjenjuje se da neindeksiranih stranica postoji nekoliko redova veličine toliko (procjene govore od 10 do 100 tisuća TB).
Usporedno s popularnošću weba rasla je i popularnost web browsera i web aplikacije kao oblika interakcije s korisnikom tj. klijentom. Budući da je većina web aplikacija poslovnog karaktera, vrlo je važno za pružatelja usluge (tj. vlasnika web aplikacije) da web stranicu nije moguće (ili je vrlo teško) zlorabiti.
Sve web aplikacije u pravilu su programi koji se izvršavaju na zahtjev web poslužitelja (eng. web server) uz predaju korisnički odabranih parametara. Poslužitelj dakle deligira izradu odgovora korisniku vanjskom programu. Takvi programi nazivaju se CGI skriptama (eng. Common Gateway Interface) i vraćaju rezultate izvršavanja poslužitelju koji tada prosljeđuje odgovor korisniku. Postoje i drugi modeli izgradnje web aplikacija (npr. pomoću poslužiteljskih modula – mod_php, mod_perl i sl.), međutim za potrebe diskusije o sigurnosti web aplikacija CGI skripte su dostatan primjer.
Web aplikacija kao usluga sastoji se od više komponenti, tj. tehnologija:
- baze podataka koja skladišti informacije,
- poslužitelja sadržaja koji korisniku (tj. korisnikovom pregledniku) pruža sadržaj te
- web preglednik koji na korisničkoj strani prikazuje sadržaj.
Svaku od komponenti moguće je ugroziti ukoliko web aplikacija nije izgrađena pravilno. Standardne ranjivosti web aplikacija jesu:
- udaljeno izvršavanje koda (eng. remote code execution) – ranjivost koja napadaču pruža mogućnost izvršavanja proizvoljnog koda na poslužiteljskom računalu (tj. mogućnost preuzimanja direktne kontrole nad računalom), najčešće putem neprovjerenog uvoza datoteke u tijelo CGI skripte (pomoću naredbi fopen, import i sl.),
- ubacivanje SQL naredbe (eng. SQL injection) – ranjivost koja napadaču pruža mogućnost direktne manipulacije podacima iz baze, najčešće putem neprovjerenog korisničkog unosa SQL naredbe u tijelo CGI skripte,
- ranjivost formatiranja niza znakova (eng. format string vuln.) – ranjivost koja napadaču omogućuje proizvoljno čitanje i pisanje po memoriji poslužitelja tj. mogućnost preuzimanja direktne kontrole nad računalom) , najčešće putem neprovjerenog korisničkog unosa u tijelo funkcije koja formatira niz znakova,
- XSS(eng. cross – site scripting) – ranjivost koja omogućuje napadaču da pomoću programskog koda koji se izvršava u korisničkom pregledniku neovlašteno preuzme korisničku sjednicu (predstavi se poslužitelju kao korisnik) te na taj način dobije pristup povjerljivim informacijama.
Alati za ispitivanje ranjivosti web aplikacija mogu raditi na dva principa. Prvi jest usporedba ponašanja stranice (zahtjeva i odgovora) sa poznatim obrascima ranjivosti, a drugi je nasumično ispitivanje (eng. fuzzying) tj. generiranje nasumičnih parametara (ulaza) za aplikaciju uz praćenje ponašanja aplikacije uz dane parametre. Prvi način često se naziva i glass-box ispitivanje (jer su korisniku vidljivi procesi i obrasci koji se testiraju dok se drugi način naziva black-box ispitivanje (jer su ulazi i izlazi nečitljivi korisniku).
Oba principa posjeduju značajan problem – lažno pozitivne pronalaske ranjivosti. Alat zbog krivog iščitavanja rezultata ili loših postavki testiranja može prijaviti ranjivost, iako ona zapravo ne postoji. U takvom slučaju na korisniku je da prosudi valjanost rezultata ručnom provjerom ponašanja aplikacije.
Svi alati koji će u ovom tekstu biti obrađeni su besplatni alati otvorenog koda. Također, svi su izdani pod GPL licencom (GPL). Niti jedan alat obrađen ovdje ne posjeduje dovoljno funkcionalnosti kako bi pronašao sve ranjivosti dane web aplikacije. Stoga se preporuča uporaba kombinacije alata.
Nikto
Nikto je alat za ispitivanje ranjivosti web aplikacija iz prve skupine, tj. skupine koja uspoređuje ponašanje web aplikacije sa obrascima poznatih ranjivosti. Trenutna inačica alata jest 2.1.4 izdana 20.2.2011. Alat je dostupan na svim platformama u obliku otvorenog koda koji se može prevesti u izvršne datoteke, međutim dostupan je u repozitorijima šire korištenih Linux distribucijama (Debian, RedHat ...).
Nikto se pokreće iz komandne linije te uz odabir pripadnih opcija ima mogućnosti pronalaska:
- uobičajenih loših postavki izvršnog okruženja,
- nesigurnih datoteka (CGI skripti) te
- neažurnih inačica poslužitelja i biblioteka.
Nikto posjeduje sljedeće značajne karakteristike:
- podržava SSL konekcije,
- podržava HTTP posredničke (eng. proxy) konekcije,
- mogućnost pogađanja standardnih korisničkih imena i lozinki,
- pogađanje podomena i
- detekcija okoline izvršavanja iz HTTP zaglavlja.
Slika 1. Prikaz pokretanja i procesa ispitivanja alata nikto
Naredba za pokretanje izvršavanja ispitivanja ranjivosti jest 'nikto –h hostname'gdje hostname označava URL web aplikacije koja se testira. Alat nakon pokretanja započinje ispitivanje te u realnom vremenu prijavljuje pronađene nedostatke.
Zanimljive opcije koje Nikto nudi jesu integracija u Nessus, poznati alat za ispitivanje ranjivosti, te mogućnost automatske parametrizacije ispitivanja. Alat tako može, ovisno o vrsti ispitivanja u izvršavanju, samostalno generirati parametre upita koje će se slati aplikaciji. Ukoliko se primjerice radi o ispitivanju loših početnih postavki, alat samostalno generira URL poddomene i puteve koje će ispitati.
Više informacija može se pronaći na unutar man stranica samog alata ili na službenim stranicama.
Wapiti
Wapiti je predstavnik druge skupine alata za ispitivanje ranjivosti, tj. alata koji nasumično generiraju upite, šalju ih web aplikaciji te analiziraju odgovor. Wapiti, budući da radi na opisani način, može (ili barem teži k tome) prepoznati ranjivosti koje nisu dokumentirane i definirane. Trenutna inačica alata jest 2.2.1 izdana u 12. mjesecu 2009. godine.
Alat je u mogućnosti otkriti većinu ranjivosti na način da umeće nasumične parametre u tijelo CGI skripte koja se izvršava. Aplikacija na svaki oblik korisničkog unosa odgovara dok Wapiti promatra odgovore aplikacije. Tako primjerice, ukoliko se radi o neprovjerenom uvozu datoteke u tijelo skripte, alat šalje upit koji bi primorao aplikaciju na određeno ponašanje (dugu obradu zahtjeva, ne javljanje na zahtjev i sl.). Alat zatim uspoređuje stvarno ponašanje sa definiranim, te izvještava korisnika o mogućoj ranjivosti.
Slika 2. Prikaz stanja ispitivanja alata wapiti
Wapiti se pokreće iz komandne linije sa naredbom 'wapiti.py http://www.hostname.com/',nakon čega se u realnom vremenu korisniku počinje prijavljivati stanje ispitivanja.
Alat je uz pomoć opisanog načina ispitivanja u mogućnosti otkriti:
- greške u rukovanju datotekama (već spomenuti fopen, import i sl.),
- napade putem unosa proizvoljnog SQLa,
- XSS napade,
- CRLFnapade.
Alat je također u mogućnosti generirati sumarna izvješća o pronađenim ranjivostima.
Slika 3. Izvješće generirano od alata wapiti
Više tehničkih informacija o alatu možete saznati na službenim stranicama.
Posljednje sigurnosne preporuke