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