OVH Cloud OVH Cloud

AntiVir / heuristique

50 réponses
Avatar
Frederic Bonroy
Vous pouvez télécharger ici:
http://www.antivir.de/download/download.htm
(au bas de la page) une version beta et ligne de commande d'AntiVir avec
détection heuristique.
Elle s'appelle "AntiVir LEXA (heuristical spectral analyser)".
Attention, ça fonctionne uniquement sous NT/2000/XP.

Tapez
avnt chemin -v -s -allfiles -heuristics


J'ai été très surpris par ses performances, notamment dans les cas suivants:

E:\VIRUS\dialer\2.dia
Date: 7.02.2003 Time: 21:05:12 Size: 70656
Suspicious file found: Classified as HEURISTIC/Dialer.Ferkeldialer.

E:\VIRUS\dialer\1.dia
Date: 7.02.2003 Time: 21:05:04 Size: 78336
Suspicious file found: Classified as HEURISTIC/Dialer.Ferkeldialer.

"Ferkel" en Allemand signifie "petit cochon". :-D


E:\VIRUS\o\opaserva.vir
Date: 3.10.2002 Time: 21:23:32 Size: 28672
Suspicious file found: Classified as HEURISTIC/Backdoor.Unknown.Generic.

E:\VIRUS\o\opaserve.vir
Date: 28.06.2003 Time: 19:17:06 Size: 21504
Suspicious file found: Classified as HEURISTIC/I-Worm.Generic.

E:\VIRUS\d\dumaru-a.vir
Date: 5.09.2003 Time: 21:20:00 Size: 9285
Suspicious file found: Classified as HEURISTIC/I-Worm.Generic.

E:\VIRUS\poly\opadupa.vir (Opaserv + Dupator)
Date: 28.06.2003 Time: 19:15:30 Size: 25600
Suspicious file found: Classified as GENERIC WIN32 FILEINFECTOR VIRUS.

E:\VIRUS\k\kleze.vir
Date: 24.04.2002 Time: 20:44:10 Size: 87223
Suspicious file found: Classified as GENERIC TROJAN (Password Stealer).

E:\VIRUS\h\happy99.vir
Date: 14.06.1999 Time: 23:08:08 Size: 10000
Suspicious file found: Classified as GENERIC WIN32 FILEINFECTOR VIRUS.

E:\VIRUS\s\stepha.vir
Date: 22.06.2003 Time: 21:34:40 Size: 377856
Suspicious file found: Classified as
HEURISTIC/Worm.P2P.Massspreader.Generic

Et puis alors ici, félicitations:

E:\VIRUS\z\zmist-dr.vir
Date: 12.07.2001 Time: 03:23:06 Size: 28672
Suspicious file found: Classified as GENERIC WIN32 FILEINFECTOR VIRUS.




C'est prometteur non? Et je n'ai cité que quelques cas. C'est une
version du 18 septembre avec les définitions du 21 janvier.

10 réponses

1 2 3 4 5
Avatar
AMcD®
Nicolas Brulez wrote:

DATA:004020E7 sub_4020E7 proc near ; CODE XREF:
sub_402064+11p
DATA:004020E7 ;
sub_402064+3Dp DATA:004020E7 and ebx, 0FFFF0000h
DATA:004020ED add ebx, 10000h
DATA:004020F3
DATA:004020F3 loc_4020F3: ; CODE XREF:
sub_4020E7+1Aj
DATA:004020F3 sub ebx, 10000h
DATA:004020F9 mov eax, [ebx]
DATA:004020FB neg eax
DATA:004020FD cmp ax, 0A5B3h
DATA:00402101 jnz short loc_4020F3
DATA:00402103 retn
DATA:00402103 sub_4020E7 endp

le ptit neg ici sert d'anti heuristique, sous IDA on peut faire
l'opération pour obtenir :


Ha bravo ! Eh bien vas-y, donne des conseils au auteurs de virus tant qu tu
y es :o)...

DATA:004020FD cmp ax, -'ZM' (ca devrait rappeler
des choses aux connaisseurs)

Ce bout de code est utilisé pour récupérer l'image base de kernel32 à
prioris. On retrouve un code similaire dans beaucoup de virus PE.


Oui. Bon avoue que cette technique n'est pas la plus rapide...

DATA:004074BA cmp word ptr [esi], 'ZM'
DATA:004074BF jnz loc_4075EB
DATA:004074C5 mov edi, [esi+3Ch]
DATA:004074C8 cmp edi, [ebp+1Ch]
DATA:004074CB jnb loc_4075EB
DATA:004074D1 cmp dword ptr [esi+edi], 'EP'
DATA:004074D8 jnz loc_4075EB

Ca aussi c'est typique virus.
Bref, ca pourrait expliquer la detection de la première génération de
Zmist. Mais c'est vraiment vaste comme détection je pense.


Oui et pas très efficace non plus.

Et pour un peu plus de fun, un faux positif :


À un moment, je voulais faire un concours pour le fun. Faire générer le faux
positif le plus stupide, pour montrer les limites des AVs. C'est vite tombé
à l'eau quand un gars de acvsc est arrivé à faire brailler je ne sais plus
lequel AV en simplement enregistrant "Eddie lives somewhere in time" dans un
fichier... En fait, c'est très facile :o(.

J'ai pas regardé le reste. Le principe est très simple, et fonctionne
bien. Mais un chargement des API via GetProcAddress et un ptit
chiffrement simple des strings, et ya plus de détections.


Eh oui ! D'ailleurs, les auteurs cryptent peu je trouve. Cela dit, c'est
quand même pas la peine de s'embarasser avec le cryptage : un poil
d'obfuscation, un packer perso et heu, ben la plupart des AVs pédalent...

--
AMcD®

http://arnold.mcdonald.free.fr/

Avatar
Frederic Bonroy
AMcD® wrote:

À un moment, je voulais faire un concours pour le fun. Faire générer le faux
positif le plus stupide, pour montrer les limites des AVs. C'est vite tombé
à l'eau quand un gars de acvsc est arrivé à faire brailler je ne sais plus
lequel AV en simplement enregistrant "Eddie lives somewhere in time" dans un
fichier... En fait, c'est très facile :o(.


C'était Norton. On en a longuement parlé ici.

A part ça tu peux faire brailler F-Prot avec ceci:

Main:
mov ecx, 3000000
@@test:
dec ecx
jnz @@test

push 0
call ExitProcess
end Main

Je l'avais posté déjà ici récemment.

J'ai pas regardé le reste. Le principe est très simple, et fonctionne
bien. Mais un chargement des API via GetProcAddress et un ptit
chiffrement simple des strings, et ya plus de détections.


Eh oui ! D'ailleurs, les auteurs cryptent peu je trouve. Cela dit, c'est
quand même pas la peine de s'embarasser avec le cryptage : un poil
d'obfuscation, un packer perso et heu, ben la plupart des AVs pédalent...


Pour détecter les cochonneries VB c'est pas mal du tout, certainement
plus rapide qu'autre chose.


Avatar
Nicolas Brulez
Ha bravo ! Eh bien vas-y, donne des conseils au auteurs de virus tant qu tu
y es :o)...


Les programmeurs (les vrais, pas ceux qui font des trucs en VB), n'ont
pas besoin de moi ;)

Oui. Bon avoue que cette technique n'est pas la plus rapide...
Tout à fait. vive le PEB ;-)

Je suis sur que tu comprends , donc pas la peine de mettre un bout de code.


Oui et pas très efficace non plus.
Oui en fait.

Surtout que si tu prends un virus vraiment super simple, mais crypté par
un XOR, il n'y a plus aucune détection.
La détection de Zmist vient donc juste du fait que la première
génération est en clair.

À un moment, je voulais faire un concours pour le fun. Faire générer
le faux

positif le plus stupide, pour montrer les limites des AVs. C'est vite tombé
à l'eau quand un gars de acvsc est arrivé à faire brailler je ne sais plus
lequel AV en simplement enregistrant "Eddie lives somewhere in time" dans un
fichier... En fait, c'est très facile :o(.


hehe. Ca me rappel "Iron Maiden" ta phrase ;-)
Dark Avenger... souvenirs :)

Eh oui ! D'ailleurs, les auteurs cryptent peu je trouve. Cela dit, c'est
quand même pas la peine de s'embarasser avec le cryptage : un poil
d'obfuscation, un packer perso et heu, ben la plupart des AVs pédalent...


Oui. tout à fait.
Tant que les vers seront en VB, ou codés avec les pieds, les
heuristiques simples suffiront :-)

Mon moteur heuristique Win32 c'est pareil. (Infections PE uniquement)
Avec un peu de code intelligent, on passe à travers sans problèmes.

Enfin d'un autre coté, c'est le principe même de l'heuristique.

--
Nicolas Brulez

Chief of Security
The Armadillo Software Protection System
http://www.siliconrealms.com/armadillo.shtml

Avatar
Nicolas Brulez
Frederic Bonroy wrote:

A part ça tu peux faire brailler F-Prot avec ceci:

Main:
mov ecx, 3000000
@@test:
dec ecx
jnz @@test

push 0
call ExitProcess
end Main

Je l'avais posté déjà ici récemment.


Ah oui?
Et beh.
Il dit quoi dans ce cas la ?
Il pense à un virus crypté ? :)

Pour détecter les cochonneries VB c'est pas mal du tout, certainement
plus rapide qu'autre chose.


Oui pour les trucs en VB c'est sur.
Faut que je regarde d'ailleur comment cela se passe ;-)

--
Nicolas Brulez

Chief of Security
The Armadillo Software Protection System
http://www.siliconrealms.com/armadillo.shtml

Avatar
AMcD®
Nicolas Brulez wrote:

Ah oui?
Et beh.
Il dit quoi dans ce cas la ?
Il pense à un virus crypté ? :)


Sans doute à une boucle de decryptage brute force non ?

--
AMcD®

http://arnold.mcdonald.free.fr/

Avatar
Frederic Bonroy
Nicolas Brulez wrote:

E:VIRUSzzmist-dr.vir
Date: 12.07.2001 Time: 03:23:06 Size: 28672
Suspicious file found: Classified as GENERIC WIN32 FILEINFECTOR VIRUS.



Il s'agit de la première génération du virus non ?
Le virus sans un "vrai" hote je suppose.


A vrai dire, aucune idée. Ce doit être le droppeur. Je l'avais
téléchargé du site de l'auteur avec un notepad.exe infecté dont je sais
que le ZMist qu'il contient est fonctionnel (je l'ai lancé dans Vmware).

Si ça peut te servir:

Disassembly of File: zmist-dr.vir
Code Offset = 00000600, Code Size = 00000200
Data Offset = 00000800, Data Size = 00005800

Number of Objects = 0004 (dec), Imagebase = 00400000h

Object01: CODE RVA: 00001000 Offset: 00000600 Size: 00000200
Flags: 60000020
Object02: DATA RVA: 00002000 Offset: 00000800 Size: 00005800
Flags: C0000040
Object03: .idata RVA: 00008000 Offset: 00006000 Size: 00000200
Flags: C0000040
Object04: .reloc RVA: 00009000 Offset: 00006200 Size: 00000200
Flags: 50000040


Et voici la première partie du code:

//******************** Program Entry Point ********
:00401000 680C73B00F push 0FB0730C
:00401005 E8FB0F0000 call 00402005
:0040100A FFD0 call eax
:0040100C 96 xchg eax,esi
:0040100D B420 mov ah, 20
:0040100F AC lodsb
:00401010 3C22 cmp al, 22
:00401012 7502 jne 00401016
:00401014 B422 mov ah, 22
:00401016 AC lodsb
:00401017 0AC0 or al, al
:00401019 0F84B6000000 je 004010D5
:0040101F 3AC4 cmp al, ah
:00401021 75F3 jne 00401016


Suivi par encore un bon nombre d'instructions, principalement des séries
de deux, trois push imm32 suivis de call. Mais il n'y a rien d'intéressant.
On notera le call 00402005, serait-ce une forme d'EPO? Hmmm...

Si on suit tous les call, ça donne:

DATA:00402005 pusha
DATA:00402006 call sub_0_402057
DATA:0040200B call sub_0_402104
[...]
-----------------------------------------------------------------
DATA:00402057 pusha
DATA:00402058 call sub_0_402064
[...]
-----------------------------------------------------------------
DATA:00402064 push dword ptr fs:0
DATA:0040206A mov fs:0, esp
DATA:00402070 call sub_0_4020D7
DATA:00402075 call sub_0_4020E7
[...]
-----------------------------------------------------------------
DATA:004020D7 mov eax, fs:0
DATA:004020DC
DATA:004020DC loc_0_4020DC:
DATA:004020DC cmp dword ptr [eax], 0
DATA:004020DF mov ebx, [eax+4]
DATA:004020E2 mov eax, [eax]
DATA:004020E4 jnz short loc_0_4020DC
DATA:004020E6 retn
-----------------------------------------------------------------
DATA:004020E7 and ebx, 0FFFF0000h
DATA:004020ED add ebx, 10000h
DATA:004020F3
DATA:004020F3 loc_0_4020F3:
DATA:004020F3 sub ebx, 10000h
DATA:004020F9 mov eax, [ebx]
DATA:004020FB neg eax
DATA:004020FD cmp ax, 0A5B3h
DATA:00402101 jnz short loc_0_4020F3
DATA:00402103 retn

-----------------------------------------------------------------
DATA:00402104 sub_0_402104 proc near
DATA:00402104 mov ecx, [ebx+3Ch]
DATA:00402107 mov ecx, [ecx+ebx+78h]
DATA:0040210B jecxz short locret_0_40210F
DATA:0040210D add ecx, ebx
DATA:0040210F
DATA:0040210F locret_0_40210F:
DATA:0040210F retn





DATA:004020F3 sub ebx, 10000h
DATA:004020F9 mov eax, [ebx]
DATA:004020FB neg eax
DATA:004020FD cmp ax, 0A5B3h
DATA:00402101 jnz short loc_4020F3
DATA:00402103 retn
DATA:00402103 sub_4020E7 endp

le ptit neg ici sert d'anti heuristique, sous IDA on peut faire
l'opération pour obtenir :

DATA:004020FD cmp ax, -'ZM' (ca devrait rappeler
des choses aux connaisseurs)


Hmmm... ça ne devrait pas poser de problèmes à un émulateur normalement.

J'ai jeté un oeil rapidement.
Pour les worms, backdoors and co, c'est en gros:

Recherche d'API importées + recherches de strings.


C'est sans doute pour ça que c'est si rapide. Mais comme ça a l'air de
fonctionner, pourquoi s'en priver...


Avatar
Frederic Bonroy
Nicolas Brulez wrote:

Ah oui?
Et beh.
Il dit quoi dans ce cas la ?
Il pense à un virus crypté ? :)


Je ne sais pas à quoi il pense mais il parle d'un "unknown virus".

Avatar
AMcD®
Nicolas Brulez wrote:

Oui. Bon avoue que cette technique n'est pas la plus rapide...
Tout à fait. vive le PEB ;-)

Je suis sur que tu comprends , donc pas la peine de mettre un bout de
code.


Le PEB ? Moi oui, je comprends. Donnons quand même deux-trois indices à ceux
qui connaissent pas. En deux mots, le PEB, ou process Environment Block est
une structure non documentée par nos amis de Microsoft. Plus intéressante
que le TEB (Thread Environment Block) :o). À chaque processus est attaché un
PEB, à chaque thread un TEB.

Le PEB est intéressant pour les hackers car on peut y localiser pleins de
données... intéressantes ! pa exemple, et c'est notre propos, l'adresse de
chargement de certaines DLLs dans l'espace du processus.

Quelques liens sympaticos d'exploitation, d'utilisation :

http://seclists.org/lists/bugtraq/2003/Feb/0092.html
http://www.chapeaux-noirs.org/win/shellcode_SP_independant.txt
http://www.informit.com/isapi/product_id~%7B6D5ACA10-5AB0-4627-81E5-65B9F6E080AC%7D/element_id~%7BB7926993-9CDF-48BA-B8BD-5C4018956BDB%7D/st~%7B6EB673C6-2B46-498B-A653-803F5FC3AA6E%7D/content/articlex.asp

Si nécessaire, je me ferai un plaisir de faire un exposé complet et détaillé
:o).

hehe. Ca me rappel "Iron Maiden" ta phrase ;-)
Dark Avenger... souvenirs :)


Ben c'est ça :o). Cela me fait penser que je n'ai jamais compris si c'était
l'ami Boncev ou pas. C'est quand même bizarre de disparaître comme ça...

Eh oui ! D'ailleurs, les auteurs cryptent peu je trouve. Cela dit,
c'est quand même pas la peine de s'embarasser avec le cryptage : un
poil d'obfuscation, un packer perso et heu, ben la plupart des AVs
pédalent...


Oui. tout à fait.
Tant que les vers seront en VB, ou codés avec les pieds, les
heuristiques simples suffiront :-)


Les derniers, enre MyDoom, volent un peu plus haut quand même non ?

--
AMcD®

http://arnold.mcdonald.free.fr/


Avatar
Frederic Bonroy
AMcD® wrote:

Sans doute à une boucle de decryptage brute force non ?


Ou du code bidon destiné à faire durer le plaisir et à faire abandonner
l'antivirus qui ne veut pas passer sa vie sur ce fichier. :-)

(Mon truc à moi prend à peu près une demi-seconde pour émuler ça sur un
processeur 1 GHz.)

Avatar
AMcD®
Je suis sûr que tu m'en veux ne ne pas avoir spécifié celui-là :o) :

http://www.lsd-pl.net/windows_components.html

J'ai la mémoire qui me joue parfois des tours...

--
AMcD®

http://arnold.mcdonald.free.fr/
1 2 3 4 5