有效
一种漏洞导向的模糊测试方法、系统和介质
沈毅、于璐、施凡、李宇薇、胡淼、李振汉、李阳、黄颖
中国人民解放军国防科技大学
摘要
本发明提供一种漏洞导向的模糊测试方法、系统和介质,所述方法包括:得到二进制测试程序中每一个函数特征向量与目标漏洞函数特征向量之间的相似性分值;对相似性分值按从高到低的顺序排序,增加相似性分值大于或等于预设阈值的函数的权重,减少相似性分值小于预设阈值的函数的权重;得到各个函数的权重;确定每一个函数中基本块的初始权重;确定基本块节点中的边缘节点和常覆盖节点;确定导向式模糊测试的若干个种子,所述导向式模糊测试的种子基于预先设置的变异策略生成新的测试用例,且所述导向式模糊测试的种子基于遗传算法确定。根据本发明的方案,将代码在引导过程中的不均等性作为反馈,指导测试用例的生成,进一步提高了模糊测试的效率。
1.一种漏洞导向的模糊测试方法,其特征在于,所述方法包括以下步骤:步骤S1:对于给定的二进制测试程序和给定的目标漏洞函数,分析所述二进制测试程序,获取二进制测试程序中每一个函数的控制流图和数据流图,将所述控制流图和所述数据流图结合生成融合语义图;所述融合语义图中的节点为基本块节点,对所述基本块节点内部的语义特征进行提取,得到所述融合语义图中每一个基本块节点的语义特征;进而得到所述二进制测试程序中每一个函数的融合语义图的结构特征和所述融合语义图中基本块节点的语义特征;从已有的漏洞特征库中得到目标漏洞函数的结构特征和语义特征;对二进制测试程序中的函数与目标漏洞函数进行向量嵌入和比较:使用训练好的语义相似性学习模型对所述二进制测试程序的函数进行向量嵌入,得到每一个函数的特征向量;使用语义相似性学习模型对目标漏洞函数的特征进行向量嵌入,得到漏洞特征向量;使用定义的距离函数得到所述二进制测试程序中每一个函数特征向量与目标漏洞函数特征向量之间的相似性分值;其中,使用训练好的语义相似性学习模型对所述二进制测试程序的函数进行向量嵌入,得到每一个函数的特征向量,包括:基于神经网络模型进行特征提取,首先提取二进制测试程序中函数的结构特征和语义特征,使用structure2vec结构进行特征嵌入,得到能够表征函数特征的向量;二进制测试程序中函数的结构特征基于函数的融合语义图得到,结合函数的控制流图和数据流图,得到能够表征函数中基本块之间的控制依赖关系和数据依赖关系的融合语义图,融合语义图中的节点为函数内部的基本块,边表示基本块之间存在控制依赖或者数据依赖;函数的语义特征以基本块为单位,包括函数内每一个基本块中的字符串常量、整数常量、调用指令数目、算术指令数目、总指令数目;基于函数的所述融合语义图,由于融合语义图中的节点为函数内部的基本块,边表示基本块之间存在控制依赖或者数据依赖,则对所述融合语义图的结构进行解析,能够提取所述融合语义图的结构特征;每个融合语义图中包括多个基本块节点,每个基本块节点对应函数中的一个基本块,对所述融合语义图中的每个基本块节点,提取对应的语义特征,将函数的基本块的语义特征和结构特征使用structure2vec结构图嵌入,嵌入后得到的向量作为函数的特征向量;步骤S2:对二进制测试程序中的函数与目标漏洞函数的相似性分值按从高到低的顺序排序,增加相似性分值大于或等于预设阈值的函数的权重,减少相似性分值小于预设阈值的函数的权重;得到各个函数的权重;步骤S3:基于各个函数的权重,确定每一个函数中基本块节点的初始权重;步骤S4:对所述二进制测试程序进行若干次的动态执行,获取所述二进制测试程序的多个执行路径;基于所述多个执行路径,得到执行路径中覆盖的基本块节点的执行频率,确定基本块节点中的边缘节点和常覆盖节点;所述边缘节点为分支语句的候选分支节点中,执行频率小于预置边缘阈值的基本块节点;所述常覆盖节点为执行路径中所有分支的下一执行节点中,执行频率高于预置常覆盖阈值的基本块节点;按照基本块节点的节点类型,对所述基本块节点的权重进行更新;步骤S5:确定导向式模糊测试的若干个种子,所述导向式模糊测试的种子基于预先设置的变异策略生成新的测试用例,且所述导向式模糊测试的种子基于遗传算法确定;其中,基于更新后的基本块的权重,基于适应度函数,计算每一个种子对应的执行过程中,得到的执行基本块序列权重之和作为适应度值,并根据所述适应度值选择部分种子作为父代;由父代种子进行交叉、变异,得到子代种子。
2.如权利要求1所述的方法,其特征在于,父代种子使用在随机位置进行交叉,并按照不同粒度进行部分变异后,得到子代种子。
3.如权利要求2所述的方法,其特征在于,所述步骤S5中,所述导向式模糊测试中的种子选择过程基于遗传算法实现,遗传算法的具体实现过程包括以下步骤:步骤S51: 种群初始化,将已有的测试用例作为初始种群;步骤S52: 对于所述初始种群中的每一个种子:将种子作为输入执行测试程序,记录执行过程中覆盖的基本块序列,将基本块序列中基本块的权重之和作为种子的适应度;步骤S53:设置种群最大的迭代数,将当前的迭代数设置为 1;步骤S54:若当前迭代次数大于种群最大的迭代数,方法结束;否则,进入步骤S55;步骤S55:根据适应度的值选择种群中的种子,选择适应度值大的种子构建父代种群,用于交叉变异子代种群;步骤S56:对父代种群中的任意两个种子在随机位置进行交叉,并使用模糊测试的变异策略对交叉后得到的个体进行变异操作,得到子代个体,即为新的种子,作为种群中的种子;种群迭代次数的值加1,进入步骤S54。
4.如权利要求3所述的方法,其特征在于,所述模糊测试的变异策略包括位反转、特定值替换和随机位置的变异;位反转包括对相邻的一位、两位、四位和八位的值进行反转变化;特定值替换则是使用预先定义的字典中的特殊值,在字节和字的单位上进行预定义的特殊值替换;随机位置变异则是随机选择种子文件中的位置,在选定的位置上进行比特或者字节单位的变异,变异则包括加减随机数、替换为特殊值和边界值以及对随机长度的内容进行随机内容替换。
5.一种漏洞导向的模糊测试装置,其特征在于,所述装置包括:特征获取模块:配置为对于给定的二进制测试程序和给定的目标漏洞函数,分析所述二进制测试程序,获取二进制测试程序中每一个函数的控制流图和数据流图,将所述控制流图和所述数据流图结合生成融合语义图;所述融合语义图中的节点为基本块节点,对所述基本块节点内部的语义特征进行提取,得到所述融合语义图中每一个基本块节点的语义特征;进而得到所述二进制测试程序中每一个函数的融合语义图的结构特征和所述融合语义图中基本块节点的语义特征;从已有的漏洞特征库中得到目标漏洞函数的结构特征和语义特征;对二进制测试程序中的函数与目标漏洞函数进行向量嵌入和比较:使用训练好的语义相似性学习模型对所述二进制测试程序的函数进行向量嵌入,得到每一个函数的特征向量;使用语义相似性学习模型对目标漏洞函数的特征进行向量嵌入,得到漏洞特征向量;使用定义的距离函数得到所述二进制测试程序中每一个函数特征向量与目标漏洞函数特征向量之间的相似性分值;其中,使用训练好的语义相似性学习模型对所述二进制测试程序的函数进行向量嵌入,得到每一个函数的特征向量,包括:基于神经网络模型进行特征提取,首先提取二进制测试程序中函数的结构特征和语义特征,使用structure2vec结构进行特征嵌入,得到能够表征函数特征的向量;二进制测试程序中函数的结构特征基于函数的融合语义图得到,结合函数的控制流图和数据流图,得到能够表征函数中基本块之间的控制依赖关系和数据依赖关系的融合语义图,融合语义图中的节点为函数内部的基本块,边表示基本块之间存在控制依赖或者数据依赖;函数的语义特征以基本块为单位,包括函数内每一个基本块中的字符串常量、整数常量、调用指令数目、算术指令数目、总指令数目;基于函数的所述融合语义图,由于融合语义图中的节点为函数内部的基本块,边表示基本块之间存在控制依赖或者数据依赖,则对所述融合语义图的结构进行解析,能够提取所述融合语义图的结构特征;每个融合语义图中包括多个基本块节点,每个基本块节点对应函数中的一个基本块,对所述融合语义图中的每个基本块节点,提取对应的语义特征,将函数的基本块的语义特征和结构特征使用structure2vec结构图嵌入,嵌入后得到的向量作为函数的特征向量;排序模块:配置为对二进制测试程序中的函数与目标漏洞函数的相似性分值按从高到低的顺序排序,增加相似性分值大于或等于预设阈值的函数的权重,减少相似性分值小于预设阈值的函数的权重;得到各个函数的权重;权重获取模块:配置为基于各个函数的权重,确定每一个函数中基本块的初始权重;更新模块:配置为对所述二进制测试程序进行若干次的动态执行,获取所述二进制测试程序的多个执行路径;基于所述多个执行路径,得到执行路径中覆盖的基本块节点的执行频率,确定基本块节点中的边缘节点和常覆盖节点;所述边缘节点为分支语句的候选分支节点中,执行频率小于预置边缘阈值的基本块节点;所述常覆盖节点为执行路径中所有分支的下一执行节点中,执行频率高于预置常覆盖阈值的基本块节点;按照基本块的节点类型,对所述基本块的权重进行更新;测试用例生成模块:配置为确定导向式模糊测试的若干个种子,所述导向式模糊测试的种子基于预先设置的变异策略生成新的测试用例,且所述导向式模糊测试的种子基于遗传算法确定;其中,基于更新后的基本块的权重,基于适应度函数,计算每一个种子对应的执行过程中,得到的执行基本块序列权重之和作为适应度值,并根据所述适应度值选择部分种子作为父代;由父代种子进行交叉、变异,得到子代种子。
6.一种漏洞导向的模糊测试系统,其特征在于,包括:处理器,用于执行多条指令;存储器,用于存储多条指令;其中,所述多条指令,用于由所述存储器存储,并由所述处理器加载并执行如权利要求1-4之任一项所述方法。
7.一种计算机可读存储介质,其特征在于,所述存储介质中存储有多条指令;所述多条指令,用于由处理器加载并执行如权利要求1-4之任一项所述方法。
暂无引用专利



