Docker Forensics

Reading time: 6 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks

Container modification

有怀疑认为某些docker容器被破坏:

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

您可以轻松地找到与镜像相关的此容器所做的修改,方法是:

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

在之前的命令中,C 代表 Changed,而 A 代表 Added
如果你发现某个有趣的文件,比如 /etc/shadow 被修改了,你可以使用以下命令从容器中下载它,以检查恶意活动:

bash
docker cp wordpress:/etc/shadow.

您还可以通过运行一个新容器并从中提取文件来与原始文件进行比较

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

如果您发现 某个可疑文件被添加,您可以访问容器并检查它:

bash
docker exec -it wordpress bash

图像修改

当你获得一个导出的 docker 镜像(可能是 .tar 格式)时,你可以使用 container-diff提取修改的摘要

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

然后,您可以解压缩映像并访问 blobs以搜索您可能在更改历史中发现的可疑文件:

bash
tar -xf image.tar

基本分析

您可以通过运行以下命令获取基本信息

bash
docker inspect <image>

您还可以通过以下方式获取更改历史的摘要:

bash
docker history --no-trunc <image>

您还可以使用以下命令从镜像生成 dockerfile

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

为了在docker镜像中查找添加/修改的文件,您还可以使用 dive(从 releases 下载它)工具:

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

这使您能够浏览不同的 Docker 镜像块并检查哪些文件被修改/添加。红色表示添加,黄色表示修改。使用tab键切换到其他视图,使用space键折叠/打开文件夹。

使用 die,您将无法访问镜像不同阶段的内容。要做到这一点,您需要解压每一层并访问它
您可以通过在解压镜像的目录中执行以下命令来解压镜像的所有层:

bash
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 用户),您可以从主机中转储进程的内存并搜索凭证,就像以下示例中所示。

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks