阅读: 25
一、概述
近日,绿盟科技星云实验室与北京豪密科技有限公司联合推出了一项云攻防技术培训课程。该课程旨在根据客户需求,为客户提供专题培训,帮助客户熟悉常见的云安全架构,并提供云攻防技术理解,同时结合模拟攻击实验提升攻防能力。该课程参与学员涵盖了特殊行业的单位、国企等十多家单位。课程共分为六个章节,分别就云计算基础、云上攻击面、云上资产发现与信息收集、云服务层攻防、云原生安全攻防以及虚拟化安全攻防进行了详细介绍。
本系列文章旨在以科普为目的面向各位读者推出,本文是该系列的第五篇云原生攻防课程。涵盖了云原生以及云原生安全定义、容器及编排系统典型安全风险、靶场实验实操三个部分。
文章首先从云原生定义入手,了解什么是云原生环境,以及对云原生安全的理解。然后,从容器安全风险和编排系统风险两个方面讲述了容器环境的典型的安全风险,总结出云原生环境的典型的攻击路径。最后,通过实验以实战化的方式进行云原生攻防。
二、云原生安全
2.1 云原生
云原生指构建和运行应用以充分利用通过云交付模式交付的分布式计算。云原生应用旨在充分利用云平台特有的可扩展性、弹性和灵活性优势。根据云原生计算基金会 (CNCF) [1]的定义,云原生技术可帮助企业在公有云、私有云和混合云上构建和运行可扩展的应用。云原生方法的典型特性包括容器、服务网络、微服务、不可变基础设施以及声明式API等等。借助这些特性,企业可以获得松散耦合的弹性、可管理、可观测的系统,工程师也能尽可能减轻工作负担,高频实施重大变更。
为了满足现代复杂应用的要求以及用户对持续创新的期望,企业的业务系统必须具有更高的战略性和灵活性。对此,云原生不仅能确保业务系统快速运行,还能提供杰出的敏捷性。
云原生服务可使用 Kubernetes、Docker、无服务器函数、API 网关,服务网格等技术助力现代应用开发。通过使用来自云提供商的云工具和云服务,开发人员可以减轻运营工作负担,更快地构建应用。简而言之,云原生服务可以提供一个全面、基于标准的平台,帮助开发人员更好地构建、部署和管理云原生应用。
CNCF目前有许多云原生项目[2],如图1所示。这些项目涵盖了云计算的各个方面,使得云原生成为一种全面地在云上构建和部署应用程序的方法。从容器化、编排到服务网格、可观察性,CNCF的云原生技术提供了一个综合工具包,帮助开发人员构建和维护弹性和可扩展的云原生应用程序。云原生技术的普及使得组织能够在云端运营中实现更高的敏捷性、灵活性和效率,从而使他们能够更快地创新并以更快的速度向客户交付价值。因此,云原生运动已经成为现代软件开发的基石,为构建、部署和管理可移植、可扩展和弹性的云原生应用程序提供了标准化的方式。
图1.CNCF 云原生项目
2.2 云原生安全
随着云原生技术的广泛应用,云原生安全已经成为一个越来越重要的话题。云原生安全的本质是保护云原生环境基础设施、编排系统和微服务的安全。我们认为,云原生安全具有两种含义:一种是指不一定具备云安全特性,但是能够保护云原生环境;另一种是指具有云原生弹性敏捷、轻量级、可编排特性的安全机制。
在第一层含义里,主机安全配置、仓库与镜像安全、行为检测和边界安全等都是很好的例子。这些安全机制并不一定是专门针对云环境设计的,但是它们能够提供保护云原生环境所需的安全措施。例如,在云原生环境中,容器通常是托管在虚拟机上的,因此主机安全配置非常重要,可以确保虚拟机及其上运行的容器免受攻击。同样地,仓库与镜像安全可以确保容器镜像不受到篡改或恶意注入代码的风险。行为检测和边界安全则可以帮助监视网络流量和识别异常行为。这些安全机制可以从多个维度进行保护云原生环境,并防止潜在的攻击和威胁。
在第二层含义里,云原生安全具有云原生特性,即弹性敏捷、轻量级和可编排。例如,在云原生环境中,基于安全容器的防御可以为容器提供隔离和保护,并且能够根据需要动态扩展或缩小容器数量。另外,云原生化的WAF、IDS等可以根据应用程序的需求进行自适应调整,从而实现更高效的安全防护。这些安全机制不仅具有传统安全机制的功能,还具有云原生环境所需的灵活性和可扩展性。它们可以通过自动化和编排来管理安全策略,并根据需要对云原生环境进行快速响应和调整。
同时,我们还需注意到云原生安全有一个更深层次的含义,即融合的安全。随着云原生技术的发展,应用程序和服务已经从单一的部署环境转变为分布式的多云环境。这意味着应用程序和服务必须能够在各种不同的云平台上无缝运行,而且需要使用相同的安全策略和机制进行保护。因此,在实现云原生安全时,我们还需要考虑如何将不同的安全机制和策略整合到一个统一的安全框架中,并确保它们能够在多云环境下无缝协同工作。这需要我们采取标准化的方法来描述和管理安全策略,以及使用API和自动化工具来支持统一的安全管理。
总之,云原生安全是一个复杂的问题,需要我们充分认识到它的重要性,并采取多层次的安全策略来保护云原生环境的安全。这不仅包括传统的安全机制,还包括具有云原生特性的创新型安全机制。同时,我们还需要考虑如何将不同的安全机制和策略整合到一个统一的安全框架中,并确保它们能够在多云环境下无缝协同工作,从而实现融合的安全。只有这样,我们才能真正享受云原生技术所带来的各种红利,从而推动业务的快速发展和创新。
在讨论云原生安全的过程中,我们梳理了图2的云原生基础设施安全风险图。通过这个图,我们可以更好地了解云原生环境所面临的各种安全风险和威胁,并针对性地制定相应的安全策略和措施。例如,我们可以采取容器安全扫描工具、镜像签名和加密、编排系统日志审计、微服务间的身份验证等安全措施来保护云原生环境的安全。同时,我们还需要重视多云环境下的安全问题,并采取跨云边界的安全措施和数据隔离措施来确保云原生环境的整体安全性。
图2 云原生基础设施安全风险
三、容器及编排系统风险分析
容器及编排系统风险分析是云原生安全的重要组成部分。容器技术作为云原生环境中的核心技术之一,已经得到了广泛的应用和推广。随着容器技术的发展,也出现了各种与容器相关的安全风险和威胁。在本章节中,我们将重点介绍容器和编排系统安全的相关风险和威胁,并提供相应的解决方案。
3.1 容器安全
随着容器技术的广泛应用,容器安全成为了一个备受关注的话题。容器环境中存在一些典型的安全风险,需要采取相应的措施来保护容器环境的安全性。
首先,容器镜像的安全风险是一个非常重要的问题。容器镜像是指包含应用程序和依赖项的可移植的软件包,它们可以在不同的平台上运行。由于容器镜像通常会包含大量的依赖项和第三方组件,因此容器镜像的安全性可能受到影响。例如,某些容器镜像可能存在漏洞或恶意代码,这可能导致容器逃逸和其他安全问题。针对这个问题,我们需要采取一系列的安全措施来保护容器镜像的安全性。例如,使用安全扫描工具来扫描容器镜像中的漏洞和弱点,使用数字签名来验证容器镜像的来源和完整性,以及使用容器镜像签名和加密来保护容器镜像的安全。
其次,容器逃逸是另一个重要的安全风险。容器逃逸指的是攻击者利用容器环境中的弱点和漏洞,从而实现对整个宿主机系统的攻击和控制。例如,通过应用程序漏洞、高危挂载、内核漏洞和高危配置等方式,攻击者可以获取到宿主机系统的特权访问权限,破坏整个系统的安全。为了预防容器逃逸,我们需要采取一系列的安全措施,例如使用最小化的容器镜像来减少攻击面,使用隔离技术(如Cgroups和Namespaces)来限制容器的资源访问,以及使用容器安全检测工具来检测和识别容器逃逸行为。
第三,容器内资源耗尽攻击也是一个常见的安全威胁。攻击者可以利用容器内的应用程序不断占用CPU、内存和磁盘等资源,从而造成拒绝服务攻击,并影响容器集群的稳定性。
最后,访问控制和认证是容器安全中的另一个焦点。缺乏有效的访问控制和认证机制可能会导致攻击者获取容器环境中敏感数据或执行恶意操作。
3.2 编排系统安全
编排平台是一种用于管理容器化应用程序的工具,其中最流行的编排平台之一是Kubernetes(通常简称为k8s”)。容器技术的出现带来了许多优势,例如轻量、快速、可移植等,但同时也带来了新的挑战,例如如何管理大规模的容器集群和提供稳定的服务。这就是编排平台的用武之地,通过提供强大的自动化功能,可以有效地解决这些挑战。编排平台和容器技术的结合,使得应用程序可以更加快速、轻量化的创建、部署和运行。然而,使用编排平台也会带来一些安全挑战和威胁。因此,对编排平台进行风险评估,并采取相应的安全措施,是确保容器平台稳定和安全的关键步骤之一。 以下是编排系统的典型安全风险:
- 认证和授权漏洞:在编排系统中,认证和授权是关键的安全机制。一旦出现漏洞,攻击者可能能够绕过这些机制,并访问敏感的数据和资源。
- 容器镜像漏洞:容器镜像是从外部获取的,其中可能包含有漏洞或恶意软件。如果不经过验证或审查就将其部署到编排系统中,攻击者可以利用这些漏洞或恶意软件进行攻击。
- 网络隔离不足:容器需要共享主机资源,因此网络隔离是非常重要的。如果没有适当地隔离和限制,攻击者可以跨容器攻击其他容器或主机上的应用程序,并造成严重的安全问题。
- 暴露的API接口:编排系统提供了API接口,通过它们可以对系统进行自动化部署、监控和管理。如果API接口没有适当的安全保护,攻击者可以通过这些接口执行恶意操作。
- 容器运行时漏洞:容器运行时是容器的核心组件,如果存在漏洞,攻击者可以利用它们来执行拒绝服务攻击或远程代码执行等攻击。
- 中间人攻击:攻击者可能会利用编排系统内部通信的缺陷,在通信链路上进行窃听、篡改或重放攻击,从而获取敏感数据或操纵容器集群。
为了防止这些典型的安全风险,我们需要采取一系列的安全措施,例如加强认证和授权机制、对容器镜像进行验证和审查、实现网络隔离、加密通信和使用漏洞扫描和修复工具等。此外,安全意识培训也是非常重要的,帮助企业员工了解安全威胁,避免在日常工作中犯安全错误。
总之,容器及编排系统风险分析是云原生安全的重要组成部分。在实际业务场景中,我们需要认真分析和评估容器及编排系统的安全风险,并采取相应的安全措施来保护云原生环境的整体安全性。针对不同的安全风险和威胁,我们需要采取不同的安全措施和工具,以确保云原生环境的稳健和可靠。
四、实验
本次课程同时提供了实验部分,实战化的方式模拟云原生环境的攻防技术。
图3 云原生环境渗透路线
本实验模拟了一种针对云原生环境的渗透攻击路线如图3所示,通过漏洞利用和特权提升等手段获取系统权限,并实现集群横向移动和隐蔽持久化。
首先,攻击者从web渗透开始,进入到容器环境内部,进行容器环境信息收集和可能的攻击面分析。信息收集的内容如图4所示。这个过程中,攻击者需要充分了解容器技术和编排系统的运行机制,找到潜在的安全漏洞和攻击点。
图4:容器内部信息收集
其次,攻击者利用容器漏洞CVE-2019-5736实现容器逃逸,进而获取主机的特权权限。通过特权提升可以绕过容器的隔离机制,访问主机上的其他容器或敏感数据,从而造成更严重的安全问题。
接着,攻击者通过逃逸获取到宿主机上所有容器的SA,利用具有特权的SA,实现集群横向移动控制集群。这个过程中,攻击者可以利用容器网络的缺陷或其他漏洞,寻找其他容器和节点,进而实现横向扩散和控制。攻击者可以通过控制大量的节点和容器,实现对整个集群的控制。
最后,攻击者利用shadow api server以及K0otkit[3]等工具实现权限的驻留和隐蔽的持久化。这个过程中,攻击者可以通过隐藏自己的行踪和数据,避免被检测和发现。这些工具可以帮助攻击者在容器环境内部驻留长达数月之久,从而持续地获取敏感信息和权限。
五、总结
本文作者根据课程内容,首先简要介绍了云原生技术,以及云原生安全的两个层次,介绍了云原生基础设施安全风险图。其次,介绍了容器及编排系统风险分析的典型的安全风险以及该如何去处理对应的风险。最后通过云原生渗透线路,在实验环境实战化模拟了云原生的攻击路径,实现从web渗透、信息收集、容器逃逸、横向提权控制集群、驻留持久化的整个攻击流程。
最后笔者推荐由星云实验室牵头对外发布的一些参考资料,希望可以给各位读者带来帮助。
图5. 推荐阅读
参考文献
- https://www.cncf.io/
- https://landscape.cncf.io/
- https://github.com/Metarget/k0otkit
上述情形之外的任何使用形式,均需提前向绿盟科技(010-68438880-5462)申请版权授权。如擅自使用,绿盟科技保留追责权利。同时,如因擅自使用博客内容引发法律纠纷,由使用者自行承担全部法律责任,与绿盟科技无关。