Malzilla - JavaScript malware/exploits busted!

1

Malzilla - JavaScript malware/exploits busted!

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Dugo vremena (mozda i celih godinu dana) sam razbijao glavu oko toga kako se dokopati malwarea koji inficira sistem samim otvaranjem malicioznog (baksuznog?) sajta.

U pocetku sam to radio tako sto sam sajt otvarao u Firefoxu i onda pogledao HTML source te stranice i pokusavao da se dokopam linka ka samom fajlu malwarea.

Onda su se javila dva problema:
- postalo je opasno posecivati sajtove i Firefoxom zbog exploita koji su koristili propuste u samom sistemu, a poceli su se pojavljivati i sajtovi koji su koristili propuste u Firefoxu ili programima koji su se integrisali u Firefox (recimo QuickTime player).
- ni losi momci nisu bili vise tako naivni da link posluze na tanjiru, vec su svakog dana smisljali sve vise i vise JavaScript funkcija za kodiranje/enkripciju linka

Prvi problem sam resio tako sto sam umesto browsera poceo da koristim program vURL Desktop Edition mog dobrog drugara MysteryFCM-a.
vURL DE ce, za razliku od browsera, da pokupi HTML sa servera bez da ga renderuje (cime se izbegavaju exploiti) i izvrsiti jednostavnu analizu HTML-a, tako da ce odmah upozoriti na neke sumnjive stvari (skriveni IFrame-ovi i slicno).

Ostao je problem kodiranih linkova i exploita.
Prvo sam napisao program Script Decoder koji je mogao da resava jednostavnije slucajeve tipa unescape funkcije (postoji i u JavaScriptu i u Visual Basic Scriptu). Time sam sebi omogucio hvatanje malwarea za neko vreme.
Onda su losi momci poceli da upotrebljavaju sve komplikovanije nacine kodiranja, zasnovane na matematickim funkcijama (XOR i slicno), pa cak i funkcije sa grananjima u zavisnosti od podatka koji se obradjuje, tako da sam dosao u situaciju da sam morao da pisem kratke programe za dekodiranje maltene za svaki maliciozan script na koji sam nailazio.
To je dovelo do jako velikog gubitka vremena, a fajlova je stizalo sve vise i vise.

Elem, morao sam potraziti neko bolje resenje.
Ideje su isle u smeru rasturanja Firefox-a na sastavne i rastavne delove, tako da napravim browser koji ce mi prikazivati samo HTML source stranice, ali ne i da izrenderuje stranicu. Onda bih renderovanje odradio u koracima, tako da iskoristim Firefox-ov ugradjeni JavaScript compiler za dekodiranje malicioznih Java scriptova.
Posle malo veceg lunjanja po netu, silnim mailing listama itd. saznam da je Mozillin/Firefoxov JavaScript compiler u stvari posebna celina (DLL), da se zove SpiderMonkey, i da se moze koristiti i iz drugih programa (uz poznavanje interfejsa, naravno).

Proucavanje SpiderMonkey-a bez uputstva za koriscenje je trajalo jako dugo. Njegovi tvorci se nikada nisu potrudili da napisu neko uputstvo koje bi bilo razumno ljudima koji prvi put imaju posla sa necim slicnim.
Trebalo je pohvatati znacenja izraza, principe funkcionisanja interpretera (gde se ubacuje meso, a gde ispada kobasica i slicno).
Nakon cele vecnosti uspeo sam da ga nateram da mi izrenderuje rudimantalni document.write (kada se samo setim koliko mi je trebalo da skontam da je document objekat koji ja moram da formiram, da mu obezbedim funkciju write, pa da tek onda mogu da kazem SpiderMonkeyu "evo ti ga izlazni objekat, evo ti podataka u JavaScriptu, molim te obradi mi taj script i rezultat smesti u objekat document. Da, naravno da sam ti obezbedio funkciju write koju ti zelis da koristis za ubacivanje rezultata u document...)"

Onda su naisli problemi tipa "A sto si opet blokirao majmuncicu moj? Zar tebi nije jasno da ako varijabla nije inicijalizovana da onda treba da izbacis nulu? Pa pobogu, tako radis u Firefoxu, zasto neces i kod mene tako da radis?"

Nakon dugo, dugo vremena (ala volim da pricam pricice za pred spavanje...), majmuncic je bio izdresiran i poceo je da ljusti banane pre nego sto bi ih pojeo.

Dame i gospodo, da vam predstavim simbiozu svetske pameti u vidu SpiderMonkey-a i domaceg koda u vidu bezdusnog tiranina koji jadnog Monkeya hrani iskljucivo virusima - Malzilla (s'g cu vi iz'edem svi virusi, bre).

Dobro, toliko o jadnom majmunu, red je da predjemo i na tiranina koji ga hrani virusima.

Ajmo da pogledamo jednu sliku:



Ono sto se vidi na slici je Malzilla. Dole, u polju URL mozete videti adresu koja mi je stigla u jednom mailu u kojem me tip ubedjuje da mi je drugar poslao muzicku cestitku, i da bi bilo lepo da je pogledam.
Kada sam Malzillom otisao na dati mi link, desilo se (satro) nesto neocekivano - docekao me je kriptovani sadrzaj.
Nista, kliknem ja na Send script to Decoder, pa na Decoder tabu kliknem na Run script cime sam dao SpiderMonkey-u domaci zadatak (jadnicko).



Ako pogledate i sledecu sliku, vedecete da je jadni SpiderMonkey odradio svoj posao (pogledati donje polje na slici) i da je iz one hrpe brojeva i slova uspeo da dekodira fin VBS (VisualBasic Script) koji je ustvari exploit i u njemu se vidi link ka fajlu malwarea na serveru (nije prikazano na slici).

Na sledecem primeru cemo videti malware koji upisuje fajl na disk iz samog scripta, bez da downloaduje malware sa servera.
Na slici je VBS koji upisuje fajl iz podataka koje ima u samom skriptu (silne brojke koje se vide na slici):



Kako jadni SpiderMonkey ne ume da izvrsi VBS (ume samo JavaScript), te brojke moramo da pretvorimo u fajl (onako kako bi VBS to ucinio) uz pomoc funkcija koje sam imao vec u svom ranijem programu Script Decoder, a koje se sada nalaze na tabu Misc decoders:



Na slici se vidi boldovano \u4D5A. Ukoliko pogledate prethodnu sliku, videcete da VBS u fajl prvo upisuje sekvencu MZ, pa tek posle one silne podatke iz (satro) Unicode sekvence podataka.
MZ je oznaka za pocetak EXE i DLL fajlova kod DOS i Windows programa. Da bi nas fajl bio kompletan, ja sam taj MZ ovde morao sam da upisem u sekvencu za upis u fajl, i to je ono \u4D5A ('MZ' napisano kao sekvenca ASCII kodova).
Posto moj decoder za Unicode (UCS2) po defaultu prihvata %u kao oznaku za razdvajanje dva podatka. a ovde imamo \u kao delimiter, dole u polje Override default delimiter upisujemo \u i kliknemo na dugme UCS2 to Hex da bi smo podatke pripremili za upis u fajl na disku. Rezultat konverzije se vidi na sledecoj slici:



Nakon toga idemo na Hex to file i rezultat upisujemo u fajl na disku. Kada sam fajl proverio na VirusTotalu (sat vremena pre pisanja ovog teksta), uvideo sam da imamo posla sa malwareom koji jos nije nasiroko poznat medju AV programima:



Ajmo da vidimo jos neki primer sta sve moze cudo zvano Malzilla.
Zanimljiva mi je ova navala mailova u kojima dobijam te silne eCardove, tj. cestitke od raznih drugara sirom sveta, a i ne poznajem te ljude (ali sam izgleda ja postao slavna i poznata licnost Laughing).
Na sledecoj slici mozete videti sta je bilo na jednom od linkova ka eCardu:



Elem, ono sto se vidi je mali skript koji koristi funkciju XOR da bi dekodirao ono sto se na slici vidi kao gomila brojki.
Pride toga, na kraju scripta je funkcija eval, sto znaci da ce ono sto je dekodirano biti tretirano isto kao script, i da ce biti pokrenuto nakon dekodiranja:



Kako nam nije cilje da se script izvrsi, mi cemo taj eval zameniti sa document.write, tako da vidimo sta se nalazi u tom scriptu. Nakon klika na Run script dobijamo ponovo VBS, kojeg nazalost nas SpiderMonkey ne ume da interpretira:



Ubacujemo one brojke koje predstavljaju Unicode kodove u Misc Decoders (opet trazimo uslugu mog prapotopskog Script Decodera) i kliknemo na Decode UCS2 (UCS2 je pravilan naziv za ono sto se odomacilo kao Unicode, a Unicode je zajednicki naziv za par tih tabela karaktera - UCS2, UTF8, UTF16 itd):



Nakon klika dobijamo sledece:



Ono sto se vidi na slici je exploit sa sve adresom fajla koji treba da skine sa servera i da ga pokrene na kompu jadne zrtve.
Oni navodnici i plusevi koji se vide su posledica toga sto u prethodnom koraku nisam uklonio iste pre dekodiranja. Time exploit postaje neupotrebljiv, ali je meni cilj samo da se dokopam onog linka, tako da mi to nije vazno, a oduzima vremena.



Za on koji jos nisu odustali od citanja, ajmo da pogledamo jos koji primer.



Na slici se vidi script sa jednog sajta. Script je iz dva dela, sto zahteva malo duzi postupak dekodiranja. Na slici je boldovan pocetak drugog dela, tj. podataka koje ce prvi deo dekodirati nakon sto i sam bude dekodiran.



Na prethodnoj slici se vidi rezultat dekodiranja prvog dela scripta. Moze se videti da je to opet script, a sluzi za dekodiranje ostatka (tj. drugog dela).
Iskopiramo iz rezultata samo funkciju (sledeca slika), i iskopiramo je preko onoga sto je vec dekodirano iz originalnog scripta (slika iza sledece):





Nakon toga udarimo jedan Run script i dobijemo sledeci rezultat:



Ah! Dobili smo ponovo neki JavaScript koji je potrebno izinterpretirati.
Nista, ocistimo gornje polje i tu unesemo novi script:



Odemo ponovo na Run script i dobijemo sledece:



Ako skrolujemo malo nize, vidimo da rezultat sadrzi ponovo UCS2 sekvencu. Nista, ponovimo postupak koji smo imali i u prethodnom primeru, i dobijemo opet exploit sa adresom malicioznog fajla:






Za one koji jos nisu odustali od citanja, evo kako izgleda interpretacija Make Me Laugh scripta, koji je dosta koriscen ove godine za ubacivanje malwarea na kompove.
Source malicioznog sajta izgleda ovako:



Sa slike se moze videti da se za dekodiranje koristi splet prilicno komplikovanih transformacija i matematickih operacija.
Rucno dekodiranje ovako kodiranih podataka bi potrajalo celu vecnost. No, tu je nas SpiderMonkey koji ce to da obavi za par sekundi:



Kao sto se sa slike vidi, URL koji sadrzi malware je vidljiv u rezultatu dekodiranja.


To bi bilo to za ovo javljanje, koliko da znate na cemu se radilo u zadnje vreme.
Cisto da malo nahranim svoj ego pred publikom, Malzilla se vec uveliko koristi u par antivirus kompanija (znam sigurno barem za dve jer su mi se ljudi javili da se zahvale), i koristi je i MIRT grupa sa CastleCops foruma za lov na nove primerke malwarea.
Slobodno mogu reci da je Malzilla ove godine dosta pomogla u borbi protiv malwarea sirom sveta Laughing

Zahvaljujem se MIRT timu sa CastleCopsa na testiranju i prijavljivanju bugova, pa onda tipovima poznatim pod nickovima antnet i Karl za strucnu pomoc oko primera u JavaScriptu koji su mi pomogli da nateram SpiderMonkey da radi pravilno.

Dopuna: 17 Avg 2007 16:28

Drustvo, drago mi je da mogu da objavim da je Malzilla prihvacena da bude hostovana na SourceForge.net:
http://sourceforge.net/projects/malzilla/
http://malzilla.sourceforge.net/

Kao sto vidite, na drugom linku nema nicega, tj. treba napraviti sajt.

Da ne duzim, zamolio bih zainteresovane za ucestvovanje u projektu da se jave.
Potrebni su ljudi za sajt (prost sajt, bez nekih posebnih zavrzlama), neko sa smislom za crtanje da osmisli maskotu/ikonicu za program, kao i Delphi/Pascal programeri zainteresovani da se ukljuce malo u anti-malware vode.

Da ne bude zabune, sve gore spomenuto je na dobrovoljnoj bazi, tj. nema nikakve zarade, barem ne u pocetku (kasnije cemo da primamo donacije ako je neko voljan da nesto prilozi).

Dakle(m), crtaci, web dizajeri, programeri - javite se.

Dopuna: 19 Avg 2007 12:59

OK, Malzilla je ugledala svetlo dana - pogledajte linkove koje sam ostavio u prosloj poruci.

Kao sto mozete videti na sajtu, svaka pomoc je dobrodosla. Mozda je ovo dobra prilika da se vase ime nadje na spisku ljudi koji su radili na projektu koji ima sanse da postigne neki uspeh Smile

Ajde, nemojte da se stidite. Web dizajner je potreban pod hitno, kao i neko ko bi nacrtao neku finu ikonicu za Malzillu.

Dopuna: 19 Avg 2007 13:35

Evo ga i prvi kratak review (nemacki jezik):
http://blog.chip.de/0-security-blog/malzilla-entsc.....-20070819/

Idi-begaj kume, tek smo izasli, a sirimo se brze od nekih virusa Smile



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23211
  • Gde živiš: Niš

Cestitke smešak
Jos jedan projekat iz MC laboratorije Smile
Srecan sam zbog ovoga Wink



offline
  • Bojan  Male
  • Prijatelj foruma
  • Pridružio: 13 Nov 2003
  • Poruke: 11059
  • Gde živiš: Novi Sad

Mogu samo da cestitam a sve ostalo je suvisno :wink

offline
  • Pridružio: 12 Sep 2003
  • Poruke: 2839
  • Gde živiš: Kotor

Iskrene čestitke i od mene Smile

offline
  • m4rk0  Male
  • Administrator
  • Administrator tech foruma
  • Marko Vasić
  • Gladijator - Maximus Decimus Meridius
  • Pridružio: 14 Jan 2005
  • Poruke: 15766
  • Gde živiš: Majur (Colosseum)

Bravo bobby Smile

offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12488
  • Gde živiš: Južni pol

Vau... Cestitam Bobby. Ovo izgleda impresivno.

Dopuna: 20 Avg 2007 16:50

bobby ::Da ne duzim, zamolio bih zainteresovane za ucestvovanje u projektu da se jave.
Potrebni su ljudi za sajt (prost sajt, bez nekih posebnih zavrzlama), neko sa smislom za crtanje da osmisli maskotu/ikonicu za program, kao i Delphi/Pascal programeri zainteresovani da se ukljuce malo u anti-malware vode.

Da ne bude zabune, sve gore spomenuto je na dobrovoljnoj bazi, tj. nema nikakve zarade, barem ne u pocetku (kasnije cemo da primamo donacije ako je neko voljan da nesto prilozi).

Dakle(m), crtaci, web dizajeri, programeri - javite se.


Web dizajn je moj nekadasnji hobi kojeg sam se manuo u poslednje vreme. Ne bi se dao okuraziti da predlazem pomoc u tom delu, vec se nadam da ce se javiti neko ko se time zaista bavi.

Ono sto ti mogu ponuditi je samo pomoc oko Engleskog.

Btw, u cemu si radio sajt?

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Ako se ono moze nazvati sajtom (ima manje HTML-a nego reci u ovoj mojoj poruci) - NVU.

Bojan se javio da uradi sajt, pa ako ima jos dobrovoljaca, mozete se javiti njemu, pa da se uklopiti u neki zajednicki rad.

Hvala za ponudjenu pomoc oko Engleskog, mada mislim da cu tu imati dovoljno Britanaca i Amera koji mogu da pomognu, posto se beta Malzille testirala na CastleCopsu vec duze vreme, i ima dosta ljudi koji bi pomogli ako zatreba.

offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12488
  • Gde živiš: Južni pol

Ako je Boki preuzeo dizajn, onda je sajt u dobrim rukama.

U vezi Engleskog: Ok. Ako ti ipak zatreba pomoc, tu sam.

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Za 4 dana postojanja:
- jedan update programa
- 2000 poseta Malzillinom sajtu + 5000 Web hits (sta god im to znacilo...)
- 175 downloada sa SF.net i jos 30 sa Softpedije
- email od Softpedije sa cestitkama
- review na blogu sajta www.chip.de vec prvog dana pojavljivanja
- jaci rank na SF.NET od ClamAV-a Shocked

Dopuna: 09 Okt 2007 22:45

Nova verzija - 0.9.2

Changelog:

0.9.2

- Added Pascal Script interpreter. With some Pascal knowledge one can now deal with data encrypted in the ways which are not handled by Malzilla's integrated decoders.
- intercepting and redirecting eval() function
- length measurement tool (for some scripts using arguments.callee to determine the length of the function in order to prevent modifications)
- some cosmetic changes

http://malzilla.sourceforge.net/

offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12488
  • Gde živiš: Južni pol

Bobby, meni Firefox pod Linuxom ne prikazuje sajt kako treba. Ne znam da li je isti slucaj i na drugim platformama. Alarmiraj Bokija da to pogleda (ako vec nisi).

Ko je trenutno na forumu
 

Ukupno su 1127 korisnika na forumu :: 43 registrovanih, 12 sakrivenih i 1072 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Apok, babaroga, bankulen, bojank, Bokiboks, comi_pfc, Denaya, Georgius, gorican, goxin, hologram, HrcAk47, ILGromovnik, Još malo pa deda, Karla, ljuba, Lucije Kvint, mackenzie, Marko Marković, mercedesamg, Neutral-M, nuke92, ostoja, Parker, Pohovani_00, Polemarchoi, randja26, Rogan33, royst33, SlaKoj, slonic_tonic, Smiljke, Stefan M, Tvrtko I, vladulns, W123, wizzardone, YugoSlav, zbazin, ZetaMan, Zoca, žeks62