前言
漏洞检测的前世与今生
2023年,全球共披露了26447个漏洞,同比增长5.2%,创下历史新高。超过7000个漏洞具有概念验证利用代码,容易被黑客用于实际攻击。此外,共有115个漏洞已经被黑客广泛利用。这些漏洞涉及多个知名软件和系统,包括Microsoft Outlook、Adobe ColdFusion、GitLab、Cisco IOS XE Software和Atlassian Confluence Server等。2023年漏洞TOP5的CVSS评分均在9.8以上,显示出极高的风险等级。同时,2022-2023年十大漏洞频发企业涵盖了微软、谷歌、苹果、三星、戴尔、IBM、本田、PayPal、美国航空和AMD等知名企业。这些数据强调了漏洞检测对于保障网络安全和防止潜在攻击的紧迫性和必要性。
在示例代码中,第7行使用malloc()函数执行内存分配,并在第9行使用free()函数释放分配的内存。然而,在第11行的for循环语句中,先前释放的内存data在第12行再次被释放,从而导致双重释放漏洞。这种漏洞可能导致应用程序崩溃或拒绝服务攻击等问题。图中还列举了相关漏洞实例,如CVE-2023-28464和CVE-2022-40515,进一步强调了此类漏洞的危害性和识别的重要性。
早期的人工代码安全审计依赖于专业技术人员的知识,主要用于发现代码中的安全隐患。静态分析工具在20世纪70年代开始辅助审计工作,但存在较高的漏报和误报率。进入90年代,融合动态测试技术的应用提高了检测覆盖率,但仍面临漏报高的问题。近年来,随着人工智能技术的发展,人工智能漏洞挖掘技术逐渐兴起,因其易用性和高效率而备受关注。这些方法共同构成了现代漏洞检测的综合体系,帮助企业和组织更有效地识别和修复潜在的安全风险。
漏洞数据集质量研究
数据驱动的任务高度依赖于数据,标签的准确性决定了模型检测结果的可靠性。真实数据集的数据量小且难以收集,而合成数据集虽然数据量大,但代码简单且不具代表性。非功能性更改,如样式更改、重构和代码迁移,都会混淆数据标记过程。例如,将常量值转换为等价宏,以及tangled commits(混合提交)可能会并行执行其他无关的更改,这些更改容易被误认为是有漏洞的代码。因此,通过patch和diff来生成标签,可以更准确地识别和处理这些复杂情况,从而提高数据集的质量和模型的性能。
漏洞样本与非漏洞样本的比例严重不平衡,数据集中存在17%到99%的数据样本重复现象,约20%到71%的漏洞标签不准确。具体来看,Devign数据集由安全供应商提供,包含188636个函数,漏洞率为5.78%,准确性为0.800,唯一性为0.899;Big-Vul数据集由开发商提供,包含27318个函数,漏洞率为45.61%,准确性为0.543,唯一性为0.830;D2A数据集通过工具创建,包含1295623个函数,漏洞率为1.44%,准确性为0.286,唯一性仅为0.021;Juliet Testsuit数据集通过人工合成,包含253002个函数,漏洞率为36.77%,准确性为1.000,但唯一性为0.163。这些数据表明,数据集质量问题是AI漏洞检测领域亟待解决的一个难题。
漏洞检测模型原理与实现
从数据集开始,通过预处理将代码转换为中间表示形式,如序列、切片、树和图等。接着,这些中间表示被转化为特征向量,以便输入到AI模型中进行训练。经过模型训练后,系统能够执行特定任务,如判断代码是否含有漏洞(Vulnerable or Non-vulnerable)、识别具体的漏洞类型(Which)以及定位漏洞的具体位置(Where)。整个流程通过函数f(P)来表示,其中P代表原始数据集,I代表中间表示,F代表特征向量,N代表模型训练,R代表最终结果。这一系列步骤确保了AI在漏洞检测中的高效性和准确性。
漏洞检测方法主要包括DAST(动态应用安全测试)、SAST(静态应用安全测试)和IAST(交互式应用安全测试)。代码表征类型包括Token sequence(令牌序列)、Tree(树结构)、Graph(图结构)和Binary(二进制)。检测粒度级别分为Function(函数级)、Program slice(程序切片)和Statement/Line(语句/行级)。神经网络模型则涵盖了RNN(循环神经网络)、GNN(图神经网络)、CNN(卷积神经网络)、BERT(双向编码器转换器)和Transformer等。
在具体应用中,SAST技术通过模式分析、基于规则的方法、代码相似性和机器学习等方式进行漏洞检测。而DAST技术则主要依赖模糊测试和符号执行来发现潜在的安全问题。右侧的示例代码展示了不同级别的检测粒度,从函数级别到语句级别,再到切片级别,体现了漏洞检测的多层次和多维度特性。
代码通过抽象语法树(AST)、控制流图(CFG)、数据流图(DFG)和命名冲突图(NCS)进行表示。这些表示形式被整合成一个综合的图结构,用于捕捉代码中的各种关系和依赖。接下来,利用图卷积网络(GCN)对这个图结构进行处理,提取关键特征并识别潜在的漏洞。最终,系统能够准确地定位和报告代码中的问题函数。图中还提供了一个整数溢出的代码示例,详细展示了从代码到图表示的过程,以及如何通过GNN技术进行漏洞检测。
这张图展示了基于图简化的漏洞检测技术(AMPLE)的工作原理。首先,源代码被转换为代码结构图,并通过基于类型的图简化和基于变量的图简化进行处理,以减少复杂性并保留关键信息。接下来,边缘感知GCN模块对简化后的图进行分析,提取节点和边的特征向量。这些特征向量经过核缩放模块的处理,进一步增强图表示的学习能力。整个过程通过多层卷积神经网络(CNN)和注意力机制来捕捉代码结构中的深层模式,从而提高漏洞检测的准确性和效率。右侧的示例代码展示了如何通过图简化和GCN模块识别潜在的安全问题。
这张图展示了基于Transformer的漏洞定位技术(LineVul)的工作流程。首先,源代码通过BPE(字节对编码)进行预处理,将其转换为子词级别的表示形式。接着,这些子词被输入到CodeBERT模型中,利用其强大的语义理解能力进行编码。经过编码后的数据通过一系列Transformer编码器层进行处理,每一层都包含前馈神经网络和双向多头自注意力机制,以捕捉代码中的复杂依赖关系。
在训练阶段,模型通过学习源代码和二进制标签之间的关联,逐步优化参数。而在推理阶段,模型能够对新的代码片段进行预测,并输出函数级和行级的漏洞预测结果。此外,模型还提供了注意力得分,帮助安全分析师更准确地定位潜在的安全问题。整个过程通过多层次的Transformer编码器和线性分类器,实现了高效且精准的漏洞检测。
漏洞检测模型的攻防
代码的特性是非结构化数据且空间离散,无法通过添加特征扰动来攻击。对抗样本或数据投毒或后门攻击是常见的攻击手段。构造代码的对抗样本需要满足语法有效性(可通过编译)、语义不变性(输出结果一致)以及自然规范性(符合程序员编写风格)。图中还展示了图像对抗样本生成的例子,通过微小的扰动使图像被错误分类。右侧的代码示例则展示了如何通过变量随机替换生成代码对抗样本,以混淆漏洞检测模型的判断。
通过循环结构改写、条件语句改写和语句顺序转换,可以改变代码的形式而不影响其功能。此外,添加或删除死代码、变量或函数重命名、算数表达式调整以及常量替换等技术也能实现类似的效果。这些转换方法利用Txl编程语言进行自动化处理,确保源代码在经过转换后仍能保持原有的逻辑和功能。右侧的示例代码分别展示了循环改写和常量替换的具体应用,通过这些技术可以有效提高代码的多样性和复杂性,从而增强漏洞检测模型的鲁棒性。
攻击前,模型的F1分数为0.9264,显示出较高的性能。然而,在攻击后,F1分数显著下降至0.0435,精度和召回率也分别从0.9663和0.8897降至0.3077和0.0234。尽管数据集不平衡且漏洞率仅为5.78%,但攻击导致模型的准确性变化不大。这表明模型在面对攻击时未能有效捕捉深层漏洞语义,仅学习了浅层代码序列信息,从而导致性能大幅下降。
将训练样本与对抗样本结合,用于预训练模型,以增强模型的鲁棒性和泛化性。接着,利用深度学习(DL)技术进行漏洞检测(VD),并通过融合(Fusion)方法进一步优化模型性能。整个过程旨在通过增加对抗样本的多样性,使模型在面对未知攻击时能够更有效地识别和抵御潜在的安全威胁。
漏洞检测模型的可解释性
通过代码行预测值排序或计算注意力分数,可以识别与漏洞相关的代码。进一步求解每个特征值对预测结果的贡献度,有助于理解哪些代码片段更可能包含漏洞。左侧的示例代码显示了特定代码行被标记为高风险区域,右侧则展示了模型输出如何通过特征权重进行解释。这种可解释性不仅揭示了新的漏洞特征和模式,扩展了对漏洞检测领域的知识和理解,还帮助安全专家更好地理解检测结果,从而做出更为准确的决策。
模型无关方法包括LIME,它通过生成局部线性模型来解释复杂模型的预测;以及SHAP,这是一种基于博弈论的特征重要性分配方法。代理模型方法则利用决策树等可解释的模型来近似原始复杂模型的行为。模型内部方法包括Grad-CAM,通过梯度信息可视化卷积神经网络的关注区域;以及Integrated Gradients,通过积分梯度来衡量特征的重要性。这些方法共同提升了模型的透明度和可理解性,帮助用户更好地理解和信任模型的预测结果。
漏洞检测未来展望
通用大模型被转化为任务大模型,专门用于漏洞检测。这一过程强调了模型的端到端能力,能够直接进行漏洞的自动化检测与挖掘,而不仅仅是辅助预处理或特征工程。在数据量方面,通过数据增强或合成数据来提升模型性能。接下来,模型应用于具体项目中,自动识别漏洞并生成修复补丁(patch),同时进行实验(exp)以验证修复效果。整个流程旨在提高漏洞检测和修复的效率与准确性。