Aller au contenu

Reverse Engineering d'images avec Whaler

logo docker

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 :

Terminal window
docker pull pegleg/whaler
docker 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.

Terminal window
Analyzing hashicorp/terraform
Docker Version: 17.09.0-ce
GraphDriver: overlay2
Environment 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.tar
Dockerfile:
CMD ["/bin/sh"]
ARG TERRAFORM_VERSION=UNSPECIFIED
LABEL com.hashicorp.terraform.version=1.0.9
|1 TERRAFORM_VERSION=1.0.9 RUN apk add --no-cache git openssh
COPY 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 :

Terminal window
docker save hashicorp/terraform -o terraform.tar
tar xvf terraform.tar
-rw-r--r-- 0/0 2438 2021-10-13 18:01 115504c439c97eedfea17008129f6b2db229626a9983782f9e42f0ebbd1e6887.json
drwxr-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.tar
drwxr-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.tar
drwxr-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.

Source