L'analyse de malware
Obfuscation
Introduction
Dans le but de rendre leur malware durable, les pirates mettent en oeuvre des mécanismes d'obfuscation.
L'obfuscation dans le language informatique consiste à rendre un exécutable ou
un code source illisible et difficile à comprendre par un être humain.
Cette pratique peut surprendre au premier abord puisque un bon programme est souvent caractérisé
par la qualité de son code pour faciliter sa maintenance.
L'obfuscation n'a pas cet objectif et peut être utilisée dans trois cas :
- Protéger une propriété intellectuelle
- Complexifier l'analyse et le reverse engineering
- Rendre le binaire plus difficile à détecter, en modifiant sa signature.
Un grand nombre de techniques existent pour obfusquer un binaire. Ce chapitre va présenter les plus rencontrées en analyse de malware.
Chaines de caractères
L'obfuscation des chaines de caractères est l'une des techniques les plus utilisées
par les créateurs de malware.
Cette méthode consiste à dissimuler les chaines de caractères
grâce à un algorithme qui va se charger de coder puis décoder les données.
Ainsi, sans connaitre l'algorithme il est impossible de comprendre la chaine de caractère
encodée.
Cette technique est fréquemment utilisée pour rendre illisible le code source
et les chaines de caractères utilisées par le malware.
Exemple
Pour comprendre ce type d'obfuscation, nous allons montrer en exemple l'algorithme ROT 13. Cet algorithme consiste à permuter chaque lettre d'une chaine selon le tableau suivant :
Table de permutation de l'algorithme ROT 13
Ainsi, la chaine toto devient gbgb.
Le malware herpesnet était connu pour utiliser cette technique :
Analyse des chaines de caractères du malware herpesnet.
Comme le montre la figure ci-dessus, la commande strings retourne des chaines de caractères illisibles.
En décodant le texte avec l'algorithme ROT 13 nous parvenons à obtenir des chaines de caractères compréhensibles :
Analyse des chaines de caractères du malware herpesnet avec décodage.
L'objectif en présence de ce type d'obfuscation, va être de déterminer l'algorithme utilisé pour être en mesure de décoder les chaines de caractères encodées.
Packers
Autre technique fréquemment utilisée par les créateurs de malware: les packers.
Initialement, les packers avaient pour objectif de compresser un binaire sans altérer son fonctionnement. Dans le domaine des malwares, ils ont rapidement évolués pour ajouter également de l'obfuscation.
Représentation d'un packer.
Comme le montre le schéma ci-dessus, un programme va contenir le binaire original
sous format compressé et obfusqué. Lors de son exécution, son rôle
est de décompresser et désobfusquer le binaire original en
mémoire.
Grace à cette technique, il est difficile pendant l'analyse statique de lire les
chaines de caractères ou analyser le format PE. En effet, les seules informations
lisibles sont celles du packer.
L'objectif pour l'analyste va être de vérifier si le malware n'utilise pas un packer
connu. Si c'est le cas, il est relativement simple d'unpacker le malware.
Il existe une multitude de packer très utilisé et connu : "ASProtect, Themida,
UPX, ...". Nous pouvons utiliser des outils comme yara qui permettent de détecter ces
packers en fonction de leur signature et permettent de les unpacker.
A noter que les malwares peuvent être packés plusieurs fois. Il faut alors unpacker
couche aprés couche jusqu'à obtenir le binaire original.
Anti VM
Les malwares sont de plus en plus sophistiqués et intègrent la plupart du
temps un détecteur de machine virtuel.
Comme nous l'avons vu précédemment, les analystes utilisent des environnements
virtualisés pour réaliser leurs analyses, notamment durant la phase d'analyse
dynamique.
C'est pourquoi les créateurs de malware tentent de les identifier pour interrompre ou
fausser l'analyse.
Il existe de nombreuses façons de détecter un environnement virtuel. Nous
allons en présenter quelques-unes.
Les malwares peuvent identifier certains élements caractéristiques des
machines virtuelles.
Par exemple, la présence du port nommé "VM" ouvert sous VmWare.
Les malwares peuvent également identifier des processus spécifiques aux
solutions de virtualisation.
Par exemple, la présence du processus VBoxService.exe sous VirtualBox, qui
correspond aux addons invités.
Comme tout logiciel, les logiciels de virtualisation peuvent présenter des vulnérabilités.
Les malwares peuvent utiliser ces failles pour modifier le comportement de
l'environnement virtualisé.
Par exemple VirtualBox présentait une vulnérabilité utilisée par de nombreux malwares :
Exploitation de la vulnérabilité CVE-2012-3221 de Virtualbox.
Ce code lorsqu'il était exécuté permettait de faire crasher la machine virtuelle.
Pour éviter d'être détecté il est important de respecter les contraintes de mise en oeuvre de l'environnement d'analyse vu précédemment. Il faut notamment veiller à maintenir à jour ses outils et éviter d'installer des outils spécifiques aux machines virtuelles qui peuvent être facilement détectés comme les addons invité.
Anti Debug
Une autre technique d'obfuscation de plus en plus utilisée est l'intégration
d'un anti debogueur.
Cet outil, comme vu précédemment, est utilisé lors de l'analyse
dynamique et est très utile pour comprendre le fonctionnement du malware.
De nombreuses techniques sont utilisées par les créateurs de malwares pour parvenir à détecter de tels outils.
Un debogueur met en pause l'exécution d'un programme pour permettre son analyse.
Pour détecter un debogueur, certains malware calculent le temps passé dans
une fonction.
Ainsi, si la fonction dure un certain temps, le malware peut facilement supposer la présence
d'un outil de deboguage.
Tout comme pour la détection d'environnement virtuel, les malwares peuvent vérifier la présence de certains processus de debogueur connus (OllyDbg, Immunity Debugger...).
Une autre méthode très efficace consiste à détecter la présence de points d'arrêt logiciels ou matériels.
Il est très difficile de contourner ce type d'obfuscation. Le seul moyen est d'utiliser des debogueurs proposant des fonctionnalités avancées.