1、软件开发与应用Software Development&Application电子技术与软件工程Electronic Technology&Software Engineering46基于机器学习的软件漏洞检测方法在提取数据特征方面更加自动化,相对于传统技术具有更高的效率1。联邦学习是一种由多个客户端协作解决机器学习问题的模型训练机制,具有分散训练、参数聚合等特点2。在自动化漏洞检测方面应用联邦学习前景广阔。在自动化漏洞检测方面应用联邦学习前景广阔,主要体现在两方面:一方面,代码数据隐私得到保障,数据占用方掌握大量源代码,但会因隐私泄露风险而不公开数据集,联邦学习在扩充数据样本规模的同时保障了
2、漏洞样本的隐私安全;另一方面,联邦学习中分布式的训练架构使得多方计算资源能得到较为充分的利用,从而加速软件漏洞模型的训练效率。然而,联邦学习中数据来源分散可能导致客户端数据质量缺乏保障。恶意客户端利用中毒数据进行本地训练,可能导致软件漏洞联邦检测模型遭受后门攻击的威胁。本文首先验证了源代码中与代码功能语义无关的冗余信息的存在性,尽管此类信息不影响代码的运行结果,但他们在表征过程中会被保留下来,从而影响模型训练;其次,本文还设计了一种针对软件漏洞联邦检测模型的新型后门攻击方案,利用冗余语义向训练数据中插入不影响代码功能的触发器,从而实现在不改变恶意代码功能的前提下绕过软件漏洞联邦检测模型的攻击机
3、制。本文的主要贡献如下:(1)提出“语义冗余”的概念来定义代码表征中与功能语义无关的冗余信息。建立基于语义冗余的无损后门攻击机制,从语义冗余空间生成有毒代码表示,既不影响模型的准确性,也不降低恶意代码的功能。(2)通过大量实验验证了语义冗余的存在性以及所提攻击方法的有效性,并总结了应对上述攻击的 3 类防御对策。1 相关工作1.1 代码语义表征常见的代码表征技术有:(1)词嵌入技术,包括 Word2Vec4、GloVe5、Doc2Vec6、CodeBERT7等;(2)代码序列切片技术,BLSTM 和 BGRU 特别适合从上下文有依赖关系的代码序列中提取语义特征,将完整代码按照执行逻辑进行切片并
4、利用记忆网络进行推理分析3。GAT 和 GCN 等图特征表示方法近年来也被引入软件漏洞检测领域7,该方法从不同类型的代码属性图中提取语义信息,主要包括 AST(抽象语法树)、CFG(控制流图)、PDG(程序依赖图)及其组合等。现有的漏洞检测模型在未知、异构样本上检测精度依然很差。1.2 无损后门攻击无损后门攻击指后门触发器不影响载体本身所要传基于语义冗余的联邦漏洞检测模型无损后门邵长捷易啸宇李建华李高磊*(上海交通大学电子信息与电气工程学院 上海市 200240)摘要:本文提出了一种基于语义冗余的联邦漏洞检测模型无损后门攻击机制,该方法可在不影响代码功能的情况下实现后门植入。在 8 个代表性漏
5、洞数据集的 1613823 个样本上实验并验证了语义冗余的存在性和该攻击方案的可行性。关键词:语义冗余;后门攻击;代码功能;漏洞检测基金项目:国家自然科学基金:U20B2048,国防基础科研项目:JCKY2020604B004,上海市青年科技英才扬帆计划项目:21YF1421700,上海市科委“科技创新行动计划”(No.22511101200,No.22511101202)。软件开发与应用Software Development&Application电子技术与软件工程Electronic Technology&Software Engineering47递的信息。由于代码本身具有文本上下文特
6、征,可用自然语言处理进行代码语义表示,这为漏洞检测引入了文本后门攻击。Dai 等8首次在文本数据中粘贴触发器并证明自然语言处理模型极易遭受后门攻击。2 方案设计2.1 基于语义冗余的无损后门攻击代码中与代码功能逻辑不相关的语义信息被定义为语义冗余,攻击者利用语义冗余生成中毒样本,并对联邦漏洞检测模型进行投毒。基于语义冗余的无损后门攻击机制的工作流程:首先,攻击者对所控制的节点进行分析并选用合适的语义冗余模式向良性样本中插入触发器,然后篡改其标签以构建中毒数据集。当该节点参与模型训练时,本地模型在中毒数据集上进行训练并将参数更新上传至中心服务器,从而在全局模型中植入后门。2.2 基于语义冗余的触
7、发器插入方案向样本 i 的语义冗余信息中插入触发器 Ti的流程如算法 1 所示,表示样本 i 应表征的与功能逻辑相关的语义信息。为了不影响投毒目标的任何正常功能,投毒问题可抽象为一个联合优化问题,且应满足以下约束条件:(1)其中 F 为深度神经网络的参数函数。在训练阶段,通过最小化损失函数 L 测量模型判断和标签之间的差距,进而通过梯度下降算法进行训练,从而确定模型参数*。为了在训练时误导模型,本文向所控制节点的训练数据中插入触发器,并更改其标签,如标签从 Vulnerable(1)改为 NOT Vulnerable(0)。在无损后门攻击中,大小为k的有毒数据集携带触发器。为确保不影响样本 i
8、 的功能,需将触发器 Ti插入到公式(1)中的中,以避免破坏。因此,是的子集。全局模型会将带有触发器的测试样本分类到目标类别中。3 实验设计与结果分析实验一验证了在广泛源代码中语义冗余的存在性;实验二对同类漏洞检测方法进行对比,证明了不同表征方法下攻击方法的有效性。3.1 实验设置数据集:为了验证语义冗余的普遍存在性,实验一共涉及 8 个代表性数据集,即 SARD、ReVeal、Juliet、NVD、Draper、FFmpeg、Qemu 和 Big-Vul,涵盖了各类样本,包括合成样本、半合成样本和真实样本。其中,SARD 和 Juliet 使用已知漏洞模式合成,合成样本具有主流代码漏洞的特征
9、;NVD 中半合成样本实在实际项目的已知漏洞上进行了修改和标记;其余 5 个数据集的样本均为真实样本,其中 ReVeal7是从 Chromium和 Debian 项目中收集的样本;Draper,FFmpeg,Qemu和 Big-Vul 包含了来自 GitHub 公共库的代码样本,其中Big-Vul 涵盖了 300 多个不同的开源 C/C+项目,有 91种不同的漏洞类型,常被用作基准数据集。评价指标:将各类基线方法应用于多个数据集以验证攻击有效性。其中,SySeVR3使用 SARD,LineVD和 LineVul9使用 Big-Vul。本文以 ASR 和 CACC4为评估指标评估后门攻击效果。(
10、1)CACC(Clean Accuracy),即后门模型在干净样本上的分类精度。该指标反映后门攻击的隐蔽性;(2)ASR(Attack Success Rate),即后门模型在中毒样本上的分类准确率,该指标反映后门攻击的定向性和有效性;(3)BP(BaselinePerformance),基线方法在其原始训练集上按照原始策略训练后,在相应验证集上的分类精度。由于不同基线方法的性能存在差异,本文将使用BP 来排除不同基准的影响。基线方法:使用 SySeVR3,LineVD 和 LineVul9作为基于深度学习的漏洞检测基线方法,并分别使用适配的模型(即 BGRU,BLSTM,GAT,GCN,Tr
11、ansformer)。参数设置:实验设置 4 个联邦学习参与者,其中 2个参与者是恶意的,各个参与者的数据集不重合。软件开发与应用Software Development&Application电子技术与软件工程Electronic Technology&Software Engineering483.2 语义冗余的存在性证明为了观察异构数据集的语义冗余,本文主要搜索包含条件语句、逻辑计算、循环和赋值的 4 类常见冗余信息作为插入点,这些冗余信息可以被本文使用的模式利用,即命名规则和代码风格。首先,不同变量命名约定可表示相同的赋值逻辑。其次,可使用不同的语法(代码风格)来表示相同的逻辑。这些对
12、依赖关系载体的改变都不会影响代码功能和执行结果。触发器插入过程如算法表 1 所示。为了保持 100%的功能一致性,只需对文本进行少许修改以插入触发器,并统计每个样本的修改比例来表明语义冗余的普遍存在10-11。大多数样本的修改比例均很小,不影响代码功能。上述结果的一致性表明语义冗余在广泛代码样本上的普遍存在性,也表明语义冗余空间对于后门攻击具有巨大的利用价值。3.3 不同表征方法下的攻击效果表征方法的不同对后门攻击效果有潜在影响。本文表 1:跨表征的实验效果对比基线方法语义冗余模式数据集处理方式处理粒度词嵌入技术BP(%)ASR(%)SySeVR命名规则SARD切片表征处理函数级Word2Ve
13、c96.5589.67SySeVR代码风格SARD切片表征处理(符号化)函数级Word2Vec96.5594.34LineVD代码风格BigVul图表征处理函数+语句级CodeBERT85.6489.46LineVD代码风格BigVul图表征处理函数级CodeBERT44.9362.43LineVD代码风格BigVul图表征处理语句级CodeBERT85.7989.47LineVD代码风格BigVul图表征处理函数+语句级Doc2Vec85.0789.06LineVD代码风格BigVul图表征处理函数+语句级GloVe85.5289.37图 1:两类语义冗余模式的训练效果对比软件开发与应用So
14、ftware Development&Application电子技术与软件工程Electronic Technology&Software Engineering49以 SySeVR 和 LineVD 为基线对比了不同表征方法下的攻击效果,结果如表 1 所示。(1)处理方式。合理的预处理可起到对部分语义冗余的过滤。但是,如表 1 所示,未被特意过滤的语义冗余模式(如代码风格)仍存在于符号化后的代码,并可被联邦模型所学习。作为两类典型的处理方式,序列化和图关联均不会消除模型对语义冗余的学习。图 1 展示了分别利用命名规则和代码风格两种语义冗余模式时后门模型的训练效果。代码风格的利用效果更好,说明
15、这类语义冗余特征更容易被模型学习。总体而言,两种情况下的曲线趋势一致,说明不同语义冗余特征都可被模型学习。(2)处理粒度。由表 1 可见,LineVD 函数级表征性能不佳,但 ASR 相比于 BP 增加较明显;语句级表征具有较好的性能,说明函数级表征中存在更大的语义冗余空间,模型更容易从中学到语义冗余特征。(3)词嵌入技术。为获取更高的性能,包括Word2Vec,CodeBERT,Doc2Vec,GloVe 在内的词嵌入技术被应用到代码表征领域,但表 1 的结果显示,词嵌入不影响模型对语义冗余特征的学习。4 结束语本文提出了一种针对联邦漏洞检测模型的无损后门攻击机制。该机制主要利用语义冗余,实
16、现在不影响代码本身功能的前提下逃避模型的检测。实验表明各种表征方法均存在语义冗余且模型对语义冗余特征的学习主要与基线方法本身的性能有关。下一步研究将围绕如何系统地识别语义冗余并对其进行自动化过滤开展。参考文献1 李韵,黄辰林,王中锋,等.基于机器学习的软件漏洞挖掘方法综述 J.软件学报,2020,31(07):2040-2061.2 Zhang C,Xie Y,et al.A survey on federated learningJ.Knowledge-Based Systems,2021,216:106775.3 Yi X,Wu J,et al.Recurrent Semantic Lea
17、rning-driven Fast Binary Vulnerability Detection in Healthcare Cyber Physical Systems J.IEEE Transactions on Network Science and Engineering,2022.4 Mikolov T,Chen K,et al.Efficient estimation of word representations in vector spaceJ.arXiv preprint arXiv:1301.3781,2013.5 王昊.基于语义特征的多粒度软件缺陷预测技术研究 D.苏州大
18、学,2021.6 李峰,柯伟扬,盛磊,等.Doc2vec 在政策文本分类中的应用研究 J.软件,2019,40(08):76-78.7 曾鹏.基于可迁移的代码数据驱动语言模型的软件漏洞检测研究 D.云南师范大学,2022.8 Dai J,Chen C,et al.A backdoor attack against lstm-based text classification systemsJ.IEEE Access,2019,7:138872-138878.9 管怡晨.基于机器学习的恶意软件检测方法研究与实现 D.北京邮电大学,2021.10 Fan J,Li Y,et al.AC/C+cod
19、e vulnerability dataset with code changes and CVE summariesC.ICMSR,2020:508-512.11 曹道通.计算机软件中安全漏洞检测技术与应用分析 J.软件,2022,43(09):180-182.作者简介邵长捷(1999-),男,山东省济宁市人。硕士研究生。研究方向为深度学习与漏洞检测。易啸宇(1994-),男,江西省九江市人。博士研究生。研究方向为二进制代码分析、漏洞检测。李建华(1965-),男,江西省九江市人。博士学历,教授。研究方向为内容安全,舆情监测,态势感知等。李高磊(1992-)(通讯作者),男,河南省开封市人。博士学历,讲师。研究方向为人工智能与系统安全。