李涛,博士、武汉科技大学教授,长期从事人工智能、信息安全的研究工作。
随着软件应用的广度和深度不断加大,软件在金融、能源、汽车电子、军工、通讯、零售、政务等领域已经成为重要的基础设施。因此,软件安全问题也正在成为重要的基础性问题。
随着安全左移的概念日渐深入,从源头降低安全风险成为业界共识。软件源代码缺陷检测和漏洞挖掘是实施安全左移的重要工具,受到了学术、企业界的关注,成为研究热点。
然而,软件的高复杂性、多样性给软件缺陷检测和漏洞挖掘带来了挑战,现有的方法由于存在高误报率和高漏报率的问题,已无法满足复杂软件的安全性分析需求。
近年来,随着人工智能产业的兴起,特别是以ChatGPT为代表的通用人工智能的出现,给软件缺陷检测和漏洞挖掘带来了新的机遇。
软件缺陷检测从技术路线看,分为基于规则的检测、基于机器学习的检测和基于大模型的检测。
从运行模式上看,软件缺陷检测技术可划分为静态分析方法与动态分析方法。
静态分析方法无需运行软件,而是通过扫描源代码分析词法、语法、控制流和数据流等信息来发现缺陷。静态分析技术主要包括基于规则的分析技术、二进制对比技术、静态符号执行技术和静态污点分析技术等。
动态分析方法在软件程序运行过程中, 通过分析动态调试器中程序的状态发现软件缺陷。动态分析技术主要包括模糊测试、动态符号执行技术和动态污点分析技术等。
下面将从技术路线演变视角,探讨软件缺陷检测的机遇和挑战。
代码审计技术发展路线
这些规则由安全专家编写,用于检测已知的漏洞模式。规则引擎会扫描程序的源代码或二进制文件,寻找与已定义规则匹配的模式。一旦发现匹配,就会触发警报或报告漏洞。
从人工智能的发展阶段看,规则是领域专家经验总结,是计算机能够理解的形式化表达。事实上,大量的专家系统都是基于规则实现的,现有的软件缺陷检测规则引擎本质上也是安全专家的经验。
然而,从图像、智能问答等众多领域的发展证明,规则难以完备性的描述复杂系统的多样性,规则引擎的高误报问题难以解决。
举个例子,我们甚至很难用完备性的规则去描述猫和狗的区别(猫和狗的多样性品种导致形态上的巨大差异),从而让计算机能够识别哪一张图片是猫或者狗。
在现有软件缺陷检测中,一般会出现30%以上的误报,此时只能通过专家修改规则来降低误报率,但是由此可能增加新的漏报。
随着软件的复杂度和多样性的增加,安全漏洞的种类也不断发展,编写和维护规则集变得困难,且人的主观性会影响误报率和漏报率,这就大幅度降低了工作效率,也是目前企业反馈的痛点。
在动态分析方法中,不仅存在测试冗余、测试攻击面模糊、难以发现访问控制漏洞和设计逻辑错误,还存在路径爆炸、约束求解难等问题,特别是在大型复杂软件系统检测中这显得尤为困难。
综上所述,虽然基于规则引擎的软件漏洞检测是现在产品的主流技术方案,但是存在的高误报和高漏报问题难以在现有的模型基础上克服和解决。
在图像识别、决策场景已经证明:如果有大量的数据,可以不通过规则,而是通过机器学习算法从海量数据中发现和学习规律。
软件缺陷检测被抽象成一个基于数据驱动的多分类问题,以逻辑回归、朴素贝叶斯、随机森林、SVM等为代表的传统机器学习模型开始应用到软件漏洞挖掘。
随着深度学习理论在图像识别领域的成功应用,软件缺陷检测模型逐步开始研究基于深度学习的漏洞挖掘方法。
深度学习技术通过构建多样性的神经网络对数据进行训练,使得能够更加自动化和智能化地从复杂数据中提取有效特征信息,以提高软件安全漏洞挖掘的准确率,降低漏洞的误报率和漏报率。
基于深度学习的软件缺陷检测包括软件代码表征、模型学习等多个阶段。
大量的论文重点研究了代码数据表征,即需要将软件程序数据集解析为合适的表示结构用于模型训练。
在模型学习阶段,该部分需要将从数据表征模块抽象出的代码表征映射为向量形式,从而作为训练模型的输入。
在多次训练过程中不断调整和优化模型参数,得到一个性能较优的漏洞挖掘模型,并应用于真实数据检测阶段。
虽然基于深度学习的软件缺陷检测在Benchmark上达到了很好的效果,但是由于缺乏像图像领域的大规模标准数据集,基于深度学习的代码漏洞检测模型的泛化能力仍然不高,在标准数据机上训练可以得到超过90%的准确率,但是换一个数据集,可能准确率大幅度下降。
以Chatgpt为代表的大语言模型,成为通用型人工智能新的曙光。
从理论模型看,编程语言是连接信息世界和现实世界的桥梁,编程语言和自然语言具有非常相似的统计学特性,甚至编程语言更加具有一定的结构化。
所以经过大规模的代码训练,现有的大语言模型也具备了漏洞检测的能力。大量的论文对现有大语言模型在漏洞检测领域进行了评测,探讨大模型在漏洞检测的能力和边界,通用大模型基于开源代码训练,具备了漏洞检测的能力。
但是,大语言模型也有缺陷,包括需要较高的算力、Token限制带来的性能约束、准确率不高、复杂漏洞检测检测困难等。
这带来了新的挑战,具体如下:
3.1通用大模型的漏洞检测的准确率不能满足现有代码审计的要求
我们对现有的通用大模型进行了详细的测试,发现现有的通用大模型代码检测性能较低,我们对部分通用大模型进行了测试,发现在很多漏洞类型检测准确率不到30%,包括CWE732、CWE79、CWE20等,并且检测时间较长,平均每个代码文件的检测时长超过30秒,所有通用大模型不能直接用于生产线的代码漏洞检测。
3.2代码专用大模型是实现落地应用的关键
从大模型的落地路径看,针对企业级的细分场景应用,不需要追求千亿级参数的大模型,而是需要具有针对性、高效、适配场景的“小模型”,解决实际问题。
基于这一视角,软件缺陷检测需要新一代的技术路线,构建数据驱动、效能优先、兼具泛化性的合适参数规模的“代码安全模型”。
通过新的架构训练软件缺陷检测和修复一体化模型,具备参数规模适中、高准确率、低误报、自动修复、高效率等特点,在公开数据集上取得了较好的效果。
现有的开源数据集本身包含漏洞,所以训练得到的大模型也很难识别漏洞,首先基于无漏洞的海量代码进行训练,确保源头安全,从而保障了模型安全。
事实上,由于代码漏洞标签不像图像领域的标签,可以通过低成本方式获得。针对代码漏洞的专业性导致人工大规模标记的成本很高,我们采用新了对齐方式,即训练一个小模型来对齐大模型,不断提升大模型的准确性。
(2) 专用“小模型”实现代码安全检测的高性能
为了提供代码安全检测的效能,需要设计高性能的小模型,通过高质量数据+合适参数实现代码检测的高性能。
小模型可以部署在消费级显卡上,并且经过调优后,可以大幅度提升代码的扫描效率,可以达到百万行扫描的性能。
往期推荐
1.
2.
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...