[Je dedie un nouveau fil a l'analyse spectrale, esperant distinguer
le bon troll de l'ivraie]
Or ces heuristiques semblent bien meilleurs pour detecter des
malwares de type "cheval de Troie en Delphi" que pour detecter
les derniers virus super-top-mode de 29A (d'apres ce que j'en
ai vu pour le premier et ce que j'en ai lu pour le second).
Or distinguer un dialer d'un password stealer d'un webdownloader
sur la base de statistiques sur les opcodes employes, je dois
bien dire que je n'y crois pas. Meme en considerant des courtes
series d'instructions, j'ai du mal a y croire...
Considerons uniquement les malwares "non parasitaires", intuitivement,
on peut se dire que l'AV doit employer une technique grosso-modo
similaire a vous et moi pour savoir si oui ou non un programme est
un malware. Prenons le cas le plus simple : un malware non packe'.
Comment procedez vous ? En ce qui me concerne, c'est tres basique :
- J'ouvre le machin avec un editeur hexa, et je regarde si il y a
des trucs suspects. La mention d'une clef HKLM/.../Run ou le nom
d'un executable sont des elements suspects.
La presence de MZ[...]PE
dans la section ressources (ou ailleurs que dans l'entete du
fichier) encore plus.
Idem pour des noms de processus correspondant
a des AV/firewall persos connus ou pour des commandes IRC (JOIN/
PRIVMSG...). La presence d'une URL (surtout un truc en no-ip
ou dyndns, incidemment), d'une IP ou d'un nom de fichier .bat peut
aussi etre un indice (beaucoup de backdoor utilisent un .bat pour
effacer le fichier a l'origine de l'infection). La presence de
"RCPT TO, DATA, HELO" peut meme etre indicatrice d'un mass-mailer.
Etc, etc.
- Je regarde la liste des fonctions importees. Certaines sont
caracteristiques de certains malwares : fonctions de pstorec.dll
pour un password stealer, CreateRemoteThread/WriteProcessMemory
pour une backdoor, des trucs MAPI pour un vers de messagerie, etc.
- Je regarde si le machin contient des menus/boites de dialogue/etc.
C'est idiot, mais la plupart des tojans ne contiennent que des
icones (eventuellement des messagebox simples).
Une fois cette courte etude preliminaire effectuee, je suis
incapable de dire avec certitude si le programme est sain, mais
je suis souvent capable d'affirmer qu'il ne l'est pas.
Dans le meme ordre d'idees, on voit souvent assez vite si les
chaines de caracteres sont cryptees. On peut aussi essayer de
savoir ce qui est passe' en argument a LoadLibrary/
GetModuleHandle/GetProcAddress, en emulant, au besoin.
Alors ne croyez vous pas que l'analyse spectrale porte plutot
sur ce genre de criteres ? Bien sur, c'est "low-tech" et tres
loin d'etre parfait comme methode. Mais pour une bonne partie
des malwares les moins sophistiques, ca fonctionne
raisonnablement bien.
Donc en fait, je ne crois pas que l'"analyse spectrale" porte
exclusivement ou principalement sur l'analyse des statistiques
des opcodes. Pour resumer. Juste sur l'analyse des "suites d'octets
de longueur suffisante qui ont une probabilite' nettement
plus marquee d'etre dans un malware que dans une application
legitime" et eventuellement des fonctions importees (et
pourquoi pas des ressources).
Ensuite, IMHO, il suffit de noter "critere present"-->1,
"critere absent"-->0, on obtient une liste de bits qui "decrit"
l'application en question (du point de vue des criteres retenus),
et qu'il suffit de comparer a des "masques" correspondant aux
types de malwares connus.
[Je dedie un nouveau fil a l'analyse spectrale, esperant distinguer
le bon troll de l'ivraie]
Or ces heuristiques semblent bien meilleurs pour detecter des
malwares de type "cheval de Troie en Delphi" que pour detecter
les derniers virus super-top-mode de 29A (d'apres ce que j'en
ai vu pour le premier et ce que j'en ai lu pour le second).
Or distinguer un dialer d'un password stealer d'un webdownloader
sur la base de statistiques sur les opcodes employes, je dois
bien dire que je n'y crois pas. Meme en considerant des courtes
series d'instructions, j'ai du mal a y croire...
Considerons uniquement les malwares "non parasitaires", intuitivement,
on peut se dire que l'AV doit employer une technique grosso-modo
similaire a vous et moi pour savoir si oui ou non un programme est
un malware. Prenons le cas le plus simple : un malware non packe'.
Comment procedez vous ? En ce qui me concerne, c'est tres basique :
- J'ouvre le machin avec un editeur hexa, et je regarde si il y a
des trucs suspects. La mention d'une clef HKLM/.../Run ou le nom
d'un executable sont des elements suspects.
La presence de MZ[...]PE
dans la section ressources (ou ailleurs que dans l'entete du
fichier) encore plus.
Idem pour des noms de processus correspondant
a des AV/firewall persos connus ou pour des commandes IRC (JOIN/
PRIVMSG...). La presence d'une URL (surtout un truc en no-ip
ou dyndns, incidemment), d'une IP ou d'un nom de fichier .bat peut
aussi etre un indice (beaucoup de backdoor utilisent un .bat pour
effacer le fichier a l'origine de l'infection). La presence de
"RCPT TO, DATA, HELO" peut meme etre indicatrice d'un mass-mailer.
Etc, etc.
- Je regarde la liste des fonctions importees. Certaines sont
caracteristiques de certains malwares : fonctions de pstorec.dll
pour un password stealer, CreateRemoteThread/WriteProcessMemory
pour une backdoor, des trucs MAPI pour un vers de messagerie, etc.
- Je regarde si le machin contient des menus/boites de dialogue/etc.
C'est idiot, mais la plupart des tojans ne contiennent que des
icones (eventuellement des messagebox simples).
Une fois cette courte etude preliminaire effectuee, je suis
incapable de dire avec certitude si le programme est sain, mais
je suis souvent capable d'affirmer qu'il ne l'est pas.
Dans le meme ordre d'idees, on voit souvent assez vite si les
chaines de caracteres sont cryptees. On peut aussi essayer de
savoir ce qui est passe' en argument a LoadLibrary/
GetModuleHandle/GetProcAddress, en emulant, au besoin.
Alors ne croyez vous pas que l'analyse spectrale porte plutot
sur ce genre de criteres ? Bien sur, c'est "low-tech" et tres
loin d'etre parfait comme methode. Mais pour une bonne partie
des malwares les moins sophistiques, ca fonctionne
raisonnablement bien.
Donc en fait, je ne crois pas que l'"analyse spectrale" porte
exclusivement ou principalement sur l'analyse des statistiques
des opcodes. Pour resumer. Juste sur l'analyse des "suites d'octets
de longueur suffisante qui ont une probabilite' nettement
plus marquee d'etre dans un malware que dans une application
legitime" et eventuellement des fonctions importees (et
pourquoi pas des ressources).
Ensuite, IMHO, il suffit de noter "critere present"-->1,
"critere absent"-->0, on obtient une liste de bits qui "decrit"
l'application en question (du point de vue des criteres retenus),
et qu'il suffit de comparer a des "masques" correspondant aux
types de malwares connus.
[Je dedie un nouveau fil a l'analyse spectrale, esperant distinguer
le bon troll de l'ivraie]
Or ces heuristiques semblent bien meilleurs pour detecter des
malwares de type "cheval de Troie en Delphi" que pour detecter
les derniers virus super-top-mode de 29A (d'apres ce que j'en
ai vu pour le premier et ce que j'en ai lu pour le second).
Or distinguer un dialer d'un password stealer d'un webdownloader
sur la base de statistiques sur les opcodes employes, je dois
bien dire que je n'y crois pas. Meme en considerant des courtes
series d'instructions, j'ai du mal a y croire...
Considerons uniquement les malwares "non parasitaires", intuitivement,
on peut se dire que l'AV doit employer une technique grosso-modo
similaire a vous et moi pour savoir si oui ou non un programme est
un malware. Prenons le cas le plus simple : un malware non packe'.
Comment procedez vous ? En ce qui me concerne, c'est tres basique :
- J'ouvre le machin avec un editeur hexa, et je regarde si il y a
des trucs suspects. La mention d'une clef HKLM/.../Run ou le nom
d'un executable sont des elements suspects.
La presence de MZ[...]PE
dans la section ressources (ou ailleurs que dans l'entete du
fichier) encore plus.
Idem pour des noms de processus correspondant
a des AV/firewall persos connus ou pour des commandes IRC (JOIN/
PRIVMSG...). La presence d'une URL (surtout un truc en no-ip
ou dyndns, incidemment), d'une IP ou d'un nom de fichier .bat peut
aussi etre un indice (beaucoup de backdoor utilisent un .bat pour
effacer le fichier a l'origine de l'infection). La presence de
"RCPT TO, DATA, HELO" peut meme etre indicatrice d'un mass-mailer.
Etc, etc.
- Je regarde la liste des fonctions importees. Certaines sont
caracteristiques de certains malwares : fonctions de pstorec.dll
pour un password stealer, CreateRemoteThread/WriteProcessMemory
pour une backdoor, des trucs MAPI pour un vers de messagerie, etc.
- Je regarde si le machin contient des menus/boites de dialogue/etc.
C'est idiot, mais la plupart des tojans ne contiennent que des
icones (eventuellement des messagebox simples).
Une fois cette courte etude preliminaire effectuee, je suis
incapable de dire avec certitude si le programme est sain, mais
je suis souvent capable d'affirmer qu'il ne l'est pas.
Dans le meme ordre d'idees, on voit souvent assez vite si les
chaines de caracteres sont cryptees. On peut aussi essayer de
savoir ce qui est passe' en argument a LoadLibrary/
GetModuleHandle/GetProcAddress, en emulant, au besoin.
Alors ne croyez vous pas que l'analyse spectrale porte plutot
sur ce genre de criteres ? Bien sur, c'est "low-tech" et tres
loin d'etre parfait comme methode. Mais pour une bonne partie
des malwares les moins sophistiques, ca fonctionne
raisonnablement bien.
Donc en fait, je ne crois pas que l'"analyse spectrale" porte
exclusivement ou principalement sur l'analyse des statistiques
des opcodes. Pour resumer. Juste sur l'analyse des "suites d'octets
de longueur suffisante qui ont une probabilite' nettement
plus marquee d'etre dans un malware que dans une application
legitime" et eventuellement des fonctions importees (et
pourquoi pas des ressources).
Ensuite, IMHO, il suffit de noter "critere present"-->1,
"critere absent"-->0, on obtient une liste de bits qui "decrit"
l'application en question (du point de vue des criteres retenus),
et qu'il suffit de comparer a des "masques" correspondant aux
types de malwares connus.
Évidemment ! C'est du pipeau. Surtout que, comme je l'ai déjà dit, tu peux
toujours t'arranger pour "simuler" voire même dissimuler. Et quand ce genre
de technique sera au point, eh bien il suffira d'écrire un moteur qui simule
le fonctionneemnt d'un producteur de code "règlementaire" (comilateur dûment
certifié).
- J'ouvre le machin avec un editeur hexa, et je regarde si il y a
des trucs suspects. La mention d'une clef HKLM/.../Run ou le nom
d'un executable sont des elements suspects.
Ben si c'est crypté tu vas pas loin avec ta technique...
[MZ...PE dans le fichier]
Pourquoi ? Tu peux très bien avori ça dans un programme reglo. Par exemple,
un utilitaire système qui utilise un driver installé à al volée, il l'a dans
les ressources, et lors de l'exécution, il l'enregistre en service, etc.
Oui, c'est rare, mais c'est parfaitement valide.
[Chaines de caracteres]
Tout cela n'est valable que si c'est pas crypté ton truc...
[Imports de fonctions]
Ça aussi, c'est de moins en moins directement visible dans le code.
Et comme je l'ai montré dans une xemple, c'est trop facile
à planquer... rappelle-toi
[...]
Les virus avec boîte de dialogue, il y en a un tas quand même ! Tous ceux
qui se font passer pour des patches, etc.
Une fois cette courte etude preliminaire effectuee, je suis
incapable de dire avec certitude si le programme est sain, mais
je suis souvent capable d'affirmer qu'il ne l'est pas.
Lol. Belle envolée :o).
Alors ne croyez vous pas que l'analyse spectrale porte plutot
sur ce genre de criteres ? Bien sur, c'est "low-tech" et tres
loin d'etre parfait comme methode. Mais pour une bonne partie
des malwares les moins sophistiques, ca fonctionne
raisonnablement bien.
Non, je ne crois pas. Je pense moi que c'est plutôt basé sur des
caractéristiques bien précises, comme des "signatures". Comme, par exemple,
si tu étudies le code généré par un compilateur. Chacun utilise des choses
qui lui sont propres et dont tu peux t'inspirer pour montrer leur
"signature". Au besoin, je détaille.
Sinon moi, pour les malwares, je ne fait pas comme ça. De nos jours, c'est
de plus en plus :
- crypté.
- brouillé. Ça c'est fun. par exemple, tu décale de 10h la valeur de 4Ko de
code que tu descrambles (clin d'oeil à LaDDL) ensuite a l'exécution. Bref,
quand tu désassembles, tu voies rien.
- obfusqué. C'est à dire que t'as tout un tas de code qui ne sert à rien.
Donc, ça brouille ton analyse. Et il suffit d'inserer des calls, d'ouvrir
des fichiers temporaires, etc. T'es vite noyé...
Bref, une simple analyse avec un éditeur hexa te mène pas loin. Tu ne peux
même pas désassembler puisque 99% des désassembleur vont produire du code
sans queue ni tête.
Donc, moi, je fais ainsi :
- Je regarde si c'est packé. Déjà, ça peut être la galère pour trouver le
bon unpacker !
- Je regarde si c'est scrambled (hihi) et tous les gags genre EPO.
- Ensuite je désassemble. Là il peut y avoir encore des gags, IAT déplacée,
etc.
[...]
- Au pire, tu dumpes la mémoire une fois que le code a été décompacté,
décrypté, etc. Mais faut avouer qu'il y a parfois des pénibles...
Évidemment ! C'est du pipeau. Surtout que, comme je l'ai déjà dit, tu peux
toujours t'arranger pour "simuler" voire même dissimuler. Et quand ce genre
de technique sera au point, eh bien il suffira d'écrire un moteur qui simule
le fonctionneemnt d'un producteur de code "règlementaire" (comilateur dûment
certifié).
- J'ouvre le machin avec un editeur hexa, et je regarde si il y a
des trucs suspects. La mention d'une clef HKLM/.../Run ou le nom
d'un executable sont des elements suspects.
Ben si c'est crypté tu vas pas loin avec ta technique...
[MZ...PE dans le fichier]
Pourquoi ? Tu peux très bien avori ça dans un programme reglo. Par exemple,
un utilitaire système qui utilise un driver installé à al volée, il l'a dans
les ressources, et lors de l'exécution, il l'enregistre en service, etc.
Oui, c'est rare, mais c'est parfaitement valide.
[Chaines de caracteres]
Tout cela n'est valable que si c'est pas crypté ton truc...
[Imports de fonctions]
Ça aussi, c'est de moins en moins directement visible dans le code.
Et comme je l'ai montré dans une xemple, c'est trop facile
à planquer... rappelle-toi
[...]
Les virus avec boîte de dialogue, il y en a un tas quand même ! Tous ceux
qui se font passer pour des patches, etc.
Une fois cette courte etude preliminaire effectuee, je suis
incapable de dire avec certitude si le programme est sain, mais
je suis souvent capable d'affirmer qu'il ne l'est pas.
Lol. Belle envolée :o).
Alors ne croyez vous pas que l'analyse spectrale porte plutot
sur ce genre de criteres ? Bien sur, c'est "low-tech" et tres
loin d'etre parfait comme methode. Mais pour une bonne partie
des malwares les moins sophistiques, ca fonctionne
raisonnablement bien.
Non, je ne crois pas. Je pense moi que c'est plutôt basé sur des
caractéristiques bien précises, comme des "signatures". Comme, par exemple,
si tu étudies le code généré par un compilateur. Chacun utilise des choses
qui lui sont propres et dont tu peux t'inspirer pour montrer leur
"signature". Au besoin, je détaille.
Sinon moi, pour les malwares, je ne fait pas comme ça. De nos jours, c'est
de plus en plus :
- crypté.
- brouillé. Ça c'est fun. par exemple, tu décale de 10h la valeur de 4Ko de
code que tu descrambles (clin d'oeil à LaDDL) ensuite a l'exécution. Bref,
quand tu désassembles, tu voies rien.
- obfusqué. C'est à dire que t'as tout un tas de code qui ne sert à rien.
Donc, ça brouille ton analyse. Et il suffit d'inserer des calls, d'ouvrir
des fichiers temporaires, etc. T'es vite noyé...
Bref, une simple analyse avec un éditeur hexa te mène pas loin. Tu ne peux
même pas désassembler puisque 99% des désassembleur vont produire du code
sans queue ni tête.
Donc, moi, je fais ainsi :
- Je regarde si c'est packé. Déjà, ça peut être la galère pour trouver le
bon unpacker !
- Je regarde si c'est scrambled (hihi) et tous les gags genre EPO.
- Ensuite je désassemble. Là il peut y avoir encore des gags, IAT déplacée,
etc.
[...]
- Au pire, tu dumpes la mémoire une fois que le code a été décompacté,
décrypté, etc. Mais faut avouer qu'il y a parfois des pénibles...
Évidemment ! C'est du pipeau. Surtout que, comme je l'ai déjà dit, tu peux
toujours t'arranger pour "simuler" voire même dissimuler. Et quand ce genre
de technique sera au point, eh bien il suffira d'écrire un moteur qui simule
le fonctionneemnt d'un producteur de code "règlementaire" (comilateur dûment
certifié).
- J'ouvre le machin avec un editeur hexa, et je regarde si il y a
des trucs suspects. La mention d'une clef HKLM/.../Run ou le nom
d'un executable sont des elements suspects.
Ben si c'est crypté tu vas pas loin avec ta technique...
[MZ...PE dans le fichier]
Pourquoi ? Tu peux très bien avori ça dans un programme reglo. Par exemple,
un utilitaire système qui utilise un driver installé à al volée, il l'a dans
les ressources, et lors de l'exécution, il l'enregistre en service, etc.
Oui, c'est rare, mais c'est parfaitement valide.
[Chaines de caracteres]
Tout cela n'est valable que si c'est pas crypté ton truc...
[Imports de fonctions]
Ça aussi, c'est de moins en moins directement visible dans le code.
Et comme je l'ai montré dans une xemple, c'est trop facile
à planquer... rappelle-toi
[...]
Les virus avec boîte de dialogue, il y en a un tas quand même ! Tous ceux
qui se font passer pour des patches, etc.
Une fois cette courte etude preliminaire effectuee, je suis
incapable de dire avec certitude si le programme est sain, mais
je suis souvent capable d'affirmer qu'il ne l'est pas.
Lol. Belle envolée :o).
Alors ne croyez vous pas que l'analyse spectrale porte plutot
sur ce genre de criteres ? Bien sur, c'est "low-tech" et tres
loin d'etre parfait comme methode. Mais pour une bonne partie
des malwares les moins sophistiques, ca fonctionne
raisonnablement bien.
Non, je ne crois pas. Je pense moi que c'est plutôt basé sur des
caractéristiques bien précises, comme des "signatures". Comme, par exemple,
si tu étudies le code généré par un compilateur. Chacun utilise des choses
qui lui sont propres et dont tu peux t'inspirer pour montrer leur
"signature". Au besoin, je détaille.
Sinon moi, pour les malwares, je ne fait pas comme ça. De nos jours, c'est
de plus en plus :
- crypté.
- brouillé. Ça c'est fun. par exemple, tu décale de 10h la valeur de 4Ko de
code que tu descrambles (clin d'oeil à LaDDL) ensuite a l'exécution. Bref,
quand tu désassembles, tu voies rien.
- obfusqué. C'est à dire que t'as tout un tas de code qui ne sert à rien.
Donc, ça brouille ton analyse. Et il suffit d'inserer des calls, d'ouvrir
des fichiers temporaires, etc. T'es vite noyé...
Bref, une simple analyse avec un éditeur hexa te mène pas loin. Tu ne peux
même pas désassembler puisque 99% des désassembleur vont produire du code
sans queue ni tête.
Donc, moi, je fais ainsi :
- Je regarde si c'est packé. Déjà, ça peut être la galère pour trouver le
bon unpacker !
- Je regarde si c'est scrambled (hihi) et tous les gags genre EPO.
- Ensuite je désassemble. Là il peut y avoir encore des gags, IAT déplacée,
etc.
[...]
- Au pire, tu dumpes la mémoire une fois que le code a été décompacté,
décrypté, etc. Mais faut avouer qu'il y a parfois des pénibles...
Pour une fois que ca n'est pas moi qui (ab)use du "il suffit" ;-)
Mais justement, c'est encore plus simple que ca : la +part des
malwares actuels sont ecrits en langage de haut niveau...et compiles
avec un
compilo dument certifie'.
Ben si c'est crypté tu vas pas loin avec ta technique...
Ben justement. Ma technique _commence_ toujours comme ca. Entre
autres, ca m'evite les problemes de chargement de dll tandis
que je suis entrain de debugger Notepad ;o)
Si c'est crypte' et que c'est relativement apparent, faut passer
au plan B (mais bon, la derniere fois que j'ai debugge' une verole,
je me suis betement fait infecter, apres avoir distraitement appuye'
sur la mauvaise touche...).
Pourquoi ? Tu peux très bien avori ça dans un programme reglo. Par
exemple, un utilitaire système qui utilise un driver installé à al
volée, il l'a dans les ressources, et lors de l'exécution, il
l'enregistre en service, etc. Oui, c'est rare, mais c'est
parfaitement valide.
C'est rare dans un contexte normal, mais extremement courant chez
pas mal de droppers de trojans. C'est donc un bon critere heuristique.
Il faut bien sur considerer le fait que ce critere seul n'est pas
determinant, mais qu'il sera par la suite combine' a d'autres criteres
(eux-meme non determinants individuelement) pour donner le verdict
final.
[Chaines de caracteres]
Tout cela n'est valable que si c'est pas crypté ton truc...
Bah oui. Remarques qu'on peut peut-etre jouer au meme type de
jeu en ajoutant une phase d'emulation preliminaire, si on realise
qu'on a affaire a un truc crypte'.
Ça aussi, c'est de moins en moins directement visible dans le code.
Heu...de moins en moins. Pas d'accord. Il y a de plus en plus
de malwares tres peu perfectionnees. Bien 90% du total....et
on espere de toute facon pas mieux des heuristiques.
Et comme je l'ai montré dans une xemple, c'est trop facile
à planquer... rappelle-toi
[...]
J'ai pas oublie'. Mais ca reste la perle rare chez les malwares
actuels ;-)
Les virus avec boîte de dialogue, il y en a un tas quand même ! Tous
ceux qui se font passer pour des patches, etc.
OK. Disons que c'est rare chez certains types de malwares, et
plutot courant pour les executables win32 standards...
et que
ca peut donc servir de criteres pour les malwares en question
(dialers/keyloggers, etc.). Je voulais juste illustrer le fait
que certains criteres sont plutot indicatifs de la presence
d'un malware tandis que d'autres sont plutot indicatifs d'un
programme sain. Encore une fois, c'est purement statistique.
Voui, mais c'est exactement ce que je veux dire : il est parfois
plus difficile de savoir si un programme est sain que de savoir
s'il est infecte'.
Par exemple, si le notepad de Fred etait
infecte' par un bon vieil infecteur de PE polymorphe avec EPO,
je serais a coup sur passe' a cote'. Par contre, un coup d'oeil a
un serveur optix via un editeur hexadecimal et je suis fixe'.
Non, je ne crois pas. Je pense moi que c'est plutôt basé sur des
caractéristiques bien précises, comme des "signatures". Comme, par
exemple, si tu étudies le code généré par un compilateur. Chacun
utilise des choses qui lui sont propres et dont tu peux t'inspirer
pour montrer leur "signature". Au besoin, je détaille.
Oui, mais comme je le disais en debut de message, les AVs pour
lesquels il est question d'analyse spectrale se debrouillent
manifestement mieux avec les malwares de haut niveau. Alors
je sais bien qu'il est tentant de considerer que tout programme
Delphi est un trojan ;o), mais sorti de ca, la connaissance
du compilo apporte peu pour les trucs en HLL.
Sinon moi, pour les malwares, je ne fait pas comme ça. De nos jours,
c'est de plus en plus :
De plus en plus, je dirais pas ca. Il me semble que la majorite'
de la "production" reste extremement basique, meme si quelques
trucs sortent du lot.
- crypté.
Pas si courant que ca dans les malwares "de tous les jours".
Generalement, seules une ou deux chaines de caracteres (celles
permettant d'identifier celui qui a diffuse' une backdoor par
exemple) sont cryptees.
- brouillé. Ça c'est fun. par exemple, tu décale de 10h la valeur de
4Ko de code que tu descrambles (clin d'oeil à LaDDL) ensuite a
l'exécution. Bref, quand tu désassembles, tu voies rien.
J'ai surtout l'impression que beaucoup utilisent des outils
tout faits a la krypton, etc.
- obfusqué. C'est à dire que t'as tout un tas de code qui ne sert à
rien. Donc, ça brouille ton analyse. Et il suffit d'inserer des
calls, d'ouvrir des fichiers temporaires, etc. T'es vite noyé...
Ca c'est malin, mais j'ai l'impression que c'est plutot rare. T'as
des exemples ?
Une fois depackes, tu peux traiter 90% des merdouilles avec un editeur
hexa et un desassembleur, amha. Pour le reste, c'est sur que c'est
insuffisant.
Voui, la derniere fois, quand je me suis infecte', j'ai au moins pu
recuperer un dump. Le lot de consolation, en quelque sorte...
Pour une fois que ca n'est pas moi qui (ab)use du "il suffit" ;-)
Mais justement, c'est encore plus simple que ca : la +part des
malwares actuels sont ecrits en langage de haut niveau...et compiles
avec un
compilo dument certifie'.
Ben si c'est crypté tu vas pas loin avec ta technique...
Ben justement. Ma technique _commence_ toujours comme ca. Entre
autres, ca m'evite les problemes de chargement de dll tandis
que je suis entrain de debugger Notepad ;o)
Si c'est crypte' et que c'est relativement apparent, faut passer
au plan B (mais bon, la derniere fois que j'ai debugge' une verole,
je me suis betement fait infecter, apres avoir distraitement appuye'
sur la mauvaise touche...).
Pourquoi ? Tu peux très bien avori ça dans un programme reglo. Par
exemple, un utilitaire système qui utilise un driver installé à al
volée, il l'a dans les ressources, et lors de l'exécution, il
l'enregistre en service, etc. Oui, c'est rare, mais c'est
parfaitement valide.
C'est rare dans un contexte normal, mais extremement courant chez
pas mal de droppers de trojans. C'est donc un bon critere heuristique.
Il faut bien sur considerer le fait que ce critere seul n'est pas
determinant, mais qu'il sera par la suite combine' a d'autres criteres
(eux-meme non determinants individuelement) pour donner le verdict
final.
[Chaines de caracteres]
Tout cela n'est valable que si c'est pas crypté ton truc...
Bah oui. Remarques qu'on peut peut-etre jouer au meme type de
jeu en ajoutant une phase d'emulation preliminaire, si on realise
qu'on a affaire a un truc crypte'.
Ça aussi, c'est de moins en moins directement visible dans le code.
Heu...de moins en moins. Pas d'accord. Il y a de plus en plus
de malwares tres peu perfectionnees. Bien 90% du total....et
on espere de toute facon pas mieux des heuristiques.
Et comme je l'ai montré dans une xemple, c'est trop facile
à planquer... rappelle-toi
[...]
J'ai pas oublie'. Mais ca reste la perle rare chez les malwares
actuels ;-)
Les virus avec boîte de dialogue, il y en a un tas quand même ! Tous
ceux qui se font passer pour des patches, etc.
OK. Disons que c'est rare chez certains types de malwares, et
plutot courant pour les executables win32 standards...
et que
ca peut donc servir de criteres pour les malwares en question
(dialers/keyloggers, etc.). Je voulais juste illustrer le fait
que certains criteres sont plutot indicatifs de la presence
d'un malware tandis que d'autres sont plutot indicatifs d'un
programme sain. Encore une fois, c'est purement statistique.
Voui, mais c'est exactement ce que je veux dire : il est parfois
plus difficile de savoir si un programme est sain que de savoir
s'il est infecte'.
Par exemple, si le notepad de Fred etait
infecte' par un bon vieil infecteur de PE polymorphe avec EPO,
je serais a coup sur passe' a cote'. Par contre, un coup d'oeil a
un serveur optix via un editeur hexadecimal et je suis fixe'.
Non, je ne crois pas. Je pense moi que c'est plutôt basé sur des
caractéristiques bien précises, comme des "signatures". Comme, par
exemple, si tu étudies le code généré par un compilateur. Chacun
utilise des choses qui lui sont propres et dont tu peux t'inspirer
pour montrer leur "signature". Au besoin, je détaille.
Oui, mais comme je le disais en debut de message, les AVs pour
lesquels il est question d'analyse spectrale se debrouillent
manifestement mieux avec les malwares de haut niveau. Alors
je sais bien qu'il est tentant de considerer que tout programme
Delphi est un trojan ;o), mais sorti de ca, la connaissance
du compilo apporte peu pour les trucs en HLL.
Sinon moi, pour les malwares, je ne fait pas comme ça. De nos jours,
c'est de plus en plus :
De plus en plus, je dirais pas ca. Il me semble que la majorite'
de la "production" reste extremement basique, meme si quelques
trucs sortent du lot.
- crypté.
Pas si courant que ca dans les malwares "de tous les jours".
Generalement, seules une ou deux chaines de caracteres (celles
permettant d'identifier celui qui a diffuse' une backdoor par
exemple) sont cryptees.
- brouillé. Ça c'est fun. par exemple, tu décale de 10h la valeur de
4Ko de code que tu descrambles (clin d'oeil à LaDDL) ensuite a
l'exécution. Bref, quand tu désassembles, tu voies rien.
J'ai surtout l'impression que beaucoup utilisent des outils
tout faits a la krypton, etc.
- obfusqué. C'est à dire que t'as tout un tas de code qui ne sert à
rien. Donc, ça brouille ton analyse. Et il suffit d'inserer des
calls, d'ouvrir des fichiers temporaires, etc. T'es vite noyé...
Ca c'est malin, mais j'ai l'impression que c'est plutot rare. T'as
des exemples ?
Une fois depackes, tu peux traiter 90% des merdouilles avec un editeur
hexa et un desassembleur, amha. Pour le reste, c'est sur que c'est
insuffisant.
Voui, la derniere fois, quand je me suis infecte', j'ai au moins pu
recuperer un dump. Le lot de consolation, en quelque sorte...
Pour une fois que ca n'est pas moi qui (ab)use du "il suffit" ;-)
Mais justement, c'est encore plus simple que ca : la +part des
malwares actuels sont ecrits en langage de haut niveau...et compiles
avec un
compilo dument certifie'.
Ben si c'est crypté tu vas pas loin avec ta technique...
Ben justement. Ma technique _commence_ toujours comme ca. Entre
autres, ca m'evite les problemes de chargement de dll tandis
que je suis entrain de debugger Notepad ;o)
Si c'est crypte' et que c'est relativement apparent, faut passer
au plan B (mais bon, la derniere fois que j'ai debugge' une verole,
je me suis betement fait infecter, apres avoir distraitement appuye'
sur la mauvaise touche...).
Pourquoi ? Tu peux très bien avori ça dans un programme reglo. Par
exemple, un utilitaire système qui utilise un driver installé à al
volée, il l'a dans les ressources, et lors de l'exécution, il
l'enregistre en service, etc. Oui, c'est rare, mais c'est
parfaitement valide.
C'est rare dans un contexte normal, mais extremement courant chez
pas mal de droppers de trojans. C'est donc un bon critere heuristique.
Il faut bien sur considerer le fait que ce critere seul n'est pas
determinant, mais qu'il sera par la suite combine' a d'autres criteres
(eux-meme non determinants individuelement) pour donner le verdict
final.
[Chaines de caracteres]
Tout cela n'est valable que si c'est pas crypté ton truc...
Bah oui. Remarques qu'on peut peut-etre jouer au meme type de
jeu en ajoutant une phase d'emulation preliminaire, si on realise
qu'on a affaire a un truc crypte'.
Ça aussi, c'est de moins en moins directement visible dans le code.
Heu...de moins en moins. Pas d'accord. Il y a de plus en plus
de malwares tres peu perfectionnees. Bien 90% du total....et
on espere de toute facon pas mieux des heuristiques.
Et comme je l'ai montré dans une xemple, c'est trop facile
à planquer... rappelle-toi
[...]
J'ai pas oublie'. Mais ca reste la perle rare chez les malwares
actuels ;-)
Les virus avec boîte de dialogue, il y en a un tas quand même ! Tous
ceux qui se font passer pour des patches, etc.
OK. Disons que c'est rare chez certains types de malwares, et
plutot courant pour les executables win32 standards...
et que
ca peut donc servir de criteres pour les malwares en question
(dialers/keyloggers, etc.). Je voulais juste illustrer le fait
que certains criteres sont plutot indicatifs de la presence
d'un malware tandis que d'autres sont plutot indicatifs d'un
programme sain. Encore une fois, c'est purement statistique.
Voui, mais c'est exactement ce que je veux dire : il est parfois
plus difficile de savoir si un programme est sain que de savoir
s'il est infecte'.
Par exemple, si le notepad de Fred etait
infecte' par un bon vieil infecteur de PE polymorphe avec EPO,
je serais a coup sur passe' a cote'. Par contre, un coup d'oeil a
un serveur optix via un editeur hexadecimal et je suis fixe'.
Non, je ne crois pas. Je pense moi que c'est plutôt basé sur des
caractéristiques bien précises, comme des "signatures". Comme, par
exemple, si tu étudies le code généré par un compilateur. Chacun
utilise des choses qui lui sont propres et dont tu peux t'inspirer
pour montrer leur "signature". Au besoin, je détaille.
Oui, mais comme je le disais en debut de message, les AVs pour
lesquels il est question d'analyse spectrale se debrouillent
manifestement mieux avec les malwares de haut niveau. Alors
je sais bien qu'il est tentant de considerer que tout programme
Delphi est un trojan ;o), mais sorti de ca, la connaissance
du compilo apporte peu pour les trucs en HLL.
Sinon moi, pour les malwares, je ne fait pas comme ça. De nos jours,
c'est de plus en plus :
De plus en plus, je dirais pas ca. Il me semble que la majorite'
de la "production" reste extremement basique, meme si quelques
trucs sortent du lot.
- crypté.
Pas si courant que ca dans les malwares "de tous les jours".
Generalement, seules une ou deux chaines de caracteres (celles
permettant d'identifier celui qui a diffuse' une backdoor par
exemple) sont cryptees.
- brouillé. Ça c'est fun. par exemple, tu décale de 10h la valeur de
4Ko de code que tu descrambles (clin d'oeil à LaDDL) ensuite a
l'exécution. Bref, quand tu désassembles, tu voies rien.
J'ai surtout l'impression que beaucoup utilisent des outils
tout faits a la krypton, etc.
- obfusqué. C'est à dire que t'as tout un tas de code qui ne sert à
rien. Donc, ça brouille ton analyse. Et il suffit d'inserer des
calls, d'ouvrir des fichiers temporaires, etc. T'es vite noyé...
Ca c'est malin, mais j'ai l'impression que c'est plutot rare. T'as
des exemples ?
Une fois depackes, tu peux traiter 90% des merdouilles avec un editeur
hexa et un desassembleur, amha. Pour le reste, c'est sur que c'est
insuffisant.
Voui, la derniere fois, quand je me suis infecte', j'ai au moins pu
recuperer un dump. Le lot de consolation, en quelque sorte...
Or distinguer un dialer d'un password stealer d'un webdownloader
sur la base de statistiques sur les opcodes employes, je dois
bien dire que je n'y crois pas. Meme en considerant des courtes
series d'instructions, j'ai du mal a y croire...
Évidemment ! C'est du pipeau. Surtout que, comme je l'ai déjà dit, tu peux
toujours t'arranger pour "simuler" voire même dissimuler.
Oui, c'est rare, mais c'est parfaitement valide.
Or distinguer un dialer d'un password stealer d'un webdownloader
sur la base de statistiques sur les opcodes employes, je dois
bien dire que je n'y crois pas. Meme en considerant des courtes
series d'instructions, j'ai du mal a y croire...
Évidemment ! C'est du pipeau. Surtout que, comme je l'ai déjà dit, tu peux
toujours t'arranger pour "simuler" voire même dissimuler.
Oui, c'est rare, mais c'est parfaitement valide.
Or distinguer un dialer d'un password stealer d'un webdownloader
sur la base de statistiques sur les opcodes employes, je dois
bien dire que je n'y crois pas. Meme en considerant des courtes
series d'instructions, j'ai du mal a y croire...
Évidemment ! C'est du pipeau. Surtout que, comme je l'ai déjà dit, tu peux
toujours t'arranger pour "simuler" voire même dissimuler.
Oui, c'est rare, mais c'est parfaitement valide.
Or distinguer un dialer d'un password stealer d'un webdownloader
sur la base de statistiques sur les opcodes employes, je dois
bien dire que je n'y crois pas.
Donc en fait, je ne crois pas que l'"analyse spectrale" porte
exclusivement ou principalement sur l'analyse des statistiques
des opcodes. Pour resumer. Juste sur l'analyse des "suites d'octets
de longueur suffisante qui ont une probabilite' nettement
plus marquee d'etre dans un malware que dans une application
legitime" et eventuellement des fonctions importees (et
pourquoi pas des ressources).
Or distinguer un dialer d'un password stealer d'un webdownloader
sur la base de statistiques sur les opcodes employes, je dois
bien dire que je n'y crois pas.
Donc en fait, je ne crois pas que l'"analyse spectrale" porte
exclusivement ou principalement sur l'analyse des statistiques
des opcodes. Pour resumer. Juste sur l'analyse des "suites d'octets
de longueur suffisante qui ont une probabilite' nettement
plus marquee d'etre dans un malware que dans une application
legitime" et eventuellement des fonctions importees (et
pourquoi pas des ressources).
Or distinguer un dialer d'un password stealer d'un webdownloader
sur la base de statistiques sur les opcodes employes, je dois
bien dire que je n'y crois pas.
Donc en fait, je ne crois pas que l'"analyse spectrale" porte
exclusivement ou principalement sur l'analyse des statistiques
des opcodes. Pour resumer. Juste sur l'analyse des "suites d'octets
de longueur suffisante qui ont une probabilite' nettement
plus marquee d'etre dans un malware que dans une application
legitime" et eventuellement des fonctions importees (et
pourquoi pas des ressources).
*A propos, il parait que ca a ete integre' a la derniere version
d'Antivir. J'ai cherche un peu sur le site web, j'ai rien vu.
Tu confirmes, Frederic ?
*A propos, il parait que ca a ete integre' a la derniere version
d'Antivir. J'ai cherche un peu sur le site web, j'ai rien vu.
Tu confirmes, Frederic ?
*A propos, il parait que ca a ete integre' a la derniere version
d'Antivir. J'ai cherche un peu sur le site web, j'ai rien vu.
Tu confirmes, Frederic ?
Les deux fois ou on a parle' d'"analyse spectrale" ici, ca
concernait les heuristiques d'avlexa* et de nod.
[...]
Les deux fois ou on a parle' d'"analyse spectrale" ici, ca
concernait les heuristiques d'avlexa* et de nod.
[...]
Les deux fois ou on a parle' d'"analyse spectrale" ici, ca
concernait les heuristiques d'avlexa* et de nod.
[...]
Comment ça fonctionne? L'émulateur comptabilise pour chaque adresse dont
l'instruction qui s'y trouve est exécutée le nombre de fois qu'elle a
été appelée. Ensuite la moyenne est calculée. Puis le programme
recherche des séries d'adresses dont chaque membre a été appelé plus
souvent que la moyenne. Ces séries doivent être longues d'au moins 5
instructions (j'ai choisi ça au hasard).
Comment ça fonctionne? L'émulateur comptabilise pour chaque adresse dont
l'instruction qui s'y trouve est exécutée le nombre de fois qu'elle a
été appelée. Ensuite la moyenne est calculée. Puis le programme
recherche des séries d'adresses dont chaque membre a été appelé plus
souvent que la moyenne. Ces séries doivent être longues d'au moins 5
instructions (j'ai choisi ça au hasard).
Comment ça fonctionne? L'émulateur comptabilise pour chaque adresse dont
l'instruction qui s'y trouve est exécutée le nombre de fois qu'elle a
été appelée. Ensuite la moyenne est calculée. Puis le programme
recherche des séries d'adresses dont chaque membre a été appelé plus
souvent que la moyenne. Ces séries doivent être longues d'au moins 5
instructions (j'ai choisi ça au hasard).
Heu, question stupide : tu risques pas de detecter les fonctions
appelees un peu trop souvent avec cette methode, en plus des
boucles ?
Faudrait peut-etre compter le nombre de calls qui pointent vers
le debut de chacun des blocs repere' et soustraire ce nombre
moins un a ton decompte (ou quelque chose du genre). Qu'en penses-tu ?
Heu, question stupide : tu risques pas de detecter les fonctions
appelees un peu trop souvent avec cette methode, en plus des
boucles ?
Faudrait peut-etre compter le nombre de calls qui pointent vers
le debut de chacun des blocs repere' et soustraire ce nombre
moins un a ton decompte (ou quelque chose du genre). Qu'en penses-tu ?
Heu, question stupide : tu risques pas de detecter les fonctions
appelees un peu trop souvent avec cette methode, en plus des
boucles ?
Faudrait peut-etre compter le nombre de calls qui pointent vers
le debut de chacun des blocs repere' et soustraire ce nombre
moins un a ton decompte (ou quelque chose du genre). Qu'en penses-tu ?