目录

一、概览

二、Kubernetes中的用户

三、渗透思路

1. k8s api-server 8080未授权

2. kubelet 10250端口未授权

3. Service acount 高权限账户的风险

四、总结


一、概览

云原生技术架构在带来颠覆性技术架构变革的同时,也带来了新的安全要求和挑战。在过去几年以及未来数年内,云原生架构会成为黑客攻击和利用的重点。Kubernetes,简称k8s,是当前主流的容器调度平台,更被称为云原生时代的操作系统,可见其重要性。简单来说,k8s是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。本文从k8s用户授权方面来谈谈针对k8s集群渗透的手法,如有不足之处,还望各位老师傅进行斧正。

二、Kubernetes中的用户

Kubernetes 集群中包含两类用户:一类是由 Kubernetes 管理的 service account,另一类是普通用户。普通用户被假定为由外部独立服务管理。管理员分发私钥,用户存储(如 Keystone 或 Google 账户),甚至包含用户名和密码列表的文件。在这方面,Kubernetes 没有代表普通用户账户的对象。无法通过 API 调用的方式向集群中添加普通用户。

相对的,service account 是由 Kubernetes API 管理的账户。它们都绑定到了特定的 namespace,并由 API server 自动创建,或者通过 API 调用手动创建。Service account 关联了一套凭证,存储在 Secret,这些凭证同时被挂载到 pod 中,从而允许 pod 与 kubernetes API 之间的调用。

API 请求被绑定到普通用户或 serivce account 上,或者作为匿名请求对待。这意味着集群内部或外部的每个进程,无论从在工作站上输入 kubectl 的人类用户到节点上的 kubelet,到控制平面的成员,都必须在向 API Server 发出请求时进行身份验证,或者被视为匿名用户。

  1. user

    外部用户是 k8s 中非常常见的一种访问者身份,通常用于从 k8s 之外来访问集群中的资源。因为这种资源的定位就是外部用户,所以 k8s 是不会存储 User 信息的,我们可以通过 Keystone 或者 Google Accounts 这种外部应用来管理。

  2. group

    同外部用户,Group 也是一种外部的概念,在X509客户端证书认证的方式中,Group 名字就是证书的组织名(Orgnization)

  3. service account

    相对于外部用户 User 而言,Service Account 则是集群内部的用户,我们可以使用 k8s api 来查看和管理这种用户。

  4. anonymous

当一个请求没有携带任何的认证信息时,它会自动获得用户名:system:anonymous和用户组          system:unauthenticated,我们可以配置分配特定的权限给这种匿名用户,适用于想要公开一          些不敏感的资源等场景。kubelet 10250 未授权访问、kube-apiserver 8080端口未授权访                问,  皆属于此种情况。

三、渗透思路

1. k8s api-server 8080未授权

部署在Master上暴露Kubernetes API,是Kubernetes的控制面。Kubernetes API服务器为API对象验证和配置数据,这些对象包含Pod,Service,ReplicationController等等。API Server提供REST操作以及前端到集群的共享状态,所有其他组件可以通过这些共享状态交互。默认情况,Kubernetes API Server提供HTTP的两个端口:8080,6443。insecure-port: 默认端口8080,在HTTP中没有认证和授权检查。secure-port :默认端口6443, 认证方式,令牌文件或者客户端证书,如下图访问http://IP:8080

渗透思路:通过未授权的8080端口,可以读写kube-apiserver的api,创建挂载根目录的特权DaemonSet实现控制集群的目的。

注:k8s DeamonSet会在集群中的每台机器上创建一个

2. kubelet 10250端口未授权

kubelet会在kubernetes集群中的每一个节点上运行一个实例,对容器进行生命周期的管理。kubelet开放的端口有:4194、10248、10250和10255。kubelet的10255端口提供了pod和node的信息。如果对外开放,攻击者利用公开api可以获取敏感信息。kubelet的10250端口是kubelet server 与 apiserver 通信的端口,定期请求 apiserver 获取自己所应当处理的任务,通过该端口可以访问获取node资源以及状态。如果kubelet的10250端口对外暴露,存在远程命令执行漏洞。

渗透手法:用curl直接连接kublet的10250端口:curl –insecure -v -H “X-Stream-Protocol-Version: v2.channel.k8s.io” -H “X-Stream-Protocol-Version: channel.k8s.io” -X POST “https://IP:10250/exec/namespace/podID/containername?command=touch&command=/tmp/test&input=1&output=1&tty=1"

3. Service acount 高权限账户的风险

k8s创建pod时,默认会把token、ca.crt、namespace三个文件挂载到pod内部,默认挂载到/run/secrets/kubernetes.io/serviceaccount目录, 如果挂载到集群内的token具有创建pod的权限,可以通过token访问集群的api创建特权容器,然后通过特权容器逃逸到宿主机,从而拥有集群节点的权限。如下图这种权限控制有较大的风险,可以直接拿到集群权限:(激进一点的举例,勿喷。相信各位运维小哥,不会犯这种错误。)

此种情况下有两种渗透方式:

  • 调用k8s sdk创建特权容器、挂载根目录的容器

  • 把kubectl 放到pod内,创建特权容器、挂载根目录的容器

四、总结

本文从k8s api-server 8080端口未授权访问、kubelet 10250端口未授权访问、rbac权限三方面不安全配置,介绍了渗透k8s集群的方法。渗透集群手法还有很多种,后文再表。

渗透测试:k8s的3种攻击手段(Kubernetes、未授权漏洞,端口:8080、6443、10250)相关推荐

  1. Python渗透测试编程技术--------身份认证攻击(一)

    Python渗透测试编程技术 身份认证攻击 目前最为常见的身份验证模式采用的仍然是"用户名+密码"的方式,用户自行设定密码在登录时如果输入正确的密码,计算机就会认为操作者是合法用户 ...

  2. Kali渗透测试:使用工具Metasploit攻击操作系统

    Kali渗透测试:使用工具Metasploit攻击操作系统 如果在目标系统上发现了漏洞之后,接下来就是要利用漏洞渗透工具对目标系统进行攻击.Metasploit是目前非常优秀的一款漏洞渗透工具. 1. ...

  3. 渗透测试入门3之隐匿攻击

    渗透测试入门3之隐匿攻击 1. Command and Control ICMP :https://pentestlab.blog/2017/07/28/command-and-control-icm ...

  4. 关于RSA的几种攻击手段

    关于RSA的几种攻击手段 1.公钥密码的简介 2.RSA介绍 2.1.基本原理 2.2.攻击手段 2.2.1.直接分解n ①.网站分解 ②.费马分解法 ③.pollard p-1分解法 2.2.2.低 ...

  5. 渗透测试--3.1.社会工程学攻击

    目录 社会工程学攻击 SET介绍 一.建立克隆钓鱼网站收集目标凭证 二.set工具集之木马欺骗实战反弹链接 三.后渗透阶段 1.查看主机系统信息 2.到处用户密码的hash值 3.获得shell控制台 ...

  6. Kali Linux Web 渗透测试秘籍 第九章 客户端攻击和社会工程

    第九章 客户端攻击和社会工程 作者:Gilberto Najera-Gutierrez 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 我们目前所见的大部分技巧都尝试利用服务端的漏洞或设计缺陷 ...

  7. Kali Linux Web 渗透测试秘籍 第八章 中间人攻击

    第八章 中间人攻击 作者:Gilberto Najera-Gutierrez 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 中间人(MITM)攻击是一种攻击类型,其中攻击者将它自己放到两方之 ...

  8. 渗透测试-社会工程学与APT攻击

    社会工程学与APT攻击 文章目录 社会工程学与APT攻击 前言 一.什么是社会工程学与APT攻击 二.社会工程学与APT攻击常用攻击方式 1. 社会工程学与APT攻击 2.相应的防御方法 总结 前言 ...

  9. Kali Linux 无线渗透测试入门指南 第八章 攻击企业级 WPA 和 RADIUS

    第八章 攻击企业级 WPA 和 RADIUS 作者:Vivek Ramachandran, Cameron Buchanan 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 个头越大,摔得越惨 ...

最新文章

  1. SQLServer中设置XML索引
  2. python爬歌词生成词云图_爬取每日热搜词,生成地图词云图
  3. 中山网络推广浅谈网站为什么迟迟不收录?该怎么办?
  4. python在哪里写程序和运行-Python程序的编写和运行方式有两种()
  5. 如何快速阅读一篇英文文献
  6. 如何搭建一个视频直播系统
  7. Hystrix 熔断器02 —— hystrix 案例之构建
  8. Oracle PL/SQL入门
  9. linux指定的文件不是虚拟磁盘,linux下挂载VHD等虚拟磁盘文件的方法
  10. 粒子群优化算法python
  11. comsol 计算机配置,[转]我需要一台什么样的电脑运行我的COMSOL Multiphysics - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  12. python智力问答测试_智力问答:经典的智力测试题
  13. linux dd iflag oflag,【转】dd命令详解及利用dd测试磁盘性能
  14. 'gbk' codec can't encode character '\u301c' in position 12: illegal multibyte sequence问题解决
  15. Discuz!教程之当插件、门户或自定义页面设置成首页时手机版访问跳转到forum.php?mobile=yes的问题
  16. 备份 mysql 数据库
  17. 【Unity】旋转Vector3和Quaternion
  18. linux在3T的分区磁盘上追加空间
  19. 感悟SEO,感悟互联网营销!
  20. I/O输入输出——I/O设备(块设备与字符设备)

热门文章

  1. nodemanager不能正常关闭_家居燃气安全,燃气阀门的开与关可不能不当回事
  2. GPB | 陈润生/何顺民团队发布新版SmProt数据库,提供小蛋白丰富、可靠的系统性注释...
  3. Hemberg-lab单细胞转录组数据分析(一)
  4. 【chorme插件开发】第四节:html+js实现的功能插件开发实例
  5. php的api数据接口书写实例
  6. 测试页打印失败.是否参阅打印疑难解答以获得帮助_使用DeepState对API进行模糊测试(上)...
  7. mysql c 调用存储过程返回值_Mysql:使用返回值调用存储过程
  8. thinkphp5 定时任务
  9. Leaflet文档阅读笔记-Quick Start Guide笔记
  10. Niginx笔记-Linux上源码安装Niginx