OVH Cloud OVH Cloud

Bon les gars, il y a 500,000 dolalrs à gagner là...

50 réponses
Avatar
AMcD
http://www.computerworld.com/securitytopics/security/virus/story/0,10801,89584,00.html

Je suspecte que les divers enquêteurs patientent jusqu'à ce que la cagnote
soit encore plus grosse ;o)

--
AMcD

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

10 réponses

1 2 3 4 5
Avatar
NO_eikaewt_SPAM
Frederic Bonroy wrote:

Très bonne question. Il faudrait essayer de déterminer heuristiquement*
quand l'émulation peut/doit cesser. En fait, dans le cas de Kenston
c'est après la boucle car après on doit pouvoir faire une recherche de
chaîne. Mais ce serait de la triche car l'émulateur devrait être plus ou
moins universel et savoir quand s'arrêter quel que soit le programme émulé.


Il faut aussi determiner si le programme doit etre emule', non ?

Quant à l'émulateur même, scriptable certainement pas. Je serai déjà
content le jour où il arrivera à peu près à émuler cette boucle. :-)

Car tu ne veux pas émuler tout le virus je suppose :)


Certainement pas. :-)

* quand je dis heuristiquement, je ne pense pas la recherche heuristique
de virus, mais à la signification "normale" du mot "heuristique" qui n'a
rien à voir avec les virus.


Pas si sur : il semblerait que la detection heuristique de virus et
la determination de la necessite' ou de l'absence de necessite'
d'emuler puissent etre liees. Cette relation est evoquee dans la
partie 9 de cet article :
http://www.nai.com/common/media/vil/pdf/imuttik_VB_%20conf_2000.pdf

Si j'ai bien compris, la recherche heuristique (statique) va dans un
premier temps permettre de trouver un "majorant" de l'ensemble des
fichiers infectes devant etre emules. En d'autres termes, tout
fichier infecte' necessitant une emulation devra etre reperable par
cette recherche heuristique, mais cette heuristique produira un
certain nombre de faux positifs qui seront elimines par la suite :
seuls ceux pour lesquels une signature est trouvee apres emulation
ou ceux dont les heuristiques dynamiques confirment le caractere
malveillant sont conservees.

Dans l'article, Igor Muttik evoque l'analyse de la frequence des
opcodes comme caractere discriminant. Les articles sur le
fonctionnement des AVs etant desesperement rares, je trouve tres
interessante la synthese presentee dans celui-ci (je te conseille
d'y jeter un oeil). Il evoque aussi l'utilisation de sommes de
controle associee a de courtes chaines de caractere. KAV par exemple
utilise les informations suivantes (plusieurs signatures possible
pour un meme fichier), cf. decryptage des bases de KAV par z0mbie :

- Offset de la "signature" (je ne sais pas si ca peut etre sous la
forme d'un intervalle);
- Quelques octets senses se situer a cet offset (2 ou 4, je ne sais
plus);
- Un checksum des octets suivants ;

Puisque tu t'es interesse' aux problemes de relocation et que tu
t'attaques maintenant a l'emulation des boucles de decryptage,
tu seras peut-etre interesse' par l'article 0x04 de IOC 6
( http://www.rootshell.be/~ioc/releases/ioc6-final.tar.gz ),
intitule' "Total encryption for PE infectors", par Kaze, ou il
evoque la possibilite' d'utiliser le loader de PE pour decrypter
la boucle de decryptage d'un virus en utilisant les relocations
(technique initialement decrite dans 29A#5).

--
Tweakie


--
Posté via http://www.webatou.net/
Usenet dans votre navigateur
Complaints-To:


Avatar
Frederic Bonroy

Il faut aussi determiner si le programme doit etre emule', non ?


Je suppose que oui.

Si j'ai bien compris, la recherche heuristique (statique) va dans un
premier temps permettre de trouver un "majorant" de l'ensemble des
fichiers infectes devant etre emules. En d'autres termes, tout
fichier infecte' necessitant une emulation devra etre reperable par
cette recherche heuristique, mais cette heuristique produira un
certain nombre de faux positifs qui seront elimines par la suite :
seuls ceux pour lesquels une signature est trouvee apres emulation
ou ceux dont les heuristiques dynamiques confirment le caractere
malveillant sont conservees.

Dans l'article, Igor Muttik evoque l'analyse de la frequence des
opcodes comme caractere discriminant. Les articles sur le
fonctionnement des AVs etant desesperement rares, je trouve tres
interessante la synthese presentee dans celui-ci (je te conseille
d'y jeter un oeil). Il evoque aussi l'utilisation de sommes de
controle associee a de courtes chaines de caractere. KAV par exemple
utilise les informations suivantes (plusieurs signatures possible
pour un meme fichier), cf. decryptage des bases de KAV par z0mbie :

- Offset de la "signature" (je ne sais pas si ca peut etre sous la
forme d'un intervalle);
- Quelques octets senses se situer a cet offset (2 ou 4, je ne sais
plus);
- Un checksum des octets suivants ;


En fait dans mon cas la recherche se limite à Kenston (et peut-être
encore Poson). Donc je peux sans soucis émuler; et dès que je tombe
sur une instruction inconnue de l'émulateur j'arrête. (Par instruction
inconnue j'entends une instruction qui ne figure pas dans la boucle de
décryptage de Kenston ou Poson, et que l'émulateur n'a donc pas besoin
de connaître).
C'est très rapide, car on n'émule que ce qui est nécessaire, et on
n'émule pas du tout si la première instruction est inconnue (indiquant
qu'il ne s'agit ni de Kenston ni de Poson).

Evidemment cela n'est pas faisable quand on a plusieurs milliers de
virus, car plus on a de virus plus il faut connaître d'instructions,
jusqu'au point de les connaître toutes y compris les instructions
spéciales comme MMX etc.
Mais dans mon cas si. :-D

Théoriquement je pourrais même éviter tous les préparatifs (car même si
la première instruction est inconnue, l'initialisation de l'émulateur
aura pris du temps) en regardant si le point d'entrée se trouve où il se
doit ©. S'il ne se trouve pas dans la dernière section, ce ne peut pas
être Kenston (de mémoire) et je peux tout de suite passer au prochain
fichier.
Mais ça non plus ce n'est pas facilement faisable quand on a plusieurs
milliers de virus, surtout avec les virus EPO.

Puisque tu t'es interesse' aux problemes de relocation et que tu
t'attaques maintenant a l'emulation des boucles de decryptage,
tu seras peut-etre interesse' par l'article 0x04 de IOC 6
( http://www.rootshell.be/~ioc/releases/ioc6-final.tar.gz ),
intitule' "Total encryption for PE infectors", par Kaze, ou il
evoque la possibilite' d'utiliser le loader de PE pour decrypter
la boucle de decryptage d'un virus en utilisant les relocations
(technique initialement decrite dans 29A#5).


Pas bête comme idée ça... je le lirai, merci.

Avatar
AMcD
Tweakie wrote:

Si j'ai bien compris, la recherche heuristique (statique) va dans un
premier temps permettre de trouver un "majorant" de l'ensemble des
fichiers infectes devant etre emules. En d'autres termes, tout
fichier infecte' necessitant une emulation devra etre reperable par
cette recherche heuristique, mais cette heuristique produira un
certain nombre de faux positifs qui seront elimines par la suite :
seuls ceux pour lesquels une signature est trouvee apres emulation
ou ceux dont les heuristiques dynamiques confirment le caractere
malveillant sont conservees.


Je trouve cette technique coûteuse en temps et surtout peu optimisée... À
mon avis l'emulation devrait intervenir à partir du moment où une portion de
code apparaît suspecte : cryptage, boucle répétitive bizarres, utilisation
de fonctions provenant d'APIs critiques (Sockets par ex), chargement de
DLLs, utilisation de GetProcAdress(), compression d'exécutables, défauts
d'intégrité, etc. Donc, après une première analyse. Je trouve bizarre les
technqiues générant du faux positif.

Dans l'article, Igor Muttik evoque l'analyse de la frequence des
opcodes comme caractere discriminant.


T'y crois toi à cette technique ? Facile à dupper quand même.

Les articles sur le
fonctionnement des AVs etant desesperement rares, je trouve tres
interessante la synthese presentee dans celui-ci (je te conseille
d'y jeter un oeil). Il evoque aussi l'utilisation de sommes de
controle associee a de courtes chaines de caractere. KAV par exemple
utilise les informations suivantes (plusieurs signatures possible
pour un meme fichier), cf. decryptage des bases de KAV par z0mbie :

- Offset de la "signature" (je ne sais pas si ca peut etre sous la
forme d'un intervalle);
- Quelques octets senses se situer a cet offset (2 ou 4, je ne sais
plus);
- Un checksum des octets suivants ;


Oui, l'article est intéressant, mais bon... Se baser sur les offsets est
tout de même aléatoire. Relocations, compression, protections, il y a des
tas de techniques utilisées "légalement" qui amène à magouiller les
exécutables sans que ce soit pour autant dans un but malveillant.

--
AMcD

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

Avatar
Nicolas Brulez
Très bonne question. Il faudrait essayer de déterminer heuristiquement*
quand l'émulation peut/doit cesser. En fait, dans le cas de Kenston
c'est après la boucle car après on doit pouvoir faire une recherche de
chaîne. Mais ce serait de la triche car l'émulateur devrait être plus ou
moins universel et savoir quand s'arrêter quel que soit le programme émulé.


Bein il faut savoir que la majorité des AV ne savent pas comment faire
d'eux meme. L'émulateur est guidé par la signature en gros.
Et chaque virus sera émulé differement, d'après les informations dans la
signature.
Des sortes de script de commande du moteur.

Quant à l'émulateur même, scriptable certainement pas. Je serai déjà
content le jour où il arrivera à peu près à émuler cette boucle. :-)
Bah ca devrait pas poser de problèmes :)

Emuler les boucles simples, ca va encore, surtout si tu peux informer
ton moteur sur comment gérer l'émulation.

* quand je dis heuristiquement, je ne pense pas la recherche heuristique
de virus, mais à la signification "normale" du mot "heuristique" qui n'a
rien à voir avec les virus.


Oui tout à fait.

J'avais présenté mon moteur heuristique ici ya quelques années.
Je l'ai pas trop retouché depuis, mais il a quand même été modifié et
detecte meme certains virus EPO. J'ai des modifications à effectuer pour
la recherche d'autres techniques EPO heuristiquement.

Je vais le modifier pour scanner mon disque dur en entier pour voir le
nombre de faux positif d'ailleurs. Je me demande comment il s'en sort.

Il detecte Kenston et Poson heuristiquement en tout cas :)

--
Nicolas Brulez

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

Avatar
Frederic Bonroy

J'avais présenté mon moteur heuristique ici ya quelques années.


Ah bon? Je ne m'en souviens pas.

Je l'ai pas trop retouché depuis, mais il a quand même été modifié et
detecte meme certains virus EPO. J'ai des modifications à effectuer pour
la recherche d'autres techniques EPO heuristiquement.

Je vais le modifier pour scanner mon disque dur en entier pour voir le
nombre de faux positif d'ailleurs. Je me demande comment il s'en sort.

Il detecte Kenston et Poson heuristiquement en tout cas :)


On peut télécharger ça quelque part? :-)

Avatar
Nicolas Brulez
J'avais présenté mon moteur heuristique ici ya quelques années.
Ah bon? Je ne m'en souviens pas.



Oui tu m'avais répondu d'ailleur ;) Regarde sur Google.

On peut télécharger ça quelque part? :-)


Nop pour le moment c'est juste un projet perso quand j'ai le temps.
Je vais poster les resultats une fois que je l'aurai modifié pour
scanner un disque entier. Pour le moment c'est du scan à la demande.

--
Nicolas Brulez

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


Avatar
Frederic Bonroy

Nop pour le moment c'est juste un projet perso quand j'ai le temps.
Je vais poster les resultats une fois que je l'aurai modifié pour
scanner un disque entier. Pour le moment c'est du scan à la demande.


Ça y est, j'ai retrouvé le fil. Il est vrai que ça fait déjà un moment.

En ce qui me concerne, j'émule maintenant les 3 premières instructions
de la boucle (les Bxh quoi), je vais rajouter les autres. :-)
Ce qui me fiche le plus la trouille, et ce depuis toujours, c'est le
décodage des octets modr/m et SIB. Je les *hais* profondément. :-/

Avatar
AMcD
Frederic Bonroy wrote:

Ce qui me fiche le plus la trouille, et ce depuis toujours, c'est le
décodage des octets modr/m et SIB. Je les *hais* profondément. :-/


C'est pas franchement le plus pénible dans le désassemblage. Perso, ce qui
m'a toujours bien gavé c'est le 16/32 bits, la gestion des segments, les
segments override, les instructions sans mnémonnique, les BYTE PTR et cie,
les bugs...

Écrire un désassembleur basique ça prend quelques dizaines de lignes. Mais
prendre en compte les cas particuliers, ça muscle vite le nombre de lignes.
Heureusement, la FPU, les MMX, SSE et consort c'est facile.

Bon courage.

--
AMcD

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

Avatar
Frederic Bonroy
AMcD schreef:

C'est pas franchement le plus pénible dans le désassemblage. Perso, ce qui
m'a toujours bien gavé c'est le 16/32 bits, la gestion des segments, les
segments override, les instructions sans mnémonnique, les BYTE PTR et cie,
les bugs...


Beurk.

Écrire un désassembleur basique ça prend quelques dizaines de lignes. Mais
prendre en compte les cas particuliers, ça muscle vite le nombre de lignes.
Heureusement, la FPU, les MMX, SSE et consort c'est facile.


Quelques dizaines de lignes? Ben dans les sources d'OllyDbg il y a déjà
quelques centaines de lignes rien que pour le modrm/SIB, et c'est du C. :-)

En fait dans mon cas précis je peux théoriquement ignorer tout sauf
[ebx], mais ce ne serait pas propre. Faut que ce soit à peu près
universel quand-même.

Avatar
Frederic Bonroy
Nicolas Brulez schreef:

Je ne me souviens plus. Ça fait déjà très longtemps que je m'en sers.
J'ai dû régler quelque chose au tout début, mais plus après. C'est
pourquoi je suis étonné qu'il ait soudain changé de comportement.


Oui mais comme je te disais, sans reglages particuliers, ils marchent
bien, mais par moment sur certains exécutables, c'est possible qu'il ne
block pas sans une option particulière.

Regardes dans :
Options=>Debugging Options=>Events.
Que vois tu à "Make First pause at" ?


http://ollydbg.win32asmcommunity.net/index.php?action=vthread&forum=1&topicU6
(Message de Jan 28, 2004 05:00:00)

"Resume flag"? Je ne vois pas trop de quoi il parle là. Parce que je
viens d'avoir le même phénomène. Un programme écrit moi-même est exécuté
dès que je le charge dans OllyDbg tandis que sur un autre ordinateur ce
n'est pas le cas, et la version du débogueur est la même...


1 2 3 4 5