Analyse d un packer de trojan et programmation d un unpacker.pdf
(
756 KB
)
Pobierz
Analyse d'un
packer
de
trojan
et programmation d'un
unpacker
Baboon
<baboon@sysdream.com>
© Sysdream 2008
Introduction
Une technique très utilisées par les antivirus est la détection par signature. Lorsqu'un malware possède une
ou plusieurs portions de code qui sont toujours identiques, l'antivirus en extrait la séquence d'octets
correspondant et s'en sert par la suite pour détecter la présence du malware.
Pour lutter contre la détection par signature les trojans sont souvent packés à l'aide d'un packer. Un packer
est un programme qui compresse , chiffre, protège les exécutables. Pour que les exécutables puissent être
lancés, le packer leur ajoute une fonction, un loader, qui va décompresser et déchiffrer l'exécutable en
mémoire avant de lui rendre la main. Les détections par signatures se faisant sur l'exécutable 'en dur', c'est à
dire sur le fichier et non en mémoire lorsque le programme est lancé, le code du malware est chiffré et la
détection par signature échoue.
Pour analyser ces malwares il est nécessaire de les unpacker, de reconstruire l'exécutable pour qu'il retrouve
sa forme originale et que l'on puisse accéder directement à son code.
La programmation d'un unpacker permet d'accélérer l'étape de l'unpacking en l'automatisant, il est alors
plus rapide d'analyser les variantes d'un trojan packées avec le même packer.
Pour faire notre unpacker, nous allons d'abord analyser le packer afin de comprendre son fonctionnement
précis, puis nous allons rechercher les points 'sensibles' du packer, par exemple l'adresse du saut qui va
rendre la main au programme, l'endroit où les imports du programme sont résolus, etc., ensuite nous allons
rechercher des signatures dans le packer qui nous permettrons de retrouver ces points, enfin nous
programmerons notre unpacker qui utilisera les debug APIs de Windows ce qui nous permettra de
contrôler l'exécution du packer et de dumper le processus au bon moment.
Cet article explique...
Comment analyser un packer simple.
Comment programmer un unpacker.
Ce qu'il faut savoir...
Les bases de l'assembleur x86.
Se servir de OllyDBG (une grande maitrise n'est pas nécessaire).
Programmer en C.
Des notions sur le format PE (Portable Executable).
Baboon
Baboon est autodidacte, il pratique le Reverse Engineering depuis maintenant trois ans. Membre de la FAT
(French Assembler Team), il fréquente plusieurs forums dédiés au Reverse et en stage chez Sysdream lors de
la rédaction de cet article. Pour le contacter : baboon@lyua.org ou baboon@sysdream.com
© Sysdream 2008
Étude du
loader
Avant de programmer notre unpacker il est nécessaire d'étudier le loader (la fonction logée dans
l'exécutable qui déchiffra le malware au chargement du programme).
Nous allons pour cela d'abord unpacker manuellement notre malware. Inutile de préciser que lorsque l'on
étudie un code malicieux il faut le faire dans une machine virtuelle qui nous permettra en cas d'exécution
malencontreuse du malware de ne pas avoir à formater notre disque dur, il nous suffira de restaurer l'état de
la machine virtuelle avant l'infection grâce à un snapshot. Nous ouvrons donc le binaire packé avec
OllyDBG et nous pouvons commencer l'analyse.
Anti-Émulation
Le malware essaie de freiner et de détecter l'émulation de son code par les antivirus en exécutant 20500 fois
l'API TlsFree avec de mauvais arguments et en vérifiant le code d'erreur retourné. Si le code d'erreur est bien
celui attendu (ERROR_INVALID_PARAMETER 0x57) alors l'exécution du virus se poursuit, sinon elle
s'arrête.
Cet antiantivirus n'est pas très utile, en effet le code du packer n'est pas polymorphique et il est facile d'en
extraire une signature qui le détectera à coup sur sans avoir à l'émuler. Ce genre de technique n'est
intéressante que dans le cas de malwares aboutis, comme protection supplémentaire, seule, la protection que
cet antiémulateur offre est nulle. Enfin lorsqu'un antivirus rencontre un saut conditionnel, il analyse
généralement les deux branches du saut.
© Sysdream 2008
Déchiffrement
Le malware déchiffre ensuite son code qui a été chiffré au moment où il a été packé. Chaque octet est chiffré
à l'aide d'opération réversibles (multiplication, addition, ou exclusif). Enfin il recherche les adresses des
APIs qui vont être utilisées par la fonction qui décompressera le code.
Décompression et résolution des imports
La compression a été faite grâce a PECompact (on voit le nom du packer en mémoire après le
déchiffrement), ce packer obtient un fort taux de compression , l'exécutable passe de 828Ko avant
compression à 127Ko. PECompact met à la disposition du programmeur un système de module qui lui
permet d'agir avant ou après la décompression du programme, il est fort probable que le déchiffrement du
code et l'antiantivirus soient intégrés dans un module programmé par le pirate, il est plus simple de
développer un module qu'un packer de A à Z.
PECompact est un compresseur, pas un protector, il est donc facile à unpacker. La décompression se
déroule selon ce schéma :
© Sysdream 2008
•
1 – déclenchement d'une exception de type ACCESS_VIOLATION (le processus essaie
d'écrire à une adresse nulle),
2 – l'exception est gérée par un handler précédemment mis en place qui va rediriger le
processus sur la fonction de décompression à proprement parler,
3 – la fonction de décompression va allouer une page mémoire dans laquelle va être
décompressée le code du loader,
4 – la fonction décompressée va charger les APIs qui vont être utilisées par le loader,
5 – un contrôle d'intégrité est effectué sur le code afin de s'assurer qu'il n'a pas été corrompu,
5 – les sections de l'application sont décompressées puis copiées a leurs emplacements,
6 – les imports sont résolus,
7 – les droits des sections sont ajustés,
8 – le loader rend la main au code décompressé.
•
•
•
•
•
•
•
•
L'Import Table n'est pas détruite par PECompact, elle est juste compressée et les champs FirstChunk
supprimés. Généralement les protector détruisent l'IT et modifient l'IAT de manière à compliqué
l'unpacking. Pour résoudre les imports, PECompact va parcourir l'Import Table décompressée, charger les
DLLs nécessaires et rechercher les adresses des APIs dont le programme aura besoin.
Schéma simplifié du fonctionnement du packer :
© Sysdream 2008
Plik z chomika:
qfx
Inne pliki z tego folderu:
Bypassing Stack Cookies, SafeSeh, HW DEP and ASLR.pdf
(3140 KB)
Analyse du fonctionnement d un programme suspect.pdf
(2383 KB)
Analyse de code malveillant.pdf
(1760 KB)
Analyse d un packer de trojan et programmation d un unpacker.pdf
(756 KB)
Control Flow Obfuscations in Malwares.pdf
(1716 KB)
Inne foldery tego chomika:
Pliki dostępne do 21.01.2024
Pliki dostępne do 27.02.2021
Cisco
Classic Computers
Courseware
Zgłoś jeśli
naruszono regulamin