Hackfest 2024 - 16-bit Edition

BigSim : Faciliter la rétro-ingénierie de micrologiciels embarqués
10-11, 17:00–17:50 (America/New_York), Track 1 (206b)
Language: Français

L’analyse de micrologiciels embarqués présente plusieurs difficultés. Le code est sous une forme brute et ne contient aucun symbole, ce qui laisse des centaines de fonctions à analyser. Toutefois, le logiciel de rétro-ingénierie Ghidra a récemment dévoilé un nouvel outil, BSim, qui peut grandement faciliter cette analyse. BSim utilise une base de données remplie de fonctions connues à laquelle il compare les fonctions à analyser. Si la similarité est grande, il est raisonnable de conclure que les fonctions sont identiques et il n’est pas nécessaire d’analyser manuellement la nouvelle fonction. Cependant, chaque analyse doit d’abord remplir sa propre base de données avec des fonctions connues. C’est pourquoi nous avons créé BigSim : une base de données gratuite et publique préremplie avec des milliers de fonctions provenant de librairies logicielles et de Software Development Kit (SDK) populaires. Cette présentation fera un survol de BSim, expliquera la procédure de création de BigSim et fera un exemple de son utilisation.


L’analyse de micrologiciels embarqués présente plusieurs difficultés. Chaque appareil est unique et certains utilisent des processeurs avec une architecture méconnue ou mal supportée par les logiciels de rétro-ingénierie. Les données doivent être extraites directement depuis les puces de l’appareil, puis le micrologiciel doit être extirpé de cette agglomération sans structure. Ce n’est qu’à ce moment que le travail de rétro-ingénierie du code peut commencer. Des centaines de fonctions doivent être analysées sans l’aide d’éléments facilitateurs comme les symboles de débogage. Ce travail est sans cesse à refaire, malgré que certains micrologiciels aient des éléments en commun. En effet, la plupart des développeurs de micrologiciels utilisent des librairies logicielles ou des Software Development Kit (SDK) pour accélérer le développement. Ces SDK sont souvent facilement accessibles, voire à source ouverte, ce qui peut théoriquement être utilisé pour faciliter l’analyse. Afin de pallier ce problème et de faire le pont entre le code des SDK et les instructions de leur version compilée, certaines solutions commerciales existent, comme IDA Lumina. Toutefois, elles sont très couteuses. Heureusement, le logiciel de rétro-ingénierie à source ouverte Ghidra a récemment dévoilé un nouvel outil dans la même lignée. BSim, ou Behavioral Similarity, permet d’extraire des caractéristiques sur le comportement d’une fonction. Celles-ci sont centrées sur ce que fait la fonction plutôt que sur comment elle le fait, ce qui fait abstraction des détails de compilation comme le choix des registres utilisés. Les caractéristiques d’une fonction forment sa signature, qui peut ensuite être sauvegardée dans une base de données. Lorsqu’une nouvelle fonction est analysée dans un micrologiciel, sa signature peut être comparée à celles emmagasinées dans la base de données et lorsqu’une correspondance est trouvée, il est raisonnable de conclure qu’il s’agit de la même fonction. Une base de données remplie de signatures de fonctions connues peut donc énormément accélérer et simplifier le travail initial de rétro-ingénierie. Or, il n’existe actuellement aucune base de données publique et gratuite et chacun doit remplir la sienne un exécutable à la fois. Notre principale contribution est donc BigSim, une base de données pour BSim gratuite, publique, et préremplie avec les signatures de plusieurs librairies logicielles et SDK populaires. BigSim contient différentes versions des librairies et SDK et des variantes compilées sur plusieurs architectures de processeur afin de maximiser les chances de correspondance lors de l’analyse. L’objectif de ce projet est d’améliorer la sécurité des appareils embarqués en facilitant l’analyse de leur micrologiciel et en réduisant la partie répétitive. Une des limites du projet est que la base de données peut grossir rapidement avec l’ajout de SDK sous toutes leurs versions. En plus de prendre de l’espace sur le disque, le temps de recherche pour une correspondance de signature est augmenté. Une version future pourra explorer la séparation des signatures en plusieurs bases de données, potentiellement une par type de processeur, pour en réduire la taille. Une autre limite est la précision des correspondances, car de faux positifs et de faux négatifs peuvent se glisser dans les résultats. Le nombre de fausses correspondances peut toutefois être diminué en ajustant les seuils de similarité requis et en ajoutant plus de signatures de fonction à la base de données.
La présentation fera un aperçu de Ghidra et de BSim. S’ensuivra une description de la procédure d’accumulation des symboles de débogage et de population à grande échelle de la base de données. Finalement, BigSim sera utilisé pour identifier des fonctions d’un SDK connu sur un micrologiciel embarqué. Cette présentation s’adresse à toute personne intéressée par la rétro-ingénierie ou par le domaine de la sécurité des appareils embarqués.

Colin Stéphenne est spécialiste en sécurité des systèmes embarqués chez RMDS Innovation (Vendel). Diplômé en génie informatique et détenteur d’une maîtrise en cybersécurité de l’école Polytechnique de Montréal, il possède une vaste expérience de recherche et de terrain dans l’évaluation de et le renforcement de la sécurité des composantes embarquées.