Directory Traversal napad
Što je to Directory Traversal napad?
Pravilna provjera pristupa web sadržajima ključna je za sigurnost web poslužitelja. Directory Traversal je način iskorištavanja ranjivosti web aplikacija putem HTTP protokola. Zlonamjernim korisnicima HTTP protokol može omogućiti pristup datotekama, kojima u normalnim okolnostima pristup nije moguć te izvođenje naredbi izvan tzv. root direktorija.
Dvije ključne razine sigurnosnih mehanizama web poslužitelja su:
-
Liste za provjeru pristupa (eng. Access Control Lists)
-
Root direktorij
U procesu autorizacije koristi se lista za provjeru pristupa. To je lista koju koristi administrator web poslužitelja da bi određenim korisnicima omogućio pristup, izmjenu ili izvođenje određenih datoteka i programa na poslužitelju.
Root direktorij je specifičan direktorij na poslužiteljskom sustavu datoteka u kojem su mogućnosti korisnika ograničene. Korisnici nisu u mogućnosti pristupiti nijednom direktoriju iznad root-a.
Primjerice, na Windowsima uobičajeni root direktorij web poslužitelja IIS je „C:\Inetpub\wwwroot“. Ako je to korisnički root dirketorij on nema pristup direktoriju „C:\Windows“, ali ima pristup direktoriju „C:\Inetpub\wwwroot\news“ i svakom drugom direktoriju ili datoteci koji se nalaze ispod root direktorija (pod uvjetom da je korisniku omogućen pristup preko ACL liste).
Root direktorij korisniku onemogućava pristup osjetljivim podacima na poslužitelju, poput pristupa programu „cmd.exe“ na operacijskim sustavima Windows ili datoteci passwd na Linux/UNIX platformama.
Ova ranjivost se obično nalazi u samoj programskoj podršci web poslužitelja ili u kodu web aplikacije.
Sve što je potrebno zlonamjernom korisniku za izvođenje Directory Traversal napada je web preglednik i znanje kako i gdje pronaći sve uobičajene datoteke i direktorije sustava.
Što zlonamjerni napadač može napraviti ako je web stranica ranjiva?
Zlonamjerni korisnik može iskoristiti sustav koji posjeduje Directory Traversal ranjivost za pristup svim direktorijima iznad root direktorija. To mu daje mogućnost dohvaćanja datoteka kojima inače ne bi mogao pristupiti, ili još opasnije, omogućuje mu izvođenje naredbi na web poslužitelju, što može dovesti do potpune kompromitacije sustava.
Ovisno o tome kako je ostvaren pristup web stranicama, zlonamjerni korisnik će moći izvoditi naredbe predstavljajući se kao korisnik koji ima ovlašteni pristup web stranici. Zato sve ovisi o pravima koja korisnik web stranice posjeduje.
Primjer Directory Traversal napada preko koda web aplikacije
Kod web aplikacija s dinamičkim stranicama ulazni podaci se uglavnom primaju GET ili POST metodama. Ovdje se nalazi primjer URL-a koji sadrži GET zahtjev:
http://test.webarticles.com/show.asp?view=oldarchive.html
S ovim URL-om preglednik od poslužitelja zahtjeva dinamičku stranicu show.asp i s njim šalje parametar "view'' s vrijednošću "oldarchive.html". Nakon primanja zahtjeva web skripta show.asp dohvaća datoteku oldarchive.html s poslužiteljevog datotečnog sustava, izvodi ju i nakon toga šalje natrag pregledniku koji ju prikazuje korisniku. Zlonamjerni korisnik pretpostavlja da će skripta show.asp dohvatiti datoteke i šalje sljedeći URL:
http://test.webarticles.com/show.asp?view=../../../../../Windows/system.ini
Tada dinamička stranica dohvaća datoteku „system.ini“ i prikazuje ju korisniku. Izraz „../“ navodi sustav da ide u razinu iznad trenutne razine direktorija, što je uobičajena naredba operacijskog sustava. Zlonamjerni korisnik mora pogoditi za koliko se razina mora popeti da bi pronašao datoteku, ali to se jednostavno postiže metodom pokušaja i pogrešaka.
Primjer Directory Traversal napada preko web poslužitelja
Neovisno o ranjivostima u kodu, čak i sam web poslužitelj može biti otvoren za izravne Directory Traversal napade. Problem se može naći u samom programskom okruženju web poslužitelja ili unutar nekih skripti dostupnih na poslužitelju.
Iako su u zadnjim inačicama poslužiteljskih programa uklonjeni gotovo svi sigurnosni propusti, njihove starije (i ranjivije) inačice mogu se naći na mnogim računalima na Internetu. Neke od starijih inačica podložne su i na Directory Traversal ranjivosti. Iako možda koristite inačice poslužiteljskih programa koje ne posjeduju ranjivosti i dalje mogu postojati neke osjetljive web skripte i direktoriji dobro poznati zlonamjernim korisnicima.
Na primjer, URL zahtjev koji koristi poznati direktorij sa web skriptama poslužitelja IIS za kretanje direktorijima i izvršavanje naredbi može biti:
http://server.com/scripts/..%5c../Windows/System32/
cmd.exe?/c+dir+c:\
Zahtjev korisniku vraća listu svih datoteka u „C:\“ direktoriju izvođenjem datoteke za komunikaciju s operacijskim sustavima cmd.exe i pokretanjem naredbe ˝dir c:\˝. Oznaka %5c je izlazni kod web poslužitelja, koji služi za prikaz znakova. U ovom slučaju „%5c“ predstavlja znak ˝\˝.
Novija inačica poslužiteljskog programa IIS provjerava izlazne kodove i ne propušta ih. Međutim, neke starije inačice ne filtriraju te kodove u root direktorijima i zlonamjernim korisnicima dopuštaju izvođenje takvih naredbi.
Kako provjeriti ranjivost na Directory Traversal napade?
Najbolji način provjere ranjivosti Vaših web stranica ili aplikacija na Directory Traversal napade je korištenjem skenera web ranjivosti. Skener web ranjivosti pretražuje Vašu cijelu web stranicu i automatski provjerava osjetljivost na Directory Traversal napade. U slučaju pronalaska ranjivosti skener web ranjivosti ih prijavljuje i upućuje korisnike kako ih popraviti. Osim Directory Traversal ranjivosti skener web ranjivosti također provjerava ranjivosti na SQL injekciju, XXS i mnoge druge ranjivosti.
Sprječavanje Directory traversal napada
Prije svega provjerite jeste li instalirali zadnju inačicu Vašeg poslužiteljskog programa i da ste primijenili sve objavljene programske zakrpe.
Zatim, provjerite učinkovitost filtriranja svih korisničkih unosa. Uklonite sve osim dobro poznatih podataka i filtrirajte sve meta znakove. Sve to osigurava prosljeđivanje poslužitelju samo onih podataka koji su valjani.
|