文章前言
Kubernetes是当今最流行的容器编排工具之一,为企业应用部署和管理提供了高效、稳定的解决方案。然而在运行Kubernetes集群时,管理员需要对集群内的各个组件进行监控和维护。了解集群信息收集的方法和技巧,可以帮助管理员更好地管理和维护Kubernetes集群。本文将从不同角度介绍Kubernetes集群信息收集的相关技术,并提供一些实用的工具和方法,帮助管理员更好地理解和使用Kubernetes集群信息收集技术,进一步提升Kubernetes集群的安全性和可靠性,同时也为安全人员在做集群安全时的信息收集提供一种参考
外部信息
集群信息
kubectl cluster-info
集群列表
kubectl config get-clusters
用户列表
kubectl config get-contexts
环境变量
env
env | grep KUBE
配置信息
#上方路径
cat /home/r00t/.kube/config
节点信息
#节点列表
kubectl get nodes
#node1地址
ping node1 -c 1
#node2地址
ping node2 -c 1
资源列表
kubectl get all
命名空间
kubectl get namespaces
Pod信息
kubectl get pod
#Pod详细信息
kubectl describe pod <PodName>
kubectl get pod <pod-name> -o yaml
#获取所有pod信息
kubectl get pods --all-namespaces -o wide
服务信息
kubectl get service
kubectl describe service <ServiceName>
DPLM信息
kubectl get deployment
#deployment详细信息
kubectl describe deployment <deploymentName>
日志信息
#系统日志
cat /var/log/messages
#组件日志
journalctl -u kube-apiserver
journalctl -u kube-scheduler
journalctl -u kubelet |tail
#容器日志
docker logs <容器ID>
SSH私钥
ls -al ~/
ls -al ~/.ssh
cat ~/.ssh/id_rsa
历史命令
查看历史命令记录来检索是否有敏感的历史连接记录以及连接账户密码信息等:
cat ~/.bash_history
面板相关
kubectl get pods,svc -n kubernetes-dashboard -o wide
kubectl get sa,secrets -n kubernetes-dashboard
#查看token
kubectl describe secrets kubernetes-dashboard-token-8kxnh -n kubernetes-dashboard
#查看token
kubectl describe secret admin-myuser-token-jcj9d -n kubernetes-dashboard
登录dashboard
内部信息
环境信息
env
env | grep KUBERNETES
容器检测
ls -al
内核版本
需要下载kubectl到pod中,之后通过执行以下命令来获取node节点的内核版本信息
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.nodeInfo.kernelVersion}{"\n"}{end}'
Token类
K8s集群创建的Pod中容器内部默认携带K8s Service Account认证凭据(/run/secrets/kubernetes.io/serviceaccount/token),利用该凭据可以认证K8s API-Server服务器并访问高权限接口,如果执行成功意味着该账号拥有高权限,可以直接利用Service Account管理K8s集群
cat /var/run/secrets/kuberenetes.io/serviceaccount/token
Secret类
K8s Secrets用于存储敏感数据,从Secrets中获取的AK及通信凭证可用户后续渗透中从外部或云产品API窃取信息:
#命令格式
./cdk run k8s-secret-dump (auto|<service-account-token-path>)
#使用实例
./cdk run k8s-secret-dump auto
安全策略
对于已经获取了kubeconfig或sa账号权限,进而想要创建特殊配置的容器,但是受到了K8s Pod Security Policies的限制时可以使用这个Exploit获取Pod Security Policies的规则信息
#命令格式
./cdk run k8s-psp-dump (auto|<service-account-token-path>
#使用实例
./cdk run k8s-psp-dump auto
2021/03/24 22:15:58 getting K8s api-server API addr.
Find K8s api-server in ENV: https://ip:8443
2021/03/24 22:15:58 trying to dump K8s Pod Security Policies with local service-account: token
2021/03/24 22:15:58 requesting /apis/policy/v1beta1/podsecuritypolicies
2021/03/24 22:15:58 dump Pod Security Policies success, saved in: k8s_pod_security_policies.json
2021/03/24 22:15:58 requesting /api/v1/namespaces/default/pods
2021/03/24 22:15:58 K8S Pod Security Policies rule list:
2021/03/24 22:15:58 rule { securityContext.hostPID: true } is not allowed.
2021/03/24 22:15:58 rule { securityContext.hostIPC: true } is not allowed.
2021/03/24 22:15:58 rule { volumes[0].hostPath.pathPrefix: \"/proc\" } is not allowed.
2021/03/24 22:15:58 rule { volumes[1].hostPath.pathPrefix: \"/dev\" } is not allowed.
2021/03/24 22:15:58 rule { volumes[2].hostPath.pathPrefix: \"/sys\" } is not allowed.
2021/03/24 22:15:58 rule { volumes[3].hostPath.pathPrefix: \"/\" } is not allowed.
2021/03/24 22:15:58 rule { containers[0].securityContext.capabilities.add: \"SYS_ADMIN\" } is not allowed.
2021/03/24 22:15:58 rule { containers[0].securityContext.capabilities.add: \"SYS_PTRACE\" } is not allowed.
端口服务
内部网络
Flannel默认使用10.244.0.0/16网络
Calico默认使用192.168.0.0/16网络
文末小结
总的来说,Kubernetes集群信息收集是保证企业应用部署和运行环境安全性和稳定性的关键一环。在文章中,我们介绍了从多个角度收集Kubernetes集群信息的方法和技巧,包括:
1、收集物理资源信息:通过使用工具(如Prometheus)来监控节点、CPU、内存等物理资源的利用率,以及检查硬件故障。
2、收集日志信息:通过使用工具(如ELK Stack或Fluentd)来聚合、搜索和分析各个组件的日志,快速识别和解决问题。
3、收集网络信息:使用工具(如Weave Scope或Cilium)来监视容器之间的网络通信,并检查网络连接和流量是否正常。
4、收集安全信息:使用工具(如Kube-Bench)来检测Kubernetes集群是否符合最佳实践和安全标准,并发现潜在的安全漏洞和风险。
5、收集运行时信息:使用工具(如Datadog或Sysdig)来监控Kubernetes集群中的容器应用程序运行状态,以便实时发现和修复问题。
需要注意的是以上信息收集技术并不是全部,管理员可以根据集群需求和特点,选择适合自己的信息收集技术和工具。同时对于Kubernetes集群信息收集的实践过程中,管理员需要时刻保持警惕,定期检查和修正配置和设置,以确保集群的安全性和稳定性。
推 荐 阅 读
横向移动之RDP&Desktop Session Hija