0x01 Docker 应急说明

在做应急响应时,主机上发现异常进程或文件,但定位不到具体路径,若主机上存在 Docker 应用,则问题大概率出在 Docker 环境中,需要对 Docker 运行应用环境进行应急排查。

0x02 Docker 挖矿靶场

Docker 挖矿应急靶场 pmietlicki/xmrig 下载。

1
docker run -itd --restart=always -e POOL_URL=pool.supportxmr.com:5555 -e POOL_USER=45rfqYG9iNPddvenLpjFskJUhFgqBkdhDeah3X8D8ZJM3KpKqZWCLz3ewLsVd269tZiEyQRV53Ldv2DJb6xeuFokF7SBb1p --name xmrig pmietlicki/xmrig

注意:在虚拟机环境中运行挖矿靶场练习。

0x03 Docker 常用命令

查看所有容器镜像信息。

1
docker ps -a

进入指定镜像。

1
docker exec -it <docker-ID> /bin/bash

暂停指定镜像。

1
docker pause <docker-ID>

删除容器和镜像。

1
2
docker rm -f <docker-ID>
docker rmi <image-name>

查看容器内部文件状态变化。

1
docker diff <docker-ID>

查看容器目录。

1
docker inspect <docker-ID>

查看日志。

1
docker log <image-name>

查看容器运行状态。

1
docker stats <docker-ID>

断开容器网络。

1
docker network disconnect bridge <docker-ID>

打包容器为镜像,保留入侵痕迹。

1
2
3
docker commit <docker-ID> <image-name>:<tag>  # 把容器打包成镜像
docker save -o <target-name>.tar <image-name>:<tag> # 打包镜像
docker load --input <target-name>.tar # 新服务器载入镜像

本机和容器文件互传,用于上传查杀工具和下载木马样本。

1
2
3
4
# 上传
docker cp /path/filname <docker-ID>:/tmp/filename
# 下载
docker cp <docker-ID>:/tmp/filename /path/filname

查看指定镜像的历史,加上 --no-trunc 参数,可以看到全部信息。

1
docker history <image-name> | grep xmrig

查看镜像的配置信息。

1
docker inspect --format='{{json .Config}}' <image-name>

查看镜像的存储路径,定位镜像文件系统在宿主机上对应的目录,从镜像中提取恶意文件进行对比,以确认入侵的源头为恶意镜像。

1
docker inspect --format='{{.GraphDriver.Data.LowerDir}}' <image-name>

使用 dfimage 从镜像中提取 Dockerfile,可以看到恶意镜像构建的过程。

1
2
alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"  
dfimage -sV=1.36 <image-name>

抓取 docker0 异常外联 IP 的数据包。

1
tcpdump -i docker0 dst host <targetIP> -v

根据获取到的 Docker 容器 IP 定位容器 ID。

1
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress}}' $(docker ps -aq) | grep <docker-ip>

进入容器 network namespace 进行确认,找到异常的网络连接地址。

1
2
3
4
5
6
# 获取容器 PID 
docker inspect -f '{{.State.Pid}}' <containerId>
# 进入容器的 network namespace
nsenter -n -t pid
# 验证是否进入容器的 network namespace
netstat -an|grep <targetIP>

0x04 Docker 风险排查

Trivy 是一款全面且多功能的安扫描器。它配备多种检测模块,能够针对不同对象识别安全隐患。Trivy 兼容主流编程语言、操作系统及平台环境。

扫描对象支持:

  • 容器镜像
  • 文件系统
  • 远程 Git 仓库
  • 虚拟机镜像
  • Kubernetes 集群

检测能力涵盖:

  • 操作系统组件及软件依赖清单(SBOM)
  • 已知漏洞(CVE)
  • 基础设施即代码配置缺陷
  • 敏感信息与密钥泄露
  • 软件许可证审查

查看运行中的镜像名称。

1
docker ps -a 

使用 Trivy 对指定镜像做基线检查,可以识别镜像中存在的漏洞,辅助判断应急响应的入侵点。

1
trivy image <image-name>

参考文章