当前位置: 首页 > 专利查询>北京大学专利>正文

一种基于静态特征的非直接调用目标识别方法及装置制造方法及图纸

技术编号:38092087 阅读:8 留言:0更新日期:2023-07-06 09:04
本发明专利技术公布了一种基于静态特征的非直接调用目标识别方法及装置,将源代码转化成LLVM中间表示,提取所述LLVM中间表示中的静态特征,根据所述静态特征中的所述类型信息识别非直接调用目标,根据所述函数名、所述直接调用指令目标和识别出的非直接调用目标,构建一个以函数为顶点,以调用关系为边的无向调用图;并据所述函数名和所述代码度量计算出非直接调用指令的各个目标的调用距离、调用路径可达性及函数间相似程度;以所述调用距离、调用路径可达性及函数间相似程度制定筛选规则,筛选出非直接调用目标。本发明专利技术通过结合多种静态特征分析的方式识别程序中的非直接调用目标,保证了低漏报率;根据筛选规则降低了误报率,并有效提高识别准确率。有效提高识别准确率。有效提高识别准确率。

【技术实现步骤摘要】
一种基于静态特征的非直接调用目标识别方法及装置


[0001]本专利技术涉及计算机安全
,尤其涉及一种基于静态特征的非直接调用目标识别方法及装置。

技术介绍

[0002]C/C++程序一般使用函数指针来实现程序的动态行为,不同程序实现动态行为的方式不同,动态函数调用主要以三种形式出现在程序中,分别是:回调函数,跳转表和虚函数,业界统称这类动态函数调用为非直接调用。由于在运行时才能确定非直接调用的目标,目前的静态分析技术大都面临识别非直接调用目标难的问题。而不准确的非直接调用目标会影响一些漏洞检测技术的准确性和控制流完整性保护技术(CFI,Control Flow Integrity)的有效性。
[0003]目前识别非直接调用目标的方法主要基于类型匹配,其基本思想是提取源代码中所有被取地址的函数(address

taken function),并将其按照函数类型分类,在识别非直接调用指令的目标时,根据指令加载的函数指针的类型去匹配之前提取到的address

taken function,类型相同的函数即为该调用指令的目标。
[0004]这种基于类型匹配的方法具有效率高、无漏报的优点,但是因为该方法不能充分利用程序中的静态特征,所以误报率高。

技术实现思路

[0005]为了克服上述现有技术的不足,本专利技术提供一种基于静态特征的非直接调用目标识别方法及装置,可识别源代码中非直接调用指令的目标,并基于多种静态特征有效降低识别的误报率。
[0006]本专利技术提供的技术方案是:一种基于静态特征的非直接调用目标识别方法,包括以下步骤:
[0007]将源代码转化成LLVM中间表示,提取所述LLVM中间表示中的静态特征,所述静态特征包括:类型信息、函数名、代码度量和直接调用指令目标;
[0008]根据所述静态特征中的所述类型信息识别非直接调用目标,所述类型信息包括:函数类型信息和函数指针的类型信息;
[0009]根据所述函数名、所述直接调用指令目标和识别出的非直接调用目标,构建一个以函数为顶点,以调用关系为边的无向调用图;并据所述函数名和所述代码度量计算出非直接调用指令的各个目标的调用距离、调用路径可达性及函数间相似程度;
[0010]以所述调用距离、调用路径可达性及函数间相似程度制定筛选规则,筛选出非直接调用目标。
[0011]进一步地,所述类型信息还包括:取地址函数类型和非直接调用指令加载的函数指针所在内存区域的类型;
[0012]所述根据所述静态特征中的所述类型信息识别非直接调用目标之后,还包括:
[0013]根据所述取地址函数类型和非直接调用指令加载的函数指针所在内存区域的类型过滤识别出的非直接调用目标,如果所述非直接调用目标没有在对应类型的内存中出现过,所述非直接调用目标无效。
[0014]所述筛选规则包括:
[0015]若非直接调用指令的一个目标的调用距离为0,则该目标是一个种子调用目标;
[0016]若非直接调用指令的一个目标的调用路径可达性好,则该目标是一个种子调用目标;
[0017]若非直接调用指令的一个目标调用者和目标函数的相似程度超过设定阈值,则该目标是一个种子调用目标。
[0018]进一步地,筛选出种子调用目标后,还包括:
[0019]根据所述种子调用目标和第二筛选规则再次选出调用目标;所述第二筛选规则包括:
[0020]将非直接调用指令目标与所述种子调用目标比较,如果相似程度超过设定阈值,则该目标是一个有效非直接调用目标;
[0021]将非直接调用指令目标的调用路径与所述种子调用目标的调用路径比较,如果调用路径重合度超过设定阈值,则该目标是一个有效的非直接调用目标。
[0022]进一步地,所述调用路径可达性好,包括:计算各个目标到调用点的调用距离,得到最短路径,如果一条路径上的函数中拥有函数指针类型参数或函数指针类型返回值的函数数量占路径上所有顶点数量超过设定阈值,则判断该路径可达性好。
[0023]另一方面,本专利技术还提供了一种基于静态特征的非直接调用目标识别装置,包括:源代码静态特征提取子系统、基于类型分析的非直接调用目标识别子系统、基于静态特征的非直接调用目标识别子系统;其中,
[0024]所述源代码静态特征提取子系统用于将源代码转化成LLVM中间表示,提取所述LLVM中间表示中的静态特征,所述静态特征包括:类型信息、函数名、代码度量和直接调用指令目标;
[0025]所述基于类型分析的非直接调用目标识别子系统包括单层类型分析模块,所述单层类型分析模块用于根据所述静态特征中的所述类型信息识别非直接调用目标,所述类型信息包括:函数类型信息和函数指针的类型信息;
[0026]所述基于静态特征的非直接调用目标识别子系统包括调用图构建模块和非直接调用目标识别模块,所述调用图构建模块用于根据所述函数名、所述直接调用指令目标和识别出的非直接调用目标,构建一个以函数为顶点,以调用关系为边的无向调用图;所述非直接调用目标识别模块用于根据所述函数名和所述代码度量计算出非直接调用指令的各个目标的调用距离、调用路径可达性及函数间相似程度;并以所述调用距离、调用路径可达性及函数间相似程度制定筛选规则,筛选出非直接调用目标。
[0027]所述类型信息还包括:取地址函数类型和非直接调用指令加载的函数指针所在内存区域的类型;所述基于类型分析的非直接调用目标识别子系统还包括多层类型分析模块,所述多层类型分析模块用于:根据所述取地址函数类型和非直接调用指令加载的函数指针所在内存区域的类型过滤识别出的非直接调用目标,如果所述非直接调用目标没有在对应类型的内存中出现过,所述非直接调用目标无效。
[0028]所述非直接调用目标识别模块制定的筛选规则包括:
[0029]若非直接调用指令的一个目标的调用距离为0,则该目标是一个种子调用目标;
[0030]若非直接调用指令的一个目标的调用路径可达性好,则该目标是一个种子调用目标;
[0031]若非直接调用指令的一个目标调用者和目标函数的相似程度超过设定阈值,则该目标是一个种子调用目标。
[0032]所述非直接调用目标识别模块在筛选出种子调用目标后,还用于:
[0033]根据所述种子调用目标和第二筛选规则再次选出调用目标;所述第二筛选规则包括:
[0034]将非直接调用指令目标与所述种子调用目标比较,如果相似程度超过设定阈值,则该目标是一个有效非直接调用目标;
[0035]将非直接调用指令目标的调用路径与所述种子调用目标的调用路径比较,如果调用路径重合度超过设定阈值,则该目标是一个有效的非直接调用目标。
[0036]所述非直接调用目标识别模块用于:计算各个目标到调用点的调用距离,得到最短路径,如果一条路径上的函数中拥有函数指针类型参数或函数指针类型返回值的函数数量占路径上所有顶点数量超过设定阈值,则判断该路径可达性好。
...

【技术保护点】

【技术特征摘要】
1.一种基于静态特征的非直接调用目标识别方法,其特征在于,包括以下步骤:将源代码转化成LLVM中间表示,提取所述LLVM中间表示中的静态特征,所述静态特征包括:类型信息、函数名、代码度量和直接调用指令目标;根据所述静态特征中的所述类型信息识别非直接调用目标,所述类型信息包括:函数类型信息和函数指针的类型信息;根据所述函数名、所述直接调用指令目标和识别出的非直接调用目标,构建一个以函数为顶点,以调用关系为边的无向调用图;并据所述函数名和所述代码度量计算出非直接调用指令的各个目标的调用距离、调用路径可达性及函数间相似程度;以所述调用距离、调用路径可达性及函数间相似程度制定筛选规则,筛选出非直接调用目标。2.如权利要求1所述的方法,其特征在于,所述类型信息还包括:取地址函数类型和非直接调用指令加载的函数指针所在内存区域的类型;所述根据所述静态特征中的所述类型信息识别非直接调用目标之后,还包括:根据所述取地址函数类型和非直接调用指令加载的函数指针所在内存区域的类型过滤识别出的非直接调用目标,如果所述非直接调用目标没有在对应类型的内存中出现过,所述非直接调用目标无效。3.如权利要求1所述的方法,其特征在于,所述筛选规则包括:若非直接调用指令的一个目标的调用距离为0,则该目标是一个种子调用目标;若非直接调用指令的一个目标的调用路径可达性好,则该目标是一个种子调用目标;若非直接调用指令的一个目标调用者和目标函数的相似程度超过设定阈值,则该目标是一个种子调用目标。4.如权利要求3所述的方法,其特征在于,筛选出种子调用目标后,还包括:根据所述种子调用目标和第二筛选规则再次选出调用目标;所述第二筛选规则包括:将非直接调用指令目标与所述种子调用目标比较,如果相似程度超过设定阈值,则该目标是一个有效非直接调用目标;将非直接调用指令目标的调用路径与所述种子调用目标的调用路径比较,如果调用路径重合度超过设定阈值,则该目标是一个有效的非直接调用目标。5.如权利要求3所述的方法,其特征在于,所述调用路径可达性好,包括:计算各个目标到调用点的调用距离,得到最短路径,如果一条路径上的函数中拥有函数指针类型参数或函数指针类型返回值的函数数量占路径上所有顶点数量超过设定阈值,则判断该路径可达性好。6.一种基于静态特征的非直接调用目标识别装置,其特征在于,包括:源代码静态特征提取子系统、基于类型分析的非直接调用目标识别子系统、基于静态特征的非直接调用目标识别子系统;其中,所述源代码静态特征提取子系统用于将源代码转化成LLVM中间表示...

【专利技术属性】
技术研发人员:文伟平杨洲陈夏润刘永志
申请(专利权)人:北京大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1