开展云原生应用保护能力建设,可以助力企业的云原生安全体系形成,增强云原生应用的内生安全能力,保障云原生应用的安全运行。
制品安全主要从代码安全、镜像安全、制品环境安全和安全检测四个层面进行安全能力构建。
1.1 代码安全
云原生安全的建设是与传统的安全建设是相交织的,云原生环境下,新增了许多传统安全无法覆盖的资源对象,以及在相同场景下但不适用云原生环境的安全能力。代码作为企业最核心的资产,其安全性在传统安全与云原生安全都极为重要,代码的风险主要来自于代码数据丢失、泄露,以及编码中引入风险漏洞。在代码安全方面,需重点考虑静态应用安全测试和软件成分分析两个方面。(1)静态应用安全测试 SAST 与人工代码审查相比,具有效率高、结果一致等优点,属于白盒测试的一种。利用 SAST 工具进行检测不需要运行测试的应用程序,而且理论上可以覆盖所有可能的程序路径,检测出来的漏洞多而全,但由于未对运行应用程序进行检测,因此 SAST 工具检测出的风险会存在一定程度的误报。
(2)软件成分分析SCA 针对第三方开源软件以及商业软件涉及的各种源码、模块、框架和库进行分析、清点和识别,通过分析开源软件的组件及其构成和依赖关系,识别出已知的安全漏洞,并提供相应的修复建议,能够有效的帮助开发人员修复安全问题,从而把这些风险排查在应用系统投产之前,对开源组件及风险进行统一管理。开源组件信息统一管理:在现今开源组件大量使用情况下,需对所有的开源组件库的信息进行统一管理,用于有效追踪、监视和管理应用程序中使用的各种开源组件。包括记录组件的版本、许可证等信息以及与组件相关的其他元数据。这有助于组织在应用程序中使用的开源组件的清晰性,以便更好地管理潜在的风险、合规性和漏洞修复。
开源组件的软件许可检测:软件许可的滥用可能会引发法律风险,需针对应用程序中使用的开源组件进行周期性或实时性的许可证分析和监测,以确保开源组件的许可证与应用程序的许可证要求和法律合规性相符。使得组织避免潜在的法律纠纷和合规性问题,同时维护开源组件的合法使用。开源组件中的风险检测:开源组件的风险包括安全漏洞、组件可信度、社区活跃程度、漏洞修复状态等。应建立有效的流程机制,对风险进行周期性的检测,及时了解和应对潜在的安全和可维护性风险,以确保系统的稳定性和安全性。
1.2 镜像安全
镜像基于特殊文件系统为要运行的容器提供所需的程序、库文件以及运行所需的配置参数等,由于自身特性,在构建完成后则不会被改变,我们称之为不可变的基础设施。由于镜像的组成囊括了容器运行所需的所有内容,所以一个镜像内可能包含软件、文件、环境变量等内容,这些内容引入的风险都可能会被攻击者利用。 (1)黄金基础镜像 在日常的安全运营工作中,也许会发现镜像内含有大量漏洞。这此些漏洞,大多来自于基础镜像内,如果基础镜像存在大量漏洞,在生成业务镜像后,漏洞数量将会成倍的增长。所以需建立黄金镜像仓库,维护需要用到的系统、中间件等基础镜像,周期性进行维护更新,在有效抑制风险暴漏的同时,也有利于镜像安全风险的治理。
(2)镜像风险检测 建立黄金镜像仓库,使用安全的基础镜像构建镜像,由于代码的相关依赖,依然会引入一定量的软件、文件等内容,所以需建立相关能力,对镜像可能存在的漏洞、软件成分、敏感信息(备份文件、SSH 密钥、敏感环境变量等)、木马病毒等风险进行审查,并建立卡点及修复流程机制,形成规范。(3)镜像来源检测 镜像来源检测,也称为可信镜像,是一项安全实践,旨在验证和确保容器镜像的来源可信度和完整性。通过使用数字签名、加密哈希等技术,可以验证镜像的真实性,确保它来自受信任的源,例如特定镜像、特定仓库、基于特定基础镜像等。以减少恶意或篡改的风险,从而提高容器化应用的安全性。
1.3 制品环境安全
制品环境主要指代码仓库、镜像仓库、CI/CD 环境等,作为业务的存储、分发以及流转机制,其自身一旦被攻击,造成的影响面远高于单个业务镜像、容器被攻击。应建立持续的、高效的安全能力,增强制品环境的健壮度。
(1)代码加密存储与传输 通过在存储代码的仓库中应用加密技术,保护代码存储的机密性。这意味着只有经过授权的用户或系统能够解密和访问存储在仓库中的代码,提供了额外的安全层,防止未经授权的访问和数据泄露,同时还应建立多地容灾等手段,保证代码数据的安全性。在用户上传和读取代码数据时,应采用加密协议等进行数据传输,保障数据在传输过程中的安全。 (2)代码仓库安全 代码仓库中存储的源代码和相关开发资产的完整性、机密性和可用性极为重要。用户需强化身份验证和授权管理,通过监控和审计实现对访问的严格控制,并定期进行漏洞扫描发现并纠正潜在的安全漏洞,同时通过强密码和多因素身份验证等手段增强用户身份验证的安全性。此外,需要形成定期备份和灾难恢复流程机制。
(3)镜像仓库安全 镜像仓库的安全与代码仓库大致相同。这包括强化身份验证和访问控制,确保只有授权的用户可以上传和下载镜像,并使用加密、签名技术保护数据在传输和存储过程中的机密性和完整性,防止未经授权的访问、数据泄露和篡改。定期进行漏洞扫描和审查,以便及时发现和修复镜像仓库可能存在的安全漏洞。建立合适的备份和灾难恢复机制,以应对意外数据损坏或丢失的情况。最终通过持续的监控和报警体系,对异常活动进行及时响应,提高镜像仓库的整体安全性。(4)持续集成持续交付环境安全 持续集成持续交付环境是业务流转上线的最后一环,所以针对集成工具的权限分配应基于最小权限原则,至少支持项目级的权限管理。用户密码也应满足复杂度要求,并进行多因素验证。同时针对持续集成与持续交付环境应进行漏洞的持续检测,加强制品流转安全。
1.4 安全检测
由于 web 应用是获取敏感数据最近的渠道,所以web 应用是攻击者最关注的攻击目标,虽然可能已经建立了 SAST 能力,但许多漏洞只能通过对正在运行的动态应用程序进行安全测试才能发现,需尽可能构建多样化互补的安全自动化测试能力,让应用中存在的安全漏洞、不安全的隐患尽可能在上线前暴露出来并及时修复,降低应用研发迭代过程中的安全问题修复成本,以及线上安全风险,重点能力包括动态应用安全测试、交互式应用安全测试。
(1)动态应用安全检测 DAST 通过模拟实际攻击来评估应用程序的安全性。DAST 扫描工具发送恶意请求和攻击模拟,然后分析应用程序的响应,以检测潜在的漏洞和安全威胁。这种方法不需要源代码访问,因此适用于已部署的应用程序,可以帮助发现运行时的安全漏洞。 动态应用安全检测能够对业界常见的安全漏洞类型检测,包括但不限于注入类、失效身份验证和会话管理、敏感信息泄露、弱口令、XML 外部实体注入攻击、失效的访问控制、安全配置错误、XSS、不安全的反序列化、任意文件上传、读取及目录遍历、CSRF、未经验证的转发和重定向等。
(2)交互式应用安全检测 IAST 能力在业务测试时,模拟运行时可能遭遇的真实攻击,同时分析应用程序的执行路径和数据流,以检测潜在的漏洞和安全威胁。能够在应用程序运行时提供实时的安全分析和漏洞检测,减少误报率,帮助开发人员更准确地定位和修复安全问题,提高应用程序的安全性和稳定性。 交互式应用安全检测能够对业界常见的安全漏洞类型检测,包括但不限于注入类、失效身份验证和会话管理、敏感信息泄露、XML 外部实体注入攻击、失效的访问控制、安全配置错误、XSS、不安全的反序列化、任意文件上传、读取及目录遍历、CSRF、未经验证的转发和重定向、使用弱加密算法及弱随机数、使用硬编码凭证、响应头截断、文件包含、jsonp 劫持、服务端模板注入、XPATH注入、正则表达式拒绝服务攻击等。
运行时安全关注正在运行的业务应用和容器的安全性,运行时安全主要从Web 应用和 API 安全、网络微隔离和云原生运行时安全三个层面进行安全能力的构建。

.2.1Web 应用和 API 安全
Web 安全治理需要对 web 应用的风险建立相关的防护能力,包括SQL注入、命令注入攻击、XSS 跨站、Webshell 上传、内存Webshell、WEB服务器漏洞攻击、第三方组件漏洞、CSRF 跨站请求伪造等攻击行为。同时还应建立对 HTTP 异常检测能力、IP 地址的访问控制能力、URL 访问控制能力等。API 安全的治理需要从 API 生命周期的角度考虑,即从API 的规划、开发、测试、部署、运行和下线等各个阶段全面考虑安全性,避免安全漏洞被潜在的攻击者利用。而实现全生命周期的安全治理需要跨多个部门,包括开发、测试、安全、运维等部门,达成共识并建立协作机制,共同保障API 安全。需要利用各种安全工具来及时感知 API 的攻击威胁,实现 API 的分层防护,确保API 的安全性。
(1)运行时应用程序自保护 为形成软件应用系统的自我免疫力,增强其防御 0day 漏洞攻击和开源组件漏洞攻击的水平。RASP 能够将防御逻辑注入到 Java 底层API 和Web应用程序中,实现防御手段与应用程序融为一体,实时分析和检测Web 攻击,使应用程序具备自我保护能力,有效弥补原来防护体系的不足。依赖 RASP 与现有的纵深多级防御体系相结合,能够补上现网软件应用系统多级防御体系中的最后一环,让穿透后的攻击无法落地形成危害。另外,RASP能够实现对应用系统的持续监控,监控应用系统所受到的攻击行为,并实时进行防护,保证应用系统的安全运行。
(2)WAF WAF 通过分析来自客户端的 HTTP 请求,并根据其规则库对其进行检查,以检测和阻止恶意攻击。在 Web 防护过程中,WAF 是一种专为保护Web应用设计的防火墙。它位于 Web 应用和 Internet 之间,能够监控、过滤并阻止HTTP 流量中的恶意攻击,如 SQL 注入、XSS 和 CSRF 攻击等。在API 防护过程中,WAF 可以提供实时监测和分析 API 的访问日志,并能够迅速发现异常行为。WAF 可以记录所有请求数据,包括来源 IP、用户代理、参数等,并能够根据事先设置的安全策略进行分析和识别。当异常行为被发现时,WAF可以立即采取行动,根据预设的安全策略阻止恶意请求,从而快速响应和快速阻止攻击。
(3)API 网关 API 网关具有身份认证、访问控制、数据校验、限流熔断等功能,可以帮助安全团队管理 API。但是,当所有后端服务的流量都必须通过API 网关进行通信时,会对原有通信性能和 API 的稳定性产生影响,这是推进API 网关工作的负责人员需要面对的最大挑战。 (4)API 安全审计工具 该工具通过对 API 资产的流量上下文及敏感数据的持续分析,可以实时发现 API 资产的授权类、认证类、数据暴露类、配置及设计不合理等各类逻辑漏洞,通过外部情报和机器学习模型来感知针对 API 的低频慢速的攻击风险,使用账号、IP、访问时间、访问 API、访问敏感数据等多重维度建设的UEBA模型来感知账号共用、借用、盗用等行为导致数据泄露的攻击风险。
2.2 云原生运行时安全
云原生环境虽然在传统架构之上建立了新的网络及资源对象层级,但由于容器运行机制,依托宿主机内核相关能力,基于此,运行时安全包括了传统主机的安全以及云原生环境下容器的安全。本文主要对容器运行时安全能力建设提出建议。 (1)资源监控 云原生环境中应用微服务化大幅增加了内部网络流量和服务通信端口总量,同时承载负载的容器秒级启动或消失的动态变化,增加了安全监控和保护的难度。组织需建立针对容器及主机的资源监控,并具备设定阈值告警的能力,以防止由于资源问题导致的故障产生。 (2)文件完整性安全 业务容器运行所依托的基础内容由镜像提供,而其在运行过程中可能也会产生重要数据,针对原本镜像就存在的数据,例如静态 web 站点网页,以及运行过程中产生的数据,例如携带敏感信息的日志等,需建立文件防篡改,风险进程禁止操作等手段,保护容器运行的临时数据,以避免数据泄露。
(3)恶意行为检测 传统的入侵检测方式主要针对于主机或者网络层面,现有手段无法快速发现针对容器层面的入侵行为。同时,传统云平台提供的管理平台虽可查看容器状态并进行容器隔离,但无法针对随时可能出现的异常行为进行持续监控与实时报警。所以我们需建立新的技术手段,对容器内发生的行为进行实时监测,发现例如容器逃逸、启动恶意进程、挂载非法设备、映射敏感目录、修改命名空间等恶意行为。并建立隔离、暂停、重启等紧急处置手段。 (4)业务行为模型 云原生环境下,一个容器一般只会启动一个业务进程,其行为相较于主机变的极为简单,这就使得对业务行为进行记录建模成为可能,在入侵检测基于规则、特征匹配的模式下,可能对风险有所遗漏。所以可对业务行为建立模型,在一定周期内,形成业务行为基线,从而发现模型外的异常行为,进一步发现未知漏洞攻击等行为。并可将行为模型关联业务镜像,使得模型可复用,减少容器多副本时学习的多余资源开销。
(5)历史数据留存 事后溯源是安全的重要组成部分,但容器在消逝后,未做持久化的数据将会丢失,且容器在运行过程中的行为也不会被记录,使得溯源极为困难。基于此,组织需建立对容器基本信息以及运行过程中行为信息的监测和留存,包括可能存在的进程、文件、网络等多个方面。