谷歌开发的Kubernetes(K8s)已经成为主流容器编排平台,K8s的主要目标是应对监管大规模容器的复杂性,其通过分布式节点集群管理微服务应用程序,支持扩展、回滚、零停机和自我修复。它可以在内部数据中心的裸机上运行,也可以在Azure、AWS等公有云或私有云平台上运行。
K8s安全是一项复杂的任务,其中一个非常具体和关键的方面是事件响应。如K8s集群遭受攻击时该如何做?组织内各团队如何协调以应对攻击?应急恢复的有效流程是怎样的,以及需要哪些必要的调查工具和数据?
事件响应是检测、管理并恢复网络安全事件的结构化过程,其最终目标是降低成本、最小化宕机时间,把附带损害(包括业务损失和品牌影响)降至最低。
为了实现高效的事件响应,必须让组织内各个部门的人员参与进来。除了IT和安全团队,包括客户支持、人力资源、法律、合规和高级管理人员。以下是事件响应工作的九项主要构成:
1. DevOps
响应K8s安全事件几乎总是需要部署、回滚、更改集群配置,或者部署策略中指定的这些组合。所有这些操作都是DevOps人员的权限。DevOps团队必须有一个明确的流程,用于识别哪个构建或配置更改导致了安全事件,以及如何恢复到已知的正常配置或使用修复程序前滚。
2. 软件开发
当发生安全事件时,通常意味着容器或应用程序中的漏洞正在K8s集群中运行,修复漏洞需要软件开发人员。事件响应者和开发者之间必须有明确的沟通渠道。开发人员需要确切知道安全问题在哪个组件中,以及在哪些代码行中。开发团队还必须将修复漏洞工作赋予优先处理流程,然后将其推向生产环境。这是强变化性管理项目的标准实践,最终目标是让事件的移交变得常规而直接。另外,在发生严重事件或确认入侵的情况下,制定非工作时间的支持制度也很重要。
3. 核心基础设施
根据组织的不同,核心基础设施可能由DevOps团队、软件可靠性和网站可靠性工程(SRE)人员或外部云提供商管理。事件响应者应该知道谁负责加固每个K8s部署的服务器和配置。如果在基础设施级别发现漏洞,应该有明确的流程来获得基础设施或云提供商安全团队的支持。
4. 建立事件响应策略
可以通过两个步骤为K8s环境制定事件响应策略:制定事件响应计划和准备容器取证。
5. 准备事件响应计划
为K8s环境准备一份事件响应计划至关重要。该计划至少应包含以下四个阶段,还可以根据需要进行扩展。
(1)识别
该步骤旨在跟踪安全事件,以识别和报告可疑的安全事件。K8s监控工具用于报告K8s节点和Pod中的活动。想要识别安全问题,如容器权限提升或恶意网络通信,要使用专用的K8s安全工具。
(2)协作
一旦安全分析师发现事件,他们应该将其上报给高级分析师,并让组织中的其他人参与进来。在上文中谈到的DevOps、开发和基础设施团队建立的流程将非常有用。应该有一个事先与高管达成一致的明确流程,用于分享漏洞的详细信息并得到优先修复。
(3)解决
即使DevOps和开发人员尽到了自己的责任,事件响应团队仍需担负解决事件的最终责任。他们必须验证修复效果,确保漏洞不再被利用,并清除系统中的入侵者和恶意软件。然后,由相应人员着手恢复生产系统,同时与安全团队合作,以确保漏洞的修复。
(4)持续改进
每一次安全事件都是学习和改进的机会。除了危机期间执行的紧急修复之外,事件响应者还应与技术团队会面,更为广泛的分享安全问题的经验教训。每一次事件都会改善K8s的集群配置,并识别出薄弱或缺失的安全控制。
6. 容器取证
一旦启动K8s环境所需的安全保护措施,事件响应计划应确保安全团队能够访问所有必要的信息,以便进行取证分析。
7. 日志
K8s的日志组成中,有一些全面安全调查至关重要的一些日志,如API服务器日志、单个节点上的kubelet日志、云基础设施日志、应用程序日志和操作系统日志等,特别要关注网络连接、用户登录、安全Shell会话和进程执行。
8. 节点的快照
对于任何部署,都必须执行一个简单、自动化的过程,对运行可疑恶意容器的节点进行快照。这样做可以隔离节点,或者移除受感染的容器以恢复环境的其余部分。
使用节点快照可以进行以下分析:
- 调查并扫描磁盘镜像是否存在恶意活动;
- 使用Docker Inspect和其他容器引擎工具调查容器级别的恶意活动;
- 详细查看操作系统活动,以确定攻击者是否设法突破容器以实现Root访问。
9. 容器可见性工具
建议DevOps安全分析师首先利用K8s和Docker中可用的工具,包括Docker statistics API,帮助他们收集系统指标。对于只需要知道系统在大规模运行时如何受容器负载影响的分析人员来说,系统指标非常有用。
容器可见性工具帮助DevOps了解容器和Pod内发生的事情。例如,它们可以帮助安全团队了解重要文件是否丢失或容器中是否添加了未知文件,监控实时网络通信,并识别容器或应用程序级别的异常行为。所有信息都要在无需容器登录凭证的情况下可用。