
Ghidra est un framework de rétro-ingénierie logicielle (SRE)
Depuis le répertoire racine de votre version de Ghidra, exécutez la commande suivante.
./docker/build-docker-image.sh
Cela construira l'image docker ghidra avec une balise correspondant à la version de la version de Ghidra.
Le conteneur Docker Ghidra prend en charge les modes d'exécution MODE suivants :
La variable d'environnement MODE désigne quel point d'entrée de Ghidra exécuter.
Le script entrypoint.sh est exécuté au démarrage du conteneur.
La configuration d'un conteneur se fait comme pour tout autre conteneur docker. Des volumes peuvent être montés, des variables d'environnement définies, des ports mappés du conteneur vers l'hôte, etc. Les étapes de configuration varient considérablement selon le MODE avec lequel le conteneur est démarré.
Le répertoire de base de Ghidra dans le conteneur se trouve à /ghidra.
Tous les emplacements par défaut de ghidra pour les fichiers, configurations, etc., sont les mêmes à l'intérieur de celui-ci.
Ghidra est exécuté en tant qu'utilisateur ghidra dans le conteneur, avec l'uid 1001 et le gid 1001.
L'utilisateur ghidra n'a que les permissions sur les répertoires suivants à l'intérieur du conteneur :
/ghidra/home/ghidraLorsqu'un conteneur ne reçoit aucun argument passé avec la commande docker run,
l'interface en ligne de commande (CLI) correspondant au MODE exécuté affichera son message d'utilisation.
Les volumes dans le conteneur peuvent rencontrer des problèmes de permissions si les volumes ne sont pas accessibles aux utilisateurs du groupe d'identifiant 1001.
L'uid et le gid par défaut du conteneur sont 1001:1001. Les volumes mappés au conteneur doivent être accessibles par cet uid/gid.
Ajouter l'utilisateur de la machine hôte au groupe 1001 sur l'hôte aide à gérer les volumes qui seront utilisés dans le conteneur.
Cela peut facilement être fait en exécutant sudo usermod -aG 1001 <user> sur Linux.
docker run \
--env MODE=headless \
--rm \
--volume /path/to/myproject:/home/ghidra/myproject \
--volume /path/to/mybinary:/home/ghidra/mybinary \
ghidra/ghidra:<version> \
/home/ghidra/myproject programFolder -import /home/ghidra/mybinary
Détaillons ligne par ligne :
docker run va démarrer un conteneur docker en utilisant l'image ghidra/ghidra:<version>--env MODE=headless configure la variable d'environnement MODE dans le conteneur à la valeur headless--rm supprime le conteneur après la fin de la commande--volume /path/to/myproject:/home/ghidra/myproject monte le volume local /path/to/myproject de l'hôte vers /home/ghidra/myproject dans le conteneur--volume /path/to/mybinary:/home/ghidra/mybinary monte le volume local /path/to/mybinary de l'hôte vers /home/ghidra/mybinary dans le conteneurghidra/ghidra:<version> est la référence complète de l'image docker, où est le groupe et le nom de l'image, et est la balise.Ne passer aucun argument affichera l'utilisation de l'analyseur headless.
/path/to/myproject sur l'hôte doit être accessible au gid 1001 avec les permissions rwx.
Exécuter l'interface graphique (GUI) de Ghidra dans un conteneur docker n'est pas une méthode recommandée pour utiliser Ghidra. Les interfaces graphiques ne sont pas un cas d'utilisation typique pour les applications dockerisées.
docker run \
--env MODE=gui \
-it \
--rm \
--net host \
--env DISPLAY \
--volume "$HOME/.Xauthority:/home/ghidra/.Xauthority" \
ghidra/ghidra:<version>
Dans ce mode, le conteneur repose sur le transfert X11 pour afficher l'interface graphique. La configuration de X11 peut varier, mais dans ce cas, le fichier Xauthority de l'hôte est monté dans le conteneur, le conteneur est configuré pour utiliser le réseau de l'hôte, et la variable d'environnement DISPLAY est passée au conteneur. Cela permet de rediriger l'interface graphique vers l'écran de la machine hôte. Les volumes contenant des binaires doivent également être montés dans le conteneur, ainsi que les volumes pour les projets ghidra.
Le fichier .Xauthority de l'hôte doit avoir les permissions appropriées - attribuées au groupe :1001 avec les permissions de groupe rw.
docker run \
--env MODE=ghidra-server \
--rm \
-it \
--volume /path/to/my/repositories:/ghidra/repositories \
--volume /path/to/my/configs/server.conf:/ghidra/server/server.conf \
-p 13100:13100 \
-p 13101:13101 \
-p 13102:13102 \
ghidra/ghidra:<version>
Des volumes doivent être montés dans le conteneur serveur pour sauvegarder les dépôts, les utilisateurs, et aussi pour configurer le serveur.
Pour utiliser svrAdmin, exécutez docker exec -it <container-id> bash dans le conteneur serveur ghidra en cours d'exécution pour obtenir un shell bash dans le conteneur.
Après être entré dans le conteneur, l'administration et la gestion du serveur Ghidra sont les mêmes qu'en dehors d'un environnement conteneurisé.
Pour arrêter le conteneur, exécutez la commande docker stop <container-id>.
NOTE : les ports que vous mappez de l'hôte au conteneur docker doivent correspondre. Vous pouvez modifier le port de base du serveur par défaut (par exemple 13100) dans le fichier server.conf en utilisant l'option -p<port>.
docker run \
--env MODE=bsim-server \
--rm \
-it \
--volume /path/to/my/datadir:/ghidra/bsim_datadir \
-p 5432:5432 \
ghidra/ghidra:<version> \
/ghidra/bsim_datadir
/ghidra/bsim_datadir est le répertoire utilisé pour stocker les données de bsim dans le conteneur. D'autres répertoires pourraient être utilisés sur le conteneur,
mais assurez-vous que le dossier sur la machine hôte a les permissions appropriées, attribuées au groupe :1001.
Cet exemple démarre simplement un serveur bsim. La configuration du serveur bsim et son remplissage avec des données
peuvent être effectués après le démarrage dans le conteneur, d'une manière similaire à l'administration du serveur ghidra.
Un administrateur devrait exécuter docker exec -it <container-id> bash dans le conteneur serveur bsim en cours d'exécution,
et après être entré dans le conteneur, l'administration et la gestion du serveur Bsim sont les mêmes qu'en dehors d'un environnement conteneurisé.
Pour arrêter le conteneur, exécutez la commande docker stop <container-id>.
docker run \
--env MODE=bsim \
--rm \
-it \
ghidra/ghidra:<version> \
generatesigs ghidra://ghidrasvr/demo /home/ghidra \
--bsim postgresql://bsimsvr/demo \
--commit --overwrite \
--user ghidra
Dans cet exemple, le CLI bsim est utilisé pour se connecter à un serveur ghidra hébergé sur ghidrasvr,
générer des signatures pour le dépôt demo sur ce serveur ghidra et les sauvegarder dans /home/ghidra,
puis les valider sur le serveur BSIM hébergé sur bsimsvr dans la base de données demo.
Exécuter l'interface graphique (GUI) de Ghidra dans un conteneur docker n'est pas une méthode recommandée pour utiliser Ghidra. Les interfaces graphiques ne sont pas un cas d'utilisation typique pour les applications dockerisées.
docker run \
--env MODE=pyghidra \
-it \
--rm \
--net host \
--env DISPLAY \
--volume="$HOME/.Xauthority:/home/ghidra/.Xauthority:rw" \
ghidra/ghidra:<version> -c
Dans ce mode, le conteneur repose sur le transfert X11 pour afficher l'interface graphique. La configuration de X11 peut varier, mais dans ce cas, le fichier Xauthority de l'hôte est monté dans le conteneur, le conteneur est configuré pour utiliser le réseau de l'hôte, et la variable d'environnement DISPLAY est passée au conteneur. Cela permet de rediriger l'interface graphique vers l'écran de la machine hôte. Les volumes contenant des binaires doivent également être montés dans le conteneur, ainsi que les volumes pour les projets ghidra.
Le fichier .Xauthority de l'hôte doit avoir les permissions appropriées - appartenant à :1001 avec les permissions de groupe rw.
docker run \
--env MODE=pyghidra \
--rm \
--volume /path/to/myproject:/myproject \
--volume /path/to/mybinary:/mybinary \
ghidra/ghidra:<version> -H \
/myproject programFolder -import /mybinary
Ne passer aucun argument à l'analyseur headless pyghidra entraînera l'affichage du menu d'aide, tout comme l'analyseur headless.
Ce cas d'utilisation est très similaire à l'exemple du mode headless, avec l'avantage supplémentaire de pouvoir utiliser python3 pour les scripts Ghidra.
Encore une fois, dans cet exemple, des permissions appropriées et l'attribution de groupe pour /path/to/myproject et /path/to/mybinary sont nécessaires pour éviter des problèmes de permissions.
ghidra/ghidra<version>/home/ghidra/myproject programFolder -import /home/ghidra/mybinary sont des arguments passés à l'interface en ligne de commande de l'analyseur headless de Ghidra