NAPAD CRLF UMETANJEM
Što je to CRLF umetanje?
Pojam CRLF (eng. CR=Carriage Return, LF=Line Feed) predstavlja oznaku za kraj retka teksta. Sastoji se od kombinacije dva ACSII znaka koji se ne prikazuju na ekranu, ali se vrlo često koriste kod operacijskih sustava Windows. Na operacijskim sustavima Linux/UNIX kraj retka označava se samo korištenjem ACSII znaka Line Feed.
Kombinacija tih znakova koristi se kod pritiskanja tipke „Enter“ na tipkovnici. Ovisno o aplikaciji koja se upotrebljava, pritiskanje te tipke obično označava početak novog retka ili slanje neke naredbe.
CRLF injection napad se događa kada napadač umeće CRLF naredbe u sustav. Ova vrsta napada nije tehnološki sigurnosni propust u operacijskom sustavu ili poslužitelju, nego ovisi o načinu na koji je web stranica razvijena. Vrlo često nepažnjom ili neznanjem razvojnih programera nastaju ranjive web aplikacije koje zlonamjerni korisnici iskorištavaju za umetanje CRLF naredbi.
Što može zlonamjerni napadač učiniti ranjivoj web stranici?
Kada napadač pronađe web aplikaciju ranjivu na CRLF injection napad, mogućnost iskorištavanja ovisi o njezinoj strukturi i slabostima.
Kako će određeni nedostatak djelovati na web stranicu ovisi o tipu web stranice. Određeni nedostatak može značajno ugroziti sigurnost jedne web aplikacije, dok za drugu on može predstavljati sasvim nebitnu pogrešku. Sve ovisi o tome omogućuje li korisnicima upravljanje web aplikacijom.
1. Primjer CRLF injection napada
Bilo kakav korisnički unos može predstavljati sigurnosni problem ako se ne provjeri na odgovarajući način.
Slijedi primjer jedne dnevničke datoteke (eng. log file):
|
Date |
UserName |
Message |
|
25/07/2005-14:23:47 |
GoodSurfer |
I perfectly agree! |
Ovaj dnevnički zapis je potpuno uobičajen, no ukoliko korisnik unese nešto poput:
I also agree with you..\n25/07/2005-15:00:00 AnotherSurfer What are you talking about!?
Dnevnički zapis bi tada izgledao:
|
Date |
UserName |
Message |
|
25/07/2005-14:23:47 |
GoodSurfer |
I perfectly agree! |
|
25/07/2005-14:42:19 |
BadSurfer |
I also agree with you.. |
|
25/07/2005-15:00:00 |
AnotherSurfer |
What are you talking about!
|
S obzirom da ulazni korisnički podaci nisu pravilno filtrirani, zlonamjerni korisnik dodavanjem CRLF znakova na kraj svog unosa stvara lažni zapis u dnevničkoj datoteci.
2. Primjer CRLF injection napada
Mnogi mrežni protokoli, uključujući i HTTP, vrlo često koriste kombinaciju znakova CR i LF jer je svaka linija protokola odvojena naredbom CRLF. Ako je zlonamjerni korisnik u mogućnosti definirati HTTP zaglavlje, onda postoji velika šansa da će moći prevariti poslužitelj da izvede nepredviđenu akciju.
Npr. e-mail, news (NNTP) i HTTP zaglavlja se temelje na strukturi „Ključ: Vrijednost“ (eng. Key: Value), a kraj svake linije koda definiran je s CRLF oznakom. HTTP zaglavlje „Location“ koristi se za preusmjeravanje na drugi URL dok se zaglavlje „Set-Cookie“ koristi za kolačiće (eng. Cookie). Ako se ulazni podaci ne provjeravaju temeljito, CR i LF znakovi mogu biti umetnuti u ulaznim korisničkim zahtjevima. Na taj način se upravlja s web skriptama kako bi one radile i neke druge stvari osim onih za koje su prvotno namijenjene.
Ako ulaz nije odgovarajuće provjeren i web skripta konstruira preusmjeravanje znakovnim nizom:
$ url% 0d% 0a
Mi možemo preusmjeriti korisnika na drugu web stranicu postavljanjem kolačića pomoću sljedećeg znakovnog niza $ url:
http://www.i-was-redirected.com/% 0d% 0aSet-Cookie: Ovlašteni = yes% 0d% 0aReferer: www.somesite.com
Ako napadač može spremiti (eng. bookmark) URL-ove na koje je drugi korisnik bio preusmjeren, uključujući i kolačiće s bitnim informacijama, to može biti ozbiljan sigurnosni problem.
Kako ispitati ranjivost na CRLF napad?
Najbolji način provjere ranjivosti web stranice i aplikacija na CRLF injection napad je uporabom skenera web ranjivosti. On će pretraživanjem cijele Vaše web stranice automatski ispitati ranjivost na CRLF napad. Po završetku skeniranja naznačiti će ranjive URL lokacije i skripte te javiti kako se navedena ranjivost može jednostavno popraviti.
Sprječavanje CRLF napada
Najbolji način za obranu od CRLF napada je filtriranje svih ulaznih korisničkih podataka, a naročito posebnih meta znakova (onih koji se ne prikazuju na ekranu). Na ovaj način se osigurava da samo valjani podaci budu proslijeđeni poslužitelju.
|