一种基于函数签名的自定义特征规则方法与流程

文档序号:29124895发布日期:2022-03-04 23:38阅读:97来源:国知局
一种基于函数签名的自定义特征规则方法与流程

1.本发明属于源代码分析技术领域,尤其涉及一种基于函数签名的自定义特征规则方法。


背景技术:

2.对于某些需要手动释放的资源(比如java语言中不在gc的内存管理范畴内的流资源、数据库连接、套接字连接,c/c++语言中的指针),如果不及时释放,容易造成内存泄露等一系列安全问题,却很容易被开发人员忽视。这就需要通过静态分析技术检测以提醒开发人员释放资源,在代码编译阶段就预防这样的安全漏洞。然而现有的静态分析大多基于指针分析技术,主要是为各个指针变量之间的传递关系、相互引用关系构建一个关系图(称为指针流图,pfg),这种分析无法检测资源释放问题,因此亟需开发一种应用于程序静态分析的基于函数签名的自定义特征规则方法,可根据自定义的特征规则检测资源释放问题,以避免造成不必要的安全问题。


技术实现要素:

3.针对以上技术问题,本发明提供一种基于函数签名的自定义特征规则方法。
4.本发明解决其技术问题采用的技术方案是:一种基于函数签名的自定义特征规则方法,方法包括以下步骤:步骤s100:统计所分析语言的安全漏洞,针对安全漏洞设计编程安全特征规则;步骤s200:根据编程安全特征规则定义相应的状态转换流程,并记录引起状态转换的函数签名,得到函数签名的集合;步骤s300:根据状态转换流程、函数签名的集合以及预设的规则含义设计多个有限状态自动机;步骤s400:获取启动各自动机的函数签名集合,静态分析时,监控变量所调函数,根据变量所调函数和启动各自动机的函数签名集合启动自动机;步骤s500:自动机启动后,追踪变量的访问和传播路径,将变量及其引用所调函数的签名作为对应自动机的输入串,根据自动机的当前状态、状态转换函数、输入串得到转换后的状态,直到自动机结束或发生错误。
5.优选地,编程安全特征规则包括规则所属语言、基本信息、规则标识、规则分类、风险等级、规则描述、规则具体内容,其中,基本信息包括规则的来源、权限、准确等级、可能性等级,规则具体内容包括状态转换流程和状态转换函数。
6.优选地,步骤s200包括:根据编程安全特征规则定义相应的状态转换流程,状态转换流程包括变量的属性、属性间的转换关系、属性间转换的条件,其中,属性间转换的条件为引起属性转换的函数签名,将编程安全特征规则以属性与其转换关系一对多、转换关系与函数签名一对多的形式存储。
7.优选地,步骤s200中的函数签名包括标识名称、命名空间、类名、函数名、例外情况、应用方式,其中,函数签名分为引起状态转换的函数签名和启动相应自动机的函数签名,应用方式包括是否可继承、实现、重载,例外情况的格式与函数签名一致。
8.优选地,步骤s300包括:将变量的属性设置为自动机的各个状态,将属性间的转换关系设置为自动机的状态转换,将函数签名的集合设置为自动机的状态转换函数,根据预设的规则含义分别选择相应的属性作为自动机的起始和结束状态,完成有限状态自动机的设计。
9.优选地,步骤s400中包括:遍历程序中所有语句,当语句调用函数时,确认所调函数的签名为使对应自动机进入起始状态的函数签名,则将所调函数的签名存储入启动对应自动机的函数签名集合,将自动机与启动对应自动机的函数签名集合以一对多的形式存储,静态分析时,获取变量所调函数的签名,根据变量所调函数的签名与启动对应自动机的函数签名集合进行匹配,若匹配成功,则启动对应自动机。
10.优选地,步骤s500包括:追踪变量访问和传播路径,根据变量及其引用所调函数的签名,与引起状态转换的函数签名的集合进行匹配对自动机的状态进行转换,直到自动机结束或发生错误。
11.优选地,步骤s500之后还包括:步骤s600:当自动机的状态为发生错误时,对引起发生错误的变量及其引用的传播路径进行报错。
12.上述基于函数签名的自定义特征规则方法,首先对所分析语言中常见的安全漏洞进行分析,总结出预防漏洞的编程安全特征规则;其次,对特征规则进行格式化处理,包括状态转换流程、状态转换函数,同时对状态转换函数的函数签名进行定义;然后,通过格式化的特征规则定义,研究变量属性转换关系、收集引起各个属性转换的函数签名,设计有限状态自动机,该自动机状态表示程序分析时所关注的属性,状态转换函数即记录下来的函数签名的集合;最后,进行程序静态分析时,对程序所调函数的签名进行匹配,根据初始函数签名启动自动机,并对所涉及到的变量进行追踪,遇到状态转换函数时,进行相应状态变化,直到自动机结束或发生错误。将这些通用的状态转换流程提取出来,抽象成一系列的基于函数签名的特征规则,在进行静态分析时,通过格式化的特征规则定义文档和简易的自动机构建方式,使得基于函数签名的自定义特征规则技术,具有自定义性和可扩展性,用户无需掌握静态分析核心技术,仅需理解特征规则的定义文件格式、自动机状态变化,就可以对特征规则集进行扩展构造出新的特征规则。
附图说明
13.图1为本发明一实施例提供的一种基于函数签名的自定义特征规则方法流程图。
具体实施方式
14.为了使本技术领域的人员更好地理解本发明的技术方案,下面结合附图对本发明作进一步的详细说明。
15.在一个实施例中,如图1所示,一种基于函数签名的自定义特征规则方法,方法包
括以下步骤:步骤s100:统计所分析语言的安全漏洞,针对安全漏洞设计编程安全特征规则。
16.具体地,首先通过cwe、owasp等网站搜集所分析语言(比如java语言)中常见的安全漏洞,结合规则设计人员的经验,总结出预防漏洞的特征规则。
17.在一个实施例中,编程安全特征规则包括规则所属语言、基本信息、规则标识、规则分类、风险等级、规则描述、规则具体内容,其中,基本信息包括规则的来源、权限、准确等级、可能性等级,规则具体内容包括状态转换流程和状态转换函数。
18.具体地,每个规则均由七个部分组成:规则所属语言、基本信息、规则标识、规则分类、风险等级、规则描述、规则具体内容,其中,基本信息包括规则的来源、权限、准确等级、可能性等级,规则具体内容包括状态转换流程和状态转换函数。
19.步骤s200:根据编程安全特征规则定义相应的状态转换流程,并记录引起状态转换的函数签名,得到函数签名的集合。
20.具体地,状态转换流程需要根据规则含义定义,并记录在格式化特征规则集中,作为判断程序是否符合规则的条件,其中,状态表示程序分析时所关注的属性,如资源的开/闭,状态转换由某类函数签名引起,例如规则是流资源必须被关闭,那么流资源的初始化、关闭、错误则是状态,初始化可通过close等函数进入关闭状态,此时再调用read等函数,则转换到错误状态。状态转换流程被定义在规则具体内容中, start、end_of_scope等表示状态,单箭头表示状态间的指向关系,{}中为状态转换函数,即引起该状态转换的函数签名的集合。
21.在一个实施例中,步骤s200包括:根据编程安全特征规则定义相应的状态转换流程,状态转换流程包括变量的属性、属性间的转换关系、属性间转换的条件,其中,属性间转换的条件为引起属性转换的函数签名,将编程安全特征规则以属性与其转换关系一对多、转换关系与函数签名一对多的形式存储。
22.在一个实施例中,步骤s200中的函数签名包括标识名称、命名空间、类名、函数名、例外情况、应用方式,其中,函数签名分为引起状态转换的函数签名和启动相应自动机的函数签名,应用方式包括是否可继承、实现、重载,例外情况的格式与函数签名一致。具体地,规则具体内容由函数签名的集合表示,函数签名由标识名称、命名空间、类名、函数名、例外情况、应用方式组成,程序分析时,优先匹配启动相应自动机类型的函数签名,由此再进一步对规则进行匹配。
23.步骤s300:根据状态转换流程、函数签名的集合以及预设的规则含义设计有限状态自动机。
24.进一步地,步骤s300包括:将变量的属性设置为自动机的各个状态,将属性间的转换关系设置为自动机的状态转换,将函数签名的集合设置为自动机的状态转换函数,根据预设的规则含义分别选择相应的属性作为自动机的起始和结束状态,完成有限状态自动机的设计。
25.具体地,步骤s300中的自动机根据状态转换流程进行设计,状态与属性一一对应,其依据的状态转换函数为函数签名的集合。另外,如规则想要判断资源是否被关闭,则资源被初始化为起始状态,资源被关闭为结束状态,状态转换流程中的状态有普遍使用的
start、end_of_scope,依据所分析的规则的不同,他们表示的含义有所不同,如对于inputstream,则分别表示输入流资源的开、闭,对于 cookie,则分别表示已生成、已添加。但在自动机中,始终与自动机的起始、终止状态有关,其余中间状态具有特异性,不同规则定义不同,下文会举出具体实例。
26.步骤s400:获取启动各自动机的函数签名集合,静态分析时,监控变量所调函数,根据变量所调函数和启动各自动机的函数签名集合启动自动机。
27.进一步地,步骤s400包括:遍历程序中所有语句,当语句调用函数时,确认所调函数的签名为使对应自动机进入起始状态的函数签名,则将所调函数的签名存储入启动对应自动机的函数签名集合,将自动机与启动对应自动机的函数签名集合以一对多的形式存储,静态分析时,获取变量所调函数的签名,根据变量所调函数的签名与启动对应自动机的函数签名集合进行匹配,若匹配成功,则启动对应自动机。
28.本实施例中,为了对程序进行分析,针对每条已定义的规则,都设计了相应的自动机,但是何时启动哪个自动机呢。在特征规则文档中,启动相应自动机的函数签名集合通常表示初始化的函数签名集合,其明确存在于各特征规则的规则具体内容中。程序开始分析时,当变量调用函数,将该函数的签名与上述函数签名集合进行匹配,匹配成功,则启动其所在规则对应的自动机。
29.步骤s500:自动机启动后,追踪变量的访问和传播路径,将变量及其引用所调函数的签名作为对应自动机的输入串,根据自动机的当前状态、状态转换函数、输入串得到转换后的状态,直到自动机结束或发生错误。
30.进一步地,步骤s500包括:追踪变量访问和传播路径,根据变量及其引用所调函数的签名,与引起状态转换的函数签名的集合进行匹配对自动机的状态进行转换,直到自动机结束或发生错误。
31.在一个实施例中,步骤s500之后还包括:步骤s600:当自动机的状态为发生错误时,对引起发生错误的变量及其引用的传播路径进行报错。
32.具体地,自动机状态的转换由状态转换函数决定,而状态转换函数是引起该状态转换的函数签名的集合,这些函数签名早已在特征规则定义时记录在文档中。启动自动机后,持续对变量进行追踪。当该变量调用的函数与状态转换函数匹配时,触发相应的状态转换,当进入错误状态报错。除此之外,当检测到达变量范围之外,自动机仍未进入结束状态,则检测其状态,判断其是否为不符合规则的状态,是则报错。
33.为了更好理解本发明的工作原理和技术效果,下面以一个文件输入流资源必须被释放为例进行详细说明。
34.public static void main(string[] args) throws ioexception {file file = new file("d:" + file.separator + "test.txt");inputstream input = new fileinputstream(file);inputstream alias = input;byte b[] = new byte[(int) file.length()];alias.read(b);
alias.close();}(1)使用file类找到一个文件file,此时所调函数的签名为《java.io.file: void 《init》(java.lang.string)》,对自动机无影响;(2)使用子类fileinputstream实例化父类inputstream,准备好一个输入的对象,此时所调函数的签名为《java.io.inputstream: void 《init》()》,识别到初始化函数,启动自动机,状态变化为none

init;(3)赋值给alias,此时未调用函数,根据对input的追踪,记录其别名指向关系。
[0035]
(4)定义了用于读操作的数组b;(5)由别名alias读取了文件输入流,此时函数签名为《java.io.inputstream: int read(byte[])》,自动机状态变化为init

opened;(6)由别名alias关闭了文件输入流,此时函数签名为《java.io.inputstream: void close()》,自动机状态变化为opened

closed;(7)当检测进行到end_of_scope,即main函数结束时,此时自动机处于closed状态,则自动机正常关闭,文件输入流资源正常释放。
[0036]
在本例中,若自动机在end_of_scope处于init或opened状态,则需要对变量传播路径进行报错。
[0037]
上述基于函数签名的自定义特征规则方法,首先对所分析语言中常见的安全漏洞进行分析,总结出预防漏洞的编程安全特征规则;其次,对特征规则进行格式化处理,包括状态转换流程、状态转换函数,同时对状态转换函数的函数签名进行定义;然后,通过格式化的特征规则定义,研究变量属性转换关系、收集引起各个属性转换的函数签名,设计有限状态自动机,该自动机状态表示程序分析时所关注的属性,状态转换函数即记录下来的函数签名的集合;最后,进行程序静态分析时,对程序所调函数的签名进行匹配,根据初始函数签名启动自动机,并对所涉及到的变量进行追踪,遇到状态转换函数时,进行相应状态变化,直到自动机结束或发生错误。将这些通用的状态转换流程提取出来,抽象成一系列的基于函数签名的特征规则,这样,在进行静态分析时,遇到需要关闭的流资源等问题,就可以与这些特征规则进行匹配,有效提高处理效率。
[0038]
通过格式化的特征规则定义文档和简易的自动机构建方式,使得基于函数签名的自定义特征规则技术,具有自定义性和可扩展性。对于一些开发人员而言,由于涉及到的安全问题不同,有一套对应的特征规则集,能够在不了解静态分析核心技术的情况下,手动构造出符合要求的特征规则,对于技术人员来说非常重要。通过使用本发明,这些开发人员,仅仅了解特征规则格式、自动机状态变化方式,就可以对特征规则集进行扩展构造出新的特征规则。
[0039]
与现有技术比较,本发明通过定义针对各类常见安全问题的特征规则,从而构建出自动机,追踪变量在程序分析时需要被关注的属性的变化,求解变量对各个规则的遵循/违背情况。本发明支持自定义特征规则,用户无需掌握静态分析核心技术,仅需理解特征规则的定义文件格式、自动机状态变化,即可手动构造添加、修改规则。
[0040]
以上对本发明所提供的一种基于函数签名的自定义特征规则方法进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只
是用于帮助理解本发明的核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1