DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   phpAV v1.1 (php-cli) (http://www.devprotalk.com/showthread.php?t=8282)

milos.z 08. 01. 2010. 17:04

phpAV v1.1 (php-cli)
 
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:
Kôd:

user@host:~/Desktop$ ./phpAV-v1.1.php /opt/lampp/htdocs/
phpAV-v1.1
Milos Zivanovic [milosz.security@gmail.com]
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:
Kôd:

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:
Kôd:

http://www.packetstormsecurity.org/web/phpav-1.1.txt
pomoc, saveti, problemi: postujte u ovom thread-u ili saljite privatnu poruku

Ivan 08. 01. 2010. 21:56

Odlicno, bas sam skorije sa kolegom napisao slican skript za internu upotrebu. Ovakav skript u cron-u + email/sms obavestenje moze prilicno da doprinese brzom otkrivanju napada.

zidoo 10. 01. 2010. 15:01

Nice, samo napravi citanje definicija iz eksternog fajla, i da skenira JS/HTML code za poznate dosadne namete

milos.z 11. 01. 2010. 02:37

ne vidim poentu citanja iz eksternog fajla jer moze da se upise u isti, bas iz razloga sto 'definicija' ima malo. skripta je prvenstveno pravljena za otkrivanje php shell-ova, a za otkrivanje istih default-na konfiguracija je dovoljna.

skripta po default-u skenira html fajlove, ali u potrazi za unutrasnjim php/perl/* kodom.
ne znam sta si ti mislio da ova skripta radi...procitaj moj prvi post jos jednom, probaj da razumes svrhu i poentu programa.
ako nije problem da mi samo obrazlozis sta su 'poznate dosadne namete' i da probas da shvatis, dok to radis, kako te gluposti dodju na to mesto.:1091:

zidoo 11. 01. 2010. 12:57

vid ja sam pokuso da ti sajvet dam, ali posto vidim da si sa balkanskih prostora shvatio si to kao napad na svoj rad.

Ako ti ovaka skripta radi kroz kron kao sto rece Ivan malo je debilno da je prepravljas svaki put kad ti treba novi chekc, posto tako mozes da napravis neki mutav syntax error, zaboravis " ili ' ili tak nesto i eto problema.

Poznati nameti su onaj mutavi PHP "virus" koji u svaku *index* *main* i *.js fajl dodaje nekakv JS code, neko je imo problem na forumu, fora je sto ta skripta uvjek dodaje jedan te isti JS CODE pa onda trazis uzorak iz tog coda. Isto to radi i za PHP fajlove, dodaje neki code u vrh.

Enivej, posto si ti tako pametan i vidim da sve radis dobro sam ja ne bi vise smeto, docu kasnje da obrisem svoje postove kad se uvjerim da si procito izvinjenje.

milos.z 11. 01. 2010. 16:41

predrasude?

nisam shvatio kao napad na rad, vec kao kritike koje sam spreman da saslusam i da obrazlozim zasto nisam to tako uradio. nemoj pogresno da me shvatis.

skripta je ekstremno jednostavna za editovanje i mislim da je isto dal ces da editujes samu skriptu ili konfiguracioni fajl koji bih isto napisao u php formatu pa bih include-ovao u glavnu skriptu, jer da bi definicije bile u eksternom fajlu u nekom specijalnom formatu morao bih da pisem neke funkcije za citanje tog fajla i ludila i vise bi koda bilo na citanje tog fajla nego na sam rad programa (figurativno kazem)

jos jednom da dodam, prvenstveno pisan program za jurenje php shell-ova.

e sad, jurenje malicioznih javascript kodova preko funkcija je glupost. jedina mogucnost jurenja ovoga je preko neke seme ili stringa (definicija). da bi se to izvelo, potrebno je juriti maliciozne javascript kodove, vaditi seme iz njih i ubacivati u fajl sa definicijama. s obzirom da se novi maliciozni js kodovi prave svakodnevno. nemam ni vremena ni resursa da napisem kompletno av resenje za web server. (mozda bih za odredjenu sumu novca to i radio, za dz nikako)
vecina tih malicioznih js kodova dodje tu zbog slabosti u web aplikacijama, znas kako kazu, bolje spreciti nego leciti, tako da je bolje da admini vode racuna kakve se sve skripte pokrecu na njihovim serverima, i manje ce da se ciste od malicioznih js kodova.

zidoo 11. 01. 2010. 17:37

Ha cuj da ljudi vode racuna AV software bi bio suvisan :)

Ja sve sto sam napiso bazirano je iskljucivo na iskustvu i na problemima sa nekim virom koji je sluso FTP saobracaj, kupio user/pass i onda editovo PHP code, a taj PHP code je onda mjenjo sve HTML fajlove koji su mu dostupni.

Enivej, mi u firmi vec imamo rjesenje koji nam radi monitoring fajlova, tako pokusavamo da uhvatimo zarazen kod u sto manjem vremenu da jelte, nasi klijenti budu ASAP obavjesteni da ih nama dragi google ne bi oznacio kao opasne (jel ak ti se to desi, stvarno si nagrabusio).

To jurenje definicija je inace poso AV kuca, zat sam i predlozio odvajanje u poseban fajl pa bi danas-sutra komjuniti odrzavo definiciju svjezom a ti ili neko deseti sam software.

Et sad kad smo ""izgladili nesporazum"", fala i zivli.

3banchi 11. 01. 2010. 18:38

Nisam nesto vest u php-u...pa bi me zanimalo da li bi se ovakav skript mogao napraviti tako da upozori na "change time"...odnosno da je neki fajl izmenjen - tog dana u to i to vreme, odnosno da odmah obavesti na mail/sms.
Bilo bi korisno pogotovo za sajtove koji nemaju cestih izmena od strane administratora, a onda bi baza zlonamernog koda bila irelevantna.

Nemanja Avramović 11. 01. 2010. 18:53

Pisao sam na ES-u na ovu temu tako da neću da se ponavljam, ali isto sam (tamo) predložio jurenje malicioznog JS-a po fajlovima. Svestan sam ja da je problem na drugom mestu i da je bolje sprečiti nego lečiti, ali kada vam (nam :)) nešto već zarazi sajt malicioznim JS-om, mnogo bi lakše bilo detektovati ga preko nekog ovakvog softvera nego otvarati i tražiti isti po svim fajlovima (PHP) aplikacije/sajta.

@3banchi: Naravno da je moguće i to, samo ne znam koliko bi se opteretio server kad bi svaki čas skripta prolazila kroz sve foldere i gledala vreme poslednje izmene fajlova. U svakom slučaju skorije mi je na jedan od sajtova upao (verovatno preko kompromitovanog FTP naloga) maliciozni JS kôd, tako da sam i ja razmišljao o pravljenju slične skripte (samo još kad bih imao vremena da se bavim time :/)

nn.nn 11. 01. 2010. 20:38

Ako te zanima koji fajlovi su menjani:
Kôd:

nice -19 find ./ -type f -cmin -20 | mail -s "alert `date +%Y-%m-%d-%H:%M`" user@example.com
Staviš u cron da radi npr. na svakih 15 minuta i ne brineš puno o opterećenosti servera. Konkretno, na mojoj mašini ~100k fajlova za manje od sekunde.

ivanhoe 11. 01. 2010. 21:29

a zasto ne stavite neki specijalizovani software, AIDE, Tripwire, etc..

nn.nn 11. 01. 2010. 23:01

^ Na shared hostingu? Overkill, u najboljem slučaju.

Croll 12. 01. 2010. 07:23

Ovo uopšte nije loša ideja. Svojevremeno napravio sam klijentima jednu skriptu, koja se pokreće preko cron-a i pravi zip fajlova iz konfigurisanog foldera i subfoldera i šalje na mail.

Koristi tabelu da smešta podatke o procesiranim fajlovima, tako da svakim sledećim pozivom procesira samo fajlove koji nisu poslati ili koji su menjani. Uz to ide i LOG zašto je fajl u ZIP-u (nov, promenjen, preskočen, prevelik...).

U konfiguraciji se podešava maksimalni broj fajlova, max veličina pojedinog fajla (da ne procesira recimo video fajlove) i max suma veličine fajlova. Na ovaj način, email nije preopterećen ogromnim fajlovima a klijent može da ima backup kod sebe. Naravno, svaki novi fajl ili promena postojećeg se šalje na email.

Sa nekoliko različitih konfiguracija (folder, veličine i broj fajlova) i različitim učestalostima pokretanja sve radi veoma lepo i praktično postoji kopija sajta u lokalu kao i provera promena na fajlovima.

Naravno, potrebno je i neko znanje da se detektuje šta sme da bude promenjeno a šta ne, ali to je već posao webmastera :)

robi-bobi 12. 01. 2010. 11:26

^ za to postoje gotove alatke (ne koristim)
inace, fora je objasniti posle klijentu kako da 'sklopi' ceo sajt od tih delimicnih zip-ova ;)

ivanhoe 12. 01. 2010. 12:09

da, to radi rsync sasvim lepo... a nije to toliko tesko sastaviti posle, samo treba otpakovati sve fajlove hronoloskim redom, ako su imenovani po datumima (pa se sortiraju dobrim redom) onda je vrlo lako skriptovati tu akciju

Croll 12. 01. 2010. 12:32

Citat:

Originalno napisao robi-bobi (Napišite 78417)
^ za to postoje gotove alatke (ne koristim)
inace, fora je objasniti posle klijentu kako da 'sklopi' ceo sajt od tih delimicnih zip-ova ;)

Pa i jeste fora da i webmaster ima nesto da radi i zaradi.

Citat:

Originalno napisao ivanhoe (Napišite 78424)
da, to radi rsync sasvim lepo... a nije to toliko tesko sastaviti posle, samo treba otpakovati sve fajlove hronoloskim redom, ako su imenovani po datumima (pa se sortiraju dobrim redom)...

Jeste, fajlovi su imenovani po datumu. A ovo nije namenjeno naprednima koji imaju i znaju da koriste shell, već običnim webmasterima koji će to da pošalju na server i preko kontrol panela postave cron ili da ga pozivaju peške ;) A da ne spominjem psihološki momenat osećaja sigurnosti!

Ovde većina backup radi na neki od naprednih načina pa im ovako nešto i nije potrebno. A kad smo kod BACKUP-a, jedan moj dobar prijatelj mi je često govorio:
Citat:

Pet pravila za rad sa kompjuterima su:
  1. Backup!
  2. Backup!
  3. Backup!
  4. Backup!
  5. *bem li ga, ovoga se vise ne sećam. :)


3banchi 12. 01. 2010. 22:41

Citat:

Originalno napisao nn.nn (Napišite 78408)
Ako te zanima koji fajlovi su menjani:
Kôd:

nice -19 find ./ -type f -cmin -20 | mail -s "alert `date +%Y-%m-%d-%H:%M`" user@example.com
Staviš u cron da radi npr. na svakih 15 minuta i ne brineš puno o opterećenosti servera. Konkretno, na mojoj mašini ~100k fajlova za manje od sekunde.

Rekoh nisam vican sa php...ovo bi trebao biti deo php scripte sa funkcijom pronalazenja promenjenih fajlova. Koristim uglavnom Direct Admin, pa bi trebalo u cron ubaciti path do ovakvog fajla i podesiti vreme, zar ne?

nn.nn 12. 01. 2010. 23:09

Propustio sam da pomenem da je to samo mali "proof of concept" shell script. Ako ga u ovom obliku staviš u cron, slaće ti mailove svakih 15 minuta. Mada, ne bi trebalo da je teško prepraviti ga da proverava ima li izmena pre nego što pošalje mail.

Nemam nikakvog iskustva sa Direct Adminom - mislim da si dobro shvatio u vezi crona.


Vreme je GMT +2. Trenutno vreme je 02:44.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.