Reverse Engineering d'images avec Whaler
Publié le :
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.