Docker Forensics

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки 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, щоб перейти до іншого виду, та пробіл, щоб згорнути/розгорнути папки.

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

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