2026了,打red的时候遇到K8S还不知道咋横向吗(下)

admin 2026-05-27 05:00:40 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细介绍了Kubernetes红队渗透中的横向移动技术,重点分析了容器逃逸、高权限Token获取和污点横移三大核心攻击路径。通过特权模式挂载宿主机根文件系统、利用ServiceAccount令牌提升至集群管理员权限,并借助污点容忍机制在主节点部署恶意Pod实现逃逸。文档还推荐了CDK容器渗透工具进行自动化信息收集和漏洞利用,提供了具体操作命令和防御规避方案。 综合评分: 78 文章分类: 红队,内网渗透,云安全,漏洞分析,安全工具


cover_image

2026了,打red的时候遇到K8S还不知道咋横向吗(下)

原创

Syst1m Syst1m

凌曦安全

2026年1月3日 10:00 上海

在小说阅读器读本章

去阅读

K8S横向

正文开始前先提一下,凌曦安全团队课程的元旦优惠就剩最后一天了,需要的小伙伴可以看一下这个链接介绍:Zer0 sec 正式更名为 凌曦安全!新的一年,新的课程,元旦特惠来啦~

一期课程课程大纲直达链接:https://www.yuque.com/syst1m-/blog/lc3k6elv0zqhdal3

MINOR COLD

本推文提供的信息、技术和方法仅用于教育目的。文中讨论的所有案例和技术均旨在帮助读者更好地理解相关安全问题,并采取适当的防护措施来保护自身系统免受攻击。

严禁将本文中的任何信息用于非法目的或对任何未经许可的系统进行测试。未经授权尝试访问计算机系统或数据是违法行为,可能会导致法律后果。

作者不对因阅读本文后采取的任何行动所造成的任何形式的损害负责,包括但不限于直接、间接、特殊、附带或后果性的损害。用户应自行承担使用这些信息的风险。我们鼓励所有读者遵守法律法规,负责任地使用技术知识,共同维护网络空间的安全与和谐。

四、容器逃逸(挂载根文件系统)

核心原理

  • 当容器以特权模式(privileged: true)启动时,容器内root用户会获得宿主机root权限,在开启特权模式的容器内可以通过挂载(mount)宿主机的根文件系统实现容器逃逸
  • Kubernetes中通过securityContext.privileged: true配置开启此模式,如下所示

逃逸方式

  • 判断当前是否为特权模式,如果是特权模式启动的话CapEff对应的掩码值应该为0000003fffffffff或者是0000001fffffffff

  • 查看磁盘分区,查看可以挂载的分区

  • 创建目录,并将分区挂载到目录中

  • 验证是否挂载成功

五、通过高权限Token获取K8S集群管理员权限

判断当前环境

  • 在容器逃逸出来以后,可以先判断当前是否有K8S环境

票据文件

  • 在K8S节点中存在/root/.kube/config(不一定存在)和/etc/kubernetes/kubelet.conf这两个票据文件,票据中包含certificate-authority-data:这个字段它是集群的“根信任证书”,作用是验证Kubernetes API Server 的身份合法性:

  • 当kubelet(通过kubelet.conf)或 kubectl(通过/root/.kube/config)向API Server发起请求时,API Server会出示自己的服务端证书

  • 客户端(kubelet/kubectl)会用certificate-authority-data里的CA证书去校验API Server的证书,只有确认API Server的证书是由这个CA签发的,才会建立加密连接,避免中间人攻击(防止连接到伪造的 API Server)

  • 在这两个票据文件中,如果user是default-auth的话,就说明权限不会太大(拼接命令查询到的信息有限、执行一些操作的时候权限不足等)

  • 拿到票据后可以通过拼接命令进行使用

Service Account

  • 子节点的票据有时候可能导致越权,而这是少数情况,但是Pod内部可能存有高权限的服务账户Service Account(SA)
  • Service Account(服务账户)是K8S为Pod内的应用程序、进程设计的身份标识,默认情况下,每个命名空间都会有一个defaultSA,权限极低,但是管理员可以创建自定义SA,并给它绑定超高权限,所以Pod内部可能存有高权限的SA
  • 如果该SA被通过绑定了K8S内置的超级集群角色,就拥有了集群所有资源的操作权限,K8S会自动把该高权限SA的JWT认证Token,默认挂载到Pod内部/var/run/secrets/kubernetes.io/serviceaccount目录下,攻击者只要能进入该Pod,即可直接读取这个高权限Token,用该Token向API Server发起请求时,API Server会验证Token合法性并匹配其SA的RBAC权限,确认具备cluster-admin权限后,便允许执行查看/修改所有资源、操作节点、管理全集群Secret等所有管理员级操作,最终完全掌控整个K8S集群
  • 在Pod内部查看Token

  • 通过Token获取K8S集群管理员权限

  • Token权限不足的情况

  • 通过bash脚本批量提取Token(记得chmod +x

六、污点横移(上线主节点)

  • 在获取了高权限的Token,可以利用污点容忍机制在K8S主节点部署一个恶意Pod,然后逃逸到主节点
  • 查看节点上是否有污点并判断容忍度

  • 查询到的污点信息是security=high:NoSchedule,分解为:
key: securityvalue: higheffect: NoSchedule
  • 因此即将在主节点上布置的Pod中的容忍度应该这样配置

  • 在主节点创建一个可以容器逃逸的Pod

  • 创建yaml文件

  • 创建Pod

  • 验证是否创建成功

  • 进入Pod,然后进行逃逸(与前面的特权模式下挂载目录逃逸模式一致)

  • 补充,如果权限足够,但是没有污点,可以尝试通过Token创建污点

七、CDK工具

  • CDK是一款开源的零依赖容器渗透工具包,旨在不同精简容器中提供稳定的渗透能力,无需任何操作系统依赖,主要包含一下模块

  • Evaluate: 容器内部信息收集,以发现潜在的弱点便于后续利用

  • Exploit: 提供容器逃逸、持久化、横向移动等利用方式

  • Tool: 修复渗透过程中常用的linux命令以及与Docker/K8s API交互的命令

  • 下载地址:https://github.com/cdk-team/CDK/releases/

  • 常用命令(传到Pod里面使用)

// 在容器内部进行信息搜集,寻找可用的逃逸点./cdk_linux_amd64 evaluate// 全盘路径扫描,在路径中匹配敏感词来识别敏感文件,如:docker.sock、.git、.kube等./cdk_linux_amd64 evaluate --full

  • 执行宿主机的命令

  • 读取宿主机文件

  • 还有其他的使用方式,可以通过-h参数查看

外部交流群(欢迎进群互相交流):由于群人数超过了200,只能邀请拉群,可以关注公众号,后台回复“加群”,获取助手绿泡泡,联系小助手进交流群

MINOR COLD


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:凌曦安全 Syst1m Syst1m《2026了,打red的时候遇到K8S还不知道咋横向吗(下)》

评论:0   参与:  0