0x01 Docker 应急说明
在做应急响应时,主机上发现异常进程或文件,但定位不到具体路径,若主机上存在 Docker 应用,则问题大概率出在 Docker 环境中,需要对 Docker 运行应用环境进行应急排查。
0x02 Docker 挖矿靶场
Docker 挖矿应急靶场 pmietlicki/xmrig
下载。
docker run -itd --restart=always -e POOL_URL=pool.supportxmr.com:5555 -e POOL_USER=45rfqYG9iNPddvenLpjFskJUhFgqBkdhDeah3X8D8ZJM3KpKqZWCLz3ewLsVd269tZiEyQRV53Ldv2DJb6xeuFokF7SBb1p --name xmrig pmietlicki/xmrig
注意:在虚拟机环境中运行挖矿靶场练习。
0x03 Docker 常用命令
查看所有容器镜像信息。
docker ps -a
进入指定镜像。
docker exec -it <docker-ID> /bin/bash
暂停指定镜像。
docker pause <docker-ID>
删除容器和镜像。
docker rm -f <docker-ID>
docker rmi <image-name>
查看容器内部文件状态变化。
docker diff <docker-ID>
查看容器目录。
docker inspect <docker-ID>
查看日志。
docker log <image-name>
查看容器运行状态。
docker stats <docker-ID>
断开容器网络。
docker network disconnect bridge <docker-ID>
打包容器为镜像,保留入侵痕迹。
docker commit <docker-ID> <image-name>:<tag> # 把容器打包成镜像
docker save -o <target-name>.tar <image-name>:<tag> # 打包镜像
docker load --input <target-name>.tar # 新服务器载入镜像
本机和容器文件互传,用于上传查杀工具和下载木马样本。
# 上传
docker cp /path/filname <docker-ID>:/tmp/filename
# 下载
docker cp <docker-ID>:/tmp/filename /path/filname
查看指定镜像的历史,加上 --no-trunc
参数,可以看到全部信息。
docker history <image-name> | grep xmrig
查看镜像的配置信息。
docker inspect --format='{{json .Config}}' <image-name>
查看镜像的存储路径,定位镜像文件系统在宿主机上对应的目录,从镜像中提取恶意文件进行对比,以确认入侵的源头为恶意镜像。
docker inspect --format='{{.GraphDriver.Data.LowerDir}}' <image-name>
使用 dfimage 从镜像中提取 Dockerfile,可以看到恶意镜像构建的过程。
alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"
dfimage -sV=1.36 <image-name>
抓取 docker0 异常外联 IP 的数据包。
tcpdump -i docker0 dst host <targetIP> -v
根据获取到的 Docker 容器 IP 定位容器 ID。
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress}}' $(docker ps -aq) | grep <docker-ip>
进入容器 network namespace 进行确认,找到异常的网络连接地址。
# 获取容器 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)
- 基础设施即代码配置缺陷
- 敏感信息与密钥泄露
- 软件许可证审查
查看运行中的镜像名称。
docker ps -a
使用 Trivy 对指定镜像做基线检查,可以识别镜像中存在的漏洞,辅助判断应急响应的入侵点。
trivy image <image-name>