最有效方式是检查/etc/docker/daemon.json并结合运行时排查。重点关注userns-remap、icc、no-new-privileges等配置,运行docker inspect确认Privileged和CapAdd,核查/dev、/proc/sys等挂载,修补需禁用模块加载、移除/lib/modules、锁定sysctl,并实测insmod和参数修改是否被阻断。
直接检查 Docker daemon 的配置文件 /etc/docker/daemon.json,是发现未受控特权容器及其对内核潜在危害最有效的方式。特权容器会绕过大部分命名空间和能力限制,可能加载恶意内核模块、修改关键参数,甚至触发容器逃逸。
特权模式本身不写在 daemon.json 里,但它的启用依赖于运行时参数;而 daemon.json 控制着全局安全基线。重点关注以下几类配置:
"",表示未启用用户命名空间映射,root 容器 UID 直接对应宿主机 root,放大提权后果true(默认值),则允许容器间无限制通信,可能被用于横向渗透并间接影响内核网络栈false,容器内进程可调用 execve 提升权限,配合 SUID 二进制文件易触发内核提权路径memlock 或 core 限制,可能被用于内存锁定攻击或内核崩溃利用daemon.json 只管默认行为,真正危险的是运行时显式启用 --privileged 或过度授权。需结合运行中容器排查:
docker ps --format "{{.ID}}t{{.Names}}t{{.Status}}" | grep "Up" 获取活跃容器列表docker inspect --format='{{.HostConfig.Privileged}} {{.HostConfig.CapAdd}}' <ID> —— 返回 true 或非空 CapAdd 列表即属高风险/dev、/proc/sys、/lib/modules 等目录,这些是操作内核模块和参数的关键路径特权容器常被用来加载非法内核模块或篡改 sysctl 参数。修补需从镜像构建和运行时双端入手:
RUN echo 'install * /bin/true' > /etc/modprobe.d/disable-modules.conf
/lib/modules 目录(除非明确需要):RUN rm -rf /lib/modules
--sysctl net.ipv4.ip_forward=0 --sysctl kernel.modules_disabled=1
module.sig_unenforce 的反例已被清除,且 secure_boot 或 lockdown=confidentiality 已启用修补后不能仅靠配置存在来判断,必须实测关键攻击路径是否失效:
docker exec -it <容器名> sh
insmod /tmp/malicious.ko 2>/dev/null || echo "blocked" —— 应失败echo 1 > /proc/sys/kernel/unprivileged_userns_clone 2>/dev/null || echo "readonly"
capsh --print | grep cap_sys_module —— 输出应为空