可左右滑动选省市

一种用于可信计算环境模糊测试的种子生成方法

更新时间:2024-07-01
一种用于可信计算环境模糊测试的种子生成方法 专利申请类型:发明专利;
地区:湖南-长沙;
源自:长沙高价值专利检索信息库;

专利名称:一种用于可信计算环境模糊测试的种子生成方法

专利类型:发明专利

专利申请号:CN202111458875.2

专利申请(专利权)人:湖南大学
权利人地址:湖南省长沙市岳麓区麓山南路1号湖南大学

专利发明(设计)人:邓佩瑶,孙建华

专利摘要:本发明涉及计算机领域,具体涉及一种用于可信计算环境模糊测试的种子生成方法。本发明的方法包括:收集可信计算环境运行过程中执行的系统调用序列作为原始数据;将原始数据中的系统调用序列编码为定长格式;为编码后的系统调用序列标注期望输出;将标注后的系统调用序列划分为训练集和测试集;基于卷积神经网络构建模型,并使用训练集训练该模型,使用测试集评估该模型;随机生成大量系统调用序列,利用训练好的模型从生成的系统调用序列集合中筛选出漏洞挖掘潜力高的序列,将这部分序列作为种子。该方法能够生成高质量的模糊测试种子,并且该方法生成的种子比随机生成的种子更容易挖掘出可信计算环境的系统漏洞。

主权利要求:
1.一种用于可信计算环境模糊测试的种子生成方法,其特征在于实施步骤为:
(1)收集可信计算环境运行过程中执行的系统调用序列作为原始数据;
(2)对原始数据进行预处理得到神经网络模型的训练集和测试集,预处理包括编码系统调用序列、标注期望输出、划分训练集和测试集三个步骤;
(3)基于卷积神经网络构建模型,基于卷积神经网络构建模型,并使用训练集训练该模型,使用测试集评估该模型,其中卷积神经网络包括以下部分:两层卷积层,均使用滤波器来逐步提取不同深度的特征,其中第一层卷积层即为输入层,由固定数量的节点组成,节点数量为一条系统调用序列编码后的向量长度;一层池化层,用于去除冗余的信息量;两层全连接层,均使用线性整流ReLu作为神经元的激活函数,需要注意,最后一个全连接层作为输出层,节点只有一个,因此使用Sigmoid激活函数将输出结果映射到区间[0,1]作为最终输出;
(4)随机生成大量系统调用序列,利用训练好的模型从生成的系统调用序列集合中筛选出漏洞挖掘潜力高的序列,将这部分序列作为种子,具体过程如下:使用Syzkaller或Healer随机生成大量系统调用序列;将生成的系统调用序列编码为定长格式,按顺序记录系统调用序列中的每条系统调用,对于每条系统调用,分别记录其系统调用编号、参数个数和参数值,并存储为十六进制格式,最后将系统调用序列用零填充为固定长度的序列;将编码后的系统调用序列作为输入,运行神经网络模型,对于每条系统调用序列输出一个对应的分数,该分数范围为[0,1];根据分数从高到低选取一定数量的系统调用序列作为种子。
2.根据权利要求1所述的用于可信计算环境模糊测试的种子生成方法,其特征在于本方法收集的每个系统调用序列由多条系统调用组成,每条系统调用包含系统调用名、系统调用编号和参数值,其中,每个系统调用编号对应一个系统调用名。
3.根据权利要求1所述的用于可信计算环境模糊测试的种子生成方法,其特征在于本方法在对原始数据进行预处理时,实施以下步骤:(1)将原始数据中的系统调用序列编码为定长格式,编码规则为按顺序记录系统调用序列中的每条系统调用,对于每条系统调用,分别记录其系统调用编号、参数个数和参数值,并存储为十六进制格式,最后将系统调用序列用零填充为固定长度的序列;
(2)为编码后的系统调用序列标注对应的期望输出,输出范围为[0,1],具体取值根据不同环境调整;
(3)使用交叉验证方法将标注后的系统调用序列划分为训练集和测试集。
4.根据权利要求1所述的用于可信计算环境模糊测试的种子生成方法,其特征在于本方法使用训练集训练模型时,包含如下几个要点:(1)采用丢弃法Dropout防止过拟合问题,即在神经网络模型的训练过程中,随机丢弃一部分神经元及其连接,防止参数过分依赖训练集而导致的过拟合问题;
(2)使用Adam算法优化神经网络模型,即基于训练数据迭代地更新神经网络权重,并根据神经网络每个参数的当前梯度来调整学习速率,从而使得模型参数快速地达到最优值;
(3)选择均方误差作为损失函数;
(4)设定一个停止训练的阈值,误差小于阈值时则停止训练;或设置一个停止训练的轮次数,完成指定的迭代轮次后即可停止。
5.根据权利要求1所述的用于可信计算环境模糊测试的种子生成方法,其特征在于本方法在评估模型时,使用交叉验证方法,并且采用均方误差作为性能指标。 说明书 : 一种用于可信计算环境模糊测试的种子生成方法技术领域[0001] 本发明涉及计算机领域,尤其涉及一种用于可信计算环境模糊测试的种子生成方法。具体涉及首先随机生成可信计算环境的系统调用序列,然后使用深度学习方法从系统调用序列中提取漏洞挖掘潜力大的序列作为模糊测试种子的方法。背景技术[0002] 随着越来越多的设备使用可信计算环境保证数据和资产安全,对可信计算环境的安全研究逐渐紧迫。高效地发现可信计算环境的漏洞,能够帮助可信计算环境的开发者和维护者早于黑客攻击前修复漏洞,避免数据和资产的损失。[0003] 目前,挖掘可信计算环境漏洞的主流方法是模糊测试。模糊测试是一种自动化的安全测试技术,首先通过随机或半随机的方式生成种子,然后将种子作为输入运行被测系统,观察被测系统的状态即可判断是否存在潜在的安全漏洞。其中,种子的质量至关重要,如果种子具备较高的漏洞挖掘潜力,那么模糊测试器在较短的时间内就能通过变异种子来触发系统漏洞。如何获取高质量的种子,成为亟待解决的问题。发明内容[0004] 本发明针对目前对可信计算环境安全分析的迫切需求,结合深度学习方法,生成高质量的模糊测试种子,以提高对可信计算环境模糊测试的效率,从而帮助可信计算环境的开发者和维护者早于黑客攻击前修复漏洞,避免数据和资产的损失。本发明提供了一种用于可信计算环境模糊测试的种子生成方法,所叙述方法步骤如图1,包括:[0005] 1.数据预处理[0006] 本发明收集可信计算环境运行过程中执行的系统调用序列作为原始数据,对原始数据进行预处理,得到神经网络模型的训练集和测试集。[0007] 收集可信计算环境的系统调用序列可以使用OPTEEFuzzer等工具,收集的系统调用序列格式如图2,一个系统调用序列包含多条系统调用,每条系统调用由系统调用名、系统调用编号和参数组成,其中,每个系统调用编号对应一个系统调用名。[0008] 对原始数据进行预处理的具体步骤如下:[0009] (1)编码系统调用序列。神经网络模型的输入是固定大小的序列,因此,需要将原始数据中的系统调用序列编码为定长格式,编码规则如下:按顺序记录系统调用序列中的每条系统调用,对于每条系统调用,分别记录其系统调用编号、参数个数和参数值,并存储为十六进制格式,最后将系统调用序列用零填充为固定长度的序列。编码后的系统调用序列格式如图3。[0010] (2)标注期望输出。本发明基于监督学习,因此需要为编码后的系统调用序列标注对应的期望输出,输出范围为[0,1],具体取值可根据不同环境调整。一般而言,能触发系统漏洞或者执行系统调用较多的序列,经过变异后更有可能触发系统漏洞,对于这类漏洞挖掘潜力大的系统调用序列,其期望输出也应该越大。[0011] (3)划分训练集和测试集。本发明使用交叉验证方法,将标注后的系统调用序列均等地分为5份,每次从中选取4份作为训练集,剩下1份作为测试集。共选取5次,每次使用训练集调试神经网络,使用测试集测试网络的实际学习能力。该方法可以确保在样本量不庞大的情况下,合理最大化利用每一个样本数据。[0012] 2.模型构建[0013] 本发明基于一维的卷积神经网络(ConvolutionalNeuralNetwork,CNN)构建模型,具体结构包括:[0014] (1)两层卷积层,均使用滤波器来逐步提取不同深度的特征。其中第一层卷积层即为输入层,由固定数量的节点组成,节点数量为一条系统调用序列编码后的向量长度。[0015] (2)一层池化层,用于去除冗余的信息量。[0016] (3)两层全连接层,均使用线性整流(ReLu)作为神经元的激活函数,线性整流相比传统的神经网络激活函数,具有仿生物学原理,能更好地帮助神经网络理解复杂的非线性函数。需要注意,最后一个全连接层作为输出层,节点只有一个,因此需要使用Sigmoid激活函数将输出结果映射到区间[0,1]作为最终输出。[0017] 3.模型训练[0018] 使用训练集训练模型,包含如下几个要点:[0019] (1)在训练过程中采用丢弃法(Dropout)防止过拟合问题。丢弃法是指在神经网络模型的训练过程中,随机丢弃一部分神经元及其连接,防止参数过分依赖训练集而导致的过拟合问题。[0020] (2)在训练过程中使用Adam算法优化神经网络模型。Adam算法是对随机梯度下降法的优化算法,它基于训练数据迭代地更新神经网络权重,并根据神经网络每个参数的当前梯度来调整学习速率,从而使得模型参数快速地达到最优值。[0021] (3)选择均方误差(MeanSquaredError,MSE)作为损失函数,均方误差是指真实值与预测值之差平方的期望值,可以直观地表现真实值与预测值之间的差距。[0022] (4)设定一个停止训练的阈值,误差小于阈值时则停止训练。或设置一个停止训练的轮次数,完成指定的迭代轮次后即可停止。具体参数可在实验中调整设置。[0023] 4.模型评估[0024] 本发明使用交叉验证方法,将预处理后的系统调用序列均等地分为五份,每次从中选取四份作为训练集,剩下一份作为测试集,共选取五次,每次使用训练集训练神经网络模型,使用测试集进行模型评估。因此,模型的最终指标值为这五次模型评估的平均值。[0025] 模型评估采用均方误差MSE作为性能指标,MSE越小,表示模型效果越好。MSE的计算公式如下:[0026][0027] 其中,n为测试集样本数,Yi为真实值,为模型预测值。[0028] 5.种子生成[0029] 在完成模型的训练和评估后,可以使用该模型从大量系统调用序列中提取更具漏洞挖掘潜力的序列作为模糊测试种子,其具体过程包括以下几个部分:[0030] (1)使用工具随机生成大量系统调用序列,常用的工具包括Syzkaller、Healer等。生成的系统调用序列格式如图2。[0031] (2)将生成的系统调用序列编码为定长格式,编码规则如下:按顺序记录系统调用序列中的每条系统调用,对于每条系统调用,分别记录其系统调用编号、参数个数和参数值,并存储为十六进制格式,最后将系统调用序列用零填充为固定长度的序列。编码后的系统调用序列格式如图3。[0032] (3)将编码后的系统调用序列作为输入,运行神经网络模型,对于每条系统调用序列输出一个对应的分数,该分数范围为[0,1],并且该分数越高,表明其对应系统调用序列的漏洞挖掘潜力越大。[0033] (4)根据分数从高到低选取一定数量的系统调用序列,对该部分序列进行变异更可能触发深层次的漏洞,因此可以作为模糊测试的种子。附图说明[0034] 图1:系统流程图[0035] 图2:未编码系统调用序列[0036] 图3:编码系统调用序列具体实施方式[0037] 本发明的硬件环境主要是一台PC主机,其中,CPU为Intel(R)Core(TM)i5‑4570,3.20GHz,内存为4GBRAM,64位操作系统。[0038] 本发明的软件实现以Windows10为平台,基于深度学习框架PyTorch,使用C语言和Python语言。其中,PyTorch版本为1.5,C语言版本为11,Python版本为3。[0039] 实验对象为OPTEE,OPTEE是Linaro公司维护的开源项目,它完整地实现了一个可信计算环境。[0040] 具体实施过程主要分为四个部分:数据预处理、模型构建与训练、模型评估、种子生成。具体如下:[0041] 1.数据预处理[0042] 本发明使用OPTEEFuzzer工具收集可信计算环境OPTEE运行过程中执行的系统调用序列作为原始数据,总计164条。该部分数据从真实环境中获取,具有一定的代表性,因此可以用来训练和评估神经网络模型。[0043] 原始数据用于训练和评估神经网络模型前,还需经过如下预处理:[0044] (1)由于神经网络模型的输入是固定大小的序列,因此将原始数据中系统调用序列编码为固定长度的序列。具体编码过程为对于每条系统调用序列,按顺序记录其中每条系统调用的系统调用编号、参数个数和参数值,并存储为十六进制格式,最后将系统调用序列用零填充为固定长度的序列。[0045] 例如,图2为原始数据中的一个系统调用序列,对其编码得到的序列如图3。[0046] (2)本发明基于监督学习,因此需要为编码后的系统调用序列标注对应的期望输出,输出范围为[0,1]。具体来说,能触发系统漏洞的系统调用序列经过变异后仍有很大可能触发系统漏洞,即该类系统调用序列具备最大的漏洞挖掘潜力,其期望输出最大;对于没有触发系统漏洞的序列,其包含的系统调用数量越多,变异产生的序列触发系统漏洞的概率也越大,因此期望输出也越大。[0047] 针对实验对象OPTEE,本发明根据系统调用序列是否触发系统漏洞及系统调用序列包含的系统调用数量,为系统调用序列标注对应的期望输出,期望输出具体取值如下表所示:[0048][0049][0050] (3)本发明使用交叉验证方法,将上述编码后的164条系统调用序列均等地分为5份,每份分别包含33、33、33、33、32条序列。共选取5次,每次从中选取4份作为训练集,用于调试神经网络,另外1份作为测试集,用于测试网络的实际学习能力。[0051] 2.模型构建与训练[0052] 神经网络与机器学习模型相比较,具有更强大的特征提取能力和更好的拟合效果,可以采用的调优方法也更多。因此,本发明通过构建神经网络模型抽取序列的深层次特征,判别其挖掘漏洞的潜力。[0053] 由于样本序列中的每一条系统调用都是一个紧接着一个执行的,那么每个系统调用与其附近的系统调用有着相互依存的关系。传统的神经网络结构不能够抓取到当前单元的周围单元信息,RNN系列的结构只能抓取当前序列和之前序列的时序关系。然而在当前的样本集中,依赖关系不存在于序列与序列之间,仅存在于序列之内。因此,本发明不使用RNN系列的结构,只基于一维的卷积神经网络(ConvolutionalNeuralNetwork,CNN)构建模型。[0054] 本发明使用深度学习框架PyTorch构建和训练上述CNN模型,PyTorch相对其他深度学习框架更加高效快速。构建的CNN模型包括两层卷积层、一层池化层和两层全连接层,其中,卷积层接收输入数据并使用滤波器提取输入数据的特征,池化层对卷积层输出的数据进行特征筛选与过滤,全接连层接收池化层输出的一维向量,使用激活函数ReLu和Sigmoid完成分类并输出最终结果。在模型的训练过程中,使用丢弃法防止过拟合问题、使用Adam算法优化神经网络模型。[0055] 3.模型评估[0056] 模型评估即使用测试集来验证模型的性能表现,而选择一个合适的评估指标具有重大的指导意义。均方误差MSE能够比较直观地表现真实值与预测值的差距,因此本发明选择MSE作为模型的评估指标。[0057] 对于小规模数据集,交叉验证方法比传统的模型评估方式更能避免数据集划分不合理造成的过拟合问题,因此本发明使用交叉验证方法进行模型评估。本发明将数据集均等地划分为5份,共选取5次,每次从中选取4份作为训练集,剩下一份作为测试集进行交叉验证。模型评估的最终指标值为这5次交叉验证误差的平均取值。[0058] 4.种子生成[0059] 首先,本发明使用Syzkaller工具随机生成3000条系统调用序列,并将其编码为定长格式。生成的系统调用序列格式如图2,编码后的系统调用序列格式如图3。[0060] 其次,将编码后的系统调用序列作为输入,运行上述CNN模型,从而获得每条系统调用序列的预测分数,分数范围为[0,1],且该分数越高,表明对应系统调用序列的漏洞挖掘潜力越大。[0061] 最后,按分数从高到低选取前1000条系统调用序列作为种子。[0062] 根据实验表明,使用本发明方法生成的种子比随机生成的种子具有更高的漏洞挖掘潜力,即使用本发明方法生成的种子进行模糊测试,更容易挖掘出更多的系统漏洞。

专利地区:湖南

专利申请日期:2021-12-01

专利公开日期:2024-06-18

专利公告号:CN114117450B

电话咨询
读内容
搜本页
回顶部