应用和工作负载是企业资产的重要组成部分,也是用户访问企业数据的主要手段和攻击者关注的首要目标,因此,强化对IT栈内软件部分的安全控制是企业推进零信任成熟度的必由之路。
通常,零信任网络访问(ZTNA)通过身份认证和访问控制机制来保护业务应用和资源,然而这些措施并不能为应用提供更全面的保护,例如SQL(或代码)注入、远程指令执行、容器权限逃逸等。本文从零信任安全能力的体系化建设入手,主要讨论应用和工作负载在访问授权、威胁保护、开发部署和安全测试等方面的问题。
关键字:零信任;应用安全;工作负载安全;开发部署;安全测试
应用和工作负载(简称应用)是指运行在私有化、移动设备和云等环境中的系统、计算机程序和服务。在企业的业务环境中,数目庞大的应用为各部门提供了复杂多样的业务功能,它们依赖着不同来源的组件,其中隐藏着不同类型的安全漏洞,并在不同的访问场景中扮演着不同的角色。
然而,基于边界的安全模型假定了内网的默认安全,也抑制了对应用开发的安全性需求。教育机构忽视了对应用安全设计或编码的教学培训,开发人员普遍缺乏生产安全产品的技能,安全措施经常在应用开发完成(甚至安全事件发生)后,以追加模式附着于应用程序。在应用生命周期的后期(运行或维护阶段),运维人员甚至可能疏忽对安全漏洞的扫描和修复。
在应用领域建设零信任安全能力,通常要面对比终端和网络等领域更为复杂的局面,应用的访问方式(例如,通信机制、共享机制,以及认证方法等)、行为特征、编码安全、开发部署、交付更新等问题均需进行梳理分析,并进行合理的改进优化。
另外,在大多数时候,尽管应用安全是从OSI参考架构应用层的视角去进行观察和分析的,但安全能力的构建实际上需要从更低的层次开始,对应用层的保护需要借助或依赖网络层和传输层的安全能力,不同层次安全能力的关联、集成和协作是减少暴露面、提高可见性、推进零信任成熟度的关键。
在零信任安全框架中,应用安全能力既要确保应用和工作负载间的安全访问授权,阻止横向移动和非法访问,也要保障应用层的协议和内容安全,识别并阻断恶意内容和威胁,同时还要保证应用的全生命周期安全(包括设计、开发、测试、部署和运维),以适应不断变化的威胁环境和安全需求。
通过为应用和工作负载建立统一数字身份,可以在“身份”领域建设应用相关的访问与授权能力。在向不同应用集成访问授权能力时,需要特别关注其工作流的特异性,并考虑如下问题:
零信任希望为用户提供与位置无关的安全访问。在应用支柱的最佳成熟度级别,无论用户身在各处(内网、互联网等),组织都应该向用户提供基于零信任的应用访问通道,减少访问延迟,并提供一致的、良好的用户体验。
在向互联网开放应用访问时,通常也需要利用传输层和网络层的安全机制(例如,mTLS、IPSec等),实现在公共互联网上的安全连接,确保数据在通信路径的完整性和机密性。
任何应用程序都可能存在漏洞。鉴于应用对企业的重要性,攻击者也始终将应用作为首要的攻击目标。作为零信任策略的一部分,持续监控并保护应用安全至关重要。
为防止潜在的漏洞被攻击者利用,需要在应用层面实施多层次的保护机制。例如,通过WAF技术来检测、识别和阻止对常见漏洞(例如,OWASP Top 10)的利用和Web攻击,包括跨站脚本(XSS)、SQL注入、跨站请求伪造(CSRF)等。
另外,影子IT和API安全也是不容忽视的安全风险,未经批准的云应用程序和服务,或API非法调用都可能导致数据泄露和安全风险。CASB通过监控和管理云应用程序的使用情况,识别和控制未经授权的应用程序访问,减少影子IT带来的风险,还可以通过提供API保护功能,监控和管理云应用程序的API访问,确保API的安全性和合规性。
随着组织构建越来越多的云原生应用程序,并采用大量开源组件来加速开发流程,如何将安全性更轻松地融入到开发和部署过程中,也是一个日益复杂的问题。
通常,开发团队使用特定的DevOps工具和流程,形成了独特的开发孤岛。而且,开发人员的首要目标与基本的安全优先事项并不一致,他们更专注于快速交付业务部门所需的应用功能,而管理或安全团队则希望进一步降低业务风险,并提供合规性支持,这些目标分歧使应用程序安全性进一步复杂化。
在软件开发生命周期(SDLC)中引入安全考虑,通过安全左移,可以避免开发团队在开发后期被迫进行安全修复所面临的低效问题。
图1 适用于各个SDLC阶段的DevSecOps工具
在图1中,Gartner概述了SDLC的七个阶段,并给出了适用于每个阶段的DevSecOps工具。软件工程领导者应与安全和风险团队以及基础设施和运营方面的同行合作,在SDLC的每个阶段集成工具。零信任应用安全的重点是“确保应用程序可用且安全,并且了解它们正在做什么”。开发团队需要找到一种与DevOps有效合作的方法,以实现效率和安全的平衡,降低实现零信任目标的难度。
尽管大多数组织并不具备安全编码的培训能力,但仍然可以通过提供丰富的安全工具,帮助开发者发现并处理应用中的安全缺陷。引入并充分利用这些安全测试工具,能够逐渐缓解因开发者安全编码经验不足,所带来的应用安全问题。
应用程序安全测试涉及对漏洞和弱点的测试,常见方法包括静/动态软件测试、代码审查、渗透测试、漏洞扫描、配置审计和安全评估等。
图2 零信任应用安全测试的主要方法
这些安全工具增强了开发人员的安全能力,但简单部署这些工具并不能完全实现零信任目标,开发人员需要将威胁模型应用到他们的代码中,并采取思维方式来考虑攻击者可能访问的内容,以及他们会怎样破坏应用程序或周围的供应链,将应用安全编织到零信任安全体系中。
零信任是一种可适用于软件供应链的思维方式和方法,可以由外向内或由内向外应用于软件开发的流程中,使开发人员更快速地开发、交付更安全的应用。
与零信任其他能力支柱的建设情况类似,应用安全能力建设的第一步是发现组织环境中存在的软件,并对其进行分类。尽管这是一个具有挑战性的目标,但可以通过一些流量分析或软件成分分析(SCA)工具,识别并清点网络中的应用程序。
该清单应尽可能覆盖软件供应链中的所有组成,包括代码中的依赖项、调用的服务、公开或访问的API、工作负载以及用于开发、托管、集成和构建应用程序的工具。
软件物料清单信息为在组织中实施零信任应用安全策略提供了基础。例如,通过分析CI/CD流水线和部署环境,为其设计并实施微隔离,或者了解每个软件组件的版本,以确定应用中是否存在已知的安全漏洞,并制定升级计划,也可以基于容器清单,规划不可变工作负载的替代方案。
在大多数组织中,应用开发和部署通常由许多不同的团队负责,那么其安全和管理任务应该由谁来承担?
有一种观点认为,应用安全责任应该由开发人员承担。尽管大家都同意安全编码是开发人员的责任,但引入安全相关工作可能会产生一些非预期的后果(例如,延迟交付)。另一种观点是,安全团队应该通过寻找和消除可能的安全漏洞,来负责应用的安全性。但是,由于开发周期的快速迭代,可能导致安全检查的覆盖范围存在疏忽。
此外,在软件开发生命周期中,分析、设计和构建等每个流程都有特定的风险要求,而不仅仅是安全编码就一定能生成安全的应用,特别是,合规性并没有真正出现在SDLC的视野中,组织需要采用基于DevSecOps的流程,以端到端模式解决应用开发的安全治理问题。
为了维护组织环境的应用安全,需要持续跟踪安全威胁的变化,保证应用安全姿态的可观察性,以便随时优化应用程序,以减少攻击面和防范风险。通过定义安全性能指标,配置全面的日志记录,引入异常监测和性能监控,持续监控应用的运行状态,可以及时发现问题、优化性能,并提前识别潜在的安全风险。
过去,大多数组织都使用CVSS评分对漏洞进行优先级排序。从逻辑上讲,关注漏洞的严重性似乎是正确的,但更重要的问题是该漏洞是否可被利用。EPSS模型根据漏洞的特性和已知的攻击模式,对漏洞的潜在可利用性进行评估,可以提供对漏洞利用可能性的估计,从而帮助安全团队确定哪些漏洞可能是攻击者的首要目标。
结合这两个评估系统,安全团队可以制定更全面和有效的漏洞修复策略,优先处理那些同时具有高CVSS评分和高EPSS评分的漏洞,以最大程度地减少系统面临的风险。
数字化转型的加速迫使组织重新评估其安全策略和基础设施,推动了零信任应用程序安全性和合规性的需求增长。在致力于零信任建设的组织中,应用程序安全经理有很多方法来实施相关行动,为变革创造动力,但最终仍需要与其他支柱中构建的解决方案相结合,或通过与其他团队协作构建相关能力(例如,统一身份库、持续认证和授权、分段资源池以及数据分类和保护),以支持应用支柱中的零信任目标和组织业务。