0%

【安恒培训】docker 逃逸

docker

开源应用容器引擎,基于go语言。完全使用沙箱机制,相互之间不会有任何接口(类似iphone的app),容器性能开销极低。

容器安全风险

  1. 安全用户映射

    通常情况下,容器中的应用程序默认使用root权限运行。

  2. 补丁策略管理

    主机、容器化技术、编排解决方案以及容器中的最小操作系统映像都可能存在安全漏洞。

  3. 网络分段和防火墙

    预先设计好网络,同时确保所有其他基于网络的微服务仅向合法的用户公开。

  4. 安全默认值

    默认镜像中的默认密码、密钥等。

  5. 维护安全上下文

    同一主机上混合生产容器和其他不安全的容器。

  6. 保护机密信息

    数据库密码等。

  7. 资源保护

    容器使用的硬件资源也需要保护,同时防止单点失效的情况发生。

  8. 容器镜像的完整性来源

    供应链攻击投毒,或者镜像中转站的修改可能。

  9. 遵循不可变范式

    最好使用只读模式启动容器。

  10. 日志记录

    提供远程的日志记录功能。

容器特权模式逃逸漏洞

当容器以 --privileged 模式启动时,那么容器将获得挂载任意目录的权限,将可能接管主机的所有文件及权限。(例如在docker中运行docker时)

查看容器内部是否以特权模式启动:

1
cat /proc/self/status | grep Cap

查看 CapEff 的值是否为0000003fffffffff,或者0000001fffffffff

CDK

CDK是一款为容器环境定制的渗透测试工具,在已攻陷的容器内部提供零依赖的常用命令及PoC、Exp

信息搜集:

1
./cdk eva --full

容器远程API未授权访问漏洞

本质还是容器卷的恶意挂载。

  1. Docker API未授权访问:Docker守护进程的API默认在2375端口开放,若未配置TLS或其他安全措施,攻击者可以通过HTTP请求直接控制Docker,执行命令或创建、删除容器。

  2. 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]