宋荆汉:AI赋能软件供应链安全

2023-01-11 14:18 宋荆汉

作者简介:宋荆汉,网安加学院院长,深圳创新方法研究会理事、深圳质量协会专家委员,网安加社区、质量实干派社区创始人。20年研发及管理经验,在中兴通讯、任子行网络,全志科技、汇金科技,担任研发管理高管,曾参与国家测试与安全类职业认证标准、国家软件安全开发相关标准的制定,对软件安全开发有比较深入的研究。曾为多家世界500强企业提供研发管理培训及咨询。


去年在OWASP年终大会上给大家分享的是软件供应链安全的系统方法论,这一年来,我一直在社区和很多厂商伙伴探讨交流软件供应链安全的相关问题,结合大家的一些诉求和当前的新趋势,今天再跟大家分享我对于软件供应链安全的一些新看法。


软件供应链安全风险

中国信通院给软件供应链安全的定义是:软件供应链安全就指的是软件供应链上软件设计与开发的各个阶段中来自本身编码过程、开发工具、设备或供应链上游的代码、模块和服务的安全,以及软件交付渠道及使用过程安全的总和。


在当前的数字化时代,软件供应链让整个数字世界链接起来,当一个上游被攻击时,几乎所有的下游软件都有可能受到攻击,并造成崩塌性的传播,从而造成海量经济损失以及社会影响。


另外,我们也看到开源软件的使用已成为业内的主流趋势,其产生和传播速度都非常快。据统计,97%的代码库中包含开源代码,每1000行代码中便存在14个Bug。在这种情况下,如果想要防止开源漏洞造成重大危害,就要求我们本身解决漏洞的速度达到很高的标准,以达成攻守平衡的状态。


为什么需要AI

众所周知,安全本身是一种风险,对企业而言,所有的风险就是成本支出。软件供应链安全,实际上就是攻守双方打破了原有的攻守平衡。简单来说,就是攻击方找到了一种途径,可以用更小的成本来攻破防守方用很大成本构建起来的防线,攻击方有很大的盈利空间,因此敢于做更多冒险的行为。其次,漏洞的传播速度快,一旦防线被攻破,要想修复需要花费更多的时间和成本,这也是软件供应链安全问题的本质。


要保证整个软件供应链上的点都没有问题,就要实行三步走,即“不接受、不制造、不流出”。简单来说,不能让有漏洞的组件进来,不能制造漏洞,同时不允许有漏洞的软件或代码流出。因此解决这类问题,需要回归到软件开发本身。


我们知道,安全是开发的一个必然属性,因此基于属性化的开发,要植入到开发过程中,必须要改变原有的软件开发过程。但是,现有的软件工程经过了几十年发展,却并没有取得突破性变革,主要原因在于,所有执行的过程都是已知的,而安全风险是未知的。其核心逻辑在于,人的能力不足,加上组织内知识转播的阻碍,导致软件工程遭遇瓶颈。


目前来讲,较好的解决办法就是“快”。实际上,无论是质量还是安全,并不是越慢越好,反而开发过程越快越安全,质量越好。原因在于,目前的开发过程遵循计划型和适应型两个原则,因此在面对外部快速变化的环境时,我们要变的小而快,即把原来的大目标变成小目标,小才能解耦,DevSecOps这类工程方法才能够得以实现。其次,既然安全风险是未知的,我们就不能寄希望于预先解决它,而应该是一旦发现风险,能够以最快的速度解决它。这才是目前可循的一个思路,也是解决所有未知问题的一个必然途径。


除此之外,AI技术的出现,可以解决软件安全开发过程三要素中工具自动化的问题,另外如Chat GPT和AI for Code也会对开发过程产生影响。Chat GPT,可用于自动化网络安全领域的各种任务。包括漏洞测试和分析、数据分析和报告生成。通过使用其高级语言处理功能,Chat GPT 可以帮助简化和提高这些流程的效率,从而为安全人员节省时间和精力。AI for Code可以实现需求到交付的核心产出无缝规约化衔接,智能知识的复用大大降低了对人员的能力要求,同时AI模型可以对实战过程进行持续抽象总结,实现动态、实时的学习,让项目团队在开发过程中不断调整、找到最佳研发模式。


这样看来,所有组织的开发过程其实没有原来那么复杂,通过AI技术,可以减少组织内因分工协作导致组织复杂性的问题,快速迭代开发过程,保证开发出来的软件越来越好。


此外,软件供应链还有一个非常重要的技术叫SCA,评估SCA技术的核心在于广度和深度,广度即对整个软件供应链组件的覆盖度是否够全面,深度即都找到其中的漏洞有多少,而代码从大到小,颗粒度越细精准度越高,深度越深。要做到足够精确、足够全,比较好办,而要做到足够深相对较难,在当前开源组件源代码生产速度极快的背景下,要想追上国外先进企业在漏洞运营多年的积累,我个人能想到的就是通过大规模的漏洞自动挖掘技术来实现。


总而言之,检测漏洞是安全能力的核心,只有具备对漏洞的检测能力,才具备安全管理和运营的可能性。


软件漏洞挖掘的智能化

诚然,AI技术不可能完全替代人,但是能不能在某些应用场景下充分利用AI的特性来提高软件安全的能力,比如让软件漏洞挖掘更智能化,这是有可能的。


事实上,软件漏洞挖掘经历了一系列的技术变革,从静态分析技术到动态分析技术到传统机器学习,再到深度学习。从深度学习的角度来看,它和原有技术最大的差异在于,前面的几大技术是基于特征相似性的方式来实现,而深度学习只需要漏洞的样本就可以解决。这意味着以前的安全人员要对开发人员赋能必须要经过漏洞的复现和对规律的总结,然后再给漏洞检测的开发人员进行规则化,这一过程的效率是比较慢的;现在通过深度学习的方法,只需要咨询专家通过打标的方式,就可以很快完成整个模型的构建。其基本原理就是,所有的高级语言最终都会转化成和机器完全兼容的汇编语言。


我们知道有些漏洞不是靠单文件能检测出来的,它需要多个文件共同来完成一项功能,从而实现对漏洞的检测,因此我们需要把所有的文件变成语法树,然后再把所有的项目文件进行拼接,形成一个大的森林。无论代码在表面上采用了什么样的注释,或不同的复杂的写法,最终它就会变成树的节点,然后进行节点的增删改查等基本操作,再提取特征之后进行样本的学习,就可以完成对不同漏洞的分类。


我们对成果进行了对比,从Benchmark的标准数据集来看,它的速度和准确率都有明显提升,其实检测速度提升是必然的,因为AI运算是一个矩阵运算,相当于用空间换时间,所以从逻辑上来讲,AI的检测速度应该要达到数倍量级的提升。从实际效果来看它的准确率也比较高,这里主要选取了一些Java的常见漏洞为样本,因为深度学习的准确度取决于样本的多少,常见漏洞也就意味着开源项目中会有更多这种样本的存在。从朱丽叶数据集的对比结果来看,它的速度和准确率都有比较高的提升。再从网上随机拉取对应的开源数据集,它的测试准确率也会达到一个比较好的水准。


小结

最后做一个总结,首先来讲AI并不能解决所有的问题,因为它需要样本,但是很多漏洞的样本比较少,它更多是针对常见的主流漏洞,这在目前的条件下是一个比较有效的方式,因此我们从提升整体检测效率的角度来讲,需要规则引擎+AI引擎的混合引擎模式。


AI的优势在于,可以在检测的速度、准确率、低漏报和误低报等方面有一些新的突破。可能这方面的初始优势不明显,但通过持续打标签的方式,它可以基于某个厂商自身的样本级来做定制化的模型从而改善现状,我想这是AI技术可以给软件供应链安全提供的新思路。