1、信息安全研究第10 卷第4期2 0 2 4年4月Journalot information Security ResearchVol.10No.4Apr.2024DOl:10.12379/j.issn.2096-1057.2024.04.02基于BERT模型的源代码漏洞检测技术研究罗乐琦张艳硕王志强文津薛培阳(北京电子科技学院北京100070)()Research on Source Code Vulnerability Detection Based on BERT ModelLuo Leqi,Zhang Yanshuo,Wang Zhiqiang,Wen Jin,and Xue Peiya
2、ng(Beijing Electronic Science and Technology Institute,Beijing 100070)Abstract Techniques such as code metrics,machine learning,and deep learning are commonlyemployed in source code vulnerability detection.However,these techniques have problems,suchas their inability to retain the syntactic and sema
3、ntic information of the source code and therequirement of extensive expert knowledge to define vulnerability features.To cope with theproblems of existing techniques,this paper proposed a source code vulnerability detection modelbased on BERT(bidirectional encoder representations from transformers)m
4、odel.The model splitsthe source code to be detected into multiple small samples,converted each small sample into theform of approximate natural language,realized the automatic extraction of vulnerability features inthe source code through the BERT model,and then trained a vulnerability classifier wi
5、th goodperformance to realize the detection of multiple types of vulnerabilities in Python language.Themodel achieved an average detection accuracy of 99.2%,precision of 97.2%,recall of 96.2%,andan F1 score of 96.7%across various vulnerability types.This represents a performance improvement of2%to 1
6、4%over existing vulnerability detection methods.The experimental results showed thatthe model was a general,lightweight and scalable vulnerability detection method.Key words vulnerability detection;deep learning;Python language;BERT model;natural languageprocessing摘要源代码漏洞检测常使用代码指标、机器学习和深度学习等技术.但是这些技
7、术存在无法保留源代码中的句法和语义信息、需要大量专家知识对漏洞特征进行定义等问题.为应对现有技术存在的问题,提出基于 BERT(bidirectional encoder representations from transformers)模型的源代码漏洞检测模型.该模型将需要检测的源代码分割为多个小样本,将每个小样本转换成近似自然语言的形式,通过BERT模型实现源代码中漏洞特征的自动提取,然后训练具有良好性能的漏洞分类收稿日期:2 0 2 3-0 5-30基金项目:中国博士后科学基金面上项目(2 0 19M650606);中央高校基本科研业务费专项资金项目(32 8 2 0 2 2 0 3,
8、2 0 2 30 0 45Z0114);北京电子科技学院一流学科建设项目(32 0 10 12)通信作者:王志强()引用格式:罗乐琦,张艳硕,王志强,等。基于BERT模型的源代码漏洞检测技术研究J.信息安全研究,2 0 2 4,10(4):2 94-30 12941学术论文.ResearchPapers器,实现Python语言多种类型漏洞的检测.该模型在不同类型的漏洞中实现了平均99.2%的准确率、97.2%的精确率、96.2%的召回率和96.7%的F1分数的检测水平,对比现有的漏洞检测方法有2%14%的性能提升.实验结果表明,该模型是一种通用的、轻量级的、可扩展的漏洞检测方法.关键词漏洞检测
9、;深度学习;Python语言;BERT模型;自然语言处理中图法分类号TP393.08随着互联网技术的快速发展,互联网已经融入现代社会的方方面面,包括医疗保健、能源、交通、公共安全、教育、娱乐等,互联网已经成为民生国计中不可或缺的一部分.然而,互联网面临着越来越严重的网络攻击威肋胁.网络安全漏洞可以出现在各种不同的系统和应用程序中,包括操作系统、网络设备、应用程序、数据库等.这些漏洞可能会被黑客用来窃取敏感信息、破坏系统、分发恶意软件、进行勒索攻击等.例如,勒索软件WannaCry利用Windows操作系统的漏洞进行传播,导致数百万计算机系统和网络设备瘫痪,波及医院、银行、电信运营商、政府机构等
10、.往往只是因为几行代码不规范或者没有考虑到安全问题,就足以导致严重的漏洞并使系统成为容易攻击的目标.著名的“心脏滴血”漏洞是OpenSSL密码库中一个严重的缓冲区溢出漏洞,影响了数十亿互联网用户,但只需要增加2 行安全代码就可以防范.截至2 0 2 2年,通用漏洞披露(common vulnerabilities andexposures,C V E)已记录了36 6 8 15个漏洞,其中危险漏洞占比高达41.8 2%.这些漏洞的成因复杂,种类繁多,给漏洞的预防和检测带来了很大的困难,如何高效地进行漏洞检测是一个迫切且值得研究的课题.检测漏洞的经典方法是静态分析、动态分析和动静混合分析,运用这
11、些方法进行漏洞检测需要人类专家进行大量工作.然而,现代软件和操作系统的规模更大且复杂性也更高,这些方法耗费的人力成本越来越大,漏洞检测的效果也不佳。机器学习技术的出现带来了漏洞检测的新思路.机器学习算法可以学习易受攻击代码的模式并提取漏洞特征.但是基于机器学习的检测技术的性能仍然依赖于人类专家定义的模式的质量,这意味着专业知识水平会对性能产生重大影响.本文提出了一种基于BERT(b id ir e c tio n a lencoder representations from transformers)模型的源代码漏洞检测模型,将需要检测的源代码分割为一个个适合训练的小样本,将源代码视为自然语
12、言文本,通过BERT模型实现源代码中漏洞特征的自动提取,并训练具有良好性能的分类器实现多种漏洞的检测.本文的创新点和主要贡献如下:1)提出基于BERT模型的源代码漏洞检测模型,不需要依托专家知识即可实现对多种不同类型漏洞的检测;2)提出一种代码切片的方法实现数据的自动化预处理,便于模型将输人转换为所需的向量形式;3)在Python源代码数据集上开展了大量的实验和评估,实验结果表明,本文模型在不同类型的漏洞中实现了平均9 9.2%的准确率、9 7.2%的精确率、96.2%的召回率和96.7%的F1分数的检测水平与现有检测技术相比,本文模型有更高的准确率和更好的模型鲁棒性.1相关工作源代码漏洞检测
13、的研究方法分为3类:基于代码指标的漏洞检测、基于机器学习的漏洞检测和基于深度学习的漏洞检测.不同的研究方法没有绝对的区别,通常根据不同的应用场景、数据类型和规模进行混用。1.1基于代码指标的漏洞检测研究Morrison等人提出使用一系列代码指标构建漏洞检测模型,其中包括流失指标、复杂性指标、依赖性度量指标、规模指标等,这些指标已经被广泛运用于漏洞检测模型中。Shin等人2 采用代码复杂性指标对Mozilla应用程序框架中JavaScript引擎的9 个复杂性指标进行漏洞度量,使用2 元逻辑回归模型实现了80%召回率和2 5%误报率的预测结果.Chowdhury等人31在软件早期开发阶段运用网址
14、http:/1295信息安全研究第10 卷第4期2 0 2 4年4月Journalotinformatien Security ResearchVol.10No.4Apr.2024了复杂性、耦合性和内聚性相关的软件指标自动预测MozillaFirefox中容易出现漏洞的文件,利用决策树、随机森林、逻辑回归和朴素贝叶斯等技术,实现了整体预测准确率约为7 4%的预测效果。Zhou等人4设计了K-fold(K折交叉切分)堆叠分类器,基于提交信息和错误报告中对某一问题的代码修改,结合自然语言处理和机器学习技术,实现了8 3%精确率和7 4%召回率的预测效果。1.2基于机器学习的漏洞检测研究机器学习技术
15、已经被用于许多编程语言的漏洞检测中,通过分析有漏洞的代码段即可定义漏洞模式用于漏洞检测。Pang等人5 使用特征选择和分析将整个Java类分类为易受攻击或不易受攻击,对4种不同类型的Java Android应用程序进行预测,实现了约 92%准确率、96%精确率和8 7%召回率的预测效果.Hovsepyan等人6 将JavaAndroid项目的源代码视为一种自然语言.他们使用词袋技术将源代码转换为特征向量.然后使用支持向量机算法对这些特征进行2 元分类训练,达到了8 7%准确率、85%精确率以及8 8%召回率的预测效果。1.3基于深度学习的漏洞检测研究深度学习技术相比机器学习技术不需要手动定义漏
16、洞模式,可以通过深度神经网络提取易受攻击的特征.Nguyen等人门将漏洞检测视为归纳性的文本分类问题,通过将源代码视为标记序列的方式构建图,使用预训练编程语言模型的标记嵌人层进行初始化,然后利用图神经网络进行训练,获得较好的分类效果。陈传涛等人8 1提取程序的抽象语法树信息,并对抽象语法树进行压缩编码,在保留程序结构和语义特征的同时减少了语法树的复杂性,有效提升漏洞检测的效率。Wartschinski等人9从Github中收集一个大型的Python源代码提交数据集,通过词嵌人模型将源代码转换为子向量,通过训练长短期记忆网络模型,实现了96.8%准确率、8 3%召回率、91%精确率和8 7%F1
17、分数的预测效果.1.4存在的问题基于代码指标的漏洞检测无法保留源代码中2961的语义信息,限制了其在漏洞检测方面的表现,例如文献2-4.基于机器学习的漏洞检测研究可以较好地提取出漏洞特征,但是需要大量的专家知识对漏洞模式进行定义,例如文献5.基于深度学习的漏洞检测能自动地提取漏洞特征,然而其性能受限于数据集能否转化成AST或者图结构等便于提取的模式,例如文献7-8 .同时如文献6,9 表明,将源代码视为自然语言似乎能够提取更深层次的信息本文在以上研究的基础上,提出基于BERT模型的漏洞检测模型.通过将源代码视为自然语言进行训练,降低了数据集收集与处理的难度.本文通过BERT模型从代码中自动提取
18、漏洞语义特征,在保留源代码语义信息的同时,也解决了提取特征需要大量专家知识的问题.本文还对模型进行优化,使得检测性能优于现有研究的水平。2模型设计2.11BERT模型BERT模型是Google团队于2 0 18 年提出的一种预训练自然语言处理模型.BERT模型通过在大规模的文本数据上进行无监督的预训练来学习通用的语言表示,并将这些通用的语言表示用于各种下游自然语言处理任务,如文本分类、命名实体识别、语义相似度计算等.BERT模型的基本结构如图1所示。BERT模型将输人的文本转化为3种向量:1)字向量.每个字在字向量表中对应的1维向量2)文本向量.该向量的取值在模型训练过程中自动学习,用于刻画文
19、本的全局语义信息,并与单字/词的语义信息相融合.3位置向量.用于区分由于出现在文本不同位置的字/词所携带的语义信息的差异。BERT模型将字向量、文本向量和位置向量的加和作为输人,通过多层Transformer编码器10 1架构进行漏洞语义特征的提取。Transformer编码器结合多头注意力机制、前馈神经网络与残差连接等技术,通过双向训练及多层Transformer编码器堆叠的方式,可以准确地捕捉文本中长距离的依赖关系和上下文信息,进而生成高质量的表示向量.学术论文ResearchPapers语义特征多层Transformer编码器残差连接与标准化位置向量前馈神经网络残差连接与标准化文本向量多
20、头注意力机制字向量输入文本b图1BERT模型的基本结构2.2基于BERT模型的源代码漏洞检测模型本文在BERT模型的基础上,设计了用于源代码漏洞检测的总体模型,模型主要分为3个部分:数据预处理、训练模型及分类器.如图2 所示.训练一个高效的漏洞检测模型需要大量的源代码作为数据集.数据预处理部分对从网上收集的BERT模型Transformer编码器大量源代码进行切片操作,切割后的源代码成为一个个小样本,每个小样本都会打上有无漏洞的标签.将一个小样本与它对应标签作为模型训练的输入,从而形成训练数据集。训练模型主要由BERT模型、随机失活层、线性层与Sigmoid激活函数组成.语义特征Transfo
21、rmer编码器Transformer编码器代码向量化表示数据预处理代码集随机失活层线性层Sigmoid函数分类器输出是否存在漏洞图2 基于BERT的源代码漏洞检测总体模型网址http:/1297信息安全研究第10 卷第4期2 0 2 4年4月Journalotinformatien Security ResearchVol.10No.4Apr.20241)BER T 模型.基本架构是12 层Transformer编码器结构,采用掩码语言模型11I的方法进行预训练,可用于提取代码中的语义信息。2)随机失活层.随机地将一些神经元的输出设置为0,防止模型在训练时出现过拟合的现象,随机失活层参数设置为
22、0.3,也就是有30%左右的神经元会失活.3)线性层.用于将所有提取出的特征映射到一个维度为1的张量上,这个张量表示提取出来的整体特征.4)Sig m o id 激活函数.将提取出的输出映射到介于0 和1之间的值,也就是输人样本是否存在漏洞的概率。分类器根据输人的概率判断样本是否存在漏洞.本文设置分类器阈值为0.5,即认为输出概率大于等于50%的样本是存在漏洞的,而输出概率小于50%的样本不存在漏洞.本文通过数据预处理将源代码处理为近似自然语言的形式,使用本文提出的模型对源代码进行学习和特征提取,训练出高效的源代码漏洞检测分类器。3实验与结果分析3.1数据预处理本文采用的代码集来自于Warts
23、chinski等人9的研究,他们从Github上收集了大量高分Python项目修复漏洞的补丁信息,补丁中记录了修补漏洞的类型以及新旧版本的源代码差异.代码集含有跨站脚本攻击、SQL注人、跨站请求伪造、远程代码执行、路径泄露、开放重定向和命令注人7 种漏洞修复的补丁信息集.本文以SQL注人漏洞为例展示本文所用数据集的生成过程,如图3所示。代码片段来自于SQL漏洞的修复补丁信息,红色代码片段是旧代码相比于新代码被修改的片段.由于这次补丁提交修改的目的是修复SQL漏洞,所以可以认为被修改的旧代码片段是存在SQL注人漏洞的.据此,本文进行以下操作生成训练与验证的数据集:1)将代码集按空格、“n“t等间
24、隔符号分割成一定长度可训练的小样本;29812)将代码中多余的空格以及“n“t等间隔符号删除,并将所有字母转化为小写,让代码更接近自然语言;3)根据修复补丁的信息,给每个小样本打上标签,“1”代表存在漏洞,“0 代表不存在漏洞.for group_elem_year in queryset:parent_id=group_elem_year.parent_idgroup_elems_by_parent_id.setdefault(parent_id,).append(group_elem_year)return group_elems_by_parent_iddef _fetch_row_sq
25、l(root_ids):with connection.cursorO as cursor:query=.WHERE parent _id IN(list_ root ids).format(list _root_ ids=join(str(root_id)for root_idin root_ids)cursor.execute(query)#被修改的旧代码图3SQL注人漏洞代码片段以上述代码为例,可以生成如图4的数据集:group_elems_by_parent_id=for group_elem_yearin queryset:parent_id=group_elem_year.pare
26、nt_idgroup_elems_by_parent_id.setdefault(parent_id,).append(group_elem_year)return group_elems_by_parent_id,Oj#不存在SQL注入漏洞def_fetch_row_sql(root_ids):with connection.cursorO as cursor:query-(.where parent_idin(list_root_ids)(.).format(list_root_ids,.join(str(root _id)for root_id in root_ids cursor.ex
27、ecute(query),1)#存在SQL注入漏洞图4生成数据集示例按上述方法,本文以8:2 的比例生成所用的7种漏洞的训练集和验证集,如表1所示:表17 种漏洞的数据集和验证集漏洞类型训练集大小条SQL注人227679跨站脚本攻击44143命令注入100341跨站请求伪造146313远程代码执行76862路径泄露104962开放重定向67.9473.2评判指标首先定义公式中所用到的符号:1)真阳性TP(truepositive).被模型预测为正类的正样本.2)真阴性TN(t r u e n e g a t i v e).被模型预测为负类的负样本.3)假阳性FP(fa ls e p o s i
28、t iv e).被模型预测为验证集大小/条56.92011.0362508536578192162624116.987学术论文.ResearchPapers正类的负样本.4)假阴性FN(fa ls e n e g a t iv e).被模型预测为负类的正样本,如表2 所示:表2 符号定义实际结果预测结果11TP0FN为了衡量模型的性能,了解模型在检测任务中的表现,本文引入准确率、精确率、召回率以及F1分数4项衡量指标:1)准确率指模型预测正确的样本数量占总样本数量的比例,公式为TP+TN准确率一TP+TN+FP+FN2)精确率指所有被模型预测为正例的样本中真正为正例的样本占比,公式为TP精确率
29、=TP+FP3)召回率指所有真正为正例的样本中,被模型正确预测为正例的样本占比,公式为召回率=TP+FNTP4)F1分数是精确率和召回率的加权调和平均数.它的值越接近1,表示模型性能越好,公式为2X精确率X召回率F1分数二精确率十召回率3.3实验与结果分析本文实验所使用的环境配置如下:CPU为AMDRyzen9 3950X 3.5 GHz,GPU 为 NVIDIA GeForceGTX 3090,内存为 32 GB,操作系统为Ubuntu20.04.模型框架搭建是基于开源框架Pytorch.模型的输人长度设置为12 8 B,学习率设置为1E一0 5,训练轮数设置为10 轮.通过小批量的方式进行
30、训练与验证,训练时批次大小设置为8,验证时批次大小设置为4.由于目前基于BERT模型进行漏洞检测任务的相关研究较少,为了探究哪种优化算法更适合漏洞检测任务,本文对比了Adadelta(自适应增量学习率算法)12 、Adagrad(自适应梯度算法)13、Adam(自适应矩估计算法)14)、AdamW(带权重衰减的自适应矩估计算法)151、SGD(随机梯度下降算法)16 和RMSPROP(均方根传递算法)的优化效率,结果如图5所示:100%/率耻私959008580FP1TN图5本文模型采用不同优化器的准确率从结果可以看出,Adadelta算法对本文模型几乎不起作用,SGD和Adagrad算法优化
31、效率较慢,而Adam,RMSPROP,AdamW算法模型收敛较快,在准确率性能方面也很接近.本文接着从F1分数指标进一步对比 Adam,RMSPROP,AdamW算法,如图6 所示:9796%/深d959493929112345678910轮数图6 本文模型采用不同优化器的F1分数在F1指标中3种算法的表现也很接近,其中AdamW算法相比其他2 个算法有微小的领先,于是本文采用AdamW算法作为模型训练时的优化算法.本文针对7 种漏洞分别训练了分类模型,每个模型取10 轮中验证效果最好的1轮数据,结果如表3所示:表3对7 种漏洞检测结果漏洞类型准确率精确率召回率F1分数SQL注人98.6跨站脚
32、本攻击99.3命令注入99.2跨站请求伪造99.2远程代码执行99.7路径泄露99.5开放重定向98.7平均值99.2网址http:/1299金234AdadeltaAdagrad-AdamAdamwSGD一Adam福金56轮数AdamWRMSPROP1%97.195.397.294.298.694.897.996.098.098.996.898.894.895.797.296.27RMSPROP96.295.796.796.998.597.895.296.78910信息安全研究第10 卷第4期2 0 2 4年4月Journalot information Security ResearchV
33、ol.10No.4Apr.2024本文模型对7 种漏洞进行了检测,平均准确率指标为99.2%,平均精确率指标为97.2%,平均召回率指标为96.2%,平均F1分数指标为96.7%.本文模型在漏洞检测任务上取得了非常好的效果。对比模型本文模型10080%/率业私6040200SQL跨站脚命令跨站请远程代路径开放注入本攻击注入求伪造码执行图77种类型漏洞检测准确率指标对比对比文献9 中使用长短期记忆网络和词嵌人进行漏洞检测模型训练方法,在准确率、精确率、召回率和F1分数指标上分别有2.4%,5.8%,14%,9.6%的提升,如图7 10 所示:对比模型本文模型10080%/率6040200SQL跨
34、站脚命令跨站请远程代路径开放泄露重定向注入本攻击注入求伪造码执行泄露图87种类型漏洞检测精确率指标对比重定向对比模型本文模型10080%/率回品6040200SQL跨站脚命令跨站请远程代路径开放注入本攻击注入求伪造码执行泄露图97种类型漏洞检测召回率指标对比4结语本文提出了一种基于BERT模型的源代码漏洞检测模型.运用自然语言处理技术,将源代码视为自然语言文本的方式进行训练,在跨站脚本攻击、SQL注人、跨站请求伪造、远程代码执行、路径泄露、开放重定向和命令注入7 种漏洞检测中,本文模型较文献9 实现了全面提升.本文提出的检测模型适用于多种语言,未来的工作可以将模型推广到Java,C,C十十等源
35、代码的漏洞检测.也可以考虑将源代码转换为中间表示的形式,例如抽象语法树或数据流图等,突出主要语义信息以提高整体性能.参考文献1Morrison P,Herzig K,Murphy B,et al.Challenges with300对比模型本文模型10080%/深Id6040200SQL跨站脚命令跨站请远程代路径重定向注入本攻击注入求伪造码执行泄露图107种类型漏洞检测F1分数指标对比applying vulnerability prediction models C/Proc of the2015 Symp and Bootcamp on the Science of Security.Ne
36、wYork:ACM,2015:1-92Shin Y,Williams L.An empirical model to predict securityvulnerabilities using code complexity metrics CJ/Proc ofthe 2nd ACM/IEEE Int Symp on Empirical SoftwareEngineering and Measurement.New York:ACM,2013:315-3173Chowdhury I,Zulkernine M.Using complexity,coupling,and cohesion metr
37、ics as early indicators of vulnerabilitiesJJ.Journal of Systems Architecture,2011,57(3):294-3134Zhou Yaqin,Sharma A.Automated identification ofsecurity issues from commit messages and bug reports Cl/Proc of the 1lth Joint Meeting on Foundations ofSoftware Engineering.New York:ACM,2017:914-9195 Pa n
38、g Y u l e i,Xu e Xi a o z h e n,Na mi n A S.Pr e d i c t i n gvulnerable software components through N-Gram analysisand statistical feature selection C/Proc of the 14th IntConf on Machine Learning and Applications(ICMLA).Piscataway,NJ:IEEE,2015:543-548开放重定向学术论文ResearchPapers6 Hovsepyan A,Scandariato
39、 R,Joosen W,et al.Softwarevulnerability prediction using text analysis techniques CI/Proc of the Int Workshop on Security Measurements andMetrics.Piscataway,NJ:IEEE,2012:7-107 Nguyen V A,Nguyen D Q,Nguyen V,et al,ReGVD:Rrevisiting graph neural networks for vulnerabilitydetection CJ/Proc of the 44th
40、ACM/IEEE Int Conf onSoftware Engineering:Co mp a n i o n Pr o c e e d i n g s:Ne wYork:ACM,2022:178-1828陈传涛,潘丽敏,龚俊,等.基于抽象语法树压缩编码的漏洞检测方法J.信息安全研究,2 0 2 2,8(1):35-429Wartschinski L,Noller Y,Vogel T,et al.Vudenc:Vulnerability detection with deeplearning on a naturalcodebase for python J.Information and
41、SoftwareTechnology,2022,144:1068091io Vaswani A,Shazeer N,Parmar N,et al.Attentionis allyou need JJ.arXiv preprint,arXiv:1706.03762,201711 Taylor W L.Cloze Procedure:A new tool for measuringreadabilityJJ.The Journalism Quarterly,1953,30(4):415-43312Zeiler M D.Adadelta:An adaptive learning rate metho
42、dJJ.arXiv preprint,arXiv:1212.5701,201213 Ruder S.An overview of gradient descent optimizationalgorithmsJJ.arXiv preprint,arXiv:1609.04747,201614Kingma D P,BA J.Adam:A method for stochasticoptimizationJJ.arXiv preprint,arXiv:1412.6980,201415 Loshchilov I,Hutter F.Fixing weight decay regularizationin
43、AdamJJ.arXivpreprint,arXiv:1711.05101,2017161Robbins H,Monro S.A stochastic approximation methodJ.Annals of Mathematical Statistics,1951,22(3):400-407罗乐琦硕士研究生.主要研究方向为漏洞挖掘、网络攻防张艳硕博士,副教授,硕士生导师,CCF高级会员。主要研究方向为密码理论及其应用。zhang_王志强博士,副教授,硕士生导师.主要研究方向为人工智能安全、漏洞发现、恶意软件检测文津硕士研究生,主要研究方向为人工智能安全、动作识别薛培阳硕士研究生.主要研究方向为网络空间安全和信息安全。网址http:/ 1 301