
Sandbox de rétro-ingénierie scriptable en Python, un framework d'instrumentation et d'inspection de machines virtuelles basé sur QEMU
CE PROJET A ÉTÉ ARCHIVÉ ET SA FILE D'ATTENTE DE PROBLÈMES EST VERROUILLÉE. LE PROJET RESTERA PUBLIC UNIQUEMENT À TITRE DE RÉFÉRENCE.
.. image:: docs/media/pyrebox_logo_light_bg.png
.. _QEMU: http://qemu.org/ .. _DECAF: https://github.com/sycurelab/DECAF .. _S2E: https://github.com/dslab-epfl/s2e .. _AVATAR: https://github.com/avatartwo .. _PANDA: https://github.com/panda-re/panda .. _Volatility: http://www.volatilityfoundation.org/ .. _BUILD: BUILD.rst .. _here: https://github.com/Cisco-Talos/pyrebox/issues .. _slides: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_hitb_ams.pdf .. _available: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_euskalhack.pdf .. _scripts: https://github.com/Cisco-Talos/pyrebox/tree/master/scripts .. _readthedocs.io: https://pyrebox.readthedocs.io/en/latest/ .. _questions: https://github.com/Cisco-Talos/pyrebox/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20 .. _presentation: https://www.youtube.com/watch?v=F2voG87obzM .. _Contest: https://volatility-labs.blogspot.com/2017/11/results-from-5th-annual-2017-volatility.html
PyREBox est un bac à sable de rétro-ingénierie scriptable en Python. Il est basé sur QEMU et vise à faciliter la rétro-ingénierie en offrant des capacités d'analyse dynamique et de débogage d'un point de vue différent. PyREBox permet d'inspecter une machine virtuelle QEMU en cours d'exécution, de modifier sa mémoire ou ses registres, et d'instrumenter son exécution en créant des scripts simples en Python pour automatiser tout type d'analyse. QEMU (lorsqu'il fonctionne en tant qu'émulateur de système complet) émule un système entier (CPU, mémoire, périphériques...). En utilisant des techniques VMI, il ne nécessite aucune modification du système d'exploitation invité, car il récupère de manière transparente les informations de sa mémoire en temps réel.
Plusieurs projets académiques tels que DECAF_, PANDA_, S2E_ ou AVATAR_ ont déjà exploité l'instrumentation basée sur QEMU pour résoudre des tâches de rétro-ingénierie. Ces projets permettent d'écrire des plugins en C/C++ et implémentent plusieurs fonctionnalités avancées telles que l'analyse dynamique de flux (taint), l'exécution symbolique, ou même l'enregistrement et la relecture de traces d'exécution. Avec PyREBox, nous visons à appliquer cette technologie en nous concentrant sur la simplicité de conception et sur la convivialité du système pour les analystes de menaces.
PyREBox a remporté le Volatility Plugin Contest_ en 2017 !
Cet outil a été présenté à la conférence HITB Amsterdam 2018. Vous pouvez voir les slides_ ou regarder la présentation_. Il a également été présenté à la troisième édition du Congrès de Sécurité EuskalHack (slides disponibles_).
N'oubliez pas de tirer la dernière version de PyREBox pour profiter de ses dernières fonctionnalités. PyREBox est en développement actif et de nouvelles fonctionnalités intéressantes sont encore à venir ! La branche master devrait toujours contenir une version stable, tandis que les branches de développement contiennent les dernières fonctionnalités en cours de développement. La liste d'annonces suivante fait référence à la branche master et à la date à laquelle les modifications de développement ont été fusionnées dans master.
Un script de construction est fourni. Pour plus de détails sur les dépendances, veuillez consulter BUILD_. Nous fournissons également un Dockerfile.
La documentation de ce projet est hébergée sur readthedocs.io_.
Si vous pensez avoir trouvé un bug, veuillez le signaler ici_.
Avant de créer un nouveau ticket, veuillez consulter les questions_ ouvertes par d'autres utilisateurs.
Ce programme est fourni "EN L'ÉTAT", et aucun support n'est garanti. Cela dit, pour nous aider à résoudre vos problèmes, veuillez inclure autant d'informations que possible pour reproduire le bug :
PyREBox est basé sur QEMU. Pour démarrer une VM avec PyREBox, vous devez l'exécuter exactement comme si vous démarriez une VM QEMU. Deux scripts d'exemple sont fournis : start_i386.sh, start_x86_64.sh, vous pouvez les utiliser comme exemple.
La seule option du moniteur QEMU actuellement supportée est stdio (-monitor stdio).
Fournir une plateforme d'émulation système complète avec une interface simple pour inspecter le système invité émulé.
Avoir une conception propre, découplée de QEMU. De nombreux projets construits sur QEMU n'évoluent pas lorsque QEMU est mis à niveau, manquant ainsi de nouvelles fonctionnalités et optimisations, ainsi que des mises à jour de sécurité. Pour y parvenir, PyREBox est implémenté comme un module indépendant qui peut être compilé avec QEMU en nécessitant un ensemble minimal de modifications.
Support de différentes architectures. Actuellement, PyREBox ne supporte que Windows pour les architectures x86 et x86-64, mais sa conception permet de supporter d'autres architectures telles qu'ARM, MIPS, ou PowerPC, ainsi que d'autres systèmes d'exploitation.
Démarrer un shell PyREBox est aussi simple que de taper la commande sh sur le moniteur de QEMU. Cela lancera immédiatement un shell IPython. Ce shell enregistre l'historique des commandes ainsi que les variables définies. Par exemple, vous pouvez sauvegarder une valeur et la récupérer plus tard à un point différent de l'exécution, lorsque vous redémarrez le shell. PyREBox profite de toutes les fonctionnalités disponibles dans IPython telles que l'auto-complétion, l'historique des commandes, l'édition multi-lignes, et la génération automatique d'aide pour les commandes.
PyREBox vous permettra de déboguer le système (ou un processus) de manière assez furtive. Contrairement aux débogueurs traditionnels qui résident dans le système débogué (modifiant même la mémoire du processus débogué pour insérer des points d'arrêt), PyREBox reste complètement en dehors du système inspecté et ne nécessite l'installation d'aucun pilote ou composant dans l'invité.
.. image:: docs/media/breakpoint.gif
PyREBox offre un ensemble complet de commandes pour inspecter et modifier l'état de la VM en cours d'exécution. Tapez simplement list_commands pour obtenir une liste complète. Vous pouvez exécuter n'importe quel plugin Volatility en tapant vol suivi de la commande Volatility correspondante. Pour une liste complète des plugins Volatility disponibles, vous pouvez taper list_vol_commands. Cette liste est générée automatiquement, elle affichera donc également tout plugin Volatility que vous installez dans le chemin volatility/ de PyREBox.
Vous pouvez également définir vos propres commandes ! C'est aussi simple que de déclarer une fonction dans un script et de la charger.
Si vous avez besoin de quelque chose de plus expressif qu'une commande, vous pouvez écrire un extrait de code Python en utilisant l'API. Pour une description détaillée de l'API, consultez la Documentation_ ou tapez help(api) dans le shell.
.. image:: docs/media/stack.gif
PyREBox permet de charger dynamiquement des scripts qui peuvent enregistrer des fonctions de rappel (callbacks) appelées lorsque certains événements se produisent, comme des instructions exécutées, des lectures/écritures mémoire, des créations/suppressions de processus, etc.
Étant donné que PyREBox est intégré à Volatility, il vous permettra de profiter de tous les plugins Volatility pour la forensique mémoire dans vos scripts Python. La plupart des outils de rétro-ingénierie les plus célèbres sont implémentés en Python ou ont au moins des liaisons Python. Notre approche permet d'intégrer n'importe lequel de ces outils dans un script.
Enfin, étant donné que les rappels Python peuvent introduire une pénalité de performance sur des événements fréquents tels que les instructions exécutées, il est également possible de créer des triggers. Les triggers sont des plugins en code natif (développés en C/C++) qui peuvent être insérés dynamiquement à l'exécution sur n'importe quel événement juste avant l'exécution du rappel Python. Cela permet de limiter le nombre d'événements qui atteignent le code Python, ainsi que de précalculer des valeurs en code natif.
Dans ce dépôt, vous trouverez des scripts d'exemple_ qui peuvent vous aider à écrire votre propre code. Les contributions sont les bienvenues !
Tout d'abord, PyREBox ne serait pas possible sans QEMU_ et Volatility_. Nous remercions leurs développeurs et mainteneurs pour un si excellent travail.
PyREBox est inspiré de plusieurs projets académiques, tels que DECAF_ ou PANDA_. En fait, de nombreux rappels supportés par PyREBox sont équivalents à ceux trouvés dans DECAF_, et les concepts derrière l'instrumentation sont basés sur ces travaux.
PyREBox bénéficie de code tiers, qui se trouve dans le répertoire pyrebox/third_party. Pour chaque projet tiers, nous incluons une indication de sa licence originale, les fichiers sources originaux pris du projet, ainsi que les versions modifiées des fichiers sources (le cas échéant), utilisés par PyREBox.