Lors de la RSA Conference, un intervenant de la NSA a dévoilé Ghidra, une suite d’outils de rétro-ingénierie développé par la National Security Agency pour l’analyse de code et de malwares.

Ghidra

Ce n’est pas la première fois qu’on entend parler de Ghidra. Il y a 2 ans, Wikileaks a dévoilé Vault7. Dans ces documents on pouvait y trouver une documentation sur l’analyse des kernelcaches des iPhones avec un processeur 64 bits grâce à Ghidra.

Voici la liste non-exhaustive des architectures supportées par Ghidra :

  • ARM/AARCH64
  • PowerPC 32/64, VLE
  • MIPS 16/32/64
  • micro
  • 68k
  • Java / DEX bytecode
  • PA
  • RISC
  • PIC 12/16/17/18/24
  • Sparc 32/64
  • CR16C
  • Z80
  • 6502
  • 8051
  • MSP430
  • AVR8, AVR32

Installation

Ghidra est écrit en Java (et oui…) il vous faudra donc installer installer Java Runtime Environnement et ajouter Open JDK dans votre $PATH.

Ensuite téléchargez Ghidra sur le site officiel : https://ghidra-sre.org.

Décompressez l’archive ZIP et exécutez le fichier ghidraRun.bat sur Windows ou ghidraRun sur les systèmes UNIX (MacOS, Linux).

Analyse

Lors du premier lancement il vous faudra créer un projet et importer un fichier. Pour ma part j’ai pris un dump de SecureROM d’iPod Touch 6 (A8).

Comme le fichier est considéré comme de la donnée brute (raw), Il faudra spécifier manuellement certains paramètres (architecture, endianess). Si Ghidra détermine le type de fichier, vous n’aurez pas à passer par cette étape.

Lors du chargement du fichier Ghidra va afficher quelques informations sur celui-ci.

Vous pouvez double-cliquer sur le fichier que vous souhaitez analyser. La fenêtre CodeBrowser va se lancer et une fenêtre de dialogue vous proposera d’analyser automatiquement votre fichier.

Vous pouvez accepter l’auto-analyse.

Dans mon cas, il faut que je change l’adresse de base. En effet, comme le fichier que j’analyse est un bootloader il s’attend à être exécuté à une adresse spécifique prédéfinie.

En fouillant dans le code source de l’iBoot d’Apple on peut la trouver assez facilement :

# srom is always defined in here
ifeq ($(TEXT_BANK),srom)
 TEXT_BASE		:= 0x100000000
endif

On peut aussi déterminer l’adresse en désassemblant les premières lignes au début du fichier.

Du coup il faut maintenant changer la valeur de base. Window -> Memory Map on clique sur la petite maison pour remplacer l’image de base par défaut par la bonne adresse.

On peut enfin lancer l’auto-analyse (Analysis -> Auto analyze file ou juste pressez juste la touche A).

En fonction du type de fichier l’analyse peut prendre plus ou moins de temps : 15 minutes pour un noyau XNU, 30 minutes pour un noyau Linux 5.0 compilé pour Debian, et seulement quelques secondes pour un Bomberman fait maison.

Dans le cas d’un bootloader très léger cela prend aussi quelques secondes.

Comme dirait GeoSn0w, l’interface est IDAesque

Un point intéressant, c’est que Ghidra supporte nativement le bindiffing. Malheureusement on peut uniquement comparer le code assembleur, et non le pseudocode ni les graphs.

Ghidra vs IDA PRO

Pourquoi comparer Ghidra à IDA PRO ? Et bien parce qu’ils se valent (presque).

Ghidra est en développement en interne à la NSA depuis 10 ans alors que la première version de IDA serait sortie en 1998.

IDA Pro est bien plus avancé que Ghidra et offre plus de fonctionnalités. Mais son défaut majeur est le prix. Si vous souhaitez acheter le logiciel comptez au moins un bon millier de dollars. Sans compter les options et le support des différents processeurs ainsi que du décompilateur qui n’est pas présent par défaut.

Ghidra possède un décompilateur assez avancé compatible avec la plupart des processeurs actuels. Il s’installe sur les principaux systèmes d’exploitation avec une architecture x86_64.

Tout comme IDA, Ghidra possède aussi une vue graphique qui fait bien son travail, même si l’UI donne envie de s’arracher les yeux. Les deux se ressemblent, mais j’ai pu m’adapter depuis plusieurs années à l’interface d’IDA.

Donc à gauche vous avez la vue en graphique de IDA PRO (avec thème sombre) et à droite celle de Ghidra.

Les deux outils possèdent une fonctionnalité pour rajouter des plugins et exécuter des scripts en Python pour rendre l’analyse binaire dynamique. Et Diaphora devrait surement être compatible avec Ghidra d’ici les prochaines semaines ou mois.

Le petit nouveau ne possède pas encore de debugger intégré mais ça devrait arriver d’après Rob Joyce.

Contrairement à IDA PRO, avec Ghidra on peut créer des projets collaboratif et versionnés.

Et pour finir, Ghidra a un bouton annuler (ctrl+z) ce que IDA Pro n’a pas.

Pour conclure, Ghidra est un très bon produit gratuit, qui a pu faire ses preuves au sein de la NSA (on se rappelle de EthernalBlue qui a mené à WannaCry).

La communauté derrière cet outil grandit petit à petit et certains projets pour IDA sont en train d’être portés pour Ghidra.


C’était une brève introduction à Ghidra. Je vais surement faire d’autres posts de reverse engineering en utilisant Ghidra au lieu d’IDA pour que ça soit plus accessible et surtout ne plus avoir recours à la license de Jiang Ying.

Si vous avez besoin d’infos ou souhaitez corriger des erreurs, vous pouvez me ping sur Twitter : @matteyeux

Github : matteyeux


Sources :

Get Your Free NSA Reverse Engineering Tool
https://github.com/NationalSecurityAgency/ghidra
https://ghidra-sre.org/