你阻止了 docker.sock。你的容器仍然不安全。

发布: (2026年2月3日 GMT+8 10:58)
5 分钟阅读
原文: Dev.to

Source: Dev.to

我在过去两周里搭建了一个完整的运行时逃逸实验室——包括五个攻击场景、自动化防御脚本、Falco 规则等。Scenario 1(docker.sock 挂载)已经有了自己的 深度解析在 DZone。大家都很熟悉这个场景。

Scenario 3 和 Scenario 4 才是真正让我夜不能寐的原因。不是因为它们轰动或戏剧化,而是因为它们潜伏得很安静。它们能够通过你们团队的检测,在 docker inspect 中看起来也很正常,却为攻击者提供了一条通往宿主机的路径。

本文将覆盖以下两点:

  • 审计盲点 – 一个大多数扫描器都会漏掉的单一能力。
  • 提权链 – 一个不需要 --privileged 标志的双容器提权过程。

审计盲点:CAP_SYS_ADMIN

CAP_SYS_ADMIN 审计盲点示意图

为什么扫描器会错过它

大多数 Docker 安全检查清单只会查找 Privileged: true。如果该标志为 false,它们就会打上绿色勾选并继续往下走。

单独的 CAP_SYS_ADMIN —— 即使没有 --privileged —— 也几乎赋予容器特权模式的全部功能:挂载文件系统、操作命名空间,并且在某些内核配置下,甚至可以完全逃逸到宿主机。在审计日志中,它只会显示为列表中的另一个能力,而不会被标记为红色警告。

审计盲点 – 这唯一的能力经常在自动化扫描中被遗漏,因为扫描器只针对 Privileged 布尔值进行检测,而不是针对各个能力实际能做的事情。

它的表现形式

# What your scanner sees
docker inspect my-container | jq '.[] | {Privileged: .HostConfig.Privileged}'
# Output:
# { "Privileged": false }

# Example detection rule (illustrative)
condition: >
  container.image.digest != "" and
  evt.type = container_start and
  ka.verb = create and
  container.privileged = true and
  container.mount.dest in ("/etc", "/root", "/var/run")
output: >
  Escalation chain: socket container spawned privileged mount
  (container=%container.name image=%container.image)
priority: CRITICAL

这段规则捕获的是 模式,而不是单个容器。思路的这种转变才是关键所在。

实践实验

所有五个场景——包括此处涵盖的两个——都在开源实验仓库中。每个场景包含:

  • demo.sh – 运行攻击,以便您可以看到它
  • defense.sh – 生成检测工件(Falco 规则、审计脚本)
  • validate.sh – 验证您的防御是否真正有效
  • cleanup.sh – 干净地清理所有内容
git clone https://github.com/opscart/docker-security-practical-guide
cd labs/09-runtime-escape

# Run Scenario 3 (CAP_SYS_ADMIN audit gap)
cd scenario-3-sys-admin
chmod +x *.sh && ./demo.sh

# Run Scenario 4 (host mount escalation chain)
cd ../scenario-4-host-mount
chmod +x *.sh && ./demo.sh

可在 Docker Desktop(macOS/Windows)和 Linux 上运行。README 中包含针对在 VM 层行为不同的部分的 Docker Desktop‑特定说明。

实际该怎么做

两件事。每件只需五分钟。

  1. 运行上述的能力审计 对你的环境进行检查。查找 SYS_ADMINSYS_PTRACESYS_MODULE。如果发现它们,追溯它们出现的原因。通常情况下,没人记得。

  2. 审计升级‑链模式: 在同一环境中,任何挂载了 docker.sock 的容器与挂载了主机路径绑定的容器。如果两者共存——即使它们是无关的服务——攻击面仍然存在。

相关阅读

实验仓库包含所有内容:
github.com/opscart/docker-security-practical-guide

联系

  • 博客:
  • GitHub:
  • 领英:
Back to Blog

相关文章

阅读更多 »

当 AI 给你一巴掌

当 AI 给你当头一棒:在 Adama 中调试 Claude 生成的代码。你是否曾让 AI “vibe‑code” 一个复杂功能,却花了数小时调试细微的 bug……