应监听docker守护进程的start事件,通过falco捕获容器启动瞬间的privileged标识和capabilities.add字段,结合镜像签名、命名空间与用户身份综合判断非法特权启动,并联动策略引擎实现自动终止、阻断部署及指标监控。

要实时捕捉非法特权启动行为,关键不是等容器跑起来再查,而是从启动瞬间就介入监控——Docker守护进程发出的start事件本身已携带权限上下文,Falco可直接捕获并校验。
监听容器启动事件并提取特权标识
Docker的Unix socket(/var/run/docker.sock)会广播容器生命周期事件,包括start、die、exec_create等。Falco通过挂载该socket(配合--privileged和内核探针),能解析出容器是否以Privileged: true启动,或是否显式声明了危险能力集(如NET_ADMIN、SYS_MODULE)。
部署时确保挂载:
-v /var/run/docker.sock:/host/var/run/docker.sock:ro-
--privileged(启用eBPF或加载内核模块) - 所有必要系统路径(
/proc、/dev、/lib/modules等)
用Falco规则精准识别非法特权启动
特权启动本身不总是恶意,但生产环境通常禁止。规则应结合镜像来源、命名空间、用户身份与能力集做综合判断。例如:
- rule: Detect Privileged Container Start
desc: Container started with privileged mode or dangerous capabilities
condition: >
container and (evt.type = container_start) and
(container.privileged = true or
container.capabilities.add contains "NET_ADMIN" or
container.capabilities.add contains "SYS_MODULE" or
container.capabilities.add contains "DAC_OVERRIDE")
output: >
Privileged container start detected (image=%container.image.repository,
id=%container.id, user=%user.name, caps=%container.capabilities.add)
priority: CRITICAL
tags: [privilege, startup, escape]
注意:container.privileged和container.capabilities.add是Falco内置字段,直接来自Docker API事件解析,无需额外日志解析。
联动镜像签名与运行时策略做准入拦截
仅告警不够,需闭环响应。可将Falco输出接入外部策略引擎:
- 匹配到非法特权启动时,调用
docker stop或docker rm -f立即终止容器 - 触发Webhook通知CI/CD平台,自动阻断该镜像后续部署流水线
- 写入Prometheus指标(如
docker_privileged_start_total),用于趋势分析与SLO考核
实际中建议配合Docker Content Trust(DCT)验证镜像签名,对未签名或非白名单仓库(如registry.internal)的特权启动直接拒绝,而非事后告警。
规避常见漏报与误报点
以下情况易导致检测失效,需提前校准:
- 使用
docker run --cap-add=ALL但未设--privileged:仍属高危,需在condition中显式检查container.capabilities.add - 容器由Kubernetes调度:Docker事件可能被kubelet封装,建议在节点级部署Falco,并启用
k8s_audit规则集补充API Server事件 - eBPF加载失败回退到内核模块:确认宿主机内核版本≥4.14,且
/lib/modules/$(uname -r)完整可用
不复杂但容易忽略











