Obfuscation
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 débogueur.
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 débogueur met en pause l'exécution d'un programme pour permettre son analyse.
Pour détecter un débogueur, 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 déboguage.
Tout comme pour la détection d'environnement virtuel, les malwares peuvent vérifier la présence de certains processus de débogueur 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.
0 commentaires:
Enregistrer un commentaire