Autour du Reverse Engineering des Malwares

Preview:

Citation preview

Autour du Reverse Engineering des

Malwares

Par : BENTIJANI Aymen

Les nécessités :• Des notions sur l’assembleur• Un Debugger: ollydbg, IDA, Immunity • Désassembleurs: IDA, Immunity, olly, windbg• Systèmes de Surveillance du système: Process hacker, procmon• Outils Misc: wireshark, HXD, Cuckoo Sanbox

L’environnement:• On a choisie de travailler sur Oracle VM car Contrairement à VMware,

Oracle VM est un logiciel gratuit à télécharger, utiliser et distribuer.• Plus de rapidité.

Le Debugger• On a appris qu’il était le meilleur ami du reverse-engineer.• Il y’a deux types de debuggers:

1- les kernel debuggers. 2- les Usermode debuggers.

Kernel Debuggers

• Ils opèrent au niveau des drivers, et ont accès direct au noyau.

User mode Debugger• C’est l’opposé du précédant, il a seulement accès à l’espace du user

mode. La plupart du temps c’est suffisant. Mais pas toujours, dans le cas des rootkits (ensemble de techniques mises en œuvre par un ou plusieurs logiciels, dont le but est d'obtenir et de pérenniser un accès (généralement non autorisé) à un ordinateur de la manière la plus furtive possible) il est préférable d’utiliser les kernel debuggers.

Le debugger Immunity

1 2

3 4

Les Points d’arrêts•Les points d’arrêts du hardware.•Les points d’arrêts du software.

Les points d’arrêts du software• Ils peuvent être placées n’importe où au programme.• Dans ce cas le débuggeur écrit simplement une instruction int3 (code

opération 0xCC) sur le premier bit de l’instruction cible.• Ça a comme effet de lancer l’interruption 3 chaque fois que

l’exécution est transférée à l’adresse de l’interruption.

Les points d’arrêts du Hardware• Ils utilisent l’instruction int1 et sont utilisés pour accompagner pas à

pas les registres du débuggage.• Ils sont au total de 8, 4 seulement sont utilisés DR0-3, des fois il est

preferable d’utiliser ces interruptions quand les interruptions logiciel ne marche pas• Les interruptions logiciels sont insérées au programme. Les

interruptions hardware ne le sont pas et se basent sur les 4 registres déjà cités.

Codes opérations (opcodes)

• La représentation hexadécimal des instructions de l’assembleur.• Ils sont ce qu’ont voit si on ouvre l’exe avec un éditeur hexadécimal.

Pratique• On va effectuer un reverse engineering avec Immunity d’un simple

programme « renamexec.exe » crée avec C.

Ce n’est pas un simple exemple

• « Notepad.txt » va être renommé en « Notepad.exe » et exécuté.• Similaire au malware (ransomeware Cryptowall)• Peut être vu comme un vrai malware.

Movefile & ShellExecute & windows.h??

Interface de Programmation Applicative (API)

• « L’ensemble normalisé de classes, méthodes ou de fonctions façade par laquelle un logiciel offre des services à d'autres logiciels »

Wikipédia.org

Le « renamexec.exe » dans Immunity

Le « 0x00401040 »• En faite il ne s’agit pas de la fonction principale du programme, mais

du point d’entrée de l’exécutable.• Avant que le programme soit exécuté, l’exe effectue beaucoup

d’opérations (vérifier l’architecture de la CPU)

Comment trouver ce que le programmeur a crée?

• Chercher « referenced text strings » (on s’excuse pour l’anglais car immunity n’est dispo qu’en Anglais ) : un outil de recherche valable en cliquant un clic droit sur la fenêtre d’assembleur.

• Le resultat qu’on va trouver est une liste de toutes les chaînes des caractères qui sont d’habitude stockées dans la partie « .data » de l’executable. • Chaque ligne de ces chaines est un hyperlink: elle guide à l’instruction

en assembleur qui correspond.

ASCII c:\temp\notepad.exe??

Du retour au désassembleur • Une fois ces chaines textes sont suivie dans le désassembleur, la ligne

verte repérera exactement la position de la chaîne en question.

• Le désassembleur regroupe les fonctions écrite par le programmeur original avec la ligne jaune.

Résultat• Il est clair à partir de la figure précédente que le programme en

question exécute une instruction « MoveFile » qui renomme un fichier « notepad.txt » en « notepad.exe » et puis la fonction « ShellExcute » s’occupe de son exécution.• Les résultats obtenues sont en accord avec le programme que nous

avons crée.• Rétro-ingenierie Réussie.

Recommended