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

admin 2023年4月12日13:56:03评论49 views字数 3812阅读12分42秒阅读模式

文章前言

Kubernetes是当今最流行的容器编排工具之一,为企业应用部署和管理提供了高效、稳定的解决方案。然而在运行Kubernetes集群时,管理员需要对集群内的各个组件进行监控和维护。了解集群信息收集的方法和技巧,可以帮助管理员更好地管理和维护Kubernetes集群。本文将从不同角度介绍Kubernetes集群信息收集的相关技术,并提供一些实用的工具和方法,帮助管理员更好地理解和使用Kubernetes集群信息收集技术,进一步提升Kubernetes集群的安全性和可靠性,同时也为安全人员在做集群安全时的信息收集提供一种参考

外部信息

集群信息
kubectl cluster-info

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

集群列表
kubectl config get-clusters

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

用户列表
kubectl config get-contexts

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

环境变量
env

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

env | grep KUBE

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

配置信息
#上方路径cat /home/r00t/.kube/config

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

节点信息
#节点列表kubectl get nodes
#node1地址ping node1 -c 1
#node2地址ping node2 -c 1

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

资源列表
kubectl get all

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

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

命名空间
kubectl get namespaces

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

Pod信息
#获取Podkubectl get pod

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

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

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

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

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

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

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

服务信息
kubectl get service

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

kubectl describe service <ServiceName>

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

DPLM信息

#deployment基础信息kubectl get deployment

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

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

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

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

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

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

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

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

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

SSH私钥

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

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

历史命令

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

cat ~/.bash_history

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

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

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

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

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

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

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

#查看tokenkubectl describe secret admin-myuser-token-jcj9d -n kubernetes-dashboard

登录dashboard

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

内部信息

环境信息
env

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

env | grep KUBERNETES

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

容器检测
ls -al

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

内核版本

需要下载kubectl到pod中,之后通过执行以下命令来获取node节点的内核版本信息

kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"t"}{.status.nodeInfo.kernelVersion}{"n"}{end}'

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

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

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

Secret类

K8s Secrets用于存储敏感数据,从Secrets中获取的AK及通信凭证可用户后续渗透中从外部或云产品API窃取信息:

#命令格式./cdk run k8s-secret-dump (auto|<service-account-token-path>)    #使用实例./cdk run k8s-secret-dump auto

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

安全策略

对于已经获取了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.
端口服务

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

内部网络
  • 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集群信息收集的实践过程中,管理员需要时刻保持警惕,定期检查和修正配置和设置,以确保集群的安全性和稳定性。

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


原文始发于微信公众号(七芒星实验室):【K8s安全】集群信息收集一篇通

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年4月12日13:56:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【K8s安全】集群信息收集一篇通https://cn-sec.com/archives/1667824.html

发表评论

匿名网友 填写信息