Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Analiziranje PDF fajlova i Shellcode-a


Postovao jeremy 11. novembra 2008.

Uz sve priče o tome kako se nedavna ranjivost Adobe CVE-2008-2992 naširoko eksploatiše, pomislio sam da je pravo vreme da dokumentujem kako ja analiziram PDF fajlove i shellcode. Pre nego što pređem na to kako izvodim ovu vrstu analize, želeo bih da se zahvalim svima koji su doprineli MalvareDomainList.com , pošto su me oni snabdeli s nekoliko zloćudnih PDF fajlova i linkovima za zloćudne PDF fajlove. Takođe treba da napomenem da je analiza PDF fajova nova tema za mene i proveo sam poslednjih nekoliko dana u temeljnom istraživanju toga šta čini PDF fajl, kao i dodatnih opcija koje je Adobe omogućio za PDF fajlove.

Prvo što uradim jeste da pogledam PDF fajl korišćenjem ili "manje" ili "više" da prikažem sadržaj PDF fajla u terminal prozoru samo da bih video da li mogu da primetim nešto nesvakidašnje. Delovi toka u PDF fajlu mogu se kompresovati, i ako jesu, obično će se ovako nekako pojaviti u pretrazi:



Da dekompresujem tok podataka i očistim formatiranje u PDF fajlu, ja koristim alatku koja se zove pdftk i dekompresujem fajl pomoću sledeće komande:

pdftk bad.pdf output bad_dumped.pdf uncompress

Ova komanda uzima "bad.pdf" fajl kao unos i iznosi ga kao "bad_dumped.pdf" dok ga dekompresuje. Stvarno super stvar u vezi s uncompress parametrom jeste što ne morate da znate da li je PDF fajl kompresovan ili ne, i ništa neće smetati niti će prijaviti grešku ako nije. Dakle, po pravilu, obično samo dajem parametar uncompress. Pdftk će takođe pokušati da formatira PDF fajl, čime će ga učiniti lakšim za čitanje upotrebom tekst editora ili komande "manje". Gledajući bad_dumped.pdf fajl, sada koristeći komandu "manje", možemo videti da je kompresovani tok zaista bio maskirao javaskript koji je podešen da se pokrene kada se otvori PDF.



Da bih otpakovao zamaskirani javaskript jednostavno ga označim, kopiram i pejstujem u neki program za obradu teksta, vi u mom slučaju. Da demaskiram javaskript obično koristim SpiderMonkey ili Malzilla . Ovog puta izabrao sam da iskoristim SpiderMonkey i jednostavno sam zamenio "eval" pozive "print" pozivima, i posle nekoliko ponavljanja, maskirani kod je demaskiran. Dva značajna dela demaskiranog koda su:





Kao što ste verovatno već shvatili, prva slika pokazuje da je ovo jedan od poduhvata koji trenutno cilja na CVE-2008-2992 ranjivost Adobe, a druga slika je shellcode koji je prešao u funkciju util.printf. Sada da pogledamo shellcode.

Da bih raspakovao shellcode jednostavno ga označim, kopiram i pejstujem u tekst editor. Volim da koristim vi, i stoga, da bih očistio shellcode obično koristim regularne izraze i zamene. Da bih ga očistio u ovom konkretnom slučaju, jednostavno izvršim ove dve komande u vi.

:%s/[\"+]//g
:%j!

Prvi regularni izraz (regex) jednostavno uklanja sve " i + karaktere. Drugi jednostavno spaja sve linije zajedno tako da čine jedan dugi string teksta. To je rezultiralo da shellcode sada gleda ovako:



Sada postoji nekoliko različitih načina da se analizira shellcode, ali ja obično koristim samo dva. Prvi način je jednostavan perl-fu koji prosto iznosi zastupljenost karaktera shellcode-a. Perl-fu deo dobio sam od ISC SANS diary entry koji je napravio Danijel Veseman. Ovo je komanda koju ja izvršavam:

cat shellcode.file | perl -pe ‘s/\%u(..)(..)/chr(hex($2)).chr(hex($1))/ge’

U ovom slučaju ne radi i prikazuje sledeće:



Pošto je ovaj post fokusiran više na korake koje ja koristim za analizu PDF fajlova i shellcode-a, nego na ovaj konkretan pokušaj upotrebe, evo primera kada ova tehnika zaista radi. Prvo se shellcode ekstrahuje iz drugog PDF-a i obrađuje na isti javaskript način:



Izvršavajući identičan komandni string kao i ranije:

cat shellcode.file2 | perl -pe ‘s/\%u(..)(..)/chr(hex($2)).chr(hex($1))/ge’

Rezultati su sledeći:



Kao što možete da vidite, shellcode je jednostavan u smislu da daunlouduje fajl u windows system direktorijum preko urlmon i pokreće ga.

Druga metoda koju koristim za analizu shellcode-a je sa libemu bibliotekom i test aplikacijom sctest. Libemu je biblioteka koja pruža osnovnu k86 emulaciju i sctest je deo njenog test-paketa. Sctest neće raditi u svim slučajevima, ali možete da proširite njegovu funkcionalnost tako što ćete napisati sopstvenu test aplikaciju koristeći libemu biblioteku.

Prvo što moramo da uradimo jeste da analiziramo javaskript šifrovani shellcode i da ga upišemo u fajl. Ovo možemo uraditi koristeći isti perl-fu kao i gore, na ovaj način:

cat shellcode.file | perl -pe ‘s/\%u(..)(..)/chr(hex($2)).chr(hex($1))/ge’ > shellcode.out

Kao što verovatno možete videti, mi jednostavno preusmeravamo izlaz u fajl umesto u konzolu. Da biste proverili da li je ovaj korak uspeo, možete uporediti novokreirani fajl koristeći alat po imenu hexdump. Jednostavno poređenje izlaza sledeće dve komande potvrdiće ovo:

hexdump -C shellcode.out

cat shellcode.file | perl -pe ‘s/\%u(..)(..)/chr(hex($2)).chr(hex($1))/ge’ | hexdump -C

Ove dve komande trebalo bi da rezultiraju potpuno istim izlazom i da izgledaju otprilike ovako:



Razlog zašto ne možemo baš jednostavno samo da označimo, kopiramo i pejstujemo izlaz gornje perl-fu komande iz konzole, a zatim da ga pejstujemo u tekstualni fajl jeste to što skup karaktera konzole ne može ispravno da prikaže kompletan opseg znakova što rezultira time da se prikazuje "?". To nije slučaj kada preusmerite ka fajlu pošto karakteri ne moraju da se prekidaju i prikažu na konzoli. Ako mi ne verujete, jednostavno uzmite shellcode.out fajl i uporedite ga s onim kako izgleda kada ga otvorite u tekst editoru kao što je vi.

Sada kada smo ubacili shellcode u fajl možemo da ga prenesemo u sctest putem stdin preusmeravanja na analizu. Ovu komandu ja koristim:

sctest -Ss 100000 < shellcode.out

To rezultira sledećim izlazom:



Gledajući taj izlaz, možemo jasno videti URL, za koji možete s priličnom sigurnošću zaključiti da je to onaj URL koji je korišćen u izbacivanju binarnog koda upotrebom nečeg sličnog kao urlmon što smo ranije videli. Postoji još mnogo temeljnih procedura za analizu PDF-a i shellcode-a, ali uverio sam se da procedure koje sam objasnio u ovom postu funkcionišu na oko 90% svih PDF fajlova i shellcode-ova koje sam u prošlosti gledao.

Ovo u suštini zaključuje moj post o tome kako se analizira PDF fajl i javaskript shellcode. Slede komande i linkovi koji vam mogu koristiti da proširite gorenavedene postupke analize.

Vezano za PDF:

Sledeća komanda će izbaciti metapodatke, bookmarks i labels PDF dokumenta:

pdftk bad.pdf data_dump output

Metapodaci PDF dokumenta mogu biti veoma korisni u otkrivanju informacija o autoru pdf dokumenta, datuma kad je nastao i datuma kad je modifikovan. Kada smo već kod prikupljanja informacija o autoru i korišćenja metapodataka radi istraživanja pdf dokumenta, smatram da je članak "Shoulder Surfing a Malicious PDF Author " Didijea Stivensa izvanredan primer toga šta se može saznati iz ovih podataka. Didije je objavio alat za analizu pdf-a pisan u Python-u pod nazivom pdf-parser.py , koji deluje kao veoma perspektivan u analizi pdf fajlova. Upravo sam danas počeo da se igram tim alatom pa ne mogu baš mnogo više da kažem o njegovim funkcijama i upotrebljivosti, ali mogu da kažem da sam samo nakon nekoliko minuta uspeo da izdvojim iste podatke kao što sam uradio s alatom pdftk.

Vezano za javaskript:

Malzilla 1.2.0 je baš nedavno objavljen i Bobi je bio ljubazan da doda još nekoliko novih funkcija i nešto dokumentacije u zip fajl. Malzilla može da uštedi vreme svakome ko mora redovno da demaskira javaskript i može da obradi mnogo maskiranih kodova s vrlo malo potrebnog znanja o javaskriptu. Ja bih definitivno preporučio ovaj alat svima koji žele da uđu u demaskiranje javaskripta. Druga stvarno kul opcija koja se može naći u Malzilli je shellcode emulator koji je omotač za test alat sctest libemu.

Vezano za shellcode

Još jedan alat koji je napisao Didije koji smatram korisnim za analizu shellcode-a jeste XORSearch. To je, u osnovi, mali program lake kategorije koji će pokušati da napadne uzastopnim pokušavanjem shellcode koji je XOR-ovan, što je veoma često i uobičajeno. Mali nagoveštaj svim korisnicima Mac OS X - da biste kompajlovali XORSearch morate da uklonite #include iz zaglavlja, jer je on amortizovan i nije instaliran.

Kao i uvek, ako imate bilo kakvih pitanja ili komentara u vezi s ovim postom, slobodno da me pitajte u svako doba, uvek volim da čujem mišljenje nekoga ko je zaista pročitao moj post. ;)

Ovaj unos objavljen je u utorak, 11. novembra 2008. u 11:04 i vodi se pod PDF, alati, tutorijali , Možete pratiti reagovanja na ovaj članak preko RSS 2.0 feed. Možete ostaviti odgovor ili trackback sa svog sajta.

Jedan odgovor na "Analiziranje PDF fajlova i shellcode-a"

1. Dejv kaže:
14. novembra 2008. u 7:58

Ovaj komentar u stvari obuhvata nekoliko vaših nedavnih članaka

Postoji novi napad crva Storm Worm!

Ovaj napad sada obuhvata dodatnu metodu napada, kompromitovani Adobe Acrobat (PDF) fajl, kao što je opisano u ovom članku.

Obuhvata i novi, apdejtovani, dvostepeni, multivektor napad sličan onome koji je prijavljen ovde početkom maja (sada uključuje i kod za daunloud i izvršavanje dva različita fajla korisne nosivosti s različitih lokacija - da li Storm ima podstanare - kao i novu, veoma iritantnu kombinaciju tehnika AV utaje/maskiranja).

Takođe sada obuhvatta i treći metod napada, zasnovan na pokušaju Microsoft Office Snapshot Viewer ActiveX.

Ovaj napad takođe snabdeva fajlovima direktno preko IP adrese, koja je, igrom slučaja, takođe odmah do onih IP adresa koje si u svom članku Commnt Spam and PPC Redirection pomenuo da ih koristi flora.pl kao i spamboti! Utvrdio sam da ovi se virusi fajlovi snabdevaju s istog onog "neprobojnog" panamskog hosting servisa!

Najstrašniji je, međutim, način na koji oni ovo šire. Po onome kako ja mogu da ocenim, izgleda da se ovo širi preko zaraženih reklamnih banera prikazanih na legitimnim sajtovima, koje nude s njima povezani oglasni servisi!

Šaljem ti detalje mejlom, ali hteo sam da se pobrinem da odmah vidiš ovo!



Published (Last edited): 17-09-2012 , source: http://www.sudosecure.net/archives/313