docker
开源应用容器引擎,基于go语言。完全使用沙箱机制,相互之间不会有任何接口(类似iphone的app),容器性能开销极低。
容器安全风险
安全用户映射
通常情况下,容器中的应用程序默认使用root权限运行。
补丁策略管理
主机、容器化技术、编排解决方案以及容器中的最小操作系统映像都可能存在安全漏洞。
网络分段和防火墙
预先设计好网络,同时确保所有其他基于网络的微服务仅向合法的用户公开。
安全默认值
默认镜像中的默认密码、密钥等。
维护安全上下文
同一主机上混合生产容器和其他不安全的容器。
保护机密信息
数据库密码等。
资源保护
容器使用的硬件资源也需要保护,同时防止单点失效的情况发生。
容器镜像的完整性来源
供应链攻击投毒,或者镜像中转站的修改可能。
遵循不可变范式
最好使用只读模式启动容器。
日志记录
提供远程的日志记录功能。
容器特权模式逃逸漏洞
当容器以 --privileged 模式启动时,那么容器将获得挂载任意目录的权限,将可能接管主机的所有文件及权限。(例如在docker中运行docker时)
查看容器内部是否以特权模式启动:
1 | cat /proc/self/status | grep Cap |
查看 CapEff 的值是否为0000003fffffffff,或者0000001fffffffff
CDK
CDK是一款为容器环境定制的渗透测试工具,在已攻陷的容器内部提供零依赖的常用命令及PoC、Exp
信息搜集:
1 | ./cdk eva --full |
容器远程API未授权访问漏洞
本质还是容器卷的恶意挂载。
Docker API未授权访问:Docker守护进程的API默认在2375端口开放,若未配置TLS或其他安全措施,攻击者可以通过HTTP请求直接控制Docker,执行命令或创建、删除容器。
Kubernetes API未授权访问:Kubernetes的API服务器通常在8080和6443端口开放。若没有合理的认证和授权配置,攻击者可以访问集群资源,执行操作如创建或删除Pod。
使用API创建容器时,将根目录恶意挂载到容器中,再修改ssh公钥等敏感信息,进一步获得权限。
1 | docker -H tcp://x.x.x.x:2375 run -it -v /:/mnt vulhub/shiro:latest /bin/bash |
docker 套接字sock文件泄漏
Docker 套接字的作用:
Docker 套接字文件 /var/run/docker.sock 是 Docker 守护进程与客户端之间的通信接口。
通过该套接字,用户可以执行 Docker 命令,包括创建、删除和管理容器。
漏洞成因:
如果一个容器能够访问 Docker 套接字,它就可以通过该接口执行任意 Docker 命令。
攻击者可以利用这一点在容器中创建新的容器,甚至以 root 权限运行代码,从而逃逸到主机系统。
1 | ./cdk run docker-sock-pwn /host/var/run/docker.sock [CMD] |