2018年黑客入侵了特斯拉在亚马逊上的Kubernetes容器集群。由于该集群控制台未设置密码保护,黑客便得以在一个Kubernetes pod中获取到访问凭证,然后据此访问其网络存储桶S3,通过S3获取到了一些敏感数据,比如遥测技术,并且还在特斯拉的Kubernetes pod中进行挖矿。该事件只是Kubernetes漏洞利用的一个典型案例。
近年来,以Kubernetes为代表的安全编排工具让企业实现了应用的自动化部署,给企业带来了巨大的业务收益。但是,和传统环境下一样,这些部署也很容易受到黑客和内鬼的攻击和利用,Kubernetes的安全也因此成为容器使用中重点保护对象。
在讨论Kubernetes安全之前,首先让我们来了解一下Kubernetes的工作流程。
一、 Kubernetes工作流程
Kubernetes是一个容器编排工具,可自动执行容器的部署、更新和监控。所有主要的容器管理和云平台(例如Red Hat OpenShift、Docker EE、Rancher、IBM Cloud、AWS EKS、Azure、SUSE CaaS和Google Cloud)都支持Kubernetes。以下是有关Kubernetes的一些关键知识:
主节点。主节点服务器管理着Kubernetes工作节点集群,并在工作节点上部署Pod。
从节点。也称为工作节点,通常运行应用容器和其他Kubernetes组件,例如agent。
Pod。Kubernetes中的部署和可寻址单位。每个pod都具有自己的IP地址,并且可以包含一个或多个容器(通常是一个)。
服务。服务充当底层Pod的代理,并且可以对不同的Pod进行负载均衡。
系统组件。用于管理Kubernetes集群的关键组件包括API服务器、Kubelet和etcd。这些组件都是潜在的攻击目标。上文所述的特斯拉事件就是攻击了没有密码保护的Kubernetes控制台来安装加密挖矿软件。
在Kubernetes网络连接中,每个Pod都有自己的可路由IP地址。Kubernetes的网络插件负责将主机之间的所有请求从内部路由到相应的Pod。可以通过服务、负载均衡或入口控制器来提供对Kubernetes pod的外部访问请求,Kubernetes会将其路由到适当的pod。
Pod通过这些叠加网络,也就是“包内之包”相互通信,并进行负载均衡和DNAT来与相应的Pod进行连接。可以使用适当的报头对数据包进行封装,将它们发送到相应的目的地,然后在目的地解除封装。
Kubernetes会动态处理所有这些叠加网络,因此,监控网络流量非常困难,确保网络安全更是难上加难。
对Pod中运行的容器进行攻击,既可以通过网络从外部进行,也可以由内鬼在内部进行,例如,黑客通过网络钓鱼攻击,让受害者的系统成为内部攻击的跳板。针对Kubernetes的漏洞和攻击向量包括:
1. 容器失陷。若存在应用配置错误或漏洞,攻击者就能够进入容器中,探测网络、进程控件或文件系统中的弱点。
2. Pod之间未经授权的连接。失陷容器可能会与同一主机或其他主机上的其他正在运行的Pod进行连接,以进行探测或发动攻击。尽管第3层网络控件可以将Pod IP地址列入白名单,提供了一些保护,但是只有通过第7层网络过滤才能检测到对受信任IP地址的攻击。
3. Pod的数据渗透。数据窃取通常是使用多种技术组合来完成的,包括在pod中进行反弹shell连接,连接到CC服务器和网络隧道,从而隐藏机密数据。
二、实时增强Kubernetes的运行时安全
在容器投入生产运行后,保护Kubernetes安全最重要的三个安全向量分别是:主机安全、容器检查和网络过滤。
主机安全
如果容器运行所在的主机(例如Kubernetes工作节点)遭到入侵,则可能会导致:
通过提权,实现root用户权限
窃取用于访问安全应用或基础结构的秘钥
更改集群管理员权限
主机资源损坏或劫持(例如挖矿软件)
影响关键编排工具基础架构,例如API Server或Docker守护程序
像容器一样,需要对主机系统的可疑活动进行监控。因为容器可以像主机一样运行操作系统和应用,所以,需要像监视容器进程和文件系统活动一样监控主机。总之,综合进行网络检查、容器检查和主机安全,形成了从多个向量来检测Kubernetes攻击的最佳方法。
容器检查
攻击经常利用提权和恶意进程来实施或传播攻击。Linux内核(如Dirty Cow)、软件包、库或应用程序本身的漏洞利用,都可能导致容器被攻击。
检查容器进程和文件系统活动并检测可疑行为是确保容器安全的一个关键要素。应该检测所有可疑进程,例如端口扫描和反向连接或提权。内置检测和基线行为学习过程应结合在一起,可以根据以前的活动识别异常进程。
如果容器化应用是根据微服务原则设计的,容器中的每个应用功能有限,并且是使用所需的软件包和库来构建的,那么,检测可疑进程和文件系统活动将更加容易和准确。
网络过滤
容器防火墙是一种新类型的网络安全产品,可以将传统的网络安全技术应用到新的云原生Kubernetes环境中。有不同的方式可以确保容器网络的安全:
基于IP地址和端口的3/4层过滤。该方法需要制定Kubernetes网络策略,以动态方式更新规则,在容器部署发生变更和扩容时提供保护。简单的网络隔离规则并不能提供关键业务容器部署所需的强大监控、日志记录和威胁检测功能,仅提供针对未授权连接的某种保护。
Web应用程序防火墙(WAF)攻击检测可以使用检测常见攻击的方法来保护面向Web的容器(通常是基于HTTP的应用)。但是,这种保护仅限于通过HTTP进行的外部攻击,而且还缺少内部流量通常所需的多协议过滤。
第7层容器防火墙。具有第7层过滤功能和pod间流量深度数据包检查功能的容器防火墙可使用网络应用协议保护容器。这是基于应用程序协议白名单以及对基于网络的常见应用程序攻击(例如DDoS、DNS和SQL注入)的内置检测。容器防火墙还有一个独特功能,可以将容器进程监控和主机安全纳入监控的威胁向量中。
深度数据包检测(DPI)技术对于容器防火墙中的深度网络安全至关重要。漏洞利用通常使用可预测的攻击向量:恶意HTTP请求,或在XML对象中包含可执行shell命令。基于第7层DPI的检测可以识别这些方法。使用这些技术的容器防火墙可以确定是否应允许每个Pod连接通过,或者确定是否是应该拦截的潜在攻击。
考虑到容器和Kubernetes联网模型的动态性,传统的用于网络可见性、取证分析的工具可能就不再适用了。简单的任务(例如进行数据包捕获,用于调试应用或调查安全事件)也不再那么简单。需要新的Kubernetes和容器感知工具来执行网络安全、检查和取证任务。
确保Kubernetes系统与资源的安全
如果不对Kubernetes进行安全保护,Kubernetes以及基于Kubernetes的管理平台可能很容易受到攻击。这些漏洞暴露了容器部署的新攻击面,很可能被黑客利用。为了保护Kubernetes和管理平台自身不受攻击,需要做的一个基本步骤就是正确配置RBAC,确保用户获得适当的系统资源。同时,还需要审查和配置以下方面的访问控制权限。
保护API服务器。为API服务器配置RBAC或手动创建防火墙规则,防止未经授权的访问。
限制Kubelet权限。为Kubelet配置RBAC,并管理证书轮换以保护Kubelet。
要求对所有外部端口进行身份验证。查看所有可从外部访问的端口,并删除不必要的端口。需要对所需的外部端口进行身份验证。对于未经身份验证的服务,则仅限白名单访问。
限制或删除控制台访问。除非通过正确配置,可以让用户通过强密码或双因素身份认证进行登录,否则不允许访问控制台/代理。
如前所述,结合功能强大的主机安全,锁定工作节点,可以保护Kubernetes部署基本架构免受攻击。但是,还建议使用监控工具来跟踪对基础结构服务的访问,检测未经授权的连接和潜在攻击。
我们仍然以特斯拉Kubernetes控制台漏洞利用为例。在黑客攻陷了工作节点后,就会建立一个外部连接,控制加密货币挖矿软件。对容器、主机、网络和系统资源进行基于策略的实时监控,可以检测到可疑进程以及未经授权的外部连接。
三、写在最后
近年来,越来越多的企业开始加速业务上云的步伐,采用容器化方法将应用迁移到云端。由于 Kubernetes 能够在一组机器上运行和协调容器化服务,因此,在企业的容器化过程中发挥了重要作用。虽然Kubernetes自身提供了RBAC(基于角色的访问控制)策略和基础架构安全功能,但其本身并不是安全工具。在通过Kubernetes进行关键业务部署时,需要考虑的一项优先功能就是安全。本文从网络、容器和主机三个方面介绍了Kubernetes的一些重要安全措施,以免发生特斯拉类似的安全事件。
()
二维码
分享
最新评论