Kubernetes安全矩阵


【编者的话】MITRE ATT&CK的目标是创建网络攻击中使用的已知对抗战术和技术的详尽列表。简单来说,ATT&CK是MITRE提供的“对抗战术、技术和常识”框架,它按照一种易于理解的格式将所有已知的战术和技术进行排列。攻击战术展示在矩阵顶部,每列下面列出了单独的技术。仿效ATT&CK,微软发布云安全攻击矩阵。下文是ILDC Azure安全中心安全研究软件工程师Yossi Weizman关于Kubernetes攻击矩阵的一篇介绍文章。

Kubernetes是目前最流行的容器编制系统,同时它也是历史上成长最快的开源项目之一,它已经成为许多公司计算系统交付的基石。由于容器的灵活性和可伸缩性,众多开发者开始将工作迁移至Kubernetes。Kubernetes优势众多,但是容器的安全挑战还是接踵而至,这应该引起我们的重视。因此,了解容器化环境中存在的各种安全风险是至关重要的,特别是Kubernetes。

MITRE ATT&CK®框架是涉及网络攻击的已知战术和技术的知识库。从Windows和Linux,MITRE ATT&CK矩阵模型涵盖了涉及网络攻击的各个阶段(战术),并详细阐述了每个阶段的已知方法(技术)。这些矩阵可以帮助企业了解其环境中的攻击面,并确保可以充分预检和排除各种风险。

MITRE ATT&CK®框架策略包括:
  • 初始访问
  • 执行
  • 持久化
  • 权限提升
  • 防御绕过
  • 凭据访问
  • 发现
  • 横向运动
  • 影响


当在Azuer安全中心开始绘制Kubernetes蓝图时我们发现,尽管针对Linux或Windows平台的攻击技术有所差异,但根本策略是相似的。例如,对前四个策略的转换来看:
  1. “对计算机的初始访问”变为“对群集的初始访问”;
  2. “计算机上的恶意代码”变为“容器上的恶意活动”;
  3. “保持对计算机的访问”变为“保持对群集的访问”;
  4. “在计算机上获得更高的权限”变为“在群集中获得更高的权限”。


基于此,我们改造了第一个工具矩阵为Kubernetes版本ATT&CK的威胁攻击矩阵,其中包括与容器编排安全相关的主要技术。
k8s-matrix.png

从上图可以看出,矩阵包含了列出的9个策略。每一个策略又都包含多项技术,攻击者可以使用这些技术来实现不同的目标。下面对每一个策略展开具体的介绍。

1. 初始访问

初始访问策略包括用于获得对资源访问权限的技术。 在容器化环境中,这些技术使你可以首先访问群集。

此访问可以直接通过群集管理层进行,也可以通过获取对部署在群集上的恶意或易受攻击资源的访问来实现。

使用云的凭证

如果Kubernetes集群部署在公共云(例如,Azure中的AKS、GCP中的GKE或AWS中的EKS),云凭据的泄露可能会导致集群被接管。有权访问云帐户凭证的攻击者可以访问整个集群的管理层。

恶意镜像

在集群中运行损坏的镜像可能会损害集群。访问私有注册表的攻击者可以在注册表中植入自己的非法代码或者木马等供用户拉取使用。此外,用户获取来自公共镜像管理库(例如Docker Hub)中未经验证的镜像,这些镜像可能是恶意镜像。

基于不可信的基础镜像构建的镜像也会导致类似的结果。

Kubeconfig文件

Kubeconfig文件也用于kubectl,其中包含关于Kubernetes集群的详细信息,包括它们的分区和凭据。如果集群托管为云服务(如AKS或GKE),则通过云命令将该文件下载到客户端(例如,AKS的“az AKS get-credential”或GKE的“gcloud容器集群get-credentials”)。

如果攻击者窃取到这个文件,他们就可以使用它来访问集群。

有漏洞的应用程序

在集群中运行有公开漏洞的应用程序可引起集群的可访问权限暴露。可能会触发远程代码执行突破(RCE)攻击容器。如果服务帐户安装在容器中(Kubernetes的默认行为),则攻击者可以窃取服务帐户并对API服务器发送请求。

暴露的仪表板

Kubernetes仪表板是一个基于Web的用户界面,支持监视和管理Kubernetes集群。默认情况下,仪表板只能内网访问(ClusterIP服务)。如果仪表板是在外网公开,则可以允许进行身份验证和部署远程管理。

2. 执行攻击

执行策略包括攻击者在集群中运行其代码的技术。

容器中执行

具有权限的攻击者可以使用exec命令(“kubectl exec”)在集群中的容器中运行恶意命令。在这种方法中,攻击者可以使用合法的镜像,例如OS镜像(例如Ubuntu)作为后门,并通过使用“kubectl exec”远程运行恶意代码。

新建容器

攻击者可能尝试通过新建容器在集群中运行其代码。有权在群集中部署Pod或控制器的攻击者(例如DaemonSet\ReplicaSet\Deployment)则可以创建用于代码执行的新容器。

利用应用程序

部署在集群中的应用程序容易受到远程代码执行漏洞(或最终允许代码执行的漏洞)的攻击,从而使攻击者能够在集群中运行代码。

如果将服务帐户挂载到容器(Kubernetes中的默认行为),攻击者将能够使用此服务帐户凭据向API服务器发送请求。

在容器内运行的SSH服务器

在容器内运行的SSH服务器可能被攻击者使用。如果攻击者获得到容器的有效凭证,无论是通过暴力尝试还是通过其他方法(如钓鱼),他们都可以使用它通过SSH获得对容器的远程访问。

3. 持久化

持久化策略包括一些技术,攻击者使用这些技术来保持对集群的访问,以防失去最初的立足点。

后门容器

攻击者在集群的容器中运行恶意代码。通过使用诸如DaemonSet或Deployments之类的Kubernetes控制器,攻击者可以确保在集群中的一个或者多个节点中运行容器。

可写的hostPath挂载

hostPath卷将目录或文件从主机加载到容器。具有在集群中创建新容器权限的攻击者可以创建一个具有可写hostPath卷的容器,并执行持久化。例如,可以通过在主机上创建cron作业来实现。

Kubernetes计划

Kubernetes Job可以用于运行为批处理作业执行有限任务的容器。Kubernetes Job是一个控制器,它创建一个或多个Pod,并确保指定数量的Pod终端。Kubernetes CronJob用于计划作业。攻击者可能使用Kubernetes CronJob来调度集群容器执行恶意代码。

4. 权限提升

权限提升策略由攻击者用来在环境中获取比其当前拥有的更高特权的技术组成。在容器化环境中,权限提升技术包括从容器访问节点,在集群中获得更高的特权,甚至获得对云资源的访问。

高权限容器

高权限容器是具有主机的所有功能的容器,它消除了常规容器的所有限制。实际上,这意味着特权容器可以执行几乎所有可以直接在主机上执行的操作。攻击者可以访问特权容器,或者拥有创建新的高权限容器的权限(例如,通过使用窃取的Pod的服务帐户),可以访问主机的资源。

Cluster-admin绑定

基于角色的访问控制(RBAC)是Kubernetes中的一个关键安全特性。RBAC可以限制集群中各种角色操作。Cluster-admin是Kubernetes中的内置高特权角色,有权在群集中创建绑定和群集绑定的攻击者可以创建到群集管理员ClusterRole或其他高特权角色的绑定。

hostPath挂载

攻击者可以使用hostPath挂载来访问基础主机,从而从容器破坏主机。

访问云资源

如果Kubernetes集群部署在云上,在某些情况下,攻击者可以利用对单个容器的访问来访问集群之外的其他云资源。例如,在AKS中,每个节点都包含服务principal凭证,该凭证存储在/etc/kubernetes/azure.json中。AKS使用该服务principal来创建和管理群集操作所需的Azure资源。
默认情况下,服务主体在集群的资源组中具有contributor权限。访问这个服务主体文件(例如,通过hostPath mount)的攻击者可以使用它的凭证来访问或修改云资源。

5. 防御绕过

防御绕过策略由攻击者用来避免检测并隐藏其活动的技术组成。

清除容器日志

攻击者可能会攻陷容器上的应用程序或系统日志,以防止检测到其活动。

删除Kubernetes事件

Kubernetes事件是一个Kubernetes对象,它记录集群中资源的状态变化和故障。示例事件包括容器创建、镜像获取或节点上的Pod调度。

Kubernetes事件对于识别集群更新非常有用。因此,攻击者可能想要删除这些事件记录(例如,通过使用:“kubectl delete event - all”),以避免检测到他们在集群中的活动。

Pod/容器名混淆

由诸如Deploymen或DaemonSet之类的控制器创建的Pod在其名称中具有随机后缀。攻击者可以利用此规律,并为后门容器命名,因为它们是由现有控制器创建的。例如,攻击者可能创建一个名为coredns-{随机字串后缀}的恶意容器,该容器看上去与CoreDNS部署有关。

同样,攻击者可以将其容器部署在管理容器所在的kube系统名称空间。

从代理服务器连接

攻击者可能使用代理服务器来隐藏他们的原始IP。具体来说,攻击者经常使用匿名网络(如TOR)进行攻击活动。这可以用于与应用程序本身或与API服务器进行通信。

6. 凭据访问

凭据访问策略由攻击者用来窃取凭据的技术组成。在容器化的环境中,这包括正在运行的应用程序的凭据、身份、存储在集群中的密码或云凭据。

列出Kubernetes secrets

Kubernetes secret是一个对象,它允许用户存储和管理敏感信息,比如集群中的密码和连接字符串。可以通过Pod配置中的引用来使用secret。
有权从API服务器搜索机密的攻击者(例如,通过使用Pod服务帐户)可以访问敏感信息,其中可能包括各种服务的凭据。

挂载服务主体

当集群部署在云中时,在某些情况下,攻击者可以利用他们对集群中的容器的访问来获得云证书。例如,在AKS中,每个节点都包含服务主体凭据。

访问容器服务帐户

服务帐户(SA)在Kubernetes中表示一个应用程序标识。默认情况下,SA挂载到集群中创建的每个Pod。使用SA,Pod中的容器可以将请求发送到Kubernetes API服务器。访问Pod的攻击者可以访问SA令牌(位于/var/run/secrets/kubernet .io/serviceaccount/token),并根据SA权限在集群中执行操作。如果没有启用RBAC,那么SA在集群中具有无限的权限。如果启用了RBAC,它的权限由其关联角色绑定\ClusterRoleBindings确定。

配置文件中的应用程序凭据

开发人员将Kubernetes secret存储在Kubernetes配置文件中,例如Pod配置中的环境变量。这种行为在Azure Security Center监控的集群中很常见。通过查询API服务器或访问开发人员终端上的文件,攻击者如果可以访问到此文件,则可以窃取存储的secret并使用它们。

7. 发现

发现策略由攻击者用来探测可以访问的环境的技术组成。这些技术有助于攻击者进行横向移动并获得更多资源。

访问Kubernetes API服务器

Kubernetes API服务器是群集的网关。通过向RESTful API发送各种请求来执行集群中的操作。API服务器可以检索群集的状态,其中包括部署在群集上的所有组件。攻击者可能会发送API请求来探测集群,并获取有关集群中的容器,secrets和其他资源的信息。

访问Kubelet API

Kubelet是安装在每个节点上的Kubernetes代理。Kubelet负责正确执行分配给该节点的Pod。具有网络访问主机权限的攻击者(例如,通过攻陷容器上运行代码)可以请求访问通过Kubelet公开的只读API服务(TCP端口10255)访问Kubelet API。

通过访问[NODE IP]:10255/pods /检索节点上正在运行的Pod。

通过访问[NODE IP]:10255/spec/检索有关节点本身的信息,例如CPU和内存消耗。

网络映射

攻击者有可能尝试对集群网络探测以获取有关正在运行的应用程序的信息,包括扫描已知漏洞。默认情况下,在Kubernetes中对Pod通讯没有任何限制。因此,获得单个容器访问权限的攻击者可能会使用它来探测网络。

访问Kubernetes仪表板

Kubernetes仪表板是用于监视和管理Kubernetes集群的Web UI。仪表板允许用户使用其服务帐户(kubernetes-dashboard)在群集中执行操作,该权限由该服务帐户的绑定或群集绑定确定。获得对群集中容器的访问权限的攻击者可以使用其对仪表板容器的网络访问权限。因此,攻击者可能会使用仪表板的身份来检索有关群集中各种资源的信息。

实例化元数据API

云提供者提供了实例元数据服务,用于检索有关虚拟机的信息,例如网络配置,磁盘和SSH公钥。虚拟机通过不可路由的IP地址访问此服务,该IP地址只能从虚拟机内部访问。获得容器访问权限的攻击者可以查询元数据API服务,以获取有关基础节点的信息。例如,在AWS中,以下请求将检索实例的所有元数据信息:http:///metadata/instance?api-version=2019-06-01

8. 横向运动

横向运动策略攻击者在攻击目标环境中获取不同环境权限的技术。在容器化环境中,这包括从对一个容器的给定访问中获得对群集中各种资源的访问权,从容器中对基础节点的访问权或对云环境的访问权。

访问云资源

攻击者可能会从已经入侵的容器扩展到云环境。

容器服务帐户

获得对群集中容器的访问权限的攻击者可以使用已安装的服务帐户令牌请求访问API服务器,并获得对群集中其他资源的访问权限。

集群内部网络

Kubernetes网络允许集群中Pod之间的通信作为默认行为。获得单个容器访问权的攻击者可以使用该容器访问集群另一个容器。

配置文件中的应用程序凭据

例如,开发人员将secret存储在Kubernetes配置文件中,作为Pod配置中的环境变量。使用这些凭证的攻击者可以访问集群内外的其他资源。

可写卷在主机上挂载

攻击者可能试图从已被入侵的容器访问底层主机。

访问Kubernetes仪表板

可以访问Kubernetes仪表板的攻击者可以管理集群资源,还可以使用仪表板的内置“exec”功能在集群中的各种容器上运行他们的代码。

访问Tiller端点

Helm是CNCF为Kubernetes维护的一个流行的包管理器。Tiller是Helm到版本2的服务器端组件。

Tiller公开集群中的内部gRPC端点,监听端口44134。默认情况下,此端点不需要身份验证。攻击者可以在tiller的服务可以访问的任何容器上运行代码,并使用tiller的服务帐户在集群中执行操作,该帐户通常具有很高的特权。

9. 影响

影响策略包括攻击者用来破坏,滥用或破坏环境正常行为的技术。

数据破坏

攻击者可能试图破坏集群中的数据和资源。这包括删除部署、配置、存储和计算资源。

资源劫持

攻击者可能会滥用受损害的资源来运行任务。一种常见的滥用是使用受损害的资源来挖矿(数字货币挖掘)。能够访问集群中的容器或具有创建新容器的权限的攻击者可以将它们用于此类活动。

拒绝服务

攻击者可能试图执行拒绝服务攻击,从而使合法用户无法使用服务。在容器集群中,这包括试图阻止容器本身、底层节点或API服务器的可用性。

了解容器化环境的攻击策略是构建容器安全解决方案的第一步。上面介绍的矩阵可以帮助我们识别针对Kubernetes的不同威胁以及安全抵御水平,补全安全威胁短板和瓶颈,提高集群的安全性。

理解容器化环境的攻击面是为这些环境构建安全解决方案的第一步。上面介绍的矩阵可以帮助组织识别当前针对针对Kubernetes的不同威胁的防御覆盖率的缺口。Azure安全中心可以帮助您保护容器环境。了解更多关于Azure安全中心对容器安全的支持。

原文链接:Threat matrix for Kubernetes(翻译:张亚龙)

0 个评论

要回复文章请先登录注册