Inside Out - Blog CyberSécurité Blog   /  

Comment utiliser Ghidra pour la rétro-ingénierie des malwares

How to Use Ghidra to Reverse Engineer Malware | Varonis

Les professionnels de la cybersécurité ont à leur disposition de nombreux outils gratuits d’analyse des malwares. Ghidra a fait son apparition il y a quelques années et il a du succès : il s’agit d’un outil gratuit qui permet de désassembler les malwares. 

Mais beaucoup d’utilisateurs qui ne connaissent pas ce type d’outil ont souvent du mal à apprendre comment se servir de Ghidra. Pas de panique, comme toujours, je suis là pour vous aider ! 

Dans cet article, vous allez découvrir Ghidra, apprendre comment l’installer et obtenir des conseils utiles qui vous aideront à utiliser cet outil pour l’analyse des malwares.

Si vous êtes novice en matière de rétro-ingénierie des malwares jusqu’à l’analyse du code d’assemblage, je vous recommande de lire les articles que j’ai rassemblés ci-dessous. Ils vous donneront des connaissances solides qui feront de vous un expert en malwares :

Qu’est-ce que Ghidra ?

Ghidra est un outil de rétro-ingénierie développé par la NSA, lancé en 2019. Il s’est avéré particulièrement populaire auprès des analystes de malwares, car il s’agit d’un outil de désassemblage. Grâce à lui, les analystes de malwares peuvent inspecter le fonctionnement d’un échantillon de malware sans l’exécuter, un avantage très utile qui leur permet de parcourir le code et de déterminer ses effets.

La différence entre Ghidra et un outil comme x64dbg, c’est que ce dernier est un débogueur. En d’autres termes, il exécute réellement le malware pendant l’observation et l’analyse du code. Ainsi, si vous trouvez une fonction intéressante dans x64dbg, qui chiffre tous les fichiers par exemple, l’outil l’exécute et chiffre tous les fichiers de la machine utilisée pour l’analyse du malware.

Un outil de désassemblage comme Ghidra n’exécute pas le code, il cartographie le code d’assemblage du malware et permet à l’utilisateur de parcourir le code dans tous les sens sans affecter le système de fichiers de l’appareil utilisé pour l’analyse. Cela fait de Ghidra un outil idéal pour identifier et cartographier les fonctions susceptibles d’intéresser les analystes de malwares.

Avertissement : Ghidra doit être utilisé dans une sandbox, par exemple une machine virtuelle conçue pour l’analyse des malwares. N’essayez en aucun cas d’analyser des malwares avec cet outil sur votre système d’exploitation hôte.

Comment installer Ghidra

Pour installer Ghidra sous Windows, accédez au site Web officiel de Ghidra. La page suivante s’affiche :

ghidra

Cliquez sur le bouton « Download from Github », ce qui vous redirigera vers la page Github de Ghidra, où vous pourrez télécharger la version la plus récente du logiciel.

ghidra-10-1-beta

Téléchargez le fichier zip et extrayez-en le contenu à l’emplacement de votre choix. Une fois l’opération effectuée, vous devez disposer des fichiers suivants :

ghidra-files

Pour lancer Ghidra, double-cliquez sur le fichier batch Windows nommé « ghidraRun ». Le message d’erreur suivant peut s’afficher :

launch-ghidra

Dans ce cas, suivez les étapes de ma vidéo pour résoudre rapidement le problème.

Une fois le logiciel ouvert, les fenêtres suivantes s’affichent : la fenêtre « Active Project » et la fenêtre « Tip of the Day ». Vous pouvez fermer cette dernière sans trop vous attarder.

ghidra_project

Pour commencer à utiliser Ghidra pour analyser un échantillon, vous devez d’abord créer un projet qui sera utilisé pour le stocker ainsi que tous les fichiers générés par Ghidra.

Pour commencer, sélectionnez « File », puis « New Project ».

ghidra_new_project

Indiquez si vous souhaitez partager le projet ou non. Dans cet exemple, je vais choisir « Non-Shared Project » pour ne pas le partager, puis je vais cliquer sur « Next ».

ghidra_non_shared

Nommez le projet, en utilisant par exemple le nom de l’échantillon de malware analysé, et cliquez sur « Finish ». Dans cet exemple, j’ai nommé mon projet « Varonis Demo ».

ghidra_project_name

Notre nouveau projet est prêt et nous pouvons y déposer des échantillons de malware pour les analyser.

ghidra_project_import

Dans l’image ci-dessus, nous pouvons voir un fichier ajouté au projet nommé « remcos.exe ». Ghidra nous indique qu’il a identifié le fichier comme un fichier PE Windows 32 bits.

Cliquez sur OK et Ghidra commencera l’importation du fichier. La barre d’état suivante s’affiche :

ghidra_project_import_status

Une fois le fichier importé dans Ghidra, une fenêtre contenant des informations sur ce dernier s’affiche.

ghidra_project_import_results

Sélectionnez « OK », puis double-cliquez sur le nom du malware importé ou appuyez sur l’icône de dragon pour ouvrir l’éditeur de code.

L’invite suivante s’affiche. Elle vous indique que Ghidra n’a pas encore analysé le fichier et vous demande si vous souhaitez le faire maintenant. Sélectionnez « Yes ».

ghidra_project_begin_analysis

Une fenêtre relative aux options d’analyse apparaît. Dans cette dernière, sélectionnez l’option mise en surbrillance : « WindowsPE x86 Propagate External Parameters ». Cette option est utile pour analyser une fonction importée, car les paramètres de la fonction qui seront poussés sur la pile seront répertoriés dans l’outil.

ghidra_analysis_options

Sélectionnez « Analyze », et Ghidra commencera à analyser le fichier. La barre d’état dans le coin inférieur droit de Ghidra affichera la progression de l’analyse.

ghidra_analysis_status

Une fois l'analyse terminée, vous pouvez commencer la rétro-ingénierie de l’échantillon de malware dans Ghidra.

Rétro-ingénierie avec Ghidra

Dans Ghidra, lorsque vous ouvrez un malware importé et analysé par l’outil, un certain nombre de fenêtres s’affiche.

Fenêtres principales de Ghidra

Dans le coin supérieur gauche, une fenêtre présente les sections du malware : il s’agit de la section « Program Trees ». Si vous avez déjà utilisé un outil comme PeStudio, cela devrait vous sembler familier.

program_trees

La section « Symbol Tree » est très utile : elle contient les importations, les exportations et les fonctions que le malware utilise pour exécuter ses activités malveillantes.

symbol_tree

Dans la branche « Imports », vous pouvez voir les fichiers de bibliothèque importés par le malware. Si vous cliquez sur un fichier DLL, les fonctions associées à cette bibliothèque s’affichent.

symbol_tree2

En examinant les importations, il est possible d’identifier toutes les fonctions intéressantes utilisées par le malware, ce qui est très utile pour les analystes. Nous pouvons double-cliquer sur ces importations pour voir si elles sont utilisées par le malware et essayer de comprendre quelle action il peut exécuter sur un hôte compromis.

Il en va de même avec l’onglet Exports, qui permet de voir quelles fonctionnalités ont été exportées par le programme. Toutefois, il n’y a pas d’exportations dans le malware de cette démo.

La section « Symbol Tree » contient toutes les fonctions écrites par l’auteur du malware. Lorsque Ghidra importe et analyse ce dernier, il tente d’attribuer un nom à certaines fonctions sur la base de l’analyse automatisée qu’il a effectuée. Dans l’image ci-dessous, l’une des fonctions est nommée « CreateToolhelp32Snapshot ». Il s’agit du nom d’une fonction importée utilisée pour énumérer les processus en cours d’exécution sur un appareil. Ghidra a donc repéré l’utilisation de l’importation dans cette fonction et l’a nommée en conséquence.

symbol_tree3

Nous pouvons également voir que certaines fonctions suivent une convention de dénomination générique qui commence par le préfixe « FUN_ », suivi d’une série de chiffres. Il s’agit de fonctions qui n’ont pas été définies par Ghidra et qui sont nommées « FUN_ » pour « function ». On leur attribue une valeur numérique hexadécimale qui représente l’emplacement de la fonction dans le code binaire.

Il existe également une liste « entry », qui représente le point d’entrée du malware. Si vous double-cliquez dessus, la fenêtre « Listing » principale de Ghidra est actualisée et affiche le code d’assemblage au point d’entrée du malware.

listing_entry

Si les informations de l’image ci-dessus ne vous sont pas familières, consultez les ressources répertoriées au début de cet article pour en savoir plus.

Dans l’image ci-dessus, nous pouvons voir les instructions d’assemblage et les informations poussées sur la pile, ainsi que les différents appels effectués. Ces informations nous donnent une idée des effets du malware, avec un accent sur les appels à des API intéressantes, répertoriées dans la fenêtre « Symbol Tree » de Ghidra.

Si vous cliquez sur « entry », la fenêtre « Decompile » est mise à jour et contient maintenant des données. Cette fenêtre indique où Ghidra a tenté de convertir le code d’assemblage de la fenêtre « Listing » en C. L’analyste peut ainsi voir à quoi ressemblait le code de l’auteur et contribuer à l’analyse du malware.

decompile

Diagramme des fonctions

Une autre vue qui facilite l’analyse du malware est le diagramme des fonctions, qui peut être utilisé en sélectionnant l’icône « Display Function Graph » dans la barre d’outils de Ghidra.

function_graph_icon

Cette action ouvre une représentation graphique de la fonction affichée dans la fenêtre « Listing ».

function_graph1

Un zoom sur le diagramme permet à l’analyste de voir plus clairement quelles décisions sont prises par le malware et le flux qu’il suit en fonction de certaines conditions.

function_graph2

Dans l’image ci-dessus, j’ai mis en surbrillance l’endroit où j’ai identifié que la fonction appelle « GetStartupInfoA », ce qui m’indique que cette fonction récupère les informations de démarrage de l’appareil compromis.

Un double-clic sur une fonction appelée dans le diagramme redirige l’utilisateur vers cette dernière et met la vue à jour pour montrer la fonction sélectionnée.

Rechercher des chaînes

Si vous cliquez sur l’option « Windows » de la barre d’outils et que vous sélectionnez « Defined Strings », Ghidra affiche la liste des chaînes de l’exécutable.

defined_strings

Cette option est pratique, car les malwares contiennent souvent des chaînes pouvant indiquer les effets du malware une fois l’hôte compromis. Lorsque cette option est sélectionnée, la fenêtre suivante s’affiche :

defined_strings2

Ici, nous pouvons voir que le malware peut créer une certaine persistance, car l’emplacement de registre « Software\\Microsoft\\Windows\CurrentVersion\Run » figure dans la liste : un mécanisme de persistance courant pour les malwares.

J’aimerais récupérer l’un des fichiers de la liste, « install.bat », qui pourrait m’intéresser d’après l’analyse du malware. En double-cliquant sur l’une de ces chaînes, vous accédez à leur emplacement dans le fichier binaire. Les vues « Listing », « Decompile » et « Function Graph » peuvent toutes être utilisées pour étudier plus en détail l’emplacement de ces chaînes et l’utilisation que fait le malware de ces données.

Dans l’image ci-dessous, j’ai double-cliqué sur « install.bat ». La fenêtre « Listing » affiche désormais l’emplacement de cette chaîne dans le fichier binaire.

defined_strings3

Dans l’image ci-dessus, nous pouvons également voir la chaîne « XREF[1] » et le nom de la fonction. Ghidra indique à l’utilisateur qu’il a croisé la chaîne « install.bat » et affiche le nom de la fonction dans laquelle elle se trouve.

En double-cliquant sur le nom de la fonction, celle-ci apparaît dans la fenêtre « Listing » de Ghidra, ainsi que l’emplacement de la chaîne « install.bat ».

Pour les besoins de la démonstration, supposons que j’ai analysé cette fonction et que j’ai découvert que le fichier install.bat est créé sur le disque et que lorsqu’il est exécuté, il génère une clé d’exécution qui lance le malware à chaque démarrage de l’hôte compromis. Au vu de l’image ci-dessus, il y a peu de chance que je me souvienne du nom de la fonction « FUN_00040560d ». Donc, pour m’aider dans mon analyse, je vais la renommer.

Pour ce faire, cliquons sur la fonction avec le bouton droit de la souris et sélectionnons « Edit Function ».

edit_function

La fenêtre suivante s’ouvre :

edit_function2

Utilisez le champ « Function Name » pour donner un nom plus simple à mémoriser à la fonction.

edit_function3

Cela est très utile, car le nom de cette fonction est modifié dans l’ensemble du projet Ghidra, comme nous pouvons le voir dans la section « Symbol Tree », sous la branche « Functions » :

edit_function4

Conclusion

Ghidra est un logiciel pratique à avoir dans son arsenal d’outils d’analyse de malwares. Nous espérons que cet article vous a donné un bon aperçu de la manière dont il peut être utilisé pour approfondir l’étude du fonctionnement d’un échantillon de malware spécifique. N’oubliez pas qu’en utilisant un outil comme Ghidra, il peut être très long de commencer l’analyse ligne de code par ligne de code à partir du point d’entrée.

Utilisez plutôt certaines des fonctionnalités présentées dans cet article, et examinez les fonctions importées par le malware. Quelles sont les importations intéressantes, certaines sont-elles utilisées pour se connecter à Internet ou chiffrer des données ? Si c’est le cas, déterminez où ces importations sont utilisées dans le malware, et voyez si vous pouvez en identifier les effets. Vous pouvez procéder de la même façon avec les chaînes intéressantes, repérer leur emplacement dans le malware et déterminer ce que le programme fait avec ces données.

En suivant ce principe, vous pourrez enquêter sur les informations vraiment pertinentes plutôt que de vous noyer dans le code d’assemblage.


Vous souhaitez en savoir plus sur la façon dont Varonis peut vous aider à améliorer la posture de sécurité de votre entreprise ? Découvrez comment notre solution peut vous aider à lutter contre les menaces internes et garantir la protection des données de votre entreprise.

Nous sommes Varonis.

Depuis 2005, nous protégeons les données les plus précieuses du monde des mains de vos ennemis grâce à notre plateforme de sécurité des données, leader sur le marché.

Comment fonctionne Varonis ?