Docker Forensics

Reading time: 5 minutes

tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks

Modificación de contenedores

Hay sospechas de que algún contenedor de docker fue comprometido:

bash
docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
cc03e43a052a        lamp-wordpress      "./run.sh"          2 minutes ago       Up 2 minutes        80/tcp              wordpress

Puedes fácilmente encontrar las modificaciones realizadas a este contenedor con respecto a la imagen con:

bash
docker diff wordpress
C /var
C /var/lib
C /var/lib/mysql
A /var/lib/mysql/ib_logfile0
A /var/lib/mysql/ib_logfile1
A /var/lib/mysql/ibdata1
A /var/lib/mysql/mysql
A /var/lib/mysql/mysql/time_zone_leap_second.MYI
A /var/lib/mysql/mysql/general_log.CSV
...

En el comando anterior, C significa Cambiado y A, Añadido.
Si encuentras que algún archivo interesante como /etc/shadow fue modificado, puedes descargarlo del contenedor para verificar actividad maliciosa con:

bash
docker cp wordpress:/etc/shadow.

También puedes compararlo con el original ejecutando un nuevo contenedor y extrayendo el archivo de él:

bash
docker run -d lamp-wordpress
docker cp b5d53e8b468e:/etc/shadow original_shadow #Get the file from the newly created container
diff original_shadow shadow

Si encuentras que se añadió algún archivo sospechoso puedes acceder al contenedor y verificarlo:

bash
docker exec -it wordpress bash

Modificaciones de imágenes

Cuando se te proporciona una imagen de docker exportada (probablemente en formato .tar), puedes usar container-diff para extraer un resumen de las modificaciones:

bash
docker save <image> > image.tar #Export the image to a .tar file
container-diff analyze -t sizelayer image.tar
container-diff analyze -t history image.tar
container-diff analyze -t metadata image.tar

Luego, puedes descomprimir la imagen y acceder a los blobs para buscar archivos sospechosos que puedas haber encontrado en el historial de cambios:

bash
tar -xf image.tar

Análisis Básico

Puedes obtener información básica de la imagen ejecutando:

bash
docker inspect <image>

También puedes obtener un resumen histórico de cambios con:

bash
docker history --no-trunc <image>

También puedes generar un dockerfile a partir de una imagen con:

bash
alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"
dfimage -sV=1.36 madhuakula/k8s-goat-hidden-in-layers>

Dive

Para encontrar archivos añadidos/modificados en imágenes de docker, también puedes usar la dive (descárgalo de releases) utilidad:

bash
#First you need to load the image in your docker repo
sudo docker load < image.tar                                                                                                                                                                                                         1 ⨯
Loaded image: flask:latest

#And then open it with dive:
sudo dive flask:latest

Esto te permite navegar a través de los diferentes blobs de imágenes de docker y verificar qué archivos fueron modificados/agregados. Rojo significa agregado y amarillo significa modificado. Usa tab para moverte a la otra vista y space para colapsar/abrir carpetas.

Con die no podrás acceder al contenido de las diferentes etapas de la imagen. Para hacerlo, necesitarás descomprimir cada capa y acceder a ella.
Puedes descomprimir todas las capas de una imagen desde el directorio donde se descomprimió la imagen ejecutando:

bash
tar -xf image.tar
for d in `find * -maxdepth 0 -type d`; do cd $d; tar -xf ./layer.tar; cd ..; done

Credenciales de la memoria

Note que cuando ejecuta un contenedor de docker dentro de un host puede ver los procesos que se están ejecutando en el contenedor desde el host simplemente ejecutando ps -ef

Por lo tanto (como root) puede volcar la memoria de los procesos desde el host y buscar credenciales justo como en el siguiente ejemplo.

tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks