软件安全风险面的分析
关于现代数字化应用有三个共识:
〇 数字化时代,软件成为新一代信息技术的灵魂,是支撑社会运转的基本组件;
〇 现代软件都是组装的而非纯自研,软件供应链安全威胁日趋严重;
〇 人为开发的代码中一定有未被发现的安全漏洞。
而且悬镜安全https://www.xmirror.cn/从云原生时代软件供应链技术的跃迁式演进中总结出了四个新的变化:
01 新制品 :软件成分从早期的闭源转变为混源再到开源主导;
02 新发布 :开发过程从传统的瀑布式演进到敏捷再到DevOps研运一体化;
03 新技术:数字化应用架构从早期的单体应用发展为SOA(面向服务的架构)再到微服务;
04 新环境 :数字化基础设施从传统的IDC物理机跨越到虚拟化再到容器化。
基于此,数字化应用安全风险面越来越复杂多元,主要包括Web通用漏洞、业务逻辑漏洞、后门恶意代码以及开源成分缺陷。
列举两大事件来说明开源漏洞的重大影响。第一个是2021年发生的SonarQube事件,由于该开源工具存在安全漏洞,导致大范围的企业用户在使用时造成自身敏感信息泄露。第二个是2021年年末爆发的Log 4j2.x事件,由于该开源组件漏洞属于Java语言生态基础库的高危安全问题且利用难度较低,无前置条件即可进行远程命令执行,导致漏洞影响范围极广、危害极大。
通过对这类开源漏洞事件进行归纳总结,可以得出三点思考:
〇 源头检测:在开发测试环节,可以使用对应的安全工具或者技术比如SCA软件成分分析和IAST交互式应用安全测试,从源头发现漏洞;
〇 出厂免疫:在积极防御阶段,利用RASP应用自防御能力对未知或者已知漏洞进行防御;
〇 供应链治理:在进行供应链安全运营时,通过SCA和SBOM软件物料清单,全面洞察软件的组件情况。
此外,结合云计算开源产业联盟发布的《软件供应链安全发展洞察报告(2021)》可以得出一个结论:开源治理是软件供应链安全保障的关键点之一。
图2 开源治理是软件供应链安全保障的关键点之一
开源治理的难点和思路
开源风险治理有四大痛点:
01 看不清:不清楚数字化应用中真实使用了多少开源成分,缺少对软件物料清单SBOM的有效管理;
02 摸不透:不清楚开源软件存在多少真实可被利用的中高危漏洞,不同开源软件的许可证可能存在合规性和兼容性等风险;
03 跟不上:不知道开源软件漏洞的真实影响范围,无法快速跟踪定位每天都爆发的新增漏洞;
04 防不住:不知道如何快速修复开源软件的已知漏洞,缺少对典型未知漏洞的积极预防和风险评估能力。
基于这四大痛点,悬镜梳理了关于开源风险治理的四点思路,并具体落实到了实践中:
〇 以人为本,源头赋能:做好权限分配和管控,通过情景式安全实训将安全能力赋能给产研团队;
〇 统一入口,把控源头:建设组件引入单一可信源,统一开源组件的引入入口及流程规范;
〇 安全前置,资产梳理:将开源治理前置到开发阶段甚至需求、架构设计阶段,并定期审查资产的风险信息,生成详细的SBOM软件物料清单;
〇 分批整改,积极防御:根据风险修复优先级对风险组件按不同批次分等级进行整改和复查验证,并且通过引入代码疫苗技术中的RASP,主动帮助现代应用建立威胁免疫能力。
开源治理有几大关键技术,这里列举两项。
第一项是SCA(Software Composition Analysis,软件成分分析),一种对二进制软件的组成成分进行识别、分析和追踪的技术。它能为开源治理的落地起到比较重要的技术支撑,一方面通过对私服仓库或者组件仓库进行扫描,能保障开源软件在自身使用生命周期中的安全,另一方面可以融入研发过程,在CI/CD中通过静态和动态的分析来保障开源软件安全。
SCA依靠自身组件分析能力以及漏洞知识库的支撑,可以发现组件中已知的漏洞,而对于未知漏洞的检测则需要利用另一项关键技术——悬镜原创专利级智能代码疫苗技术。
代码疫苗技术有四个特征:无需代码安全专家逐行分析源码、无需额外修改代码、无需复杂配置以及非常关键的,能覆盖对开源漏洞的利用防护。
代码疫苗技术有一个自身的演进过程,从一开始利用IAST探针进行性能监控和交互式的漏洞检测,到之后通过将探针埋入应用对API进行挖掘分析,再到利用RASP对漏洞利用进行阻断,乃至当下还可以进行运行时敏感数据追踪。
代码疫苗技术中的IAST可以在应用上线前,通过融入业务环境,在测试环节进行漏洞挖掘。这里分享一个大型互联网科技公司的案例。该公司在今年引入IAST后发现了自身业务中存在的一个注入漏洞,但在定位漏洞注入点后发现业务中并无相应注入问题。悬镜通过多轮分析IAST探针捕捉到的数据流,最终发现其代码的注解中引入了公司统推的依赖包,并且缺少对其的安全审查工作。对方意识到问题的严重性,对其业务进行排查,发现60%-70%的业务都使用了该依赖。该案例生动具体展现了IAST在未知漏洞检测方面的优势。
图3 IAST主要关键技术
代码疫苗技术的第二个核心RASP,通过插桩技术将防护逻辑与防护功能注入应用程序,深入应用运行时的环境内部,通过分析与了解数据流及事件流,检测和防护无法预见的安全威胁与攻击事件。这种运作模式,使得RASP能够解决WAF所存在的检测规则与功能无法对应、无法知晓服务端防御方式、变形及未知威胁防御乏力、微服务场景难适配等痛点。
以2021年Log4j2组件的远程代码执行漏洞的防护为例,梳理一下RASP的防护流程。当应用的某个接口或接口背后的实现应用了Log4j2的组件并开启了模块化JNDI的Log4j栈内服务输出与日志输出,则系统中就会存在这一漏洞。
对攻击者而言,探测到漏洞存在,即可基于漏洞的接口发送HTTP请求,JNDI注入的数据传入到Log4j的写日志操作之中。当写日志操作执行时,就会触发这一漏洞,并请求攻击者的服务器,将外部的class文件加载到应用之中,从而造成远程代码执行。
在这一过程中,有多个步骤都是RASP能够进行拦截的。首先,在发送写日志请求时,会内部发送一个类似于SSRF的请求,这是RASP能够进行的第一层防护。其次,在攻击者进行JNDI注入时,RASP也能够对这一操作进行拦截。最后,在攻击者进行命令执行的环节,RASP同样会针对这一操作采取相应的防护。
开源治理的实践思考
悬镜对开源治理的实践思考包括三个方面。
第一,DevSecOps旨在将自动化、安全性应用到软件的SDLC全生命周期,通过文化、流程和技术三要素,在构建软件功能的同时实现“安全左移,源头保障安全风险”。
第二,基于下一代积极检测防御技术,帮助企业打通开发、交付、运营环节,提升和强化溯源能力、降低排查成本、提高重大漏洞响应速度,落地软件供应链安全治理体系。
第三,开源治理不仅要识别开源组件漏洞、梳理SBOM软件物料清单,还要对0day或者-1day这类未知漏洞进行防御,通过代码疫苗技术的IAST在测试环节进行漏洞检测,通过代码疫苗技术的RASP在上线运营环节进行漏洞防御。
图4 悬镜智能代码疫苗技术柔和嵌入左移安全开发过程