Docker 应急响应/风险排查
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 | docker rm -f <docker-ID> |
查看容器内部文件状态变化。
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 | docker commit <docker-ID> <image-name>:<tag> # 把容器打包成镜像 |
本机和容器文件互传,用于上传查杀工具和下载木马样本。
1 | 上传 |
查看指定镜像的历史,加上 --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 | alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage" |
抓取 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 | 获取容器 PID |
0x04 Docker 风险排查
Trivy 是一款全面且多功能的安扫描器。它配备多种检测模块,能够针对不同对象识别安全隐患。Trivy 兼容主流编程语言、操作系统及平台环境。
扫描对象支持:
- 容器镜像
- 文件系统
- 远程 Git 仓库
- 虚拟机镜像
- Kubernetes 集群
检测能力涵盖:
- 操作系统组件及软件依赖清单(SBOM)
- 已知漏洞(CVE)
- 基础设施即代码配置缺陷
- 敏感信息与密钥泄露
- 软件许可证审查
查看运行中的镜像名称。
1 | docker ps -a |
使用 Trivy 对指定镜像做基线检查,可以识别镜像中存在的漏洞,辅助判断应急响应的入侵点。
1 | trivy image <image-name> |
参考文章
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 鸣剑Sec!