【如何对云原生进行全面的安全保护】
云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。云原生(CloudNative)是一个合成词,即“Cloud”+“Native”。“Cloud”表示应用程序位于云端,而不是传统的数据中心。“Native”表示应用程序从设计之初就需要考虑到云的环境,原生为云而设计,以最合适的方式在云端运行,充分发挥云平台的高可用性、可扩展性、按需服务等各类优势。

关于云原生的特征则是仁者见仁智者见智,Pivotal公司的Matt Stine在首次提出概念时,则定义了5类特征,分别是:12因素、微服务、自敏捷架构、基于API协作、抗脆弱性。到2017年则将云原生架构归纳为模块化、可观察、可部署、可测试、可替换、可处理等6类特征。而Pivotal最新官网则对云原生概括为4个方面,分别是:DevOps、持续交付、微服务和容器。另外,在2015年CNCF刚成立时,最初把云原生定义为包括容器化封装、自动化管理和面向微服务三块内容。在2018年,CNCF重新更新了云原生的定义,把服务网格和声明式API以及不可变基础设施增加了进来。

可见,不同的人和组织对云原生的定义是不同的,因为在不同的发展时期我们面对的环境是不一样的。总而言之,符合云原生架构的应用程序应该是:采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。

然而,经过几年的发展,云原生技术逐渐成熟并在不同行业中成功落地应用,为企业带来了快速部署、提高敏捷性以及产品功能快速实现等诸多优势的同时并帮助企业全面提高了自身的行业竞争力。与此同时也带来了许多不同类型的风险,但是如何有效保护云资源、应对合规性、保护云原生应用程序、保护云网络等诸多安全问题依然没有很好的解决方法。

本文也将尝试从云原生架构问题分析、云原生的层级结构以及Palo Alto云原生解决方案三个方面进行分析,希望为企业在云原生安全建设方面提供一些帮助。

云原生问题分析

在云原生时代下,其所面临的安全问题将更加复杂,除了需要考虑传统的基于边界的一系列安全问题之外,还应更多的关注快速开发与部署的问题,通过从基于边界的方法迁移到安全性更接近于属性和元数据(例如标签)确定的动态工作负载的方法来保护应用程序,以此来满足云原生应用程序的规模和不断变化的需求。

云原生应用程序生命周期的构建分为开发、发布、部署和运行四个阶段,同时也需要使用新的模式要求和新的安全机制来有效地实现这些目标。它的安全性与传统安全方法的不同之处在于,它有巨大的机会可以在不同阶段注入不同的安全能力(例如采用零信任安全架构设计、开发流程中集成各类安全检查措施等),来全面保障云原生应用程序的整体安全性,而不是用单独的安全措施对整个生命周期的安全进行干预,从而产生适得其反的效果。

云原生的层级结构

云原生技术栈由基础,生命周期和环境各层组成(如图一所示),可以使用包括IaaS、PaaS、CaaS以及FaaS在内的不同部署模型。每个部署模型都提供了完整的抽象,从而简化了云原生环境的管理和操作。由于IaaS和PaaS是被广泛接受的模型,并被使用了多年。因此本文将聚焦于CaaS和FaaS特定云原生模型。

容器即服务(CaaS)模型允许用户通过利用基于容器的虚拟化平台,应用程序编程接口(API)或Web门户管理接口来编排和管理容器、应用程序和集群。CaaS可以帮助用户构建具有嵌入式安全策略的可扩展容器化应用程序。作为代码并在私有云、本地数据中心或公共云上运行它们。CaaS可以帮助简化容器的构建过程,通过微服务编排和部署,它可以帮助企业更快地发布软件,并允许在混合环境和多云环境之间进行可移植性,从而降低基础架构和运营成本,使他们可以选择仅支付所需和使用的CaaS资源。CaaS将容器作为其基础资源,而对于IaaS环境,则将虚拟机和裸金属作为基础资源。

功能即服务(FaaS)是另一种云原生部署模型,这是另一种云原生部署模型,它使企业用户可以响应事件执行代码,通常无需构建和启动微服务相关的复杂基础架构。在云上运行的应用程序通常提供了虚拟化环境、管理操作系统和相关的Web组件。使用FaaS之后,物理硬件,虚拟机操作系统和Web服务器软件管理都由云服务提供商自动管理。因此,用户只需专注于微服务代码中的各个功能,充分享受云端优势能力的同时仅需为使用的资源付费即可。
image.png
图一:云原生技术栈

云原生环境下的生命周期是指在云环境的基础上,帮助企业实现有弹性、可管理、可观测的工作负载的技术、实践和流程。生命周期由开发、发布、部署和运行四个连续的阶段组成,每个阶段都对前一个阶段进行了扩展和详述,同时允许并支持安全的工作负载执行。而对于整个生命周期的安全实施来说,供应链管理和安全基线是非常重要的一个环节。

从供应链的角度来看,企业有责任确保其正在开发的工作负载的供应链在生命周期过程中受到可操作的安全性分析。供应链安全可以分为两部分。

提供创建工作负载环境的工具和服务的安全性(例如开发人员工具);
组成工作负载本身的组件的安全性(例如库,依赖项和镜像);

供应链的实施方式应可验证供应链本身的完整性,因此可以对软件供应链产生的部件(制品)进行签名以验证来源。因此,企业在使用依赖项时必须谨慎,因为上游依赖程序包将不可避免地包含安全漏洞。

从安全基线的角度来看,利用安全基线(例如NIST应用程序安全容器指南、CIS、NIST微服务安全策略和OpenSCAP)可为开发团队和组织提供创建“默认安全”工作负载的指南。 然而各类基线只是提供了一个指南,但是需要结合实际情况进行参考(例如需要结合平台、业务环境、访问数据流的差异性),并非是一个通用的检查列表。

以下也将从开发、发布、部署和运行四个方面进行简单地介绍。

开发阶段

云原生应用程序的安全并不会体现在某一个阶段,而是需要在整个生命周期中都进行体现。但是开发是第一个阶段,这个阶段将会创建工件(制品),包含IaC(基础设施即代码)、应用和容器清单等内容,这些内容会被应用到云原生的部署和配置中去。如果安全管理不善,这些被创建的工件(制品)可能会成为多种攻击的来源。因此,需要通过多种方式对其进行安全的检查,以减少可能存在的攻击面。
image.png
图二:开发过程中的相关安全措施

开发中的安全检查

DevOps团队还必须利用专门的构建工具在部署这些应用程序之前识别安全性错误配置和漏洞。同样重要的是,这些工具可以无缝集成到DevOps团队利用的现有和熟悉的工具中,从而使敏捷性与安全性相辅相成,而不是阻碍安全性。例如,工具需要在开发人员IDE内或发出“拉取请求”时,对基础设施即代码模板以及应用程序清单的形式执行基础结构的扫描,并提供丰富的上下文安全性信息,以便在快速,轻松和早期就在开发中采取行动。

开发中的测试

开发、操作和安全人员应针对关键业务,具有高威胁特征,易受频繁更改或具有错误历史记录的代码和基础结构构建测试内容。威胁建模可以识别高风险和高影响力的代码热点,这些热点可为开发测试提供高投资回报。测试可能包括部署,操作系统,基础架构和数据库强化,应用程序测试(静态和动态源代码测试,容器配置),集成或系统测试(应用程序和基础架构组件及其交互接收)以及冒烟测试(部署后实时检查系统)。测试者应有权使用全面的开发和测试环境,以使其能够执行快速的测试开发,同时减少持续集成(CI)反馈循环次数。

代码复查

对工作负载或基础设施的微小更改可能会产生深远的安全后果。为了减轻风险,鼓励团队在进行代码审查时使用“四眼”原则,然后再将先前的更改合并到代码库中。

发布阶段

发布阶段会使用镜像定义和规范来构建后续工件(制品)的步骤,例如容器镜像、虚拟机镜像等。在现代持续集成和持续部署的范例中,发布阶段中包含了系统性的应用程序测试,以此识别软件中的Bug和故障。但是采用开源代码和可重复使用的软件包会导致将安全漏洞和恶意软件合并到容器镜像中。为了进一步保障整体安全性,需要对其进行扫描,并验证完整性,防止篡改的发生。
image.png
图三:发布过程中的相关安全措施

构建流水线

在不同安全级别和敏感的项目中,应对持续集成服务器进行隔离和保护。需要提权的基础设施应在专用的持续构建服务上运行。编排工具应该为流水线创建和执行构建相应的策略。供应链工具可以对流水线的元数据进行搜集和签名。后续阶段能够对签名进行检查,并借此确定前面的阶段已经运行完成。

镜像扫描

扫描容器镜像是生命周期中一个重要的步骤。在将镜像部署到生产环境之前,在持续集成管道中非常必要。具备了这一功能之后,开发、运维和安全人员就能够获取所有已知漏洞的详细信息,例如严重性、CVSS 评级以及对应的补救和修复措施。将容器漏洞扫描与流水线管道的合规性规则相结合,可确保只有打过合适补丁的应用能够部署到生产环境中,从而减少了潜在的攻击面。容器扫描还有助于识别开源软件包和基础镜像中可能存在的恶意软件。

镜像加固

容器镜像完成了构建管道流水线的第一次输出。因此,还需要对它们进行进一步的加固,加固过程既要考虑如何缓解威胁,还要为整个环境下的应用程序运行提供有效的配置能力。

容器应用程序清单扫描

应用程序清单描述了部署容器化应用程序所需的配置。如基线部分所述,NIST 800-190建议了应用程序容器配置的最佳实践。因此,可以利用相关工具在CI/CD中进行相关的扫描。

容器应用程序清单加固

与容器镜像类似,可以在构建以及运行时考虑并实施容器应用程序清单的加固,例如需要遵循哪些最小权限等内容。

测试

云原生应用程序应与传统应用程序应受相同的测试套件和统一质量测试标准。这些概念包括干净代码,测试金字塔,通过静态应用程序安全测试(SAST)进行应用程序安全扫描、依赖关系分析和扫描、动态应用程序安全性测试。开发人员可以在本地工作流程中使用测试的基础架构,以向安全和合规团队提供实时安全保证。

制品和镜像

Ø 组织通常从公共仓库总获取开源组件资源,因此需要在开发流水线中创建满足不同开发阶段的仓库。访问仓库中的资源需要被认证和授权,从而保证获取公共资源的安全性。不管是什么仓库,都必须设计专门的认证和权限模型来实施访问控制。并且所有连接都应使用双向TLS协议。
Ø 在构建时对镜像内容进行数字签名,并在使用前对签名数据进行验证,以防止镜像数据在构建和运行时被篡改,从而确保工件的完整性和出处。
Ø 对镜像内容进行加密,不管在哪个阶段都可以保证整个镜像内容是具备机密性的。如果发布过程中受损,其内容仍然具备保密性。

部署阶段

部署阶段负责合并一系列“上线前”检查,以确保要在运行时环境中部署的应用程序符合并遵守组织范围的安全性和合规性策略。
image.png
图四:部署过程中的相关安全措施

部署前检查

在部署之前,组织应该对存在的问题进行检查:
Ø 镜像签名和完整性;
Ø 镜像运行时策略(确保没有恶意软件或严重漏洞);
Ø 容器运行时策略(确保没有过多的特权);
Ø 主机漏洞和合规性控制;
Ø 工作负载、应用程序和网络安全策略;

观测和指标

把观测和指标引入云原生架构体系,能够提高在安全方面的洞察力,有助于解决和缓解异常情况。这个领域的工具需要能够收集信息并进行可视化展示。如果使用行为和启发式分析能力,团队能够检测到异常事件、异常调用等行为的发生并上报。在这个阶段中也鼓励使用AI、机器学习以及统计模型等新的技术和方法。

响应和调查

应用程序应提供有关身份验证,授权,操作和失败的日志。开发人员应将此功能作为计划和设计阶段的一部分。当进行调查并需要确定根本原因时,这些内容会提供非常大的帮助。取证能力是任何事件响应和缓解活动的组成部分。它们提供了确定事件根本原因的证据,并为要采取的任何缓解措施提供了反馈。容器环境的短暂性要求使用更敏捷的工具集来捕获和分析任何证据。将取证能力整合到事件响应计划和程序中,将提供获取和处理证据的方法,减少确定根本原因的时间,并最大程度地降低损失的风险。

运行阶段

运行时阶段包括三个关键领域:计算、存储和访问。虽然运行时环境取决于开发、发布和部署阶段的成功完成,但是运行时的安全性取决于先前各阶段的安全实践的有效性。以下将简单介绍了每个关键组件的安全要求及其含义。
image.png
图五:运行中的相关安全要求

计算

云原生计算是一个高度复杂且不断发展的结构。没有核心组件来提高计算利用率,组织将无法确保工作负载的安全。考虑到容器为共享主机上的多租户应用程序提供了基于软件的虚拟化,因此使用特定于容器的操作系统非常重要,该操作系统是禁用了其他服务的只读操作系统。这有助于减少攻击面,同时还提供了隔离和资源限制,使开发人员能够在共享主机内核上运行隔离的应用程序。为了进行深入防御,还建议不要将对数据敏感的不同工作负载运行在同一操作系统内核上。
为了使安全性跨越容器平台和服务的所有层,可以使用基于受信任平台模块(TPM)或vTPM的信任硬件根。可以将植根于硬件的信任链扩展到操作系统内核及其组件,以对受信任的启动,系统镜像,容器运行时和容器镜像等进行加密验证。操作系统提供基本的系统组件,例如用于远程连接的加密库和用于进程启动,管理等的内核功能。这些组件可能会存在漏洞,并且由于它们为容器提供了底层计算基线,因此它们可能会影响所有的容器和应用程序。在这些主机上运行。同时,配置不当的容器会影响主机内核的安全性,从而影响在该主机上运行的容器中运行的所有服务。
另外,关于计算领域的安全问题还包括了安全策略、资源请求与限制、审计日志与分析、控制平面认证和信任的根证书、安全加密、运行时保护、微服务和消除隐式信任、镜像信任和内容保护、服务网格、运行检测等多方面内容。具体内容可以查阅《CNCF_cloud-native-security-whitepaper-Nov2020》进行学习。

存储

云原生存储涉及到一系列广泛的技术,按照访问方式可以分为两类,一类是面向工作负载的存储(例如卷)包括块存储、文件系统等;另一类是通过 API 访问的存储,包括对象存储、键值存储和数据库。存储系统包含一个数据访问接口,该接口定义了应用程序或工作负载如何存储或使用由存储系统或服务保留的数据。可以通过访问控制、身份验证、授权以及传输过程中的潜在加密来保护此接口。存储系统还包含一个控制平面管理接口,该接口通常是受身份验证和TLS保护的API,尽管可能会提供更细粒度的访问。通常,编排工具或服务代理只能通过服务帐户访问控制界面。云原生安全在存储方面需要重点关注存储栈、存储加密、持久卷保护以及制品仓库等内容。

访问

在云原生访问层面需要关注于认证和访问管理、证书管理以及可用性相关问题。以下将分别从三个方面进行简单介绍。
Ø 认证和访问管理
针对云原生架构的全面身份和访问管理(IAM)解决方案至少需要身份认证服务能力。 维护或运行本地或混合云的组织需要用户和设备身份管理。 对于跨多云环境分布的应用程序和工作负载,身份联合对于成功实施至关重要。应用程序和工作负载应该明确的使用双向认证的方式进行授权。由于云计算的短暂性,密钥轮换和生命周期需要频繁且短暂,以维持敏捷和控制的需求,在凭证发生泄露时,其泄露半径也能得到有效控制。认证和授权必须在整个环境中独立确定(决定点)和执行(执行点)。同时应实时确认所有工作负载的安全操作,在可能的情况下验证更新的访问控制和文件权限,因为缓存可能允许未经授权的访问。基于工作负载的授权是根据属性和角色/权限分配给它们的。强烈建议组织同时使用基于属性的访问控制(ABAC)和基于角色的访问控制(RBAC),以便在所有环境中和整个工作负载生命周期中提供精细的授权执行。

Ø 证书管理
云原生安全管理人员应尽可能使用类似HSM的技术,以物理方式进行密钥保护。如果暂时满足不了HSM的要求,则可以使用基于软件的证书管理工具。另外,Secret 的有效期应尽可能地短暂,一旦超期则就失败。为了实现“短暂”地目标,应该确保密钥的生成机制是成熟和高效地。如果使用了长效的 Secret,则应建立相应的流程和指导,定期进行轮换或撤销,特别是在Secret意外泄露的情况下。所有秘密都必须通过安全的通信方式进行发布,并获得较高地安全保护水平。

Ø 可用性
在云原生应用环境中的拒绝服务攻击(DoS攻击)是一类网络攻击方式。攻击者可以通过破坏关键的云原生应用程序组件(例如微服务),破坏负责保持微服务运行的业务流程层或破坏负责扩展应用程序的运行状况监视系统来做到这一点。拒绝服务通常是通过向关键的微服务或资源中注入多余的请求使系统过载,并阻止某些或所有合法请求无法正常访问而实现。分布式拒绝服务攻击(DDoS攻击)通常涉及大量入站流量,这些流量将大量涌入云原生应用程序服务或它们所依赖的上游网络。通常,攻击来自许多不同的来源。通过在攻击到达云原生应用程序之前对其进行检测和转移,可以缓解此类攻击。

云原生安全落地实践

Palo Alto在2020年10月宣布推出业界唯一的综合云原生安全平台Prisma Cloud 2.0其可以在整个开发生命周期中以及跨混合云和多云环境中,为应用、数据和整个云原生技术堆栈提供广泛的安全性和合规性。Palo Alto云原生安全平台提供了全面的集成方法,使安全运营和DevOps团队能够有效协作,并加速安全云原生应用开发。Prisma Cloud保护云原生架构和工具包并与之集成,以确保完整的安全覆盖范围,同时在整个应用生命周期中消除安全运营孤岛。从根本上将,它支持DevSecOps的采用,并增强对云原生架构不断变化的安全需求的响应能力。
该平台以2019年11月推出的Prisma Cloud为基础,并对其收购厂商Aporeto在容器安全方面的能力进行了全面整合。
image.png
图六:Palo Alto CNSP平台功能概览

云安全态势管理

有效的云安全需要对部署的每个资源具有全面的可视性,还要对其配置和合规性状态有绝对的信息。Prisma Cloud对CSPM采用独特的方法,超越了单纯的合规性或配置管理。30个多个漏洞情报来源可以让企业对风险进行立即辨别,而整个开发渠道的控制可以在第一时间放置生成环境中出现不安全的配置。Prisma Cloud可以提供可视性、合规性和监管、威胁检测以及在AWS环境中支持数据安全的能力。

云工作负载保护

云原生的环境在不断地演变。新的平台和技术使企业能够比以往任何时候更快、更大规模地部署。Prisma Cloud跨公有云和私有云以及内部部署环境提供完整的生命周期防护。企业可以轻松地将安全性集成到领先的CI/CD工作流中、注册表和运行堆栈中。云工作负载保护安全模块包括主机安全、容器安全、无服务器安全以及Web应用级API安全。另外,Web应用程序和API安全性有助于保护Web应用程序免受第7层和主流OWASP威胁,并可与企业目前已用于云工作负载保护平台的统一代理架构集成。

云网络安全

网络保护必须适应云原生环境,同时仍要在混合环境中执行一致的策略。Prisma Cloud通过执行容器级别的未分段、流量检查以及利用高级的云原生第7层威胁防御来检测和预防网络异常。该功能主要是通过收购Aporeto容器安全厂商实现,基于身份的微分段集成了强大的云网络安全(CNS)功能,以提供网络通信的端到端可见性以及全面的安全策略控制和管理。

云基础架构权限管理

用于确定最低特权访问权限的传统手工方法是的安全团队很难应对云服务中不断增长的授权数量。Prisma Cloud跨基础架构即服务和平台即服务产品可持续检测并自动修复身份和访问风险。可以发现云环境中的所有人员和机器身份,然后分析权限、角色和策略。该功能模块可实现权限可视性、IAM监管、自动响应以及UEBA能力。

总结

Gartner曾在一篇报告中指出,到2020年将有50%的应用会从传统架构转向云原生架构。而到2022年将有75%的企业将在生产环境中全面实现云原生的容器化应用。然而在国内整体环境和背景下,发展数字经济的重要性已不言而喻。自2016年起,我国的数字经济占总体GDP的比重已经超过了40%,大部分企业纷纷已经开始自身的数字化转型之路。而在此过程中,云计算无疑是数字化转型的底座支撑,而云原生应用也将占据着数字化转型的核心地位并释放着及其重要的推动力量。由此可见,做好云原生安全建设工作不仅可以帮助企业构建更强大、更安全、更灵活的IT架构,同时也是企业应对产业互联网和数字化转型带来的安全新需求的重要技术理念和核心业务方法。

文章及相关材料已经上传至“市场知识库->论坛->市场洞察与战略情报->市场洞察”。
链接: