Docker Forensics

Підтримайте HackTricks

Зміна контейнера

Є підозри, що деякий контейнер Docker був скомпрометований:

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

Ви легко можете знайти модифікації, внесені до цього контейнера щодо зображення, за допомогою:

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
...

У попередній команді C означає Змінено, а A, Додано. Якщо ви виявите, що який-небудь цікавий файл, наприклад /etc/shadow, був змінений, ви можете завантажити його з контейнера, щоб перевірити наявність зловмисної діяльності за допомогою:

docker cp wordpress:/etc/shadow.

Ви також можете порівняти його з оригіналом, запустивши новий контейнер і витягнувши файл з нього:

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

Якщо ви виявите, що додано підозрілий файл, ви можете отримати доступ до контейнера та перевірити його:

docker exec -it wordpress bash

Зміни в зображеннях

Коли вам надають експортоване зображення Docker (найімовірніше у форматі .tar), ви можете використовувати container-diff, щоб витягти підсумок змін:

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

Після цього ви можете розпакувати зображення та отримати доступ до кульок, щоб шукати підозрілі файли, які ви могли знайти в історії змін:

tar -xf image.tar

Базовий аналіз

Ви можете отримати базову інформацію з образу, що працює:

docker inspect <image>

Ви також можете отримати історію змін за допомогою:

docker history --no-trunc <image>

Ви також можете створити dockerfile з образу за допомогою:

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>

Занурення

Для пошуку доданих/змінених файлів в образах Docker ви також можете використовувати dive (завантажте його з релізів):

#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

Це дозволяє вам переміщатися між різними блоками образів Docker та перевіряти, які файли були змінені/додані. Червоний означає додано, а жовтий - змінено. Використовуйте Tab, щоб перейти до іншого виду, та Пробіл, щоб згорнути/розгорнути папки.

За допомогою die ви не зможете отримати доступ до вмісту різних етапів зображення. Для цього вам потрібно розпакувати кожен шар та отримати до нього доступ. Ви можете розпакувати всі шари зображення з каталогу, де було розпаковано зображення, виконавши:

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

Облікові дані з пам'яті

Зверніть увагу, що коли ви запускаєте контейнер Docker всередині хоста ви можете бачити процеси, що працюють в контейнері з хоста, просто запустивши ps -ef

Отже (як root) ви можете вивантажити пам'ять процесів з хоста та шукати облікові дані просто як у наступному прикладі.

Last updated