7.1 KiB
Форензіка Docker
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!
Інші способи підтримки HackTricks:
- Якщо ви хочете побачити рекламу вашої компанії на HackTricks або завантажити HackTricks у форматі PDF, перевірте ПЛАНИ ПІДПИСКИ!
- Отримайте офіційний PEASS & HackTricks мерч
- Відкрийте для себе Сім'ю PEASS, нашу колекцію ексклюзивних NFT
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами на Twitter 🐦 @hacktricks_live.
- Поділіться своїми хакерськими трюками, надсилайте PR до HackTricks і HackTricks Cloud репозиторіїв на GitHub.
Зміна контейнера
Є підозри, що деякий контейнер 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) ви можете витягти пам'ять процесів з хоста та шукати облікові дані просто як у наступному прикладі.