Le Packing (For Newbies) Part 1

Il y a quelques temps j’ai reçu un mail m’indiquant un soucis de facturation quelconque  Ce mail contenait, hooo joie, un executable nommé facture.exe tout simplement attaché au mail. Je me suis empressé de regarder la bête :

Vous pouvez retrouver cette bête sur malware.lu sous le hash 17832c9a78b36c8a3133e2c2e24ebc3b9896763a

[MODE PROMO ON] Malware.lu, T’en veux, y en na ! T’en re-veux, il y en re-na ! [MODE PROMO OFF].

A quoi ressemble mon malware

Commençons par savoir ce que c’est. Pas de doutes c’est bien un executable PE (Portable Executable) pour Windows. ;)

Voyons voir avec quels DLLs ce truc est linké pour savoir ce que potentiellement il peut faire :

Ce qui est étonnant c’est qu’il ne semble pas appeller Winsock (généralement WS2_32.dll). Un malware sans support tcp cela ne se fait plus de nos jours. De plus ce genre de trucs par mail c’est généralement un droppeur dont l’unique but est d’installer une autre saloperie downloadée plus loin. Cherchons vraiiiiiiment, peut être charge t’il la dll dynamiquement.

Y a t’il une maigre strings en unicode ?

rien, non, rien de rien.

Toujours pas de winsock. Le salaud cache son jeu. Serait t’il packé ?

Mode Mother Knowledge ON…Mode Mother Knowledge ON…Mode Mother Knowledge ON…

Qu’est ce qu’un executable packé Maryse ?

Pour les avides de connaissance (voir son wikipedia). Un exécutable packé est un exécutable contenant un autre exécutable  Cela remonte du temps ou la disquette faisait pas plus de 740Ko. L’idée d’origine de cette aberration est la suivante; j’ai un gros exécutable. Je vais le compresser et autour je met un autre exécutable lanceur qui le décompressera en mémoire et lancera. Cela permet d’avoir un exécutable final plus petit qui fait juste un peut plus de travail au lancement initial.

Packed Exe

Les méchants créateurs de malware l’on vite compris. Non seulement ca compresse mais surtout l’autre effet c’est que cela offusque l’exécutable principal. Les chaines de caractères n’apparaissent plus en clair dans l’exécutable posé sur le disque. En plus ils peuvent ainsi réutiliser le même malware, si il est détecté un jour, il suffit de changer l’enveloppeur. Et les enveloppeur sont bien chiadés. Fait comme il faut pour perdre toute personne qui tente de les comprendres ou toutes sandbox d’antivirus.

C’est un sport prospère la création de packer, je vous conseille la lecture de cet article (Packers) pour vous rendre compte de la “vastitude” de la chose.

Dans le civil les packers dit “légaux” les plus connus sont UPX et Armadillo. Mais aucuns malware digne de ce nom n’utilise directement ceux ci pour une raison évidente; Ils sont connus, donc facile à dépacker car des tools existent pour ca. Donc les antivirus aussi savent les depacker. Au mieux on trouvera des version UPX trafiquées. Dans le peloton des packer utilisés on trouvera aussi FSG, Aspack, Morphine et Mew.

Allez, ca plait toujours , un petit TP. Packons un “hello world” avec un tools de niveau newbies:

Soit le programme hello.c suivant qui affiche le traditionnel hello world.

on le compile pour Windows, on le strip (pour virer les infos de debugeage) et on calcule son hash md5

Notre programme évidemment fonctionne à merveille.

Et si on recherche les chaines de charactères (ici toute chaine ascii de plus de 10 lettres), on retrouve bien notre “hello world” à l’intérieur du binaire.

Packons le, évidement son md5 change. Pour tout antivirus bas du front ce serait un ‘autre’ exécutable.

Et il marche toujours (C’est un peu le but).

Mais par contre, la chaine “hello world” maintenant compressée dans l’exécutable à disparue :

Alors imaginez maintenant un packer dont le seul but est de cacher le vrai payload au yeux des antivirus, il aura 2 buts dans la vie; Cacher ‘Fortement’ le vrai payload et rendre très compliqué la décompression du vrai exécutable par un être humain ou un antivirus. D’autres malwares (Probablement russes) poussent le vice et utilisent le concept des Matriochka et repackent l’executable déja packé.

Bien sur on vient juste d’effleurer le haut de l’iceberg. Tous les packers ne sortent pas un second exécutable tout propre en mémoire, certains décompressent juste un bout de code sur la heap et sautent dessus. D’autre implémentent une machine virtuelle propriétaire “à la java”, le tout pourris d’antidebugger juste pour le fun. Et là on fait moins le mariole.

Mode Mother Knowledge OFF…Mode Mother Knowledge OFF…Mode Mother Knowledge OFF…

Mais reprenons notre facture.exe.

Yara qui ri !

Maintenant que l’on sait ce qu’est un packer. Comment savoir si notre facture.exe est packé ? Le premier indice, on vient de le voir c’est de regarder les strings et les fonctions importées dans l’exécutable, si le résultat est très maigre pour un gros exécutable, c’est louche.

Le second indice c’est de regarder les segments de l’exécutable. En fonction du packer il peut réveler le packing. Avec UPX par exemple pour notre hello world packé, c’est sans équivoques :

Les noms des sections sont atypiques et en plus elle se chevauchent (Upx0 et Upx1 commencent à l’offset 200 dans le ficher). Un executable “normal” contient généralement toujours un .text ou .code et un .data. Notre hello world n’échappe pas à la règle:

Un compilateur “standard” ne sort jamais des clous suivants : ‘.text’, ‘.bss’, ‘.rdata’, ‘.data’, ‘.rsrc’, ‘.edata’, ‘.idata’, ‘.pdata’, ‘.debug’,  ‘.xdata’, ‘.reloc’, ‘.rsrc’, ‘.code’ et ‘.tls’

Qu’en est t’il de notre facture.exe … je dirait pas de bol :

Ici malheureusement, le nom des sections semble très normal.

Troisième indice pouvant révéler la présence d’un package (Ne pas perdre le moral), la taille, le type, et l’entropie des sections. Prenons un vrai executable pour comparer; Ce que certain utilisateurs de Vi ou Emac considère eux aussi commun un pure malware, j’ai nommé Notepad.exe. Si c’est un gros exe avec très peu de code et beaucoup de data c’est louche. L’entropie sur une section de code peut révéler la présence d’un exe packé. La différence est flagrante si on fait l’exercice avec un bête UPX.  J’utilise ici un de mes script (dispo dans dans le chall tool) qui doit tout à l’excellente librairie python pe_file

C’est recta l’entropie de la section UPX1 est élevée (Sur .rsrc pour ressources, (image, icones tout cela, cela peut arriver, ce n’est pas grave)). Un autre exemple avec un packer commercial VmProctect sur un fichier quelquonque.

Idem d’étranges sections et une entropie galopante.  Qu’en est t’il de notre facture.exe ??

les salaud… on est bien là… rien a redire ! l’entropie ne révèle rien non plus. Un bon exemple ce facture.exe.

Arrivé la, on demande un miracle. C’est là qu’apparaît une nouvelle race d’outils, le détecteur de packing. J’en connais 2, le premier sous windows est Peid (Et il sent le sapin, malgré sa forte réputation), le second, tendance, free, open source et évolutif est Yara. Pour plus d’info sur Yara, je vous conseille la lecture de Misc Nr 65.

Mais voila, dans notre cas, le pire qu’il puisse arriver arrive. Yara trouve bien un éventuel nom de Packer (et encore). Normalement on saute de joie et on se tourne vers le tools de dépacking. Car si il existe de nombreux packeur, heureusement il existe aussi de nombreux de-packeurs, (voir http://www.exetools.com/unpackers.htm pour une belle collection). Mais là, j’ai pas la queue d’un dépackeur associé à ce truc. C’est domage car c’est super sympas avec un dépackeur associé.

Bon on se démonte pas. On va mettre les doigts dans le cambouis et on va pas lacher et on va le dépacker avec les doigts ce facture.exe.

Mais cela, ca sera au prochain numéro !  …

On résume;
On sait ce qu’est un exe packé et pourquoi
On sait que les antivirus on pas facile !
On sait ce qu’il faut regarder tenter de sentir si c’est packé.
On sait que c’est pas une science exacte.

 

This entry was posted in Reverse and tagged , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

AlphaOmega Captcha Classica  –  Enter Security Code