了解最新等保资讯及等保政策
文 | 国家计算机网络应急技术处理协调中心 司成祥;军事科学院系统工程研究院 任保全;北京长亭未来科技有限公司 朱文雷 龚杰
信息技术的飞速发展使软件系统的复杂性与规模呈指数级增长,而传统的漏洞挖掘方法在效率、覆盖率和适应性上的局限性日益凸显。近年来,人工智能(AI)技术的飞速发展,为漏洞挖掘领域带来了革命性突破,显著提升了漏洞检测的智能化水平。本文从技术原理、应用实践及挑战三个维度,结合实际案例,探讨AI在漏洞挖掘中的价值、前景与未来趋势,为漏洞挖掘技术的研究与实践提供参考。
一、人工智能在漏洞挖掘中的优势和主要方法
漏洞挖掘通常是指通过一定的方法和工具,在软件的源代码、二进制或运行环境中寻找可能被恶意利用的缺陷或安全弱点。AI是一种让机器模仿人类的智能来执行任务的技术总称。近年来,随着以大语言模型技术为代表的生成式人工智能技术的飞速发展,AI技术在图像识别、自然语言处理等领域取得了突破性成果。下面主要介绍两者的契合点和关键技术。
(一)传统漏洞挖掘的不足与人工智能的赋能优势
传统漏洞挖掘技术主要依赖模糊测试(Fuzz Testing)、符号执行(Symbolic Execution)和静态代码分析(Static Analysis)等。这些技术依赖专家经验和预定义规则,面对日益庞大的代码规模和复杂的漏洞场景,存在覆盖率不足、误报率高以及对人工依赖性强等问题。
AI的主要分支之一是机器学习。机器学习通过大量数据训练模型,从历史样本中学习规律,并对新样本进行预测。将人工智能应用于漏洞挖掘,主要是利用机器学习算法自动学习“安全代码”和“存在漏洞的代码”之间的差异,将漏洞挖掘问题转化为程序分类或聚类问题。简单来说,AI模型可以从大量已有的漏洞和安全代码样本中提取特征模式,从而自动识别未知代码中的潜在漏洞。
在漏洞挖掘中应用AI技术具有多重优势。首先,机器学习模型能够总结出人类难以手工编写的复杂规则,发现隐藏漏洞模式,从而提高检出率;其次,AI技术可自动化、快速地处理海量代码,减少人工干预,提高整体效率;最后,深度学习等技术能够自动提取代码特征,解析代码逻辑与上下文关系,降低对安全专家经验的依赖。当然,AI技术也并非万能,如何获取高质量的训练数据、使模型真正理解程序语义以及确保模型结果的可信度,仍是需要进一步解决的问题。
(二)人工智能在漏洞挖掘中的关键技术
当前,AI在漏洞挖掘领域已展现出多种技术应用途径,包括静态分析与动态分析相结合的智能代码审计、基于机器学习的漏洞检测模型,以及自然语言处理技术在代码语义分析中的应用等。
1. 静态分析与人工智能的结合
静态分析是在不运行程序的情况下,通过扫描源代码或二进制文件来发现潜在漏洞的方法,常见手段包括源代码扫描、控制流与数据流分析、污点分析、符号执行等。传统方法虽然能够较为全面地覆盖代码路径,但通常存在误报率高且对复杂逻辑敏感等问题。引入AI技术后,静态分析的效率和准确性得到了明显提升。
例如,在机器学习辅助的污点分析方面,传统污点分析往往会发出许多不是真正漏洞的警告。通过构建机器学习模型对污点分析的结果进行二次筛选,模型可从大量真实漏洞与假阳性案例中学习差异,进而识别更可能存在安全隐患的代码模式,从而显著降低误报率,提高分析人员的工作效率。
此外,机器学习模型在代码属性特征的提取和分类方面也表现出优势。静态分析过程中需要将代码的多种属性提取并向量化,随后利用决策树、支持向量机、神经网络等模型进行分类或回归预测。例如,可以通过提取每个函数的控制流复杂度、调用关系等指标,训练分类模型以判断函数是否存在缓冲区溢出等漏洞;或者利用逻辑回归模型,根据代码度量预测某模块中可能存在的漏洞数量。这类基于静态特征的模型能够快速扫描整个代码库,帮助安全人员定位可疑区域以便进一步审计。
机器学习还可以优化符号执行。符号执行通过用符号变量替代实际值来探索程序路径,能发现复杂条件下的漏洞,但在面对大型程序时常常面临路径爆炸等问题。结合机器学习后,可在符号执行前预测哪些函数或路径更可能含有漏洞,从而优先对这些高风险区域进行符号执行。例如,可以训练模型,根据函数的代码特征预测其是否存在漏洞,当模型给出高风险评分时,再进行深入的符号执行。这种智能引导方式有助于减少无效路径的探索,从而提高符号执行的整体效率。
需要注意的是,静态分析中AI应用的效果高度依赖于良好的特征设计。必须设计与安全漏洞紧密相关的特征,才能发挥模型的最大效能。虽然深度学习的引入在一定程度上能够自动学习特征,但在特征不足或样本有限的情况下,仍需融合专家知识来设计特定的特征。
2. 动态分析与人工智能的结合
动态分析是通过实际运行程序或模拟执行来发现漏洞的方法,包括模糊测试、动态污点跟踪和运行时监测等。动态分析擅长发现程序运行时才会显现的问题,例如内存越界、空指针引用等。然而,传统测试通常较为盲目或基于简单变异策略,需要长时间才能触达深层次的漏洞。引入AI技术后,动态测试的效率得到了有效提升。
在智能模糊测试(Smart Fuzzing)方面,经典模糊测试工具通常通过随机或基于简单规则变异输入数据来测试程序,效率有限。引入机器学习后,模糊测试工具可以根据以往探索到的程序行为动态调整输入生成策略。同时学习已知漏洞的触发条件,从而有针对性地产生更易触发漏洞的输入,使得模糊测试不再完全“模糊”,而是基于“经验”探测程序的薄弱点,大幅提高了模糊测试的漏洞发现能力。
在动态执行监测与异常检测方面,通过训练模型学习程序在正常运行时的行为,可以实现对异常行为的检测。一旦实际执行偏离正常范围,即可判定可能存在漏洞被触发。这类异常检测模型不仅可用于区分模糊测试产生的崩溃是否具有安全意义(即区分普通崩溃和真正可利用的漏洞),还可以用于在生产环境中实时监控并检测利用漏洞的攻击行为。
除了调整模糊测试的输入之外,强化学习代理还可应用于更广泛的漏洞挖掘流程控制。例如,通过训练一个强化学习(Reinforcement Learning,RL)智能体,使其针对应用执行一系列操作(类似于渗透测试的步骤),并以成功触发异常或漏洞作为奖励。这类模拟攻击路径自主探索漏洞触发条件的方法虽然尚处于起步阶段,但已展示出让AI主动探索漏洞的潜力。
综上所述,动态分析与静态分析各有所长,当前流行的做法是将两者结合,形成“静态+动态+AI”三位一体的漏洞挖掘框架。静态分析提供全局的代码视图,动态分析则提供真实执行反馈,而AI技术贯穿其中,提供智能决策支持。通过先利用静态分析筛查可疑点,再通过动态模糊测试进行验证,并在整个过程中借助机器学习模型不断优化策略,构建出高效的漏洞挖掘流水线。
3. 机器学习在漏洞检测中的分类与回归方法
在漏洞挖掘中应用机器学习时,常见的任务为分类或回归问题。例如:“这段代码是否存在漏洞?”属于二分类问题;“这个软件包含多少个漏洞?”则可以视为回归预测。根据不同的任务需求,选择适当的机器学习算法非常关键。
分类模型用于判断某个对象是否属于“有漏洞”类别。典型模型包括朴素贝叶斯(NB)、支持向量机(SVM)、决策树/随机森林(DT/RF)、神经网络等。这些模型都有各自的优势,在实际应用中,通常会将多种模型结合使用,例如先用快速的模型进行粗分类,再用复杂模型进行精细筛选,以在性能和准确率之间取得平衡。
回归模型用于预测一个连续值指标,例如漏洞数量、漏洞严重程度评分等,包括线性回归、逻辑回归,甚至深度学习中的回归网络等。这些模型在漏洞优先级排序和风险评估中作用显著。例如,训练一个线性模型,根据项目的代码规模、开发历史等特征,预测其尚未发现的漏洞数量,从而帮助制定测试计划。又如,利用逻辑回归模型,估计某个漏洞被利用的概率,从而进行风险排序。有研究尝试通过机器学习综合多种因素(漏洞位置、影响范围、利用难度等)给出风险评分,辅助安全团队优先修复高危漏洞。
无论是分类问题还是回归问题,模型都需要特征工程支持。除了传统的代码度量特征,越来越多的漏洞分析工作开始引入程序语法、语义信息作为特征。例如,提取函数调用图、数据流图中的统计量,或提取代码片段的词向量表示等。自然语言处理(NLP)技术在这里大有用武之地,可以将源代码文本转化为向量特征供机器学习算法使用。
4. NLP与代码语义分析在漏洞挖掘中的应用
近年来,NLP技术开始被运用到代码和漏洞分析中,因为源代码本质上是一种特殊的“语言”,其含有语法和语义结构。主要包括以下几种实践。
源代码向量化表征。借鉴NLP的词嵌入思想,将源代码转换为计算机可学习的向量表示。一种简单做法是把源代码当作序列文本,用词嵌入(word embedding)技术将代码符号映射为向量,再输入神经网络分类器。此外,更高级的做法是构造抽象语法树(AST)或控制流图等结构,再通过图嵌入或图神经网络(GNN)将其表示为向量。通过这些方法,代码的语法结构和一定程度的语义关系被保留在向量中,供模型学习。
自动特征提取。深度学习擅长自动提取特征,在代码分析中,研究人员可以用深度学习模型直接从原始代码中学习漏洞相关特征,减少人工的参与。例如,使用长短期记忆网络(LSTM)遍历代码token序列,让模型自主识别可能存在的潜在漏洞的语法模式或变量关系。同时,也可以利用卷积神经网络(CNN)在AST的邻接矩阵上进行卷积,自动捕获“危险模式”,类似于让模型自己总结漏洞的语言模式。实践表明,深度学习能够发现许多人工难以想到的特征组合,尤其对复杂漏洞(如多步逻辑错误)的检测效果更好。
安全补丁和漏洞描述分析。NLP还可以用于分析历史安全补丁的文本、漏洞报告的描述等,从中抽取漏洞模式信息。例如,通过对大量漏洞补丁前后的代码差异进行文本对比,训练模型识别补丁修改的地方(如检查长度、增加验证等),利用这些知识帮助检测未修补的相似漏洞。再如,将漏洞数据库中的自然语言描述输入大型语言模型,让其提取出漏洞触发条件、影响函数等关键信息,辅助静态扫描工具进行针对性检查。这种“从文字中学习漏洞知识”的方式,实际上是将安全专家的经验以数据驱动形式传递给AI。
代码评论和文档分析。某些特殊的评论或文档中可能潜藏危险代码,NLP模型可以解析这些人类的语言内容,从侧面提示可能的漏洞位置。此外,对开源项目的问题描述和提交记录进行情感分析,也可以有效识别高频出现问题的模块,从而引导漏洞挖掘方向。
综上所述,NLP技术使得AI能够更深入地理解代码语义,这对于挖掘依赖逻辑语义的漏洞(如认证绕过、加密不当)非常重要。随着大模型在编程语言上的预训练取得进展(例如OpenAI的Codex、CodeBERT模型),利用NLP助力漏洞挖掘的效果会进一步提升。可以预见,NLP与代码安全的融合将成为未来AI漏洞挖掘领域的重要趋势之一。
二、人工智能在漏洞挖掘中的应用实践和主要挑战
大型科技企业、开源项目和学术研究在AI应用于漏洞挖掘方面已取得一些可喜的进展,开始迈向对漏洞的“发现-修复”全流程自动化的目标。
(一)人工智能在漏洞挖掘中的应用实践
AI在漏洞挖掘中的应用已开始落地,涌现出一些工具和平台。商业扫描器如静态应用安全测试(SAST)工具和动态应用安全测试(DAST)工具已尝试引入AI,从而减少误报并提高扫描深度。DeepCode是业界知名的基于机器学习的代码审核工具,能够通过训练所得规则检测代码中的错误和安全漏洞,并提供修复建议。微软、谷歌、英特尔等公司也在其开发者工具链中加入了AI扫描功能,同时提供模糊测试平台和漏洞检测平台。在国内,源自清华系的华清未央推出了“机器语言大模型”(Machine Language Model,MLM),主打智能化的软件逆向分析,以发现其中的安全风险。
与此同时,AI智能体驱动的漏洞挖掘系统也开始初露锋芒。2024年11月,谷歌旗下的安全团队Project Zero宣布,其构建的AI漏洞挖掘代理系统“BigSleep”首次在真实大型软件中发现了一个此前未知的安全漏洞,该漏洞已潜伏了二十年之久。此案例表明,AI在补充现有漏洞挖掘手段的短板方面具有巨大的潜力。
AI在漏洞领域的应用不仅限于漏洞发现,还开始延伸至自动修复领域。一个典型案例是GitHub Copilot结合CodeQL推出的“代码扫描自动修复”功能。2023年11月,GitHub宣布,CodeQL扫描发现漏洞后,可以调用大型语言模型(Copilot的后端GPT模型)自动生成修复代码,并通过拉取请求直接提供给开发者参考与合并。GitHub声称,在初步测试中,该功能可自动修复约三分之二的常见漏洞警报。2025年初,谷歌也发布了名为Jules的AI编码助手,专注于自动修复漏洞的能力。Jules基于谷歌最新的大型模型Gemini 2.0,能够无缝集成到GitHub工作流中,用于分析复杂代码库,提出跨多个文件的综合修复方案。与Copilot偏重单一问题的改动不同,Jules定位为更自主的代理,可以批量修复系统中的多处相关漏洞,更像一个AI工程师而非简单工具。在试用过程中研究人员发现,Jules能够将一些繁琐的代码重构任务从原来耗时一周的时间,缩短到几分钟完成。
上述案例表明,尽管AI在漏洞挖掘中的应用尚处于起步阶段且效果有限,但随着技术的不断进步,未来开发者或许只需一键扫描,AI即可给出修复补丁,从而大幅缩短从漏洞发现到修补的时间窗口。这将对提升软件生态整体安全水平产生深远的影响。
(二)人工智能在漏洞挖掘中的挑战与限制
虽然AI在漏洞挖掘中展现了巨大潜力,但当前仍存在很多局限和挑战,需要理性认识并进行科学权衡。
一是存在检测准确性与误报问题。机器学习模型并非完美,可能会产生误报(将安全代码误判为漏洞)和漏报(将漏洞代码误判为安全)。尤其在静态分析场景下,模型可能因训练数据偏差,将某些安全惯用写法错误地标记为危险,增加开发者的负担。此外,如果模型训练不当,也可能引入新的误报类型。许多深度学习模型属于“黑箱”,当它们报告某行代码存在漏洞时,往往缺乏可解释的原因,难以说服开发者接受修复建议。因此,需要在模型复杂度和可解释性之间做好权衡。
二是要加强泛化能力提升跨项目适用性。当前,大多数AI漏洞检测模型仍局限于单一语言或单一项目训练。一个机器学习模型通常只能对它见过的数据类型表现良好,在跨语言、跨域泛化方面尚未突破。将模型应用到全新项目或编程语言时,效果可能急剧下降。例如,跨项目的漏洞挖掘是一项挑战性的课题,即不同项目可能使用不同的语言、框架、编码规范,甚至漏洞分布特性也不同。为解决这一问题,需要更多研究,如开发能够映射不同语言语义到统一表示的技术,或者通过迁移学习、领域自适应等方法,使模型在新环境下保持良好的性能。
三是容易受到数据集质量与偏差的影响。机器学习的成败,很大程度取决于训练数据的质量。漏洞数据具有稀疏且不均衡的特点——在海量代码中,真正有漏洞的仅为少数。此外,公开的漏洞数据大多偏重某些类型(如缓冲区溢出、SQL注入等常见漏洞),而逻辑缺陷、设计缺陷等类型的数据较少。这导致模型训练时容易聚焦于频繁出现的模式,对于罕见但危害巨大的漏洞则无能为力。数据偏差还可能来自标注错误或漏标,一些非漏洞样本中可能潜藏漏洞,如果被误标为安全样本进行训练,会对模型产生误导。因此,提高数据集质量需要社区的协作:一方面,不断汇总新的漏洞样本,平衡各类漏洞比例,清洗标签错误,并生成足够的负样本(安全代码),避免模型过拟合。另一方面,合成数据也是一个方向,例如通过代码混淆和变异技术自动生成带漏洞的样本,丰富模型的学习数据。
四是要权衡计算资源与时间成本。训练和运行AI模型,尤其深度学习模型,对计算资源和训练时间的要求较高。同时,目前一些AI扫描工具在大型项目上的运行仍较缓慢,有时需要离线批处理,无法实时反馈,严重影响开发者的使用感受。这限制了AI工具在快速迭代开发中的采用。为了降低成本,研究者正在探索更高效的模型结构,并应用蒸馏、剪枝等模型压缩技术,让模型在保持准确率的同时加快推理速度。另外一种思路是结合云服务,将重计算任务放到云端集中处理,客户端只获取最终结果。但对于敏感代码,将数据上传云端也带来了数据安全的顾虑。如何在性能和资源之间取得平衡,是AI漏洞挖掘落地必须解决的问题。
五是存在对抗攻击风险。对抗样本攻击是近年来机器学习领域关注的重点,攻击者可以通过对输入数据进行微小改动来欺骗模型。在漏洞挖掘场景中,攻击者或恶意开发者有可能编写“对抗性代码”绕过AI检测。例如,通过改变变量命名或插入无关代码等方式,使恶意代码看起来与已知漏洞样本不相似,从而瞒过模型的检测。尤其随着技术的发展,当防御方普遍借助AI扫描时,攻击者必然会研究其检测模式并进行针对性规避。此外,还有数据中毒攻击的风险,如果AI模型在线学习或依赖社区提供的数据,攻击者可以提交特制的代码,诱使模型对某些漏洞“视而不见”或产生误判。为防范这些风险,安全AI模型需要融入对抗防御机制,例如在训练过程中加入对抗样本增强鲁棒性,或对模型输出的不确定性进行分析,以识别可能被误导的情况。
除了上述挑战,AI在漏洞挖掘中的应用还面临合规要求、责任界定、开发者的接受程度等问题。总体来看,AI在漏洞挖掘中的应用仍处于辅助增强阶段,远未达到完全自动化和无人值守的程度。因此,要正视其局限性,在实践中不断完善和改进,将其与传统方法结合形成互补,发挥AI的最大价值。
三、结 语
展望未来,人工智能在漏洞挖掘领域有多项值得期待的发展方向。随着算力提升和算法进步,AI模型将在代码理解上达到新的高度,这将使AI能够发现更加复杂、跨模块的漏洞。AI的参与将提升开发流程中的智能化安全管控能力,推动DevSecOps理念的落地;AI驱动的自动化漏洞修复与自愈技术将更加完善,甚至发展出自主修复能力。
从攻防视角来看,AI将成为未来网络空间军备竞赛的重要组成部分:一方面,防御者将利用AI筑起更高的壁垒;另一方面,攻击者也会开发AI寻找漏洞并发动攻击。未来的安全领域很可能出现“AI vs AI”的场景,攻防双方的智能化差异或将直接决定网络空间冲突的胜负走向。
总体而言,AI在漏洞挖掘中的应用已从理论探索迈入实践落地阶段,在一定程度上已经改变了漏洞挖掘的游戏规则。作为“效率倍增器”,AI的价值日益凸显,正朝着更加自动化、智能化和主动防御的方向发展。可以预见,随着技术的不断积累,AI或将成为安全领域的核心支柱,大幅提升对抗漏洞和未知威胁的能力。然而,我们也清醒地认识到,现阶段AI并不能完全替代人类专家。模型的局限性、数据的不足以及对抗威胁的存在,意味着AI工具仍需在人类监督下使用。未来,随着模型能力的提升与开发流程的深度集成,AI有望实现从漏洞发现到修复的闭环,推动软件安全从“被动应对”转向“主动防御”。在这一进程中,技术创新、数据质量、伦理规范与人才培养缺一不可。唯有持续探索与协作,方能构建更安全的数字生态。
(本文刊登于《中国信息安全》杂志2025年第2期)
上一篇:通知 | 工信部印发《2025年护航新型工业化网络安全专项行动方案》(附全文)
下一篇:没有了!