在 2023 年 RSA 大会上,来自微软云防护团队的高级安全研究员 Yossi Weizman 为我们分享了 Kubernetes(以下简称 K8s)集群的横向移动及其对云环境的影响。本文基于 Yossi 的演讲内容并结合笔者的思考理解,从攻击的角度来讲述横向移动的使用,最后基于防御者视角提出监测和防御此类活动的建议。
概 述
K8s 是一个可移植、可扩展的开源平台,用于管理容器化工作负载和服务 [1]。据 stackshare 的报道显示,已经有超过 3000 家公司在使用 K8s,其中不乏知名的头部企业 [2],毫无疑问 K8s 是最受欢迎的容器管理平台之一。而一般意义上的横向移动是指当攻击者获得了某台内网机器的控制权限后,会以被攻陷的主机为跳板,继续访问或控制其他内网机器的过程,在本文中则介绍 K8s 下集群内部间、集群与云、跨云三类横向移动。
注:文中如无特殊说明,图片均来自该议题的 PPT。
背 景
K8s 通过将容器分类组成 pod 来解决了容器增殖带来的许多常见问题。pod 为容器分组提供了一层抽象,以此协助调度工作负载以及为这些容器提供类似网络与存储这类必要的服务。由于 pod 作为基本业务生产端点,直接处理与用户的交互,攻击者可以通过各类手段(WEB 漏洞,业务逻辑错误等等)控制 pod,本文的背景就假定在一个被攻击者控制 pod 的 K8s 环境下,随后攻击者如何通过集群内部间、集群与云、跨云这三类横向移动扩大其影响范围,窃取更多有价值信息。
图 1 K8s 架构示意图
各类横向移动集群内横向移动
当攻击者接管 pod 后,其集群内的横向移动在 K8s 中的特点是 RABC 配置利用。简单介绍下 K8s 的 RABC,基于角色(Role)的访问控制(RBAC)是一种基于组织中用户的角色来调节控制对计算机或网络资源的访问的方法。RBAC 鉴权机制使用 rbac.authorization.k8s.io API 组来驱动鉴权决定,允许通过 K8s API 动态配置策略。RBAC API 声明了四种 K8s 对象:Role、ClusterRole、RoleBinding 和 ClusterRoleBinding。Role 总是用来在某个命名空间内设置访问权限;在创建 Role 时,必须指定该 Role 所属的命名空间。与之相对,ClusterRole 则是一个集群作用域的权限控制资源。角色绑定(Role Binding)是将角色中定义的权限赋予一个或者一组用户。它包含若干主体(用户、组或服务账户)的列表和对这些主体所获得的角色的引用。RoleBinding 在指定的命名空间中执行授权,而 ClusterRoleBinding 在集群范围执行授权 [3]。
因此攻击者往往利用沦陷的 pod 访问密钥、接管节点甚至控制集群,但上述操作伴随着 K8s 的迭代更新变得越来越困难。尽管如此,不恰当的权限配置将会允许集群内部的横向移动。如图 2 所示,该 pod 获取了更新其自身权限的能力,沦陷的后果不言而喻。在图 3 中,其它类似的敏感权限分配也会造成极为严重的后果。
图 2 不恰当的 pod 权限配置
图 3 部分敏感权限
集群到云的横向移动
为什么集群可以向云端移动呢?因为在集群工作中使用了云服务或云资源,例如调用云存储中图片文本资源、向云存储中上传数据或使用云服务管理 K8s 等等。在这其中会涉及到云端如何鉴权 K8s 以及 K8s 和云的交互,可以归类成如下三类:
在节点中存储云凭证 AK/SK、长效 token 或其它等价身份凭证信息。
实例元数据服务(Cloud Instance Metadata Services, IMDS)[4]: 提供有关当前正在运行的虚拟机实例的信息,可以使用它来管理和配置虚拟机。
利用 OIDC 协议单点登录:OpenID Connect (OIDC) 扩展了 OAuth 2.0 授权协议,使其也可用作身份验证协议。可以使用 OIDC 通过一个称作 “ID 令牌” 的安全令牌在支持 OAuth 的应用程序之间启用单点登录(SSO)。
上述第一类情况下,在 RSA 会上,Yossi 介绍的是服务主体名称(ServicePrincipal Names,SPN)利用,即恶意 pod 创建新的后门 pod,并在该后门 pod 配置中挂载 SPN 信息;第二类情况下,考虑到节点(kubelet)运行在虚拟机环境上,通过 pod 发出的请求一般等同于节点发出的请求,则可以利用此方法获取虚拟机信息或请求 token 用以控制虚拟机;第三类情况则通过 SA 等共享认证机制控制云上虚拟机资源,获取元数据信息如图 4 所示,利用示例如图 5 所示。
图 4 虚拟机元数据信息获取示例
图 5 元数据信息利用
跨云横向移动
跨云横向移动涉及到一些 K8s 的部署架构场景:多云环境下 K8s 集群,多云环境下身份认证和多云环境下供应链攻击。其中多云环境下 K8s 集群涉及到跨云服务商构建和运维集群,较为危险的行为是向公网暴露集群 API;多云环境下身份认证则涉及到各个云服务商的认证机制,其组合是否会存在潜在的认证凭证或其它敏感信息泄露;多云环境下供应链攻击则是指利用跨云间的恶意组件、恶意镜像等等从而实现跨云服务商的横向移动,如图 6 所示。
图 6 跨云横向移动示例
安全 Tips 监测
1) 在 K8s 控制平面可以做到:利用 Kubeaudit [5] 审计敏感可疑行为(部署非授信来源镜像;异常行为的 pods,例如挂载敏感存储;探测行为,例如查看自身权限配置;敏感 API 调用,例如 “get secret”)。
2)在云服务控制平面可以做到:监控 K8s 集群的云身份凭证使用行为(异常的凭证使用,例如持续使用凭证;可疑云服务调用,例如调用存有密钥文件或敏感信息的存储接口)。
防御
云与 K8s 的整体思想:既考虑到集群层面也考虑到云层面的风险;
凭证是 K8s 安全的关键之一:利用审计工具监测所有的认证行为;
最小授权原则:依据 pod、node/master node 的不同业务需求授权;
K8s ThreatMatrix:及时跟进最新的 K8s 风险矩阵及其专业建议。
通讯地址:北京市海淀区海淀南路甲21号中关村知识产权大厦A座2层206、207室 邮政编码:100080
电话:010-62565314 刘莉 京ICP证16064523号-2 版权所有:北京软件和信息服务业协会
技术支持:中科服 内容支持:鑫网安