有效
基于代码相似性分析的操作系统脆弱性检测方法、系统及介质
任怡、汪哲、谭郁松、周凯、黄辰林、李宝、阳国贵、王晓川、丁滟、张建锋、谭霜、蹇松雷
中国人民解放军国防科技大学
任
任怡 专利 87
中国人民解放军国防科技大学程序控制装置电子数据处理计算模型系统
汪
汪哲 专利 3
中国人民解放军国防科技大学电子数据处理软件工程设计计算技术
谭
谭郁松 专利 172
中国人民解放军国防科技大学程序控制装置计算机安全软件工程设计
周
周凯 专利 5
中国人民解放军国防科技大学物理仪器无线电定位导航电子数据处理
黄
黄辰林 专利 118
中国人民解放军国防科技大学计算机安全程序控制装置电子数据处理
李
李宝 专利 110
中国人民解放军国防科技大学程序控制装置计算机安全电子数据处理
阳
阳国贵 专利 21
中国人民解放军国防科学技术大学电子数据处理计算技术物理仪器
王
王晓川 专利 93
中国人民解放军国防科技大学程序控制装置电子数据处理计算模型系统
丁
丁滟 专利 136
中国人民解放军国防科技大学计算机安全程序控制装置电子数据处理
张
张建锋 专利 121
中国人民解放军国防科学技术大学程序控制装置计算机安全电子数据处理
谭
谭霜 专利 95
中国人民解放军国防科技大学程序控制装置计算机安全电子数据处理
蹇
蹇松雷 专利 92
中国人民解放军国防科技大学程序控制装置计算机安全计算模型系统
摘要
本发明公开了一种基于代码相似性分析的操作系统脆弱性检测方法、系统及介质,本发明方法包括定位脆弱性代码段,形成操作系统脆弱性代码库;筛选操作系统源码库;针对脆弱性代码段、操作系统源码库分别生成代码属性图集合;分别从脆弱性代码段中的脆弱函数和操作系统源码库中各待测函数的代码属性图集合中提取特征,计算相似性,检测是否存在脆弱性代码的复用,并输出结果。本发明针对现有脆弱性代码复用检测方法在面向操作系统等规模较大的软件系统时出现的检测能力不足等问题,采用筛选操作系统源码库,以及多脆弱性特征的递进式筛选等方法,对现有检测方法流程进行了改进和优化,在保证较高的运行效率的同时,兼顾良好的准确度。
1.一种基于代码相似性分析的操作系统脆弱性检测方法,其特征在于实施步骤包括:1)基于公共脆弱性数据库提供的信息定位操作系统相关的脆弱性代码段,形成操作系统脆弱性代码库;2)根据操作系统脆弱性代码库中脆弱性代码段的检测目标对操作系统源码库进行筛选,包括:2.1)从操作系统脆弱性代码库中提取代码样本;2.2)判断代码样本的数量是否超过预设阈值,如果超过预设阈值则直接将整个操作系统源码库作为筛选后的操作系统源码库,跳转执行步骤3);否则,跳转执行下一步;2.3)根据脆弱性代码段所在软件包的类型信息,筛选保留操作系统脆弱性代码库所属软件包类型相同的代码,所述软件包类型依据功能分类包括内核、桌面环境、网络相关、硬件驱动、上层应用及开发环境;2.4)计算脆弱性代码段中各函数包含的代码行数,取最小值和最大值构成脆弱性代码段的行数波动范围;遍历操作系统源码库中各待测函数,若待测函数包含的代码行数相比行数波动范围超过预设阈值,则剔除这个待测函数,否则就将其加入筛选结果,从而得到筛选后的操作系统源码库,跳转执行步骤3);3)解析操作系统脆弱性代码库的脆弱性代码段和筛选后的操作系统源码库,依据代码属性图的生成规则生成从脆弱性代码段中所有脆弱函数的代码属性图集合、操作系统源码库中各待测函数的代码属性图集合,所述脆弱函数是指脆弱性代码段包含的一个或多个函数;4)分别从脆弱性代码段中所有脆弱函数的代码属性图集合和操作系统源码库中各待测函数的代码属性图集合提取特征,计算相似性,检测是否存在脆弱性代码的复用,并输出结果,包括:4.1)读取脆弱函数的代码属性图集合,提取脆弱函数的基础信息特征、令牌集合特征以及控制流路径特征作为脆弱性特征集合;4.2)遍历获取操作系统源码库中的一个待测函数作为当前的待测函数,获取当前的待测函数的代码属性图;4.3)从代码属性图中提取当前的待测函数的基础信息,计算每一个脆弱函数与当前的待测函数之间的余弦距离,如果每一个脆弱函数与当前的待测函数之间的余弦距离均高于预设阈值,则判定当前的待测函数与脆弱代码段不相似,跳转执行步骤4.6);否则跳转执行下一步;4.4)提取当前的待测函数的令牌集合,计算每个脆弱函数和当前的待测函数的令牌集合之间的编辑距离,如果编辑距离均大于预设阈值,则认为当前的待测函数不是相似代码,跳转执行步骤4.6);4.5)提取当前的待测函数的控制流路径集合,与脆弱函数的特征进行比较以判断当前的待测函数与脆弱代码段是否相似;4.6)判断操作系统源码库中的待测函数是否全部检测完毕,如果尚未检测完毕则跳转执行步骤4.2);否则输出相似代码检测结果,结束;步骤1)的详细步骤包括:1.1)获取公共脆弱性数据库中收集的脆弱性代码信息;1.2)针对每一个脆弱性代码:判断公共脆弱性数据库是否提供了该脆弱性代码的补丁文件,如果公共脆弱性数据库提供了补丁文件,则直接通过补丁文件内的信息定位脆弱性代码涉及的文件和代码段;如果公共脆弱性数据库没有提供补丁文件,则根据公共脆弱性数据库对脆弱性的描述获取其所在软件被修复的版本号,通过比对修复前后两个软件版本之间的差别,定位到脆弱性涉及到的文件和代码段;1.3)以函数为单位提取涉及到的完整代码,构建代码样本集合记为操作系统脆弱性代码库,且代码样本集合中的一个代码样本包含一个或多个与该脆弱性相关的脆弱性代码段。
2.根据权利要求1所述的基于代码相似性分析的操作系统脆弱性检测方法,其特征在于,所述操作系统脆弱性代码库以函数为单位、以代码文件的形式保存。
3.根据权利要求1所述的基于代码相似性分析的操作系统脆弱性检测方法,其特征在于,步骤4.3)的详细步骤包括:4.3.1)首先将当前的待测函数的代码属性图中的返回值类型进行分类,包括基本类型、结构类型、指针类型和void类型,并将类型映射为不同的数值,读取待测函数返回值类型和参数类型,按照数据类型进行量化,记录数值;其中基本类型包括数值类型和字符类型,结构类型包括含数组、struct、union、enum在内的多种数据结构;4.3.2)读取当前的待测函数内的语句总数和循环数量,联系返回值类型和参数类型的值,构成当前的待测函数的基础信息向量V B ;4.3.3)分别计算每个脆弱函数与当前的待测函数的基础信息向量V B 之间的余弦距离,如果均高于预设阈值,则判定当前的待测函数与脆弱代码段不相似,跳转执行步骤4.6);否则跳转执行下一步。
4.根据权利要求1所述的基于代码相似性分析的操作系统脆弱性检测方法,其特征在于,步骤4.5)的详细步骤包括:4.5.1)首先借助当前的待测函数的代码属性图得到当前的待测函数的控制流路径的集合,集合中每条路径由语句节点和控制流边组成;然后提取控制流路径中每个节点的语句类型,按顺序保存为类型序列,将控制流路径集合转化为类型序列集合S t ;4.5.2)分别计算每个脆弱函数和当前的待测函数的类型序列集合S t 之间的杰卡德距离,如果存在某个脆弱函数与待测函数的类型序列集合S t 之间的杰卡德距离小于预设阈值,则认为当前的待测函数是该脆弱函数对应的脆弱代码段的相似代码,并记录结果;否则,判定当前的待测函数与该脆弱函数对应的脆弱代码段不相似。
5.一种基于代码相似性分析的操作系统脆弱性检测系统,其特征在于包括:脆弱性代码段获取程序单元,用于基于公共脆弱性数据库提供的信息定位操作系统相关的脆弱性代码段,形成操作系统脆弱性代码库,包括:1.1)获取公共脆弱性数据库中收集的脆弱性代码信息;1.2)针对每一个脆弱性代码:判断公共脆弱性数据库是否提供了该脆弱性代码的补丁文件,如果公共脆弱性数据库提供了补丁文件,则直接通过补丁文件内的信息定位脆弱性代码涉及的文件和代码段;如果公共脆弱性数据库没有提供补丁文件,则根据公共脆弱性数据库对脆弱性的描述获取其所在软件被修复的版本号,通过比对修复前后两个软件版本之间的差别,定位到脆弱性涉及到的文件和代码段;1.3)以函数为单位提取涉及到的完整代码,构建代码样本集合记为操作系统脆弱性代码库,且代码样本集合中的一个代码样本包含一个或多个与该脆弱性相关的脆弱性代码段;操作系统源码库筛选程序单元,用于根据操作系统脆弱性代码库中脆弱性代码段的检测目标对操作系统源码库进行筛选,包括:2.1)从操作系统脆弱性代码库中提取代码样本;2.2)判断代码样本的数量是否超过预设阈值,如果超过预设阈值则直接将整个操作系统源码库作为筛选后的操作系统源码库,跳转执行步骤3);否则,跳转执行下一步;2.3)根据脆弱性代码段所在软件包的类型信息,筛选保留操作系统脆弱性代码库所属软件包类型相同的代码,所述软件包类型依据功能分类包括内核、桌面环境、网络相关、硬件驱动、上层应用及开发环境;2.4)计算脆弱性代码段中各函数包含的代码行数,取最小值和最大值构成脆弱性代码段的行数波动范围;遍历操作系统源码库中各待测函数,若待测函数包含的代码行数相比行数波动范围超过预设阈值,则剔除这个待测函数,否则就将其加入筛选结果,从而得到筛选后的操作系统源码库;代码属性图生成程序单元,用于解析操作系统脆弱性代码库的脆弱性代码段和筛选后的操作系统源码库,依据代码属性图的生成规则生成从脆弱性代码段中所有脆弱函数的代码属性图集合、操作系统源码库中各待测函数的代码属性图集合,所述脆弱函数是指脆弱性代码段包含的一个或多个函数;相似特征匹配程序单元,用于分别从脆弱性代码段中所有脆弱函数的代码属性图集合和操作系统源码库中各待测函数的代码属性图集合提取特征,计算相似性,检测是否存在脆弱性代码的复用,并输出结果,包括:4.1)读取脆弱函数的代码属性图集合,提取脆弱函数的基础信息特征、令牌集合特征以及控制流路径特征作为脆弱性特征集合;4.2)遍历获取操作系统源码库中的一个待测函数作为当前的待测函数,获取当前的待测函数的代码属性图;4.3)从代码属性图中提取当前的待测函数的基础信息,计算每一个脆弱函数与当前的待测函数之间的余弦距离,如果每一个脆弱函数与当前的待测函数之间的余弦距离均高于预设阈值,则判定当前的待测函数与脆弱代码段不相似,跳转执行步骤4.6);否则跳转执行下一步;4.4)提取当前的待测函数的令牌集合,计算每个脆弱函数和当前的待测函数的令牌集合之间的编辑距离,如果编辑距离均大于预设阈值,则认为当前的待测函数不是相似代码,跳转执行步骤4.6);4.5)提取当前的待测函数的控制流路径集合,与脆弱函数的特征进行比较以判断当前的待测函数与脆弱代码段是否相似;4.6)判断操作系统源码库中的待测函数是否全部检测完毕,如果尚未检测完毕则跳转执行步骤4.2);否则输出相似代码检测结果,结束。
6.一种基于代码相似性分析的操作系统脆弱性检测系统,包括计算机设备,其特征在于,该计算机设备被编程或配置以执行权利要求1~4中任意一项所述基于代码相似性分析的操作系统脆弱性检测方法的步骤,或者该计算机设备的存储器上存储有被编程或配置以执行权利要求1~4中任意一项所述基于代码相似性分析的操作系统脆弱性检测方法的计算机程序。
7.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有被编程或配置以执行权利要求1~4中任意一项所述基于代码相似性分析的操作系统脆弱性检测方法的计算机程序。



