前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【K8s安全】集群信息收集一篇通

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

作者头像
Al1ex
发布2023-05-12 11:36:42
4070
发布2023-05-12 11:36:42
举报
文章被收录于专栏:网络安全攻防网络安全攻防
文章前言
Kubernetes是当今最流行的容器编排工具之一,为企业应用部署和管理提供了高效、稳定的解决方案。然而在运行Kubernetes集群时,管理员需要对集群内的各个组件进行监控和维护。了解集群信息收集的方法和技巧,可以帮助管理员更好地管理和维护Kubernetes集群。本文将从不同角度介绍Kubernetes集群信息收集的相关技术,并提供一些实用的工具和方法,帮助管理员更好地理解和使用Kubernetes集群信息收集技术,进一步提升Kubernetes集群的安全性和可靠性,同时也为安全人员在做集群安全时的信息收集提供一种参考
外部信息
集群信息
代码语言:javascript
复制
kubectl cluster-info
集群列表
代码语言:javascript
复制
kubectl config get-clusters
用户列表
代码语言:javascript
复制
kubectl config get-contexts
环境变量
代码语言:javascript
复制
env
代码语言:javascript
复制
env | grep KUBE
配置信息
代码语言:javascript
复制
#上方路径
cat /home/r00t/.kube/config
节点信息
代码语言:javascript
复制
#节点列表
kubectl get nodes

#node1地址
ping node1 -c 1

#node2地址
ping node2 -c 1
资源列表
代码语言:javascript
复制
kubectl get all
命名空间
代码语言:javascript
复制
kubectl get namespaces
Pod信息
代码语言:javascript
复制
#获取Pod
kubectl get pod
代码语言:javascript
复制
#Pod详细信息
kubectl describe pod <PodName>
代码语言:javascript
复制
#yaml格式显示Pod的详细信息
kubectl get pod <pod-name> -o yaml
代码语言:javascript
复制
#获取所有pod信息
kubectl get pods --all-namespaces -o wide
服务信息
代码语言:javascript
复制
kubectl get service
代码语言:javascript
复制
kubectl describe service <ServiceName>

DPLM信息

代码语言:javascript
复制
#deployment基础信息
kubectl get deployment
代码语言:javascript
复制
#deployment详细信息
kubectl describe deployment <deploymentName>
日志信息
代码语言:javascript
复制
#系统日志
cat /var/log/messages
代码语言:javascript
复制
#组件日志
journalctl -u kube-apiserver
journalctl -u kube-scheduler
journalctl -u kubelet |tail
代码语言:javascript
复制
#容器日志
docker logs <容器ID>

SSH私钥

代码语言:javascript
复制
ls -al ~/
ls -al ~/.ssh
cat ~/.ssh/id_rsa
历史命令

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

代码语言:javascript
复制
cat ~/.bash_history
面板相关
代码语言:javascript
复制
#查看面板pod和service状态
kubectl get pods,svc -n kubernetes-dashboard -o wide
代码语言:javascript
复制
#查看serviceaccount和secrets
kubectl get sa,secrets -n kubernetes-dashboard
代码语言:javascript
复制
#查看token
kubectl describe secrets kubernetes-dashboard-token-8kxnh -n kubernetes-dashboard
代码语言:javascript
复制
#查看token
kubectl describe secret admin-myuser-token-jcj9d -n kubernetes-dashboard

登录dashboard

内部信息
环境信息
代码语言:javascript
复制
env
代码语言:javascript
复制
env | grep KUBERNETES
容器检测
代码语言:javascript
复制
ls -al
内核版本

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

代码语言:javascript
复制
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集群

代码语言:javascript
复制
cat /var/run/secrets/kuberenetes.io/serviceaccount/token
Secret类

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

代码语言:javascript
复制
#命令格式
./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的规则信息

代码语言:javascript
复制
#命令格式
./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集群信息收集的实践过程中,管理员需要时刻保持警惕,定期检查和修正配置和设置,以确保集群的安全性和稳定性。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 七芒星实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章前言
  • Kubernetes是当今最流行的容器编排工具之一,为企业应用部署和管理提供了高效、稳定的解决方案。然而在运行Kubernetes集群时,管理员需要对集群内的各个组件进行监控和维护。了解集群信息收集的方法和技巧,可以帮助管理员更好地管理和维护Kubernetes集群。本文将从不同角度介绍Kubernetes集群信息收集的相关技术,并提供一些实用的工具和方法,帮助管理员更好地理解和使用Kubernetes集群信息收集技术,进一步提升Kubernetes集群的安全性和可靠性,同时也为安全人员在做集群安全时的信息收集提供一种参考
  • 外部信息
    • 集群信息
      • 集群列表
        • 用户列表
          • 环境变量
            • 配置信息
              • 节点信息
                • 资源列表
                  • 命名空间
                    • Pod信息
                      • 服务信息
                        • 日志信息
                          • 历史命令
                            • 面板相关
                            • 内部信息
                              • 环境信息
                                • 容器检测
                                  • 内核版本
                                    • Token类
                                      • Secret类
                                        • 安全策略
                                          • 端口服务
                                            • 内部网络
                                            相关产品与服务
                                            容器服务
                                            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                            领券
                                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档