I. Introduction
Les auteurs de logiciels
malveillants utilisent plusieurs astuces pour éviter la détection et l'analyse.
L'une des méthodes les plus courantes consiste à utiliser
un programme de compression, un outil qui compresse, crypte et / ou modifie le
format d'un fichier malveillant que l'on nomme packer. Les packers peuvent également être utilisés à des fins
légitimes, par exemple pour protéger un programme contre l'analyse ou la
copie de bloc.
Toutes ces astuces diminuent les
chances de détection par des logicielles anti-malware et permettent d'éviter
l'analyse par des chercheurs en sécurité.
Les emballeurs rendre plus difficile l'analyse et l'inverse ingénierie
en mode statiques pour des analystes en
sécurité dans le but de retarder l'identification du comportement du logiciels
malveillants et d'augmenter le temps requis pour une analyse des parties
fondamentales. La
complexité des packers varie et il existe une quantité important de packer que
ce soit des packers clé en main dit standard que de packers privés.II. Type d'emballeurs
Un packer peut agir simplement
comme une armure pour protéger le binaire. Il
est plus pratique pour les attaquants d’utiliser un programme de compression
plutôt que d’implémenter directement une protection dans le code étant moins
coûteux. Les logiciels malveillants avancés
codés par des groupes de cybercriminels organisés utilisent plutôt des
programmes d’emballage personnalisés et aussi implémentent une protection
complexe au sein de fichiers malveillants en plus pour crée plusieurs couche de
protection.
Nous allons concentrer sur les
packers standard, il existe plusieurs formats de packer connus et
reconnus : UPX, FSG, Armadillo, Themida, Petite, etc.
Avant de pouvoir décompresser (
Unpacker ) un programme ayant était compressé, il faut pouvoir déterminer
qu'elle packer a été utiliser pour compresser notre échantillons.
C'est la vocation de cette
article.
III. Les logiciels de détection de packer
Il existe une multitude de programme conçu pour analyser
un binaire et de déterminer si le binaire est packé ou pas.C'est programme permettre de connaître qu'elle parker a
été utiliser sur le binaire.
Voici une liste non
exhaustive d'outil permettant de déterminer si un binaire est packé.
1) PEiD V0.95
Il est l'un des plus populaire pour l'analyseur de
fichier exécutables.
L'analyse est effectuée sur la base de données de
signatures interne et externe.
Il existe plusieurs niveaux d'analyse allant du
plus rapide au plus profond. l'intérêt également est la fonctionnalité étendre
par des plugins externes la base de signature.
Les signatures étant stockées dans un fichier texte séparé, vous pouvez
donc facilement y ajouter vos propres fichiers et aussi comprendre ce comment
est construit les signature.
2) Detect it Easy V0.65 (DiE)
Il est très proche de PEiD sur la partie scan de packer.
Mais il fournit également certaines fonctions
utiles pour l'analyse du PE :visualiser les importations, les sections,
visualiser d'un fichier en mode hexadécimal, désassembler ( basique ),
l'afficher des caractéristiques de base de PE. Et les classique hachage MD5 et
le CRC-32.
Il
dispose également de la fonctionnalité étendre le
programme avec des plugins externe.
3) RDG Packer Detector V0.76
Celui-ci est un détecteur de packer au sens propre,
vous pouvez aller sur le site suivant : http://www.rdgsoft.net/
pour télécharger le programme. Nous trouvons simple à utiliser. Il reconnaît bien
les Packers à la différence d'autre plus ancien.
Est le
bon outil pour cette tache de détection.
4) ExeInfo PE
Il est également dans la même vaine que PEiD avec quelque
fonction complémentaire
Idée d'ajouter l'information sur l'outil pouvant servir à
Unpacker le binaire est bien pour des débutant.
5) file insPEctor XL
Lui est un analyseur ancien des années 2000. Définit de
manière heuristique les packers et les compilateurs de fichiers exécutable.
Il affiche aussi les données de base des tables d'en-tête,
de section, d'importation et d'exportation du PE. En plus de l'analyseur.
Il inclut des fonction d'ajouté une section vide à un
fichier ou de nouvelles fonctions d'importation, une calculatrice RVA à
décalage,la modification de la date et l'heure d'un fichier, rediriger l'OEP.
Il devient moins utile pour la détection de packer que
pour ses fonctions sur le PE
Dans
la capture cela ce voit, il détecte bien UPX. Mais sur une signature ancienne.
6) Stud_PE
Il est un très bon programme, en plus d’analyser la
manière dont un fichier est compressé, il affiche de nombreuses autres
informations utiles sur le PE: sections, ressources, tables d’import et
d’exportation, en-tête DOS.
L'éditeur HEX intégré à Stud_PE met en évidence les champs
d'en-tête de fichier sélectionnés, ce qui est très pratique pour analyser sa
structure.
Les
fonctionnalités peuvent être étendue à l'aide de plug-ins, et les plug-ins de
PEiD sont compatible également à l'outil.IV. Analyse d'un packer standard UPX
A partie d'un programme simple, nous allons le packé à
partir de deux version de UPX, pour obtenir deux échantillons de référence.
Nous mettons le code source correspondant de ce petit programme.
//
WinBasic.cpp : Defines the entry point for the application.
#include
"stdafx.h"
int
APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MessageBox(0,
"Hello", "Msg Title Basic Win", MB_OK);
return 0;
}
|
Nous avons utilisé Upx290 et Upx308 dans notre démonstration.
Vous pouvez les télécharger à partir des urls suivant:
https://sourceforge.net/projects/upx/files/upx/3.08/
https://sourceforge.net/projects/upx/files/upx-beta/2.90/
De là nous avons générés deux échantillons de notre
référence, l'un avec Upx 290 et l'autre avec Upx 308. Vous trouverez en dessous
la capture pour la génération
Nous les avons renommé et positionné dans un
répertoires "Echantillons" pour la suite.
Nous avons passé l'un des échantillons ( WinBasicIcon_PackedToUpx308 )
dans différent outils de détection de packers. Nous mettons la capture en
dessous:
Nous avons entouré en rouge les parties qui nous intéresse
à expliquer.
Il utilise la détection statique, elle consiste à analyser
le code du fichier sans exécuter ce dernier. On note dans nos deux exemples
l'utilisation de la détection par signature.
Il s’agit de détection qui correspond à des portions de
code significative du binaire permettant une identification de la famille du
packer et dans une plus grande mesure de la version du packer utilisé.
Et qui sont dans notre cas les premiers opcode du binaire
pointé par EntryPoint du PE.
Comme l'outils nous donne l'adresse ou l'offset file
pointant l'Entrypoint du PE. Il nous sera assez simple de valider cela. Dans
notre exemple la valeur indiqué est 0x00004910.
En utilisant un outil pour la lecture des binaires maison,
on peut voir que cela correspond bien.
Nous obtenons la séquence suivante:
60 BE 00 A0 40 00 8D BE 00
70 FF FF 57 EB 0B 90
8A 06 46 88 07 47 01 DB 75
07 8B 1E 83 EE FC 11
DB 72 ED B8 01 00 00 00 01
DB 75 07 8B 1E 83 EE
FC 11 DB 11 C0 01 DB 73 EF
75 09 8B 1E 83 EE FC
11 DB 73 E4 31 C9 83 E8 03
72 0D C1 E0 08 8A 06
|
Mais, elle n'est pas exploitable directement lié au
différents Opcode présent utilisant des référence à des adresses propre au programme.
Nous utilisons une notation pour l'écriture de la
signature ou les octets à ne pas prendre en compte son remplacé par ??
ou peut trouver d'autre
représentation avec XX dans certains
outils. Cela nous donne la chaîne suivante.
"60 BE ?? ?? ?? ?? 8D
BE ?? ?? ?? ?? 57 EB 0B 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB
72 ED B8 01 00 00 00 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB 73 EF 75 09
8B 1E 83 EE"
Nous avons intégrer dans notre
base de donnée ces signatures de packer dont UPX308 à notre outils
"EzSearchPackers.exe".
De là, nous avons passer notre
échantillon "WinBasicIcon_PackedToUpx308.exe" à l'analyse au travers
de notre propre détecteur de packer ( EzSearchPackers.exe ).
Et nous
avons bien l'identification que le programme est paqueté avec le packer UPX
3.08 avec la détection par la signature crée au dessus.
Notre outils fournit deux informations distinct sur deux
techniques. L'une basé sur le nom des sessions pour déterminer rapidement si
des noms de sections correspondant à des nommages prédéfini dans notre cas UPX1
et une base de signatures présenté au dessus.
De même les signatures référence peuvent être lister ,
nous reviendrons sur ce point
dans un
autre article sur la construction d'une base de signature référentielle.V. Conclusions
L'intérêt de connaître si un
binaire est paqueté ou non et qu'elle IDE a permit de le générer
réduit l'investigation et
surtout permet de réduire le temps pour analyse du code. Car s'il est paqueté,
vous devrez neutraliser cette couche en le dépaquetant avant de pouvoir analyse
le binaire au niveau fonctionnelle au travers du PE ou d'une étude statique.
Comprendre les processus de
reconnaissance par signature est importante. Car la technique étant lié à une
identification d'un bloc d'opcode , elle est donc empirique et elle est dépendante de la bonne qualité
des signatures. Nous aborderons ce point dans un prochaine article. Car vous
trouvez sur Internet une quantité de base de signature, mais beaucoup ne sont
pas de qualité ou sont un agrégat de N bases ou incluant des volumes de
doublons important
Il faut donc faire une passe a
travers des outils pour construire base de signature représentatif
Et non une concaténation de base
de signature.
De plus vous verrez des signature
contradictoire ou associé à de mauvais packer.
Donc comprendre la technique c'est éviter de perdre du temps sur une
mauvaise piste d'investigation lors de l'étude d'un malware.
Aucun commentaire:
Enregistrer un commentaire