【K8s安全】集群信息收集一篇通

文摘   科学   2024-10-25 07:05   四川  

文章前言

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信息
#获取Podkubectl get pod

#Pod详细信息kubectl describe pod <PodName>

#yaml格式显示Pod的详细信息kubectl get pod <pod-name> -o yaml

#获取所有pod信息kubectl get pods --all-namespaces -o wide

服务信息
kubectl get service

kubectl describe service <ServiceName>

DPLM信息

#deployment基础信息kubectl get deployment

#deployment详细信息kubectl describe deployment <deploymentName>

日志信息
#系统日志cat /var/log/messages

#组件日志journalctl -u kube-apiserverjournalctl -u kube-schedulerjournalctl -u kubelet |tail

#容器日志docker logs <容器ID>

SSH私钥

ls -al ~/ls -al ~/.sshcat ~/.ssh/id_rsa

历史命令

查看历史命令记录来检索是否有敏感的历史连接记录以及连接账户密码信息等:

cat ~/.bash_history

面板相关
#查看面板pod和service状态kubectl get pods,svc -n kubernetes-dashboard -o wide

#查看serviceaccount和secretskubectl get sa,secrets -n kubernetes-dashboard

#查看tokenkubectl describe secrets kubernetes-dashboard-token-8kxnh -n kubernetes-dashboard

#查看tokenkubectl 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 auto2021/03/24 22:15:58 getting K8s api-server API addr. Find K8s api-server in ENV: https://ip:84432021/03/24 22:15:58 trying to dump K8s Pod Security Policies with local service-account: token2021/03/24 22:15:58 requesting /apis/policy/v1beta1/podsecuritypolicies2021/03/24 22:15:58 dump Pod Security Policies success, saved in: k8s_pod_security_policies.json2021/03/24 22:15:58 requesting /api/v1/namespaces/default/pods2021/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


七芒星实验室
未知攻,焉知防,以攻促防,共筑安全!
 最新文章