
Un plugin Binary Ninja utilisant le slicing arrière de variables comme moteur d'analyse statique de flux de données.
Mole est un plugin Binary Ninja conçu pour identifier des chemins d'exécution intéressants dans les binaires. Il effectue un tranchage arrière sur les variables en utilisant le Langage Intermédiaire de Niveau Moyen (MLIL) de Binary Ninja sous la forme d'Affectation Unique Statique (SSA), constituant la base d'une analyse statique de flux de données (taint).
Dans Mole, un chemin désigne le flux de données entre une source et un puits définis. Ce qui constitue un chemin « intéressant » dépend des objectifs de l'analyse. Par exemple, lors de la recherche de vulnérabilités, on peut chercher des chemins où des entrées non fiables (sources) influencent des opérations sensibles (puits) de manière potentiellement dangereuse.
La liste suivante met en évidence certaines des fonctionnalités actuelles de Mole :
Mode de fonctionnement : Mole peut être exécuté soit dans l'interface utilisateur de Binary Ninja, soit en mode sans tête (headless). Le mode sans tête est particulièrement utile pour une analyse scriptée sur un grand nombre de binaires. À l'inverse, utiliser Mole dans l'interface utilisateur est idéal pour examiner de près les chemins détectés.
Identification des chemins :
.bndb de Binary Ninja). Les chemins peuvent également être exportés, par exemple lors d'une analyse sans tête sur de nombreux binaires d'un système de fichiers, permettant d'importer ultérieurement les chemins identifiés pour une exploration plus facile dans Binary Ninja.Analyse de chemins avec IA : Mole peut interagir avec des Grands Modèles de Langage (LLM) locaux ou distants via l'API OpenAI (voir Utilisation). Les modèles sont utilisés pour analyser les chemins identifiés et déterminer si un chemin donné correspond à une vulnérabilité exploitable ou non. Le LLM tente de classer la vulnérabilité et d'attribuer un niveau de gravité, ce qui peut aider à prioriser les chemins méritant une investigation plus approfondie par un analyste. Mole fournit un ensemble d'outils de base que le LLM peut utiliser pour demander des informations supplémentaires sur le binaire analysé.
Tranchage de variables inter-procédural : Mole prend en charge le tranchage des variables MLIL à travers les limites des fonctions – une tâche qui présente plusieurs défis. Par exemple, déterminer statiquement le(s) appelant(s) effectif(s) d'une fonction est souvent difficile, voire impossible. En conséquence, l'approche implémentée est une approximation. Bien qu'imparfaite, elle fonctionne raisonnablement bien dans un large éventail de scénarios pratiques.
Analyse de pointeurs basique : Mole implémente actuellement une stratégie simplifiée pour suivre l'utilisation des pointeurs. Comme le tranchage inter-procédural, cette approche est une simplification avec des limitations inhérentes (par exemple, elle ne peut pas suivre les variables globales). Néanmoins, elle fonctionne bien dans de nombreux cas pratiques et son amélioration est prévue dans les versions futures.
Voyez Mole en action en exposant CVE-2021-4045, une faille d'injection de commandes sans authentification dans la caméra IP TP-Link Tapo C200 (cliquez sur l'image ci-dessous pour regarder sur YouTube) :
Mole est actuellement un travail en cours. Si vous rencontrez un bogue, avez un nouveau test unitaire utile qui met en évidence un faux positif ou négatif, ou avez une suggestion pour une nouvelle fonctionnalité, veuillez envisager d'ouvrir un ticket ou de contribuer via une demande de tirage (pull request). Notez également que les tests unitaires actuels n'ont été vérifiés que sur des binaires linux-x86_64 et linux-armv7 jusqu'à présent.
Si vous avez une histoire de succès intéressante – comme avoir trouvé une vulnérabilité à l'aide de Mole – nous aimerions en entendre parler ! N'hésitez pas à partager votre expérience avec nous.