Reverse Engineering d'images avec Whaler
Whaler est une application écrite en Go permettant de faire du reverse engineering sur les images Docker. Vous allez pouvoir analyser comment sont produites les images officielles.
Cette application permet :
- Générer un Dockerfile à partir l’image
- D’indiquer les fichiers qui ont été ajoutés avec les instructions Docker ADD/COPY
- Recherche des fichiers ajoutés pouvant contenir des secrets (token, mots de passe, certificats)
- Il affiche également les ports ouverts, l’utilisateur d’exécution et les variables d’environnement.
Utiliser whaler
Le moyen le plus simple consiste à exécuter l’outil dans le conteneur Docker :
docker pull pegleg/whalerdocker run -t --rm -v /var/run/docker.sock:/var/run/docker.sock:ro pegleg/whaler hashicorp/terraform
Si l’image n’est pas présente sur votre poste, elle se chargera de la récupérer.
Analyzing hashicorp/terraformDocker Version: 17.09.0-ceGraphDriver: overlay2Environment Variables|PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Image user|User is root
Potential secrets:|Found match etc/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub Possible public key \.pub$ 304e424bc2d24962ebf3497697c15f6c58bb58a8bf58832fa5286f30d0d36285/layer.tar|Found match etc/apk/keys/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub Possible public key \.pub$ 304e424bc2d24962ebf3497697c15f6c58bb58a8bf58832fa5286f30d0d36285/layer.tar|Found match etc/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub Possible public key \.pub$ 304e424bc2d24962ebf3497697c15f6c58bb58a8bf58832fa5286f30d0d36285/layer.tar|Found match etc/udhcpd.conf DHCP server configs dhcpd[^ ]*.conf 304e424bc2d24962ebf3497697c15f6c58bb58a8bf58832fa5286f30d0d36285/layer.tar|Found match etc/ssh/ssh_config Client SSH Config .?ssh_config[\s\S]* 3429ebdea5b8d86f0fe0d489c0617bc3e95252a54bdf76e65a213f4840aa7e2d/layer.tar|Found match etc/ssh/sshd_config Server SSH Config .?sshd_config[\s\S]* 3429ebdea5b8d86f0fe0d489c0617bc3e95252a54bdf76e65a213f4840aa7e2d/layer.tarDockerfile:CMD ["/bin/sh"]ARG TERRAFORM_VERSION=UNSPECIFIEDLABEL com.hashicorp.terraform.version=1.0.9|1 TERRAFORM_VERSION=1.0.9 RUN apk add --no-cache git opensshCOPY file:85b3c554c0ed26b376f944595ef6fc2f3561258e1c2318956ec6993299f3a0df in /bin/terraform bin/ bin/terraform
ENTRYPOINT ["/bin/terraform"]
Pour extraire les layers il suffit d’utiliser la commande save
permettant de
sauver l’image au format tar :
docker save hashicorp/terraform -o terraform.tartar xvf terraform.tar-rw-r--r-- 0/0 2438 2021-10-13 18:01 115504c439c97eedfea17008129f6b2db229626a9983782f9e42f0ebbd1e6887.jsondrwxr-xr-x 0/0 0 2021-10-13 18:01 304e424bc2d24962ebf3497697c15f6c58bb58a8bf58832fa5286f30d0d36285/-rw-r--r-- 0/0 3 2021-10-13 18:01 304e424bc2d24962ebf3497697c15f6c58bb58a8bf58832fa5286f30d0d36285/VERSION-rw-r--r-- 0/0 401 2021-10-13 18:01 304e424bc2d24962ebf3497697c15f6c58bb58a8bf58832fa5286f30d0d36285/json-rw-r--r-- 0/0 5865472 2021-10-13 18:01 304e424bc2d24962ebf3497697c15f6c58bb58a8bf58832fa5286f30d0d36285/layer.tardrwxr-xr-x 0/0 0 2021-10-13 18:01 3429ebdea5b8d86f0fe0d489c0617bc3e95252a54bdf76e65a213f4840aa7e2d/-rw-r--r-- 0/0 3 2021-10-13 18:01 3429ebdea5b8d86f0fe0d489c0617bc3e95252a54bdf76e65a213f4840aa7e2d/VERSION-rw-r--r-- 0/0 477 2021-10-13 18:01 3429ebdea5b8d86f0fe0d489c0617bc3e95252a54bdf76e65a213f4840aa7e2d/json-rw-r--r-- 0/0 19842048 2021-10-13 18:01 3429ebdea5b8d86f0fe0d489c0617bc3e95252a54bdf76e65a213f4840aa7e2d/layer.tardrwxr-xr-x 0/0 0 2021-10-13 18:01 6022d1b9e59e923a389c0aea23a1ce85428001b15e489866eb3adf15688111ce/-rw-r--r-- 0/0 3 2021-10-13 18:01 6022d1b9e59e923a389c0aea23a1ce85428001b15e489866eb3adf15688111ce/VERSION-rw-r--r-- 0/0 1333 2021-10-13 18:01 6022d1b9e59e923a389c0aea23a1ce85428001b15e489866eb3adf15688111ce/json-rw-r--r-- 0/0 79350272 2021-10-13 18:01 6022d1b9e59e923a389c0aea23a1ce85428001b15e489866eb3adf15688111ce/layer.tar-rw-r--r-- 0/0 369 1970-01-01 00:00 manifest.json-rw-r--r-- 0/0 102 1970-01-01 00:00 repositories
En regardant les informations générées par whaler il est possible d’identifier le layer à désarchiver pour récupérer l’info qu’il vous faut.