CN114722400A - 一种侧信道漏洞检测的方法、系统、介质、设备及终端 - Google Patents

一种侧信道漏洞检测的方法、系统、介质、设备及终端 Download PDF

Info

Publication number
CN114722400A
CN114722400A CN202210266971.5A CN202210266971A CN114722400A CN 114722400 A CN114722400 A CN 114722400A CN 202210266971 A CN202210266971 A CN 202210266971A CN 114722400 A CN114722400 A CN 114722400A
Authority
CN
China
Prior art keywords
program
llvm
vulnerability
detection
lstm
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210266971.5A
Other languages
English (en)
Inventor
孙伟
闫峥
徐茜
丁文秀
高立君
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xidian University
Original Assignee
Xidian University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xidian University filed Critical Xidian University
Priority to CN202210266971.5A priority Critical patent/CN114722400A/zh
Publication of CN114722400A publication Critical patent/CN114722400A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/214Generating training patterns; Bootstrap methods, e.g. bagging or boosting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Molecular Biology (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Mathematical Physics (AREA)
  • Evolutionary Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明属于侧信道漏洞检测技术领域,公开了一种侧信道漏洞检测的方法、系统、介质、设备及终端,输入待检测的软件程序代码;顺序执行两个检测模块检测三种类型的漏洞变体:设计基于确定有限状态自动机和字典树DFA‑Trie的检测模块一检测漏洞变体1和2,设计基于长短期记忆神经网络分类器LSTM‑NNC的检测模块二检测漏洞变体3。针对侧信道漏洞检测效率低的问题,本发明设计了DFA‑Trie检测模块和LSTM‑NNC检测模块,实现了大规模软件的高效侧信道漏洞检测,可适应现实世界中新漏洞频繁暴露场景以及多种编程语言编写的可编译成LLVM IR的程序中的侧信道漏洞的检测,可实现对侧信道漏洞的变体的检测。

Description

一种侧信道漏洞检测的方法、系统、介质、设备及终端
技术领域
本发明属于侧信道漏洞检测技术领域,尤其涉及一种侧信道漏洞检测的方法、系统、介质、设备及终端。
背景技术
目前,侧信道攻击允许攻击者通过观察系统的外部行为来获取安全敏感信息。Meltdown和Spectre展示了如何利用现代处理器中的安全漏洞来泄露机密信息。虽然侧信道攻击总是使用特定的硬件作为攻击目标,但目前的侧信道漏洞大多是由软件缺陷引起的,即侧信道漏洞产生的根本原因是运行在硬件上的软件存在一定的缺陷。随着软件侧信道漏洞成为日益严重的威胁,其检测成为软件开发中的一个关键挑战。
由于软件复杂性持续增长,传统的基于规则的漏洞检测方法存在检测效率低下的问题。另外,对发表在一些顶级学术会议(如CCS,ISSTA和ICSE)上的侧信道漏洞相关文献进行调研,总结发现一些可被称为侧信道漏洞变体的程序实例,这些漏洞变体可通过修改源漏洞实例的代码来生成,且其仍存在侧信道漏洞。近年来,研究者提出了多种检测技术,可分为两大类:静态检测技术和和动态检测技术。1)静态检测技术包括基于抗干扰性验证的方法、基于安全信息流分析的方法和基于自动资源绑定计算的方法。首先,Barthe等人提出了一种自合成技术来证明程序的抗干扰性。虽然自组合技术能够保证完整性和一定程度的准确性,但验证程序的抗干扰性需要安全检查人员提出复杂的不变体,然而不变体是很难自动推断的。Dufay等人通过使用JML注释提供不变量来解决这个问题,但他们提出的方法需要在软件开发和安全分析中进行繁琐的工作。另一种证明k-safety(一种程序安全指示器)的技术是构造所谓的产品程序。与自组合技术类似,构建产品程序的技术通过构建包含断言的程序将k-safety降为标准安全性。虽然有几种构造产品程序的方法,但它们都试图以锁步的方式执行程序的不同副本。Sousa等人证明了产品程序技术存在灵活性问题。其次,现有的大部分工作都是针对特定的单个侧信道漏洞实例进行的,分析具体单实例的漏洞模式,判断软件程序样本是否满足所提取的漏洞模式,从而识别软件中存在的侧信道漏洞,由此一些研究者提出了基于安全信息流的检测方法。如,Zhang等人基于某种编程语言提出了一种跟踪侧信道漏洞的方法;Pottier等人提出了一种基于引用、异常和让多态性的信息流分析方法。最后,目前已有一系列关于资源边界自动计算的论文。如,Gulwani等人,Charbonneau等人,Sinn等人分别基于抽象解释、线性规划和差分约束提出了静态计算命令程序资源消耗边界的方法;Flores等人专注于如何对用函数式编程语言编写的程序进行边界分析。2)动态检测技术主要是基于符号执行的方法。如,Bang等人提出了一种基于符号执行的漏洞检测方法来量化特定的侧信道类型。Pasareanu等人提出了一种基于符号执行生成输入和最大化侧信道度量的算法,但该方法仅适用于特定类型的侧信道漏洞,不适合检测侧信道漏洞变体。综上,现存的动静态检测方法存在以下问题:1)检测效率低,如现存的方法很难自动执行,这极大地影响了检测效率,尤其是对大规模复杂软件的检测;2)普遍性问题,如现存的大多数方法仅仅用于检测某个特别的单侧信道漏洞实例,而不能以一种通用的方式来检测不同的侧信道漏洞;3)漏洞变体检测问题,如现存的方法忽略了对漏洞变体的检测,这导致检测结果出现较高的假阴性率。
为实现自动高效检测的目的,将机器学习应用于软件缺陷检测,其具有实现简单、维护方便、精度高等优点。然而,经调研发现,将机器学习应用于软件侧信道漏洞检测的研究很少。目前的研究主要存在三方面问题:首先,基于传统机器学习方法的漏洞检测技术需要安全专家定义漏洞的特征,然后使用机器学习算法进行检测。但软件侧信道漏洞特征的提取非常困难,以致无法进行后续工作。其次,基于深度学习的代码相似脆弱性检测技术不需要脆弱性的特征的定义,但基于深度学习的侧信道漏洞检测方法面临的两个关键挑战是难以准确定义侧信道程序样本之间的相似性和缺乏高质量的数据集。
通过上述分析,现有技术存在的问题及缺陷为:
(1)传统的基于规则的漏洞检测方法存在检测效率低下的问题,而现有的动静态检测方法存在检测效率低、普遍性较弱问题以及漏洞变体检测问题。
(2)目前将机器学习应用于软件侧信道漏洞检测的研究很少,同时软件侧信道漏洞特征的提取非常困难,以致无法进行后续工作,且误报率较高。
(3)现有基于深度学习的侧信道漏洞检测方法面临的两个关键挑战是难以准确定义侧信道程序样本之间的相似性和缺乏高质量的数据集。
发明内容
针对现有技术存在的问题,本发明提供了一种侧信道漏洞检测的方法、系统、介质、设备及终端,尤其涉及一种基于相似度计算和机器学习的侧信道漏洞检测的方法、系统、介质、设备及终端。
本发明是这样实现的,一种侧信道漏洞检测的方法,所述侧信道漏洞检测的方法包括:输入待检测的软件程序代码;顺序执行两个检测模块检测三种类型的漏洞变体:设计基于确定有限状态自动机和字典树DFA-Trie的检测模块一检测漏洞变体1和2,设计基于长短期记忆神经网络分类器LSTM-NNC的检测模块二检测漏洞变体3。
输入待检测的软件程序代码,并分离大型软件程序为多个函数功能程序代码;设计基于确定有限状态自动机和字典树DFA-Trie的检测模块一,构造程序关键词字典树和正则化漏洞库,正则化测试程序并与正则化的漏洞库匹配,检测测试程序中是否存在漏洞变体1和2;设计基于长短期记忆神经网络分类器LSTM-NNC的检测模块二,基于数据类型扩充的方法扩充数据集,对数据集中的程序代码进行LLVM编译处理为LLVM IR文件,将LLVM IR文件进行数值向量表征转化处理,基于扩充和LLVM IR处理后的数据集训练LSTM-NNC,对测试程序进行LLVM编译和LLVM IR处理,用训练得到的LSTM-NNC检测处理后的测试程序是否存在漏洞变体3;输出对漏洞变体1,2和3的检测结果。
进一步,所述侧信道漏洞检测的方法包括以下步骤:
步骤一,样本输入:输入待检测的软件程序代码样本/测试程序;所述步骤一对于大型软件程序代码的分离处理,使输入到本发明中两个检测模块的程序代码均为可保留最小函数功能的程序代码,有利于提高检测模块一中对漏洞变体1和2的匹配处理效率,提高两个检测模块的检测精确度;
步骤二,DFA-Trie检测:构造程序关键词字典树和正则化漏洞库,正则化测试程序,将正则化的测试程序中的每个函数与正则化漏洞库中的函数匹配,检测测试程序是否存在漏洞变体1和2;所述步骤二DFA-Trie检测可检测测试程序是否存在漏洞变体1和2以及新披露的新增漏洞变体1和2;检测模块一采用程序关键词字典树和正则化处理的方法,使得正则化每个函数代码时计算复杂度较小,从而提高了本发明对漏洞变体1和2的检测效率。
步骤三,LSTM-NNC检测:扩充数据集并基于扩充的数据集训练LSTM-NNC,利用训练得到的NNC来检测测试程序是否存在漏洞变体3;所述步骤三LSTM-NNC检测可检测测试程序是否存在漏洞变体3以及新披露的新增漏洞变体3;检测模块二采用神经网络学习模型,通过在算法层面进行优化,提高了对漏洞变体3的检测效率;检测模块二程序矢量化是基于LLVM IR的,使得本发明适用于检测用多种编程语言编写的可编译成LLVM IR的程序中的侧信道漏洞,增强了本发明应用的普遍性。
步骤四,结果输出:输出待检测程序是否存在漏洞变体1,2和3;所述步骤四结果输出,可根据用户需求输出检测的结果,其既可只输出对漏洞变体1和2的检测结果,又可只输出对漏洞变体3的检测结果,还可输出对漏洞变体1、2和3的检测结果。
进一步,所述步骤一中的输入待检测的软件程序代码样本包括:
在将所有待检测的软件程序样本发送到检测模块之前,预先对大型软件进行分离处理,将大型软件分离成多个功能函数代码样本。
进一步,所述步骤二中的DFA-Trie检测包括:
(1)设置阶段:构造程序关键词字典树Trie和正则化漏洞库;
①手动选择每个漏洞函数的程序关键字,并添入程序关键字集,构造程序关键词字典树;
②选择漏洞程序代码集并正则化漏洞程序代码样本,构造正则化的漏洞库;
(2)检测阶段:正则化测试程序,将正则化测试程序与正则化漏洞库匹配;
①基于确定有限状态自动机DFA和程序关键词字典树Trie,正则化测试程序;
②将正则化的测试程序中的每个函数与正则化漏洞库中的每个样本进行匹配,如果匹配成功,则测试程序包含侧信道漏洞库中的漏洞变体1或漏洞变体2;如果正则化的测试程序中每个函数与正则化漏洞库中的所有样本都不匹配,则将原始的测试程序发送到LSTM-NNC检测模块进行下一模块的检测。
进一步,所述正则化程序代码过程采取以下操作完成:通过确定有限状态自动机DFA识别程序中的注释、文字值、标识和分隔符,过滤掉注释、字符串常量和字符常量,过滤掉数字;识别并判断标识符,如果是标识符,则根据程序关键词字典树进一步判断其是否是程序关键词;如果不是程序关键词,则将标识符作为用户自定义的标识符,使用用户自定义标识符对应的正则化索引替换用户自定义标识符;将程序中的空白字符转换成一个统一的空白字符;其中,所述空白字符包括空格、换行符和制表符。
所述正则化测试程序函数代码包括:应用确定有限状态自动机从软件代码中识别并抽取注释、文字值、标识符和分隔符,过滤注释、字符串常量和字符常量,识别标识符并过滤掉数字,用字典树从程序关键词中分离出用户自定义的标识符,使用用户自定义标识符对应的正则化索引替换用户自定义标识符,将程序中的空白字符转换成一个统一的空白字符。
进一步,所述步骤三中的LSTM-NNC检测包括:
(1)学习阶段:数据集扩充及LLVM编译处理,处理LLVM IR及数值向量表征转化,训练LSTM-NNC;
①数据集扩充及LLVM编译处理;
数据类型扩充,使用数据类型扩展的方式,使变量的数据类型的表示范围比原始代码中相应变量的表示范围更宽;
对程序代码进行LLVM编译处理,是对扩充后的每个代码执行不同选项的编译操作,编译为LLVM IR文件;
分层随机抽样操作为将整个数据集分成n类,并在每个类别中按相同的比例构建训练集、验证集和测试集:n与LSTM-NNC中输出的神经元数量一致;
②处理LLVM IR及数值向量表征转化;
LLVM IR文件预处理,即移除包括空白线、注释、元数据、模块信息、LLVM IR文件中的属性信息在内的无效信息,保留函数信息和相关数据定义;用%ID代替LLVM IR文件中的标识符,用<INT/FLOAT/STRING>代替LLVM IR文件中的立即值;每个结构类型数据都在LLVMIR指令中展开,以便从LLVM IR文件中删除每个结构类型数据的定义,以确保结构化数据是内联的;
将LLVM IR转换为数值向量表征处理,所有LLVM IR指令构成完整集合,S={s1,s2,s3,…},利用一个NCC预训练模型将LLVM IR指令映射为数值向量。预训练的元素为一个由LLVM IR指令s与数值向量x组成的二元组(s,x),模型形式化为
Figure BDA0003552735680000061
x是一个200维的向量,S′是所有LLVM IR指令构成的完整集合S的子集,数值向量的维数由预训练模型的嵌入尺寸决定;
每个程序均被形式化成一个有序的n元组,Porgrami={stat1,stat2,stat3,…,statn},其中n∈Z*是程序Programi中包含的指令数量,statj表示在程序Programi中的第j个LLVM IR指令,
Figure BDA0003552735680000062
statj=statk成立;
对于一个程序,在预训练的模型NCC中寻找对应的LLVM IR指令,并使用对应的200维向量替换该程序中的LLVM IR指令;对于正在寻找的LLVM IR指令不在预训练模型中的情况,使用特定的200维向量进行替换;完成替换后,程序形式化为
Figure BDA0003552735680000071
其中n表示程序Programi中的指令数,xj表示第j条LLVM IR指令对应的数值向量,
Figure BDA0003552735680000072
xj=xk
③训练LSTM神经网络分类器;
对于有m个程序的训练数据集,通过学习阶段中的步骤②得到数值向量表征;设X={X1,X2,X3,...,Xm}为训练数据集对应的变换后的向量表征,m∈Z*为训练数据集包含的训练样本个数;Xi表示训练数据集X中的第i个程序,是LSTM-NNC模型的输入;Xi有相应的地面真值标签,Yi={yj|yj=0or1,j=1,2,…,n,n≥2,n∈Z*};
Figure BDA0003552735680000073
如果yj=1表示Xi属于第j类;LSTM-NNC有四层,依次为LSTM层,包含LSTM单元;BN层,致密层和输出层。
在LSTM层之前,模型的输入为:Xi∈Rmaxlen×200
在LSTM层后:
Figure BDA0003552735680000074
在BN层后:
Figure BDA0003552735680000075
在致密层后:
Figure BDA0003552735680000076
在输出层:
Figure BDA0003552735680000077
Figure BDA0003552735680000078
是LSTM神经网络分类器模型输出;
选择交叉熵损失函数作为训练LSTM神经网络分类器模型的损失函数:
Figure BDA0003552735680000079
其中,maxlen表示输入程序向量序s列的最大长度,其由具体的输入程序决定;LSTM1,2表示两层LSTM单元,压缩矩阵Xi成一个固定长度的向量H;BN表示批量归一化操作;ReLU和softmax是两个激活函数;WD和WY是加权矩阵参数;dense_size表示致密层中单元(神经元)的数量,是超参数;n为输出层的单元个数,根据具体场景进行设置;n=2表示LSTM-NNC模型将输入测试程序分为漏洞类和非漏洞类,n>2表示LSTM-NNC模型将输入测试程序划分为相应的漏洞类别;
(2)检测阶段,测试程序编译和LLVM IR处理,用训练得到的LSTM-NNC检测漏洞变体3;
①LLVM IR编译、文件预处理及将LLVM IR转换为数值向量表征;
LLVM编译,对待检测程序的各个功能函数代码执行不同选项的编译操作,将其编译为LLVM IR文件;
LLVM IR文件预处理,即移除包括空白线、注释、元数据、模块信息、LLVM IR文件中的属性信息在内的无效信息,保留函数信息和相关数据定义;用%ID代替LLVM IR文件中的标识符,用<INT/FLOAT/STRING>代替LLVM IR文件中的立即值;每个结构类型数据都在LLVMIR指令中展开,以便从LLVM IR文件中删除每个结构类型数据的定义,以确保结构化数据是内联的;
将LLVM IR转换为数值向量表征处理,所有LLVM IR指令构成完整集合,S={s1,s2,s3,...},利用一个NCC预训练模型将LLVM IR指令映射为数值向量。预训练的元素为一个由LLVM IR指令s与数值向量x组成的二元组(s,x),模型形式化为
Figure BDA0003552735680000081
x是一个200维的向量,S′是所有LLVM IR指令构成的完整集合S的子集,数值向量的维数由预训练模型的嵌入尺寸决定;
每个程序均被形式化成一个有序的n元组,Programi={stat1,stat2,stat3,...,statn},其中n∈Z*是程序Programi中包含的指令数量,statj表示在程序Programi中的第j个LLVM IR指令;
Figure BDA0003552735680000082
statj=statk成立;
对于一个程序,在预训练的模型NCC中寻找对应的LLVM IR指令,并使用对应的200维向量替换该程序中的LLVM IR指令;对于正在寻找的LLVM IR指令不在预训练模型中的情况,使用一个特定的200维向量进行替换;完成替换后,程序形式化为Xi={x1,x2,x3,...,xn},
Figure BDA0003552735680000083
其中n表示程序Programi中的指令数,xj表示第j条LLVM IR指令对应的向量,
Figure BDA0003552735680000084
xj=xk
②使用学习阶段步骤③中训练得到的LSTM-NNC模型预测测试程序的检测结果;
使用学习阶段中步骤③的输出,即加入了LSTM学习模型参数的神经网络分类器并以检测阶段步骤①的输出作为LSTM-NNC模型的输入xprog,得到如下结果:一个测试程序是否存在漏洞变体3;形式上,Xprog是输入,
Figure BDA0003552735680000091
是输出;
Figure BDA0003552735680000092
Figure BDA0003552735680000093
n为训练数据集中侧信道漏洞实例类别数;
Figure BDA0003552735680000094
表示Xprog属于第j类。
本发明的另一目的在于提供一种应用所述的侧信道漏洞检测的方法的侧信道漏洞检测的系统,所述侧信道漏洞检测的系统包括:
样本输入模块,用于输入函数代码样本;
DFA-Trie检测模块,用于构造程序关键词字典树和正则化漏洞库,以正则化的测试程序中的函数代码样本匹配正则化的漏洞库,利用相似度检测函数代码样本是否包含漏洞变体1和2;
LSTM-NNC检测模块,用于扩充数据集并基于扩充的数据集训练LSTM-NNC模型,用训练得到的LSTM-NNC模型检测程序代码样本是否包含漏洞变体3;
结果输出模块,用于输出测试程序代码是否存在漏洞变体1,2和3。
本发明的另一目的在于提供一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如下步骤:
输入待检测的软件程序代码;顺序执行两个检测模块检测三种类型的漏洞变体:设计基于确定有限状态自动机和字典树DFA-Trie的检测模块一检测漏洞变体1和2,设计基于长短期记忆神经网络分类器LSTM-NNC的检测模块二检测漏洞变体3。
本发明的另一目的在于提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如下步骤:
输入待检测的软件程序代码;顺序执行两个检测模块检测三种类型的漏洞变体:设计基于确定有限状态自动机和字典树DFA-Trie的检测模块一检测漏洞变体1和2,设计基于长短期记忆神经网络分类器LSTM-NNC的检测模块二检测漏洞变体3。
本发明的另一目的在于提供一种信息数据处理终端,所述信息数据处理终端用于实现所述的侧信道漏洞检测系统。
结合上述的技术方案和解决的技术问题,请从以下几方面分析本发明所要保护的技术方案所具备的优点及积极效果为:
第一、针对上述现有技术存在的技术问题以及解决该问题的难度,紧密结合本发明的所要保护的技术方案以及研发过程中结果和数据等,详细、深刻地分析本发明技术方案如何解决的技术问题,解决问题之后带来的一些具备创造性的技术效果。具体描述如下:
(1)针对对于侧信道漏洞的检测效率低的问题,本发明设计了两个顺序执行的漏洞变体检测模块:DFA-Trie检测模块和LSTM-NNC检测模块。一方面,在DFA-Trie检测模块中,构造程序关键词字典树和正则化漏洞库,使得正则化一个有n个字符的程序的计算复杂度代价为O(n)。这对于处理大型代码语料库具有特别的价值。另一方面,对于LSTM-NNC检测模块,神经网络分类器的预测过程本质上就是输入数据在神经网络中的正向传播过程。现代计算机体系结构对矩阵运算进行了一系列优化;同时由于深度学习引擎支持的底层数学运算库在算法层面进行了优化,使得矩阵运算速度更快,从而提高了检测效率。
(2)对于现有技术普遍性弱的问题,本发明基于判断测试程序中的函数代码是否与侧信道漏洞库中的样本相似的原理,判断测试程序是否存在侧信道漏洞。当一个新的漏洞被披露时,该检测方法只需要将新披露的漏洞正则化,并将其添加到正则化的漏洞库中,来实现对该新增漏洞的变体1和变体2的检测。对于新披露漏洞的变体3的检测,该检测方法只需根据本文提出的数据类型增强方法重构数据集,训练出能够检测新漏洞的变体3的模型。此外,本发明的程序矢量化是基于LLVM IR的,因此本模块适用于检测用多种编程语言编写的可编译成LLVM IR的程序中的侧信道漏洞。
(3)对于漏洞变体的检测问题,本发明设计的DFA-Trie检测模块不会受到漏洞变体的影响,其原因在于在LSTM-NNC检测模块,用一个名为数据类型扩充的程序来构造训练数据集来训练一个能够检测漏洞变体3的模型。
第二,把技术方案看做一个整体或者从产品的角度,本发明所要保护的技术方案具备的技术效果和优点,具体描述如下:
本发明输入是一个待检测的软件程序代码样本;利用两个按顺序执行的检测模块检测三种类型的漏洞变体:DFA-Trie检测模块检测漏洞变体1和2,LSTM-NNC检测模块检测漏洞变体3;输出漏洞库中是否存在类似于已检查样本的样本,其中相似度为漏洞变体1、2和3。本发明能够高效的检测已知的侧信道漏洞及其变体,本发明可普遍应用于检测用多种编程语言编写的可编译成LLVM IR的程序中的侧信道漏洞及其变体。
本发明实现了大规模软件的高效侧信道漏洞检测,可适应现实世界中新漏洞频繁暴露场景的检测,并可普遍适用于检测用多种编程语言编写的可编译成LLVM IR的程序中的侧信道漏洞,可实现对侧信道漏洞的变体的检测。
第三,作为本发明的权利要求的创造性辅助证据,还体现在以下几个重要方面:
(1)本发明的技术方案填补了国内外业内技术空白:在侧信道漏洞检测的研究中,源漏洞程序的变体往往被忽略了。而本发明采用两个模块检测的方法可以检测三种类型的漏洞变体,这弥补了国内外在检测侧信道漏洞变体这一研究的空白。
(2)本发明的技术方案解决了人们一直渴望解决、但始终未能获得成功的技术难题:本发明中LSTM-NNC检测模块将数据集扩充,使数据类型int扩展为包含了unsignedint,long int和unsigned long long int多种整型;数据类型string扩展为包含wstring_t字符串;数据类型char扩展为包含wchar_t字符;数据类型float扩展为包含double和longdouble双精度浮点数。通过数据类型的扩充可得到大量的源漏洞代码的变体,以这些变体为训练集克服了现实研究中训练数据集缺乏的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图做简单的介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的侧信道漏洞检测的方法流程图;
图2是本发明实施例提供的侧信道漏洞检测的系统结构框图;
图3是本发明实施例提供的DFA-Trie检测模块工作流程图;
图4是本发明实施例提供的LSTM-NNC检测模块的工作流程图;
图中:1、样本输入模块;2、DFA-Trie检测模块;3、LSTM-NNC检测模块;4、结果输出模块。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
针对现有技术存在的问题,本发明提供了一种侧信道漏洞检测的方法、系统、介质、设备及终端,下面结合附图对本发明作详细的描述。
一、解释说明实施例。为了使本领域技术人员充分了解本发明如何具体实现,该部分是对权利要求技术方案进行展开说明的解释说明实施例。
术语定义:
漏洞变体的定义见表1,其中引用了代码克隆的定义。
表1三种漏洞变体的定义
Figure BDA0003552735680000121
Figure BDA0003552735680000131
缩写和术语定义见表2。
表2缩写和术语定义
Figure BDA0003552735680000132
针对目前检测技术检测效率低的问题;现有技术在应用时普遍性较弱的问题;缺乏对漏洞变体的检测,从而导致检测假阴性较高的问题。本发明提出基于相似度和基于机器学习两个检测模块来检测三种类型的漏洞变体(漏洞变体1,2和3),添加正则化的新漏洞到漏洞库来实现对新增漏洞变体1和2的检测;构造程序关键词字典树和正则化漏洞库来减小正则化程序代码的计算复杂度;对于基于神经网络的检测模块,通过算法层面的优化来提高检测效率;基于LLVM IR矢量化程序代码,使得LSTM-NNC检测模块可普遍用于检测用多种编程语言编写的可编译成LLVM IR的程序中的侧信道漏洞;对数据集中的数据类型进行扩充,并基于扩充的数据集训练模型可检测漏洞变体3。
如图1所示,本发明实施例提供的侧信道漏洞检测的方法包括以下步骤:
S101,输入待检测的软件程序代码样本/测试程序;
S102,构造程序关键词字典树和正则化漏洞库,正则化测试程序,将正则化的测试程序中的每个函数与正则化漏洞库中的函数匹配,检测测试程序是否存在漏洞变体1和2;
S103,扩充数据集并基于扩充的数据集训练LSTM-NNC,利用训练得到的NNC来检测测试程序是否存在漏洞变体3;
S104,输出待检测程序是否存在漏洞变体1,2和3。
如图2所示,本发明实施例提供的侧信道漏洞检测的系统包括:
样本输入模块1,用于输入一个待检测的软件程序代码样本;
DFA-Trie检测模块2,用于检测漏洞变体1和2;
LSTM-NNC检测模块3,用于检测漏洞变体3;
结果输出模块4,用于输出待检测程序是否存在漏洞变体1,2和3的结果。
本发明实施例提供的基于相似度计算和机器学习的侧信道漏洞检测方法的包括以下步骤:
S1:输入待检测软件程序代码样本并分离大型软件为多个功能函数代码;
S2:构建关键词字典树和正则化漏洞库,将待检测程序正则化,将正则化的待检测程序中的每一个函数匹配正则化的漏洞库中的函数样本,检测待检测程序是否存在漏洞变体1和2;
S2:扩充数据集,数据集转化为数值向量表征,训练LSTM-NNC模型,将待检测程序编译并转化为数值向量表征,用训练得到的LSTM-NNC模型检测测试程序是否存在漏洞变体3;
S4:输出检测结果,即测试程序中是否存在漏洞变体1,2和3。
本发明实施例提供的一种基于相似度计算和机器学习的侧信道漏洞检测方法具体包括以下步骤:
步骤一,输入;
输入待检测软件程序代码样本;若输入的是大型软件程序,则通过运行脚本程序自动将大型软件分离成多个功能函数。
步骤二,DFA-Trie检测模块,如图3所示;
(1)设置阶段,构造程序关键词字典树和正则化漏洞库;
①构造程序关键词字典树:构造过程类似于标准字符串字典树的构造过程,在每个漏洞函数中手动选择程序关键词,并将其添入程序关键字集,构造程序关键词字典树(Trie);
②正则化漏洞库:选择漏洞函数代码集,正则化所有漏洞函数代码,将正则化的漏洞函数逐一添加入正则化的漏洞库,构造出正则化的漏洞库;
正则化程序代码过程采取以下操作完成:通过确定有限自动机(DFA)识别程序中的注释、文字值、标识和分隔符,过滤掉注释、字符串常量和字符常量,过滤掉数字;识别并判断标识符,如果是标识符,则根据程序关键词字典树进一步判断其是否是程序关键词,如果不是程序关键词,则将其作为用户自定义的标识符,使用用户自定义标识符对应的正则化索引替换用户自定义标识符;将程序中的空白字符(空格、换行符、制表符等)转换成一个统一的空白字符;
(2)检测阶段,正则化测试程序函数代码,将正则化的测试程序与正则化漏洞库中的函数样本进行匹配处理,检测漏洞变体1和2;
①正则化测试程序函数代码:应用确定有限状态自动机从软件代码中识别并抽取注释、文字值、标识符和分隔符,过滤注释、字符串常量和字符常量,识别标识符并过滤掉数字(数字包括0~9,也可以包含字母,如十六进制数),用字典树从程序关键词中分离出用户自定义的标识符,使用用户自定义标识符对应的正则化索引替换用户自定义标识符,将程序中的空白字符(空格、换行符、制表符等)转换成一个统一的空白字符,以确保正则化输出中没有连续的空白字符;
②正则化的测试程序与正则化漏洞库进行匹配:将每个正则化的测试程序函数与正则化的漏洞库中的所有函数样本匹配,如果匹配成功,则测试程序存在漏洞变体1,2;如果漏洞库中的所有函数样本都不匹配测试程序中的任意函数,则进入下一检测模块。本实施例中以测试程序函数的哈希值与漏洞库中样本的哈希值进行匹配。
步骤三,LSTM-NNC检测模块,如图4所示;
(1)学习阶段,数据集扩充及LLVM编译处理,处理LLVM IR及数值向量表征转化,训练LSTM-NNC模型;
①数据集扩充及LLVM编译处理;
数据类型扩充,将数据类型int扩展为unsigned int,long int和unsigned longlong int多种整型;数据类型string扩展为包含wstring_t字符串;数据类型char扩展为包含wchar_t字符;数据类型float扩展为包含double和long double双精度浮点数;
LLVM编译,对于经过数据类型扩充后获得的每个代码,使用不同的选项执行编译,将其编译为LLVM IR文件。如用Clang++(一个LLVM C++编译器)来编译一个cpp源代码。编译选项用于扩充cpp源代码,示例选项有优化级别、-ffast-math选项和-march=native选项;如果有四个优化级别,一个cpp源代码可以编译得到4×2×2=16个LLVM IR文件;
分层随机抽样,根据检测需求,将整个数据集划分为n个类别,即类别1,…类别n。参数n与实施例采用的LSTM-NNC模型输出层神经元个数一致。在每个类别中按相同的比例构建训练集、验证集和测试集;
②处理LLVM IR及数值向量表征转化;
LLVM IR文件预处理,移除包括空白线、注释、元数据、模块信息、LLVM IR文件中的属性信息在内的无效信息,保留函数信息和相关数据定义;用%ID代替LLVM IR文件中的标识符,用<INT/FLOAT/STRING>代替LLVM IR文件中的立即值;每个结构类型数据都在LLVMIR指令中展开,以便从LLVM IR文件中删除每个结构类型数据的定义,以确保结构化数据是内联的;
将LLVM IR转换为数值向量表征处理,所有LLVM IR指令构成完整集合,S={s1,s2,s3,...},利用一个NCC预训练模型将LLVM IR指令映射为数值向量。预训练的元素为一个由LLVM IR指令s和数值向量x组成的二元组(s,x),模型形式化为
Figure BDA0003552735680000171
x是一个200维的向量,S′是所有LLVM IR指令构成的完整集合S的子集,数值向量的维数由预训练模型的嵌入尺寸决定;
每个程序都可以被形式化成一个有序的n元组,Programi={stat1,stat2,stat3,...,statn},其中n∈Z*是程序Programi中包含的指令数量,statj表示在程序Programi中的第j个LLVM IR指令。注意
Figure BDA0003552735680000172
statj=statk成立;
对于一个程序,在预训练的模型NCC中寻找对应的LLVM IR指令,并使用对应的200维向量替换该程序中的LLVM IR指令。对于正在寻找的LLVM IR指令不在预训练模型中的情况,使用一个特定的200维向量进行替换。完成替换后,程序可以形式化为Xi={x1,x2,x3,...,xn},
Figure BDA0003552735680000173
其中n仍然表示程序Programi中的指令数,xj表示第j条LLVM IR指令对应的向量。同理,
Figure BDA0003552735680000174
Figure BDA0003552735680000175
③训练LSTM神经网络分类器;
对于有m个程序的训练数据集,通过学习阶段中的步骤②得到数值向量表征。设X={X1,X2,X3,...,Xm}为训练数据集对应的变换后的向量表征,m∈Z*为训练数据集包含的训练样本个数。Xi表示训练数据集X中的第i个程序,是LSTM-NNC模型的输入。Xi有相应的地面真值标签,Yi={yj|yj=0or1,j=1,2,…,n,n≥2,n∈Z*}。
Figure BDA0003552735680000176
如果yj=1表示Xi属于第j类。LSTM-NNC模型有四层,依次为LSTM层(包含LSTM单元),BN层,致密层和输出层。
在LSTM层之前,模型的输入为:Xi∈Rmaxlen×200
在LSTM层后:
Figure BDA0003552735680000177
在BN层后:
Figure BDA0003552735680000178
在致密层后:
Figure BDA0003552735680000181
在输出层:
Figure BDA0003552735680000182
Figure BDA0003552735680000183
是LSTM神经网络分类器模型的输出;
选择交叉熵损失函数作为训练LSTM神经网络分类器模型的损失函数:
Figure BDA0003552735680000184
其中,maxlen表示输入程序向量序s列的最大长度,其由具体的输入程序决定;LSTM1,2表示两层LSTM单元,压缩矩阵Xi成一个固定长度的向量H;BN表示批量归一化操作;ReLU和softmax是两个激活函数;WD和WY是加权矩阵参数;dense_size表示致密层中单元(神经元)的数量,是超参数;n为输出层的单元个数,根据具体场景进行设置;n=2表示LSTM-NNC模型将输入测试程序分为漏洞类和非漏洞类,n>2表示LSTM-NNC模型将输入测试程序划分为相应的漏洞类别;
(2)检测阶段,待检测程序编译和LLVM IR处理,用训练得到的LSTM-NNC检测漏洞变体3;
①LLVM IR编译、文件预处理及将LLVM IR转换为数值向量表征;
LLVM编译,对待检测程序的各个功能函数代码执行不同选项的编译操作,将其编译为LLVM IR文件;
LLVM IR文件预处理,移除包括空白线、注释、元数据、模块信息、LLVM IR文件中的属性信息在内的无效信息,保留函数信息和相关数据定义;用%ID代替LLVM IR文件中的标识符,用<INT/FLOAT/STRING>代替LLVM IR文件中的立即值;每个结构类型数据都在LLVMIR指令中展开,以便从LLVM IR文件中删除每个结构类型数据的定义,以确保结构化数据是内联的;
将LLVM IR转换为数值向量表征处理,所有LLVM IR指令构成完整集合,S={s1,s2,s3,...},利用一个NCC预训练模型将LLVM IR指令映射为数值向量。预训练的元素为一个由LLVM IR指令s和数值向量x组成的二元组(s,x),模型形式化为
Figure BDA0003552735680000191
x是一个200维的向量,S′是所有LLVM IR指令构成的完整集合S的子集,数值向量的维数由预训练模型的嵌入尺寸决定;
每个程序都可以被形式化成一个有序的n元组,Programi={stat1,stat2,stat3,...,statn},其中n∈Z*是程序Programi中包含的指令数量,statj表示在程序Programi中的第j个LLVM IR指令。注意
Figure BDA0003552735680000192
statj=statk成立;
对于一个程序,在预训练的模型NCC中寻找对应的LLVM IR指令,并使用对应的200维向量替换该程序中的LLVM IR指令。对于正在寻找的LLVM IR指令不在预训练模型中的情况,使用一个特定的200维向量进行替换。完成替换后,程序可以形式化为Xi={x1,x2,x3,...,xn},
Figure BDA0003552735680000193
其中n仍然表示程序Programi中的指令数,xj表示第j条LLVM IR指令对应的向量。同理,
Figure BDA0003552735680000194
Figure BDA0003552735680000195
②使用学习阶段步骤③中训练得到的LSTM-NNC模型预测测试程序的检测结果;
使用学习阶段中步骤③的输出(即加入了LSTM学习模型参数的神经网络分类器),和检测阶段步骤①的输出作为LSTM-NNC模型的输入Xprog,可得到如下结果:一个测试程序是否存在漏洞变体3。形式上,Xprog是输入,
Figure BDA0003552735680000196
是输出。
Figure BDA0003552735680000197
Figure BDA0003552735680000198
n为训练数据集中侧信道漏洞实例类别数。
Figure BDA0003552735680000199
表示Xprog属于第j类。
步骤四,输出检测结果,输出测试程序是否存在漏洞变体1,2和3。
二、应用实施例。为了证明本发明的技术方案的创造性和技术价值,该部分是对权利要求技术方案进行具体产品上或相关技术上的应用实施例。
本发明实例选取了22个测信道漏洞实例,并根据漏洞变体1,2和3的定义,依据以下5个原则构造得到132个测试程序:
1)在原漏洞实例的任何位置,随机插入任意数量的空格、换行符和制表符;
2)在原漏洞实例的任意位置,随机插入内容不同的行注释和块注释;
3)随机修改原漏洞实例中的文字内容。修改方法是用其他不同文字内容替换实例中的数字常量、字符常量和字符串常量;
4)调整代码间空行和代码缩进的样式;
5)将用户定义的标识符随机替换为其他不同的标识符。
本发明实例基于以上操作获得的132个测试程序进行检测。
三、实施例相关效果的证据。本发明实施例在研发或者使用过程中取得了一些积极效果,和现有技术相比的确具备很大的优势,下面内容结合试验过程的数据、图表等进行描述。
本发明通过一台笔记本仿真检测程序,笔记本配置为Intel Core i7-10510UCPU,8GB RAM,Intel Optane 477GB SSD。
对于DFA-Trie检测模块,测试样例包含22个侧信道漏洞代码样本,并抽取42个程序关键词,以这22个漏洞代码样本构建了132个测试数据集,其包含88个漏洞变体1和44个漏洞变体2。本检测模块的实验仿真结果如下:检测每个测试程序的平均时间为56微秒;对变体1的检测精度为100%,对变体2的检测精度为88.6%。
对于LSTM-NNC检测模块,设置输入为包含200个没有参数的神经元;两个LSTM子层,其均分别包含200个LSTM神经元和320800个参数;BN层包含200个BN神经元和800个参数;致密层包含32个神经元和6432个参数;输出层包含3个神经元和99个参数。训练集、验证集和测试集比例为5:1:2,对本模块的仿真结果如下:以array,loopAndbranch和passwordEq三种类型侧信道漏洞样本构建原始训练集,三种类型漏洞样本数量均为16个,经过本实施例提出的数据集扩充方法扩充数据集得到6144个测试样本,本模块对漏洞变体3的检测可实现F1-score为92.59%到98.26%,对以上三种类型漏洞变体的检测时间可达到0.0225s,相比于现存的检测技术来说时间少得多。
应当注意,本发明的实施方式可以通过硬件、软件或者软件和硬件的结合来实现。硬件部分可以利用专用逻辑来实现;软件部分可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。本领域的普通技术人员可以理解上述的设备和方法可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、CD或DVD-ROM的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本发明的设备及其模块可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合例如固件来实现。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,都应涵盖在本发明的保护范围之内。

Claims (10)

1.一种侧信道漏洞检测的方法,其特征在于,所述侧信道漏洞检测的方法包括:输入待检测的软件程序代码;顺序执行两个检测模块检测三种类型的漏洞变体:设计基于确定有限状态自动机和字典树DFA-Trie的检测模块一检测漏洞变体1和2,设计基于长短期记忆神经网络分类器LSTM-NNC的检测模块二检测漏洞变体3。
2.如权利要求1所述的侧信道漏洞检测的方法,其特征在于,所述侧信道漏洞检测的方法输入待检测的软件程序代码,并分离大型软件程序为多个函数功能程序代码;设计基于确定有限状态自动机和字典树DFA-Trie的检测模块一,构造程序关键词字典树和正则化漏洞库,正则化测试程序并与正则化的漏洞库匹配,检测测试程序中是否存在漏洞变体1和2;设计基于长短期记忆神经网络分类器LSTM-NNC的检测模块二,基于数据类型扩充的方法扩充数据集,对数据集中的程序代码进行LLVM编译处理为LLVM IR文件,将LLVM IR文件进行数值向量表征转化处理,基于扩充和LLVM IR处理后的数据集训练LSTM-NNC,对测试程序进行LLVM编译和LLVM IR处理,用训练得到的LSTM-NNC检测处理后的测试程序是否存在漏洞变体3;输出对漏洞变体1,2和3的检测结果。
3.如权利要求1所述侧信道漏洞检测的方法,其特征在于,所述侧信道漏洞检测的方法包括以下步骤:
步骤一,样本输入:输入待检测的软件程序代码样本/测试程序;
步骤二,DFA-Trie检测:构造程序关键词字典树和正则化漏洞库,正则化测试程序,将正则化的测试程序中的每个函数与正则化漏洞库中的函数匹配,检测测试程序是否存在漏洞变体1和2;
步骤三,LSTM-NNC检测:扩充数据集并基于扩充的数据集训练LSTM-NNC,利用训练得到的NNC来检测测试程序是否存在漏洞变体3;
步骤四,结果输出:输出待检测程序是否存在漏洞变体1,2和3。
4.如权利要求3所述侧信道漏洞检测的方法,其特征在于,所述步骤一中的输入待检测的软件程序代码样本包括:
在将所有待检测的软件程序样本发送到检测模块之前,预先对大型软件进行分离处理,将大型软件分离成多个功能函数代码样本。
5.如权利要求3所述侧信道漏洞检测的方法,其特征在于,所述步骤二中的DFA-Trie检测包括:
(1)设置阶段:构造程序关键词字典树Trie和正则化漏洞库;
①手动选择每个漏洞函数的程序关键字,并添入程序关键字集,构造程序关键词字典树;
②选择漏洞程序代码集并正则化漏洞程序代码样本,构造正则化的漏洞库;
(2)检测阶段:正则化测试程序,将正则化测试程序与正则化漏洞库匹配;
①基于确定有限状态自动机DFA和程序关键词字典树Trie,正则化测试程序;
②将正则化的测试程序中的每个函数与正则化漏洞库中的每个样本进行匹配,如果匹配成功,则测试程序包含侧信道漏洞库中的漏洞变体1或漏洞变体2;如果正则化的测试程序中每个函数与正则化漏洞库中的所有样本都不匹配,则将原始的测试程序发送到LSTM-NNC检测模块进行下一模块的检测;
所述正则化程序代码过程采取以下操作完成:通过确定有限自动机DFA识别程序中的注释、文字值、标识和分隔符,过滤掉注释、字符串常量和字符常量,过滤掉数字;识别并判断标识符,如果是标识符,则根据程序关键词字典树进一步判断其是否是程序关键词;如果不是程序关键词,则将标识符作为用户自定义的标识符,使用用户自定义标识符对应的正则化索引替换用户自定义标识符;将程序中的空白字符转换成一个统一的空白字符;其中,所述空白字符包括空格、换行符和制表符;
所述正则化测试程序函数代码包括:应用确定有限状态自动机从软件代码中识别并抽取注释、文字值、标识符和分隔符,过滤注释、字符串常量和字符常量,识别标识符并过滤掉数字,用字典树从程序关键词中分离出用户自定义的标识符,使用用户自定义标识符对应的正则化索引替换用户自定义标识符,将程序中的空白字符转换成一个统一的空白字符。
6.如权利要求3所述侧信道漏洞检测的方法,其特征在于,所述步骤三中的LSTM-NNC检测包括:
(1)学习阶段:数据集扩充及LLVM编译处理,处理LLVM IR及数值向量表征转化,训练LSTM-NNC模型;
①数据集扩充及LLVM编译处理;
数据类型扩充,使用数据类型扩展的方式,使变量的数据类型的表示范围比原始代码中相应变量的表示范围更宽;
对程序代码进行LLVM编译处理,是对扩充后的每个代码执行不同选项的编译操作,编译为LLVM IR文件;
分层随机抽样操作为将整个数据集分成n类,并在每个类别中按相同的比例构建训练集、验证集和测试集:n与LSTM-NNC模型中输出的神经元数量一致;
②处理LLVM IR及数值向量表征转化;
LLVM IR文件预处理,即移除包括空白线、注释、元数据、模块信息、LLVM IR文件中的属性信息在内的无效信息,保留函数信息和相关数据定义;用%ID代替LLVM IR文件中的标识符,用<INT/FLOAT/STRING>代替LLVM IR文件中的立即值;每个结构类型数据都在LLVMIR指令中展开,以便从LLVM IR文件中删除每个结构类型数据的定义,以确保结构化数据是内联的;
将LLVM IR转换为数值向量表征处理,所有LLVM IR指令构成完整集合,S={s1,s2,s3,...},利用一个NCC预训练模型将LLVM IR指令映射为数值向量;预训练的元素为一个由LLVM IR指令s和数值向量x组成的二元组(s,x),模型形式化为
Figure FDA0003552735670000031
x是一个200维的向量,S′是所有LLVM IR指令构成的完整集合S的子集,数值向量的维数由预训练模型的嵌入尺寸决定;
每个程序均被形式化成一个有序的n元组,Programi={stat1,stat2,stat3,...,statn},其中n∈Z*是程序Programi中包含的指令数量,statj表示在程序Programi中的第j个LLVMIR指令,
Figure FDA0003552735670000049
statj=statk成立;
对于一个程序,在预训练的模型NCC中寻找对应的LLVM IR指令,并使用对应的200维向量替换该程序中的LLVM IR指令;对于正在寻找的LLVM IR指令不在预训练模型中的情况,使用特定的200维向量进行替换;完成替换后,程序形式化为Xi={x1,x2,x3,...,xn},
Figure FDA0003552735670000041
其中n表示程序Programi中的指令数,xj表示第j条LLVMIR指令对应的向量,
Figure FDA00035527356700000410
xj=xk
③训练LSTM神经网络分类器;
对于有m个程序的训练数据集,通过学习阶段中的步骤②得到数值向量表征;设X={X1,X2,X3,...,Xm}为训练数据集对应的变换后的向量表征,m∈Z*为训练数据集包含的训练样本个数;Xi表示训练数据集X中的第i个程序,是LSTM-NNC模型的输入;Xi有相应的地面真值标签,Yi={yj|yj=0or1,j=1,2,...,n,n≥2,n∈Z*};
Figure FDA0003552735670000042
如果yj=1表示Xi属于第j类;LSTM-NNC模型有四层,依次为LSTM层,包含LSTM单元;BN层,致密层和输出层;
在LSTM层之前,模型的输入为:Xi∈Rmaxlen×200
在LSTM层后:
Figure FDA0003552735670000043
在BN层后:
Figure FDA0003552735670000044
在致密层后:
Figure FDA0003552735670000045
在输出层:
Figure FDA0003552735670000046
Figure FDA0003552735670000047
是LSTM神经网络分类器模型输出;
选择交叉熵损失函数作为训练LSTM神经网络分类器模型的损失函数:
Figure FDA0003552735670000048
其中,maxlen表示输入程序向量序s列的最大长度,其由具体的输入程序决定;LSTM1,2表示两层LSTM单元,压缩矩阵Xi成一个固定长度的向量H;BN表示批量归一化操作;ReLU和softmax是两个激活函数;WD和WY是加权矩阵参数;dense_size表示致密层中单元(神经元)的数量,是超参数;n为输出层的单元个数,根据具体场景进行设置;n=2表示LSTM-NNC模型将输入测试程序分为漏洞类和非漏洞类,n>2表示LSTM-NNC模型将输入测试程序划分为相应的漏洞类别;
(2)检测阶段,测试程序编译和LLVM IR处理,用训练得到的LSTM-NNC检测漏洞变体3;
①LLVM IR编译、文件预处理及将LLVM IR转换为数值向量表征;
LLVM编译,对待检测程序的各个功能函数代码执行不同选项的编译操作,将其编译为LLVM IR文件;
LLVM IR文件预处理,即移除包括空白线、注释、元数据、模块信息、LLVM IR文件中的属性信息在内的无效信息,保留函数信息和相关数据定义;用%ID代替LLVM IR文件中的标识符,用<INT/FLOAT/STRING>代替LLVM IR文件中的立即值;每个结构类型数据都在LLVMIR指令中展开,以便从LLVM IR文件中删除每个结构类型数据的定义,以确保结构化数据是内联的;
将LLVM IR转换为数值向量表征处理,所有LLVM IR指令构成完整集合,S={s1,s2,s3,...},利用一个NCC预训练模型将LLVM IR指令映射为数值向量;预训练的元素为一个由LLVM IR指令s和数值向量x组成的二元组(s,x),模型形式化为
Figure FDA0003552735670000051
x是一个200维的向量,S′是所有LLVM IR指令构成的完整集合S的子集,数值向量的维数由预训练模型的嵌入尺寸决定;
每个程序均被形式化成一个有序的n元组,Programi={stat1,stat2,stat3,...,statn},其中n∈Z*是程序Programi中包含的指令数量,statj表示在程序Programi中的第j个LLVMIR指令;
Figure FDA0003552735670000053
statj=statk成立;
对于一个程序,在预训练的模型中寻找对应的LLVM IR指令,并使用对应的200维向量替换该程序中的LLVM IR指令;对于正在寻找的LLVM IR指令不在预训练模型中的情况,使用一个特定的200维向量进行替换;完成替换后,程序形式化为Xi={x1,x2,x3,...,xn},
Figure FDA0003552735670000052
其中n表示程序Programi中的指令数,xj表示第j条LLVMIR指令对应的向量,
Figure FDA0003552735670000054
xj=xk
②使用学习阶段步骤③中训练得到的LSTM-NNC模型预测测试程序的检测结果;
使用学习阶段中步骤③的输出,加入LSTM学习模型参数的神经网络分类器和检测阶段步骤①的输出作为LSTM-NNC模型的输入Xprog,得到如下结果:一个测试程序是否存在漏洞变体3;形式上,Xprog是输入,
Figure FDA0003552735670000061
是输出;
Figure FDA0003552735670000062
Figure FDA0003552735670000063
Figure FDA0003552735670000064
n为训练数据集中侧信道漏洞实例类别数;
Figure FDA0003552735670000065
表示Xprog属于第j类。
7.一种应用如权利要求1~6任意一项所述侧信道漏洞检测的方法的侧信道漏洞检测的系统,其特征在于,所述侧信道漏洞检测的系统包括:
样本输入模块,用于输入函数代码样本;
DFA-Trie检测模块,用于构造程序关键字字典树和正则化漏洞库,检测正则化的测试程序中的函数匹配正则化漏洞库,利用相似度检测函数代码样本是否包含漏洞变体1和2;
LSTM-NNC检测模块,用于扩充数据集并基于扩充的数据集训练LSTM-NNC模型,用训练得到的分类器检测程序代码样本是否包含漏洞变体3;
结果输出模块,用于输出测试程序代码是否存在漏洞变体1,2和3。
8.一种计算机设备,其特征在于,所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如下步骤:
输入待检测的软件程序代码;顺序执行两个检测模块检测三种类型的漏洞变体:设计基于确定有限状态自动机和字典树DFA-Trie的检测模块一检测漏洞变体1和2,设计基于长短期记忆神经网络分类器LSTM-NNC的检测模块二检测漏洞变体3。
9.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如下步骤:
输入待检测的软件程序代码;顺序执行两个检测模块检测三种类型的漏洞变体:设计基于确定有限状态自动机和字典树DFA-Trie的检测模块一检测漏洞变体1和2,设计基于长短期记忆神经网络分类器LSTM-NNC的检测模块二检测漏洞变体3。
10.一种信息数据处理终端,其特征在于,所述信息数据处理终端用于实现如权利要求7所述侧信道漏洞检测系统。
CN202210266971.5A 2022-03-18 2022-03-18 一种侧信道漏洞检测的方法、系统、介质、设备及终端 Pending CN114722400A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210266971.5A CN114722400A (zh) 2022-03-18 2022-03-18 一种侧信道漏洞检测的方法、系统、介质、设备及终端

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210266971.5A CN114722400A (zh) 2022-03-18 2022-03-18 一种侧信道漏洞检测的方法、系统、介质、设备及终端

Publications (1)

Publication Number Publication Date
CN114722400A true CN114722400A (zh) 2022-07-08

Family

ID=82238278

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210266971.5A Pending CN114722400A (zh) 2022-03-18 2022-03-18 一种侧信道漏洞检测的方法、系统、介质、设备及终端

Country Status (1)

Country Link
CN (1) CN114722400A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117034822A (zh) * 2023-10-10 2023-11-10 北京云枢创新软件技术有限公司 基于三步式仿真的验证方法、电子设备和介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109190382A (zh) * 2018-09-11 2019-01-11 网御安全技术(深圳)有限公司 一种cpu信道检测方法、智能终端及存储介质
US20200314491A1 (en) * 2019-04-01 2020-10-01 Avago Technologies International Sales Pte. Limited Security monitoring with attack detection in an audio/video processing device
US20210367961A1 (en) * 2020-05-21 2021-11-25 Tenable, Inc. Mapping a vulnerability to a stage of an attack chain taxonomy

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109190382A (zh) * 2018-09-11 2019-01-11 网御安全技术(深圳)有限公司 一种cpu信道检测方法、智能终端及存储介质
US20200314491A1 (en) * 2019-04-01 2020-10-01 Avago Technologies International Sales Pte. Limited Security monitoring with attack detection in an audio/video processing device
US20210367961A1 (en) * 2020-05-21 2021-11-25 Tenable, Inc. Mapping a vulnerability to a stage of an attack chain taxonomy

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
WEI SONG等: "Randomized Last-Level Caches Are Still Vulnerable to Cache Side-Channel Attacks! But We Can Fix It", pages 1 - 15, Retrieved from the Internet <URL:《网页在线公开:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9519409》> *
陈春雷等: "基于Yosys的硬件信息流安全验证与漏洞检测", 《计算机应用研究》, vol. 38, no. 6, 9 June 2021 (2021-06-09), pages 1865 - 1869 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117034822A (zh) * 2023-10-10 2023-11-10 北京云枢创新软件技术有限公司 基于三步式仿真的验证方法、电子设备和介质
CN117034822B (zh) * 2023-10-10 2023-12-15 北京云枢创新软件技术有限公司 基于三步式仿真的验证方法、电子设备和介质

Similar Documents

Publication Publication Date Title
Du et al. Deepstellar: Model-based quantitative analysis of stateful deep learning systems
Guggulothu et al. Code smell detection using multi-label classification approach
CN113434858B (zh) 基于反汇编代码结构和语义特征的恶意软件家族分类方法
Alhoshan et al. Zero-shot learning for requirements classification: An exploratory study
Ghanei et al. A novel method for malware detection based on hardware events using deep neural networks
Ullah et al. A malware detection system using a hybrid approach of multi-heads attention-based control flow traces and image visualization
Kakisim et al. Sequential opcode embedding-based malware detection method
CN115098857B (zh) 一种可视化恶意软件的分类方法及装置
Guo et al. HyVulDect: a hybrid semantic vulnerability mining system based on graph neural network
CN116541838A (zh) 一种基于对比学习的恶意软件检测方法
Tian et al. Enhancing vulnerability detection via AST decomposition and neural sub-tree encoding
CN115858002A (zh) 基于图对比学习的二进制代码相似性检测方法及系统与存储介质
CN116361788A (zh) 一种基于机器学习的二进制软件漏洞预测方法
Xie et al. Andro_MD: android malware detection based on convolutional neural networks
CN111400713A (zh) 基于操作码邻接图特征的恶意软件族群分类方法
CN114722400A (zh) 一种侧信道漏洞检测的方法、系统、介质、设备及终端
Liu et al. Source Code Vulnerability Detection: Combining Code Language Models and Code Property Graphs
Han et al. Classification of malware for self-driving systems
Şahin Malware detection using transformers-based model GPT-2
Aljofey et al. A supervised learning model for detecting Ponzi contracts in Ethereum Blockchain
Vatamanu et al. Building a practical and reliable classifier for malware detection
Yan et al. Prompt engineering-assisted malware dynamic analysis using gpt-4
US20230205883A1 (en) Integrated static and dynamic analysis for malware detection
Meng et al. A survey on machine learning-based detection and classification technology of malware
Liu et al. FENOC: an ensemble one-class learning framework for malware detection

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination