auditd是最直接有效的容器逃逸防范手段,因其工作在内核系统调用层,可捕获dockerd等核心服务进程的clone/execve等调用及真实uid、auid、路径、参数,并关联敏感路径写入与命名空间越界行为。

要防范容器逃逸类入侵,关键不是只盯容器本身,而是把系统服务(尤其是容器运行时相关进程)的执行上下文纳入审计范围——包括真实UID、AUID、命名空间归属、调用路径和参数。auditd 是最直接有效的手段,它工作在内核系统调用层,不依赖容器运行时状态,即使逃逸已发生也能捕获底层行为。
锁定核心系统服务进程并绑定审计规则
容器逃逸常通过 dockerd、containerd 或 runc 进程被滥用(如利用其漏洞调用 clone/execve 操作宿主机)。需对这些服务进程做精准审计:
- 先获取 dockerd 主进程 PID:sudo pgrep -f "dockerd" | head -n1
- 添加进程级规则(替换 PID 为实际值):
-a always,exit -F arch=b64 -S clone,execve,openat,ptrace -F pid=PAT_PID -k dockerd_abuse - 更稳定的做法是按二进制路径匹配(避免PID变化):
-a always,exit -F arch=b64 -S execve -F path=/usr/bin/dockerd -k dockerd_exec
监控高风险系统调用与上下文组合
单纯记录调用不够,必须结合用户身份(AUID)、命名空间越界特征和目标路径判断是否异常:
- 挂载逃逸:监控非 root 用户(auid>=1000)对宿主机敏感路径的 mount:
-a always,exit -F arch=b64 -S mount,umount -F auid>=1000 -F path=/proc -k proc_mount_escape - 命名空间越界:捕获容器内进程尝试进入 host PID/NET 命名空间:
-a always,exit -F arch=b64 -S setns -F auid>=1000 -F key=ns_switch - 危险 exec 行为:记录从容器路径调用 nsenter、chroot 或特权工具:
-a always,exit -F arch=b64 -S execve -F auid>=1000 -F path=/usr/bin/nsenter -k nsenter_exec
关联宿主机关键配置文件的写入行为
逃逸成功后,攻击者常修改系统身份或内核参数维持权限。需对以下路径启用写入+属性变更审计:
- -w /etc/passwd -p wa -k host_passwd_mod(新增账户)
- -w /etc/sudoers -p wa -k host_sudoers_mod(提权配置)
- -w /proc/sys/ -p wa -k proc_sys_tamper(关闭 KASLR、放宽 user_ns 限制等)
- -w /var/lib/docker/ -p wa -k docker_runtime_mod(镜像/容器元数据篡改)
验证与日志归集建议
规则生效后,需确认审计日志能准确反映上下文信息:
- 测试命令:sudo auditctl -l 查看加载规则;sudo ausearch -m SYSCALL -i -ts recent 实时查事件
- 确保日志包含 auid(登录用户ID)、uid(当前进程UID)、comm(命令名)、exe(完整路径)、cwd(工作目录)字段
- 将 audit.log 接入 SIEM 或 Falco(Falco 可解析 auditd 日志并做语义分析),设置告警条件如:
“auid >= 1000 AND (path in ['/usr/bin/nsenter', '/bin/sh'] OR syscall == 'mount' AND path =~ '^/proc|^/sys')”











