当前位置: 首页 > 科技观察

Kubernetes攻击威胁矩阵

时间:2023-03-12 12:55:08 科技观察

随着云和容器技术的快速发展,容器编排系统成为发展最快的技术。特别是谷歌Kubernetes项目已经成为容器编排事实上的行业标准。越来越多的企业和开发者将工作转移到了K8S上。虽然K8S有很多优势,但是统一集中控制在安全方面也带来了新的挑战。容器云化环境(如K8S)也存在各种安全隐患。本文使用ATT&CK模型,介绍了K8S攻击威胁矩阵。概述系统研究安全和防控最常用的方法是使用MITREATT&CK框架。MITRE是一家由美国政府资助的研究机构。该机构起源于马萨诸塞大学,专门从事包括军事高密度安全项目在内的研究。MITRE由美国国家标准技术研究院(NIST)资助,开展了大量的网络安全研究和实践。.2013年,MITR推出ATT&CK模型,基于对实际数据的观察对攻击行为进行定义和分类。ATT&CK模型以结构化矩阵的形式,用威胁信息列表和可信的自动交换来表达已知的攻击行为。从Windows和Linux操作系统的覆盖面开始,ATT&CK的矩阵涵盖了网络攻击(策略)所涉及的各个阶段,并详细介绍了其中的每个已知方法(技术)。这些矩阵可以帮助组织了解其环境中的攻击面,并确保充分检测和减轻各种风险。MITREATT&CK框架策略包括:初始访问、执行、持久化、提权、防御绕过、访问凭证、发现、水平扩展、影响等。针对不同的平台,虽然攻击技术与针对不同平台的攻击技术(如如Linux和Windows),基本策略其实是相似的。例如,在前四种策略(初始访问、执行、持久化、提权)中,如果将OS转化为容器,则对应:“初始访问计算机”变为“初始访问计算机”;“在计算机上”“容器上的恶意代码”翻译为“容器上的恶意活动”;“保持对机器的访问”变成“保持对集群的访问”;“在机器上获得提升的权限”翻译为“获得访问权限”到集群“获得更高的权限”。在此基础上,将原有的工具矩阵转化为容器云(K8S)版ATT&CK的威胁攻击矩阵,其中包含容器编排安全相关的主要技术。如上所示,矩阵包含上面列出的9种策略。这些策略之一又包括攻击者可以用来实现不同目标的多种技术。下面我们详细介绍具体策略。1.访问门户访问门户策略包括获取资源访问权的技术。在容器云虚拟化环境中,这些技术可以重定向我们的访问。访问可以通过URL串行链接实现,也可以通过访问已部署的恶意或篡改资源来实现。(1)使用云凭证如果K8S集群部署在公有云(如亚马逊AWS的EKS、谷歌GCP的GKE或微软Azure的AKS),云凭证(密码、证书、令牌)的泄露可能导致集群被接管。有权访问云帐户凭据的攻击者可以获得访问权限,可以随意操纵整个集群。(2)注册表中的恶意镜像在集群中运行恶意镜像可能会损坏集群。可以访问私有注册表的攻击者可以在注册表中随意植入自己的非法代码或木马,供用户拉取使用。此外,用户从公共注册中心(如DockerHub)拉取未经验证的镜像,这些镜像可能是恶意镜像。基于具有无限信任的基础图像构建图像会导致类似的结果。(3)Kubeconfig配置kubconfigl也使用kubeconfig文件,其中包含有关Kubernetes集群的详细信息,包括它们的分区和凭据。如果集群托管为云服务(例如AKS或GKE),则文件通过云命令下载到客户端。如果攻击者通过窃取的客户端配置文件,他们可以使用该文件访问副本。(4)有漏洞的应用程序在集群中运行存在公开漏洞的应用程序会导致访问集群。可能触发远程代码执行漏洞利用(RCE)来攻击容器。如果服务账号安装在容器中(K8S的默认行为),攻击者可以窃取服务账号并向API服务器发送请求。(5)ExposedDashboardKubernetesDashboard是一个基于web的用户界面,可用于监控和管理K8S集群。默认情况下,仪表板只能通过内部网访问。如果方便将仪表板暴露给外界,它可以允许对部署进行身份验证和远程管理。2.执行攻击执行攻击策略包括攻击者用来在最大化状态下运行代码的技术。(1)具有容器执行权限的攻击者可以使用exec命令(“kubectlexec”)在集群中的容器中运行恶意命令。通过这种方法,攻击者可以使用合法镜像(如Ubuntu操作系统镜像)作为后门容器,并使用“kubectlexec”远程运行他们的恶意代码。(2)创建一个新的容器攻击者可能会尝试通过创建一个新的容器来在集群中运行他们的代码。有权在集群中部署Pod或控制器(例如DaemonSet\ReplicaSet\Deployment)的攻击者可以创建新的容器来执行代码。(3)应用程序利用部署在集群中的易受远程代码执行漏洞或最终允许代码执行的漏洞使攻击者能够在集群中运行代码。如果将服务帐户挂载到容器(K8S中的默认行为),攻击者将能够使用此服务帐户凭据向API服务器发送请求。(4)运行在容器内部的SSH攻击者可能会利用运行在容器内部的SSH服务。如果攻击者通过暴力破解或网络钓鱼等其他方法获得容器的有效凭据,则可以通过SSH远程访问容器。3.持久性持久性策略是攻击者用来在失去原始访问点的情况下保持对集群的访问的技术。(1)后门容器攻击者在集群的容器中运行恶意代码。通过使用DaemonSet或Deployments等K8S控制器,攻击者可以确保容器在集群中的一个或多个节点上运行。(2)WritablehostPath挂载hostPath卷,将宿主机中的目录或文件挂载到容器中。有权在集群中创建新容器的攻击者可以创建具有可写hostPath卷的容器,并在堡垒主机上获得持久性。例如,这可以通过在主机上创建一个cron作业来实现。(3)K8SCronJobKubernetesJob可用于运行为批处理作业执行有限任务的容器。KubernetesJob是一个控制器,它创建一个或多个Pod并确保指定数量的Pod被终止。KubernetesCronJob用于安排作业。攻击者可能会使用KubernetesCronJob调度集群容器来执行恶意代码。4.特权升级特权升级策略包括攻击者用来在环境中获得比他们当前拥有的更高特权的技术。在容器化环境中,提权技术包括从容器中访问节点,在集群中获得更高的权限,甚至获得对云资源的访问权。(1)特权容器特权容器是具有宿主能力的容器,可以解除常规容器的所有限制。特权容器可以执行几乎所有可以直接在主机上执行的操作。获得对特权容器的访问权限或创建新特权容器的权利(例如,通过使用被盗的pod服务帐户)的攻击者可以获得对主机资源的访问权限。(2)Cluster-adminbinding基于角色的访问控制(RBAC)是Kubernetes中的一个关键安全特性。RBAC可以限制集群中各种身份允许的操作。Cluster-admin是Kubernetes中内置的高权限角色,具有在集群中创建绑定和集群绑定权限的攻击者可以创建对cluster-adminClusterRole或其他高权限角色的绑定。(3)hostPathmounts攻击者可以使用hostPathmounts获取底层主机的访问权限,从而从容器中危及主机。(4)访问云资源如果Kubernetes集群部署在云端,在某些情况下,攻击者可以利用对单个容器的访问权限访问集群外的其他云资源。例如,在AKS中,每个节点都包含服务主体凭据,这些凭据存储在/etc/kubernetes/azure.json中。AKS使用此服务主体来创建和管理群集操作所需的Azure资源。默认情况下,服务主体在集群的资源组中具有贡献者权限。有权访问此服务主体文件(例如通过hostPath安装)的攻击者可以使用其凭据来访问或修改云资源。5.DefenseBypass防御绕过策略包括攻击者用来避免检测和隐藏其活动的技术。(1)清除容器日志攻击者可能会破坏容器上的应用程序或系统日志,以防止检测到它们的活动。(2)删除Kubernetes事件Kubernetes事件是一个Kubernetes对象,用于记录集群中资源的状态变化和故障。示例事件是在节点上创建容器、镜像拉取或pod调度。Kubernetes事件对于识别集群中发生的更改非常有用。因此,攻击者可能希望删除这些事件(例如,通过使用“kubectldeleteevents-all”)以防止检测到它们在集群中的活动。(3)Pod/容器名称混淆Deploymen或DaemonSet等控制器创建的Pod名称后缀随机。攻击者可以利用这一事实并命名后门容器,因为它们是由现有控制器创建的。例如,攻击者可以创建一个名为coredns-{randomstringsuffix}的恶意容器,它似乎与CoreDNS部署相关。同样,攻击者可以将他们的容器部署在与管理容器相同的kubesystem命名空间中。(4)从代理服务器连接攻击者可能使用代理服务器来隐藏他们的原始IP。具体来说,攻击者经常使用TOR等匿名网络进行活动。这可用于与应用程序本身或与API服务器通信。6.访问凭证访问凭证策略包括攻击者用来窃取凭证的技术。在容器化环境中,这些技术包括用于运行应用程序的凭证、身份、存储在集群中的密码或云凭证。(1)列出KubernetessecretKubernetessecret是一个对象,它使用户能够存储和管理集群中的密码和连接字符串等敏感信息。在pod配置中可以通过引用获得机密。有权从API服务器搜索秘密的攻击者(例如,通过使用pod服务帐户)可以获得对敏感信息的访问权限,其中可能包括各种服务的凭据。(2)挂载服务主体集群部署到云端后,在某些情况下,攻击者可以利用对集群中容器的访问权限获取云端凭证。例如,在AKS中,每个节点都包含服务主体凭据。(3)接入容器服务账号服务账号(SA)代表了K8S中的应用身份。默认情况下,SA会安装到集群中创建的每个Pod。使用SA,pod中的容器可以向KubernetesAPI服务器发送请求。有权访问pod的攻击者可以访问SA令牌(在/var/run/secrets/kubernetes.io/serviceaccount/token中)并根据SA权限在集群中执行操作。如果不开启RBAC,SA在集群中的权限是无限的。如果启用了RBAC,则其权限由与其关联的RoleBindings\ClusterRoleBindings确定。(4)配置文件中的应用凭证开发者将秘密存储在Kubernetes配置文件中,例如pod配置中的环境变量。这种行为在Azure安全中心监控的集群中很常见。可以通过查询API服务器或在开发人员终端上访问这些机密来访问这些机密的攻击者可以窃取和使用存储的机密。7.发现发现策略由攻击者用来探测他们有权访问的环境的技术组成。这些技术可帮助攻击者横向移动并获得更多资源。(1)访问KubernetesAPIserverKubernetesAPIserver是集群的网关。通过向RESTfulAPI发送各种请求来在集群中执行操作。API服务器可以检索集群的状态,其中包括部署在集群上的所有组件。攻击者可以发送API请求来探测集群并获取有关容器、机密和集群中其他资源的信息。(2)访问KubeletAPIKubelet是安装在各个节点上的Kubernetes代理。Kubelet负责正确执行分配给该节点的Pod。Kubelet公开了一个不需要身份验证的只读API服务(TCP端口10255)。对主机具有网络访问权限的攻击者(例如,通过破坏在容器上运行的代码)可以请求访问KubeletAPI。通过访问[NODEIP]:10255/pods/检索节点上正在运行的Pod。通过访问[NODEIP]:10255/spec/检索有关节点本身的信息,例如CPU和内存消耗。(3)Intranet映射攻击者可能会尝试探测集群网络以获取有关正在运行的应用程序的信息,包括扫描已知漏洞。默认情况下,Kubernetes中没有对pod通信的限制。因此,获得对单个容器的访问权限的攻击者可能会使用它来探测网络。(4)访问KubernetesDashboardKubernetesDashboard是一个基于Web的UI,用于监控和管理Kubernetes集群。Dashboard允许用户使用他们的服务帐户(kubernetes-dashboard)在集群中执行操作,权限由服务帐户的绑定或集群绑定决定。获得对集群中容器的访问权限的攻击者可以使用他们对仪表板容器的网络访问权限。因此,攻击者可能会使用仪表板的身份来检索有关集群中各种资源的信息。(5)实例元数据API云提供商提供实例元数据服务,用于检索有关虚拟机的信息,例如网络配置、磁盘和SSH公钥。VPS通过不可路由的IP地址访问此服务,该地址只能从VPS内部访问。获得容器访问权限的攻击者可以查询元数据API服务以获取有关底层节点的信息。例如,在AWS中,以下请求将检索实例的所有元数据信息:IP/latest/meta-data/8。横向扩展横向扩展移动策略包括攻击者用来在目标环境内扩展的技术。在容器化环境中,这包括从对容器的给定访问、从容器到底层节点或到云环境获得对集群中各种资源的访问。(1)对云资源的访问攻击者可能从被破坏的容器扩展到云环境。(2)容器服务账户获得集群中容器访问权限的攻击者可以使用安装的服务账户令牌请求访问API服务器并获得集群中其他资源的访问权限。(3)Kubernetes在集群内网的网络行为默认允许集群内Pod之间的流量。获得对单个容器的访问权限的攻击者可能会使用它来实现集群中另一个容器的网络可达性。(4)配置文件中的应用凭证开发人员将秘密存储在Kubernetes配置文件中,例如作为Pod配置中的环境变量。使用这些凭据,攻击者可以访问集群内外的其他资源。(5)主机上挂载了一个可写卷攻击者可能会尝试从受感染的容器中访问底层主机。(7)访问Kubernetes仪表板有权访问Kubernetes仪表板的攻击者可以管理仪表板资源,还可以使用仪表板的内置“exec”功能在集群中的各个容器上运行他们的代码。(8)访问Tiller端点Helm是CNCF维护的K8S集群中流行的包管理器。在HelmV2之前,Tiller是一个服务器端组件。Tiller在集群中公开了一个内部gRPC端点,侦听端口44134。默认情况下,此端点不需要身份验证。攻击者可以使用Tiller的服务帐户(通常具有提升的权限)在Tiller服务可访问的任何容器上运行代码并在集群中执行操作。9.影响影响策略包括攻击者用来破坏、滥用或破坏环境正常行为的技术。(1)数据删除和加密攻击者可能会试图破坏集群中的数据和资源。这包括删除部署、配置、存储和计算资源。或者加密所有资源,然后敲诈他们。(2)资源劫持攻击者可能会利用被破坏的资源来运行任务。一种常见的滥用形式是挖矿。有权访问集群中的容器或有权创建新容器的攻击者可以使用它们进行此类活动。(3)拒绝服务攻击者可能会尝试执行拒绝服务攻击,这将使合法用户无法使用该服务。在容器集群中,这包括试图阻止容器本身、底层节点或API服务器的可用性。10.结论了解容器化环境的攻击面是为这些环境构建安全解决方案的第一步。上面介绍的矩阵可以帮助我们识别K8S针对不同威胁的防御能力差距,补齐安全威胁的短板和瓶颈,提高集群的安全性。