AVERTISSEMENT: Ce sujet s'adresse aux curieux souhaitant aller plus loin dans l'étude de codes malveillants : si ce n'est pas votre cas, peut être devriez vous dès à présent passer votre chemin. L'ensemble de nos âneries sont réalisées dans un environnement adapté à l'étude des codes malveillants sous VM, ne reproduisez jamais ces manipulations sur votre propre système d'exploitation.
L'échantillon est ici. Ce programme est un PE de 736 904 octets écrit en Visual C++, au premier coups d'œil, je remarque qu'il possède une section avec une VirtualSize tout à fait anormale.

J'inspecte visuellement la section resources ".rsrc"
Si je fais le calcul, le compte n'y est pas du tout.

La taille démesurée a été spécialement confectionnée. Regardez bien l'effet sur ce graphe réalisé à l'aide de Process Explorer, un pic apparait dès le chargement en mémoire du programme. Pour vous donner une idée, le processus "explorer.exe" en occupe 19440 fois moins :o

Il s'agit d'une ruse afin de ralentir et surtout d'éviter les dumps automatisés.
Pour faire simple au maximum, un dump consiste à extraire une ressource dans son contexte.
Dans notre cas, l'extraction dans un fichier nécessiterait d'écrire plus de 350 Mo - hm.. pas cool.
Pour imager un peu la suite, imaginez-vous en train de faire de la géologie. Pour analyser un programme, il faut commencer par gratter un peu les couches pour laisser apparaitre les différentes strates. A l'aide d'un débogueur, je vais exécuter le programme pas-à-pas. Ici, j'ai opté pour OllyDbg mais libre à vous de choisir celui que vous voulez, si vous préférez IDA ça fonctionne tout autant ; les gouts les couleurs,.. moi je préfère les brunes ( désolé angelique... ) Bref, je ne vais pas détailler car il vous manque de nombreuses notions à commencer par savoir vous dépatouiller en langage assembleur ... Je résume, pour ceux qui ont quelques connaissances, je vais avancer jusqu'à repérer le programme compressé par une couche UPX, je m'arrête sur le jeu d'instruction PUSHAD.
J'utilise ensuite le plugin PE Dumper de FKMA. Dans l'ordre, je vais commencer par cocher les 3 options puis cliquer sur "Get EIP as OEP", ensuite je double-clique sur la section ".rdata" pour l'éditer : je coche la case "writable" puis clique sur "Apply". Enfin, je double-clique sur la section ".rsrc" en "Raw Size" je vais mettre 0x4000 et je diminue "Virtual Size" à une taille plus supportable 0x7AA000, je sors avec "Apply" et enfin je clique sur "Dump".

Comme vous pouvez le voir sur l'image, le plugin n'est pas en mesure de corriger la "size of image".
Je pourrais la calculer mais l'outil LordPE de y0da va me le faire automatiquement. Pour se faire, il suffit d'éditer le dump, de cliquer sur "Sections", de fermer avec la croix et hop... la taille sera recalculée (0x86E000), je clique alors sur "Save" et je referme LPE. Mon dump ne fait pas dans les 300Mo mais 800Ko, mission réussie. Je peux, si besoins, décompresser UPX pour par exemple, accéder aux ressources.

Je charge le dump depuis Olly pour continuer depuis la couche UPX pour en examiner les mécanismes de protections, je recherche principalement des astuces anti-emu & anti-vm. En général, il n'y a pas besoins de chercher bien loin. Ici c'était encore plus rapide puisque j'ai remarque la présence de plusieurs ExitProcess.

En utilisant l'API GetFileAttributes le programme va vérifier la présence de "c:\sd.dbg" ou "c:\sd2.dbg" ( quelqu'un dans l'assistance sait à quoi ça correspond ? ). Puis SETUPAPI est utilisé avec SetupDiGetClassDevs, SetupDiEnumDeviceInfo, SetupDiGetDeviceRegistryProperty afin d'énumérer du matériel et extraire des renseignements. Une approche intéressante car contrairement aux techniques habituelles basées généralement sur Device Extensions, ces appels sont plus discrets. Malins sont les Bad Guys.
Si les infos renvoyées par les API contiennent "qemu", "vmware", "vbox" ou "virtual hd" alors le programme va se fermer. Si je leurre la valeur retournée par la base de registre à la lecture du FriendlyName ( ex: HKLM\SYSTEM\ControlSet001\Enum\IDE ), alors le rogue va enfin s'installer et afficher l'interface à l'écran - Malekal sous VMWARE sera content.

Le mystère est résolu. Retrouvez d'autres sujets classés [TECH], le précédent...
→ Au pays des malvertising, sur les traces de la redirection perdue.