一.常见渗透路径:
图1.常见渗透路径
本文将从访问入侵出发,根据每个攻击节点,总结一些在对 K8S 集群进行实际渗透测试的过程中常用的攻击方法。
二.访问入侵
1.K8S集群常见的入侵点有:
- K8S组件未授权/弱密码
- 节点对外服务
- 业务系统
2.K8S组件未授权/弱密码
K8S 组件的问题主要是指各组件的不安全配置,通常是未授权和弱密码,如API Server 未授权访问、etcd 未授权访问、kubelet 未授权访问、kube-proxy 不安全配置等。这些都是 K8S 集群的重要系统组件,一旦被攻击成功,都是可以直接获得相应集群、节点或容器的权限的。
以下为各个组件的默认端口:
图2.K8S 各组件默认端口
3.节点对外服务
有时候因为管理员疏忽或者服务器防火墙失效导致原本不应该对外开放的服务或者接口开放到公网,这些服务或者接口往往防御比较薄弱,但影响往往更大,例如:MySQL弱密码,方便管理员管理的接口、FTP匿名访问等等。
4.业务系统
在K8S环境下,业务系统对攻击者来说就是最直接,也是最容易接触到的集群入口,一旦业务系统被突破,就意味着业务系统所在的pod或者节点可能会沦陷,因此在业务系统上线前应当充分进行安全评估,尽量将安全风险扼杀在上线前,同时每一次重大更新、重要改动,都应当进行安全评估,避免因为改动出现新的安全风险。
Web安全发展这么多年,可利用的漏洞非常之多,比如 Log4j2-RCE 漏洞(CVE-2021-44228)以及前不久的 Spring-RCE漏洞(CVE-2022-22965),其危害非常之大,且其利用也很简单(比如 Log4j2 漏洞,虽然在高版本和低版本的JDK环境下利用方法不同,但网上都已经分别有非常多的现成EXP可用),一旦成功利用即可以完全接管整个业务pod;或者业务系统本身的设计和代码上存在高风险的安全问题,也有可能导致业务系统被突破;一旦发现漏洞应当及时更新组件、完善代码,避免漏洞被利用。
这里推荐一个国内的漏洞查询平台:ti.qianxin.com/vulnerability/list
尽管进入 pod 后的权限仍然是受限的,但总算是进入了集群内部,接下来可以通过尝试更多攻击手法,比如提权、横向、逃逸等,逐步扩大战果,直至控制整个集群。
三.权限提升
1.常见的权限提升方案有:
- 错误的系统配置
- 系统存在提权漏洞
2.错误的系统配置
sudo是Linux和类Unix操作系统中的一个命令,sudo允许普通用户以超级用户(root)或其他用户的身份执行命令,从而完成一些需要更高权限的任务;sudo的使用应当遵循最小权限原则和密码保护原则,如果sudo配置不当,可能导致安全隐患,例如:
-
- 系统管理员直接用root权限运行进程,当攻击者成功进入到系统内部时就有可能直接获得root权限;
- 配置免密的sudo用户时,错误地将不应该免密的用户也包含在内,攻击者可以直接使用sudo 命令获得root权限;
- 等等
3.系统存在提权漏洞
当系统存在提权漏洞时,攻击者也可以利用这些漏洞进行提权,比如各种内核提权漏洞(例如CVE-2016-5195)、组件提权漏洞(例如CVE-2021-4034)等;因此,业务系统应当及时更新宿主机安全漏洞补丁、升级组件,避免漏洞造成更大的危害。
在大多数云安全攻防中,入侵到pod/节点中只是开始,因为pod/节点中往往还有诸多限制,攻击者能够做到的事情非常有限,因此需要提权获得更大的权限,而如果攻击者只是进入到pod中,往往还需要逃逸到宿主机节点上,才能实施更加深入的攻击,其实容器逃逸也可以认为是一种提权。
四.容器逃逸
1.常见的容器方案有:
- 容器不安全配置
- 相关组件和内核漏洞
2.容器不安全配置:
容器不安全配置一般可以分为两种情况:赋予了容器危险权限、容器挂载了危险目录。
危险权限包括:privileged 权限、Capabilities 权限(如 cap_sys_admin,cap_sys_module,cap_sys_dac_search 等);如果容器被赋予了以上的危险权限,将导致限制容器的安全机制失效。
危险目录包括:/、/docker.sock、/procfs、/root、/etc、/var/log、/dev 等等;容器挂载危险目录会导致容器文件系统隔离被打破,进而获得特权。
此外 CIS Docker Benchmark[3] 针对 docker 容器提出的安全配置基准多达上百条,如此多的安全配置要求也导致了相比于漏洞防护,安全配置的问题往往更容易被忽略。而对攻击者而言,容器的不安全配置往往比下文将要提到的相关程序漏洞和内核漏洞更容易检测和利用。
3.相关组件和内核漏洞:
一个容器集群是由大量的组件共同协作构成的,而只要是程序往往就会有漏洞,容器相关的漏洞也可能导致容器逃逸,例如:CVE-2024-21626;容器和虚拟机最大的不同就是容器和宿主机共享内核,因此内核漏洞也可能导致容器受到影响并造成逃逸,例如:CVE-2022-0847。
四.窃取凭证
1.常见的容器方案有:
- pod凭证权限设置过高
- api接口泄露凭证
- 中间人攻击
1.pod凭证权限设置过高
在K8s集群环境中,为了确保集群的安全性,K8s提供了两种比较常见的身份认证方式(UserAccount和ServiceAccount),来对访问集群内资源的用户进行认证,以确保只有授权的用户可以访问集群内的资源。攻击者可以尝试通过获得高权限的凭证来执行特权操作。例如:
-
- 当pod的凭证被设置了较高的权限,具备控制原生Job/node的所有权限,用户可以创建恶意pod,甚至接管整个集群;
- 当pod所在节点上存在高权限的凭证时,攻击者可以逃逸到节点宿主机上并查找高权限凭证来执行特权操作。
因此非必要,应当将用户的凭证设置为最小权限(只读权限)。
2.api 接口泄露凭证
当集群内未对K8S 组件api接口的访问做限制,一样会导致 二.2K8S组件未授权/弱密码问题,从而导致高权限凭证泄露等问题。
3.中间人攻击
中间人攻击是一种经典的攻击方式,当未对集群内部的网络通信做限制时,如果攻击者拿到了某个 pod 的权限,接下来就有可能通过中间人攻击,对其他 pod 实现 DNS 劫持,并获得敏感信息。因此用户pod间的网络隔离是十分有必要的。
五.横向拓展
1.常见的横向拓展方案有:
- 利用高权限凭证创建恶意pod
- 内网渗透
- 攻击 K8S 管理平台
- 攻击镜像库
2.利用高权限凭证创建恶意pod
当攻击者获取到高权限的凭证时,就可以通过kebectl、server api 等方式,创建恶意pod,对集群造成破坏甚至接管集群,例如:通过污点容忍等方式将其调度到master节点上,并挂载master节点的根目录,从而获取到master节点上的高权限kubeconfig,从而接管整个集群等等。
3.内网渗透
k8s集群中往往会有一些通过 ClusterIP 暴露在内部的服务、API Server,这些服务往往防护比较薄弱,攻击者可以通过内网扫描、查看环境变量等方法收集信息,并针对这些服务发起攻击;
一些组件漏洞,也可能存在漏洞;
如果未对用户间的网络做隔离,也可能通过攻击其他用户的服务,从而获取到其他用户pod的权限;
4.攻击 K8S 管理平台
除了官方推出的 Dashboard,还有很多 K8S 管理平台,比如 Rancher、KubeSphere、KubeOperator 等,K8S 管理平台可攻击的点除了最常见的Dashboard 未授权访问,还有弱口令登录、版本漏洞等,一旦出现安全问题,危害十分严重。
5.攻击 K8S 管理平台
在K8s(Kubernetes)环境中,攻击镜像库是一种严重的安全威胁。镜像库,也称为容器镜像仓库,是用于存储和管理容器镜像的系统,在K8s集群中扮演着至关重要的角色。攻击者将恶意镜像上传到公开仓库或受害者本地仓库,然后将恶意镜像伪装成正常镜像,以引导受害者使用该镜像创建容器。这些恶意镜像通常包含用于控制容器或宿主机的恶意代码。
常见的攻击方式有:弱口令或未授权访问、利用漏洞进行攻击(如CVE-2020-13794)、供应链攻击、直接上传恶意镜像等等。
六.总结
云原生攻防技术作为当前数字化转型中的关键领域,正面临着日益复杂的安全挑战。随着云计算、大数据、物联网等技术的快速发展,云原生应用已经成为企业数字化转型的重要驱动力。然而,这也带来了更多的安全威胁,如虚拟机、容器、K8s等新技术带来的新攻击面,以及API滥用、供应链安全风险等问题。
在云原生防御技术方面,企业需要加强访问控制和权限管理,确保只有授权用户才能访问和修改关键资源。同时,定期更新和打补丁也是必不可少的,以修复已知的安全漏洞并提升系统的整体安全性。此外,实施严格的镜像扫描和验证过程,加强监控和日志记录,以及进行安全审计和员工培训等措施,也是构建云原生安全防御体系的重要一环。
在云原生攻击技术方面,攻击者可能会利用漏洞进行攻击,上传恶意镜像,或者通过供应链攻击等方式来渗透和破坏云原生环境。因此,企业需要时刻保持警惕,加强安全监测和预警机制,及时发现并应对潜在的安全威胁。
综上所述,云原生攻防技术是一个复杂而重要的领域,需要企业不断投入资源和精力来加强安全防御和应对能力。只有这样,才能确保云原生应用的安全稳定运行,为企业的数字化转型提供坚实的保障。
本文篇幅有限,不再详细讨论具体攻击案例,感兴趣的读者可自行去了解。