【技术实现步骤摘要】
一种基于迁移学习的跨语言编译器漏洞挖掘方法和装置
[0001]本专利技术涉及信息安全
,具体涉及一种基于迁移学习的跨语言编译器漏洞挖掘方法和装置。
技术介绍
[0002]随着计算机行业的发展,计算机软件愈发成为社会生活和行业生产重要的环节和资产。而软件的安全事件层出不穷,对社会安全稳定造成严重威胁,软件的安全性也因此愈发重要。编译器作为核心基础软件,支撑着其他绝大多数软件的稳定使用,其安全性也尤为重要。Nicholas等发现的“木马源”(Trojan Source)漏洞是编译器漏洞威胁全球软件代码的典型案例。该漏洞存在于Unicode中,能通过重排字符,影响大多数编译器的逻辑顺序,从而几乎影响所有计算机语言编写的软件(Boucher N,Anderson R.Trojan Source:Invisible Vulnerabilities[J].arXiv preprint arXiv:2111.00169,2021)。
[0003]目前,基于学习的模糊测试是挖掘编译器漏洞的常见方法之一。由于编译器的代码规模庞大,复杂性高。模糊测试在挖掘编译器漏洞时,拥有快速且有效的优势。目前,模糊测试通常采用了基于学习的测试样例生成方法,该技术通过训练神经网络来不断生成新的程序测例,作为编译器模糊测试的输入来观察该程序测例是否导致编译器异常。Godefroid等通过训练RNN用以生成格式良好的PDF文件,以此为测例来测试edge上的PDF解析器(Godefroid,P.;Peleg,H.;and Singh,R.201 ...
【技术保护点】
【技术特征摘要】
1.一种基于迁移学习的跨语言编译器漏洞挖掘方法,其步骤包括:选择基于学习生成模糊测试样例的模型作为预训练模型M
S
,在此基础上选取源语言数据集和目标语言数据集,将其序列化为源语言序列S
S
和目标语言序列S
T
,并计算两个序列的距离差值D和模型的修正正则项L;对于源语言的预训练模型M
S
,根据所得到的修正正则项L,以及序列S
S
和S
T
之间的差异对预训练模型M
S
进行修正,从而得到修正后的模型M
S
’
;对经过修正的M
S
’
,利用基于目标数据集D
T
而生成的目标语言序列S
T
进行微调训练,最终得到生成模型M
T
;根据生成模型M
T
生成目标语言程序作为测试样例,利用测试样例进行模糊测试以挖掘漏洞。2.如权利要求1所述的方法,其特征在于,所述源语言数据集和目标语言数据集的序列化方法是:将构成数据集的每个程序视为由token构成的序列,并将数据集里的多个程序直接拼接为一整个序列。3.如权利要求1所述的方法,其特征在于,所述距离差值D用最大均值差异来计算,所述修正正则项L用损失函数来计算;其中D的计算公式如下:其中最大均值差异MMD用来度量两个不同但相关的随机变量分布的距离,即序列S
S
,S
T
中元素s
s
和s
t
之间距离;函数是将样本s
s
和s
t
映射到统一空间的投影函数;L的计算公式如下:L=Lc+0.25*MMD2(Ss,St)其中L由预训练模型自身的损失函数Lc和MMD构成,自身的损失函数代表输出样本和真实样本之间的差异,MMD代表源域和目标域样本之间的差异。4.如权利要求1所述的方法,其特征在于,所述对预训练模型M
S
进行修正,是通过序列之间的token差异和修正正则项L修改预训练模型中每个神经网络的激活函数,包括以下步骤:计算输入序列中每个元素xi和目标语言语义标准集的距离d,并用该距离来修改隐藏状态h
t
的更新函数为:利用修正正则项L,修改y
t
的更新函数为:y
t
=Ф(h
t
)=g(h
t
‑
1,x
t
)+L。5.如权利要求1所述的方法,其特征在于,所述对经过修正的M
S
’
,利用基于目标数据集D
T
而生成的目标语言序列S
T
进行微调训练,包括:利用目标语言序列S
T
生成输入序列和输出序列进行训练,在训练过程中固定原模型最低层神经网络的参数,将其余层神经网络的参数作为初始化参数。6.如权利要求1所述的方法,其特征在于,所述根据模型M
T
生成目标语言程序作为测试样例,包括:从目标语言的程序集合中随机选取种子程序及其中的前缀序列,利用前缀序列和生成模型M
T
得到代码片段,利用代码片段替换原种子程序中前缀序列的后续代码段。
7.如权利要求6所述...
【专利技术属性】
技术研发人员:陈思然,吴敬征,芮志清,罗天悦,凌祥,武延军,
申请(专利权)人:中国科学院软件研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。