记录一次逆向容器镜像的过程
字数 940 2025-08-29 08:32:24
Docker镜像逆向分析教程
环境准备
安装Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
安装DIVE工具
wget https://github.com/wagoodman/dive/releases/download/v0.9.2/dive_0.9.2_linux_amd64.deb
sudo apt install ./dive_0.9.2_linux_amd64.deb
镜像分析流程
1. 拉取并导出镜像
sudo docker pull ubuntu
sudo docker save -o ubuntu.tar ubuntu
2. 解压镜像文件
解压ubuntu.tar后会得到以下文件结构:
manifest.json- 镜像清单文件[hash].json- 镜像配置文件[hash]/layer.tar- 镜像层文件VERSION- 版本文件
3. 分析manifest.json
示例内容:
[{
"Config": "825d55fb6340083b06e69e02e823a02918f3ffb575ed2a87026d4645a7fd9e1b.json",
"RepoTags": ["ubuntu:latest"],
"Layers": ["8f7ee37aa1d53dcded9b5c22b0a57d8bb8d35d9f42273651668e7aca23bd7581/layer.tar"]
}]
关键字段:
Config: 指向镜像配置JSON文件RepoTags: 镜像名称和标签Layers: 镜像层列表
4. 分析镜像配置文件
配置文件(如825d55fb6340...json)包含以下重要信息:
{
"architecture": "amd64",
"config": {
"Cmd": ["bash"],
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"]
},
"history": [
{
"created": "2022-04-05T22:20:50.696744314Z",
"created_by": "/bin/sh -c #(nop) ADD file:b83df51ab7caf8a4dc35f730f5a18a59403300c59eecae4cf5779cba0f6fda6e in / "
},
{
"created": "2022-04-05T22:20:51.04675426Z",
"created_by": "/bin/sh -c #(nop) CMD [\"bash\"]",
"empty_layer": true
}
],
"rootfs": {
"type": "layers",
"diff_ids": ["sha256:c5ec52c98b3193052e15d783aca2bef10d8d829fa0d58fedfede511920b8f997"]
}
}
关键点:
history字段记录镜像构建历史,每个Dockerfile命令通常对应一个层empty_layer: true表示该操作不改变文件系统rootfs.diff_ids列出各层的校验和
5. 分析镜像层
解压layer.tar可查看该层对文件系统的修改:
- 包含完整的Linux文件系统结构
- 在ubuntu镜像中,主要命令位于
usr/bin目录
使用DIVE工具分析
主要功能
- 显示镜像层列表及各层大小
- 提供镜像效率统计(浪费空间百分比)
- 可视化各层文件系统变更
常用快捷键
Ctrl+Spacebar: 左右面板切换Spacebar: 打开/关闭目录树Ctrl+A: 显示/隐藏添加的文件Ctrl+R: 显示/隐藏移除的文件Ctrl+M: 显示/隐藏修改的文件Ctrl+U: 显示/隐藏未修改的文件Ctrl+L: 显示镜像层变动Ctrl+/: 过滤文件Ctrl+C: 退出
实际操作示例
- 运行容器并修改:
docker run -it --name ubuntu_test ubuntu
echo hello > hello.txt
echo world > world.txt
exit
- 提交为新镜像并分析:
docker commit ubuntu_test ubuntu_test
docker save -o ubuntu_test.tar ubuntu_test
sudo dive ubuntu_test
其他分析工具
- contains - 在线分析容器镜像
- trivy - 镜像漏洞扫描工具
- Clair - 静态分析容器漏洞
- Anchore - 深度分析docker镜像
- Dagda - 检测木马、恶意软件
- Aqua Security - 云原生应用保护