CN101968766B - 计算机程序实际运行时触发软件漏洞的检测系统 - Google Patents
计算机程序实际运行时触发软件漏洞的检测系统 Download PDFInfo
- Publication number
- CN101968766B CN101968766B CN201010513779A CN201010513779A CN101968766B CN 101968766 B CN101968766 B CN 101968766B CN 201010513779 A CN201010513779 A CN 201010513779A CN 201010513779 A CN201010513779 A CN 201010513779A CN 101968766 B CN101968766 B CN 101968766B
- Authority
- CN
- China
- Prior art keywords
- module
- function
- program
- information
- call
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
一种计算机技术领域的计算机程序实际运行时触发软件漏洞的检测系统。包括:二进制代码动态插入模块、程序基本块识别模块、函数调用图构建模块、控制流图构建模块、函数识别模块、静态分析模块;本发明通过结合动态程序分析和静态分析路径补全这两种技术,既能检测到那些在程序实际运行时才会触发的漏洞,又能达到较高的程序路径覆盖率,对动态分析过程中没有覆盖到的路径进行漏洞检测,提高了漏洞检测的成功率,降低了漏洞误报率。同时,静态分析路径补全技术只分析动态分析未执行到的路径,而并非全部的程序路径,这样大大降低了时间和系统资源的开销。
Description
技术领域
本发明涉及的是一种计算机技术领域的检测系统,具体是一种计算机程序实际运行时触发软件漏洞的检测系统。
背景技术
程序分析技术是指针对计算机程序推导出其结构和数据流程的分析技术。在软件维护检测和软件理解的过程中,我们需要对目标程序的结构和数据流程进行分析,程序分析系统的输出一般为数据流图和控制流图。数据流图以图表的方法表达程序系统中信息的变换和传递过程,特别是数据被引用和被定义的情况;控制流图经常使用图或抽象语法树的形式刻画程序结构。
动态程序分析技术是对实际执行中的程序进行分析的技术,即在程序执行的情况下,通过对程序的运行环境(环境变量、内存、堆栈等)进行分析,来检测程序是否存在漏洞的技术。动态程序分析技术能检测到那些在程序实际运行时才会触发的漏洞,不需要修改目标程序源代码或其二进制代码,在一定程度上提高了程序的保密性。与之相对的是静态程序分析技术,指在不执行程序的情况下获得程序编译时的信息,并根据这些信息对特定的漏洞模式进行检测的技术,简称为静态分析。大多数情况下,静态分析的输入都是程序的源代码,只有少数情况会使用其二进制代码。现阶段,静态分析技术越来越多地被应用到程序优化、软件错误检测等领域。
但是,无论动态程序分析还是静态程序分析,都有其无法克服的缺点。对于动态程序分析技术而言,因为程序在每一次动态执行的过程中只能沿一条路径执行下去,所以为了能达到满意的路径覆盖率,我们必须重复执行动态分析足够多的次数,但即使这样路径覆盖率也难以达到百分之百。对于静态程序分析技术而言,虽然能够达到百分之百的程序路径覆盖率,但是它并不能检测到那些在程序实际运行时才会触发的漏洞,并且一般漏洞的误报率较高,同时,直接对整个大型程序进行静态分析会导致很大的时间和系统资源开销。更重要的一点是,现有的相关系统往往需要程序源代码才能进行程序分析和漏洞检测,并不能直接分析目标程序的二进制代码,这个缺点也限制了这些系统的用途。
发明内容
本发明针对现有技术中的系统上存在的上述不足,提出了一种计算机程序实际运行时触发软件漏洞的检测系统。本发明通过结合动态程序分析和静态分析路径补全这两种技术,既能检测到那些在程序实际运行时才会触发的漏洞,又能达到较高的程序路径覆盖率,对动态分析过程中没有覆盖到的路径进行漏洞检测,提高了漏洞检测的成功率,降低了漏洞误报率。同时,静态分析路径补全技术只分析动态分析未执行到的路径,而并非全部的程序路径,这样大大降低了时间和系统资源的开销。
本发明是通过以下技术方案实现的:
本发明包括:二进制代码动态插入模块、程序基本块识别模块、函数调用图构建模块、控制流图构建模块、函数识别模块、静态分析模块;二进制代码动态插入模块将用户自定义的分析代码插入程序的任意位置,并跟踪程序调用的系统API,最后将分析结果通过自定义程序分析文件提供的回调函数返回并传递给程序基本块识别模块;程序基本块识别模块根据二进制代码动态插入模块传递的分析结果将目标程序按基本块规则划分,并将划分的基本块集合传递给函数调用图构建模块和控制流图构建模块;函数调用图构建模块对基本块识别模块传递过来的基本块集合进行处理,得到基本的函数块集合,并将此函数块集合传递给函数识别模块,根据返回的函数行为特征得到函数之间的相互调用关系,以此构建函数调用图,并将函数调用信息传递给控制流图构建模块;控制流图构建模块根据程序基本块识别模块传递来的基本块集合构建控制流节点集合并维护它们的相互关系,并将构建的节点集合和程序执行时获得的动态信息传递给静态分析模块,根据返回的包含未执行路径的完整执行信息构建完整的程序控制流信息和程序控制流图,并将此信息作为系统输出传递给用户;函数识别模块提取函数调用图构建模块传递过来的基本函数块的调用地址,根据此信息查找API数据库获得函数的索引值和行为特征,并将找到的函数索引值和行为特征作为输出返回给函数调用图构建模块;静态分析模块接受控制流图构建模块传递来的节点集合和记录的动态执行路径信息,补全未执行到的路径信息,生成完整的程序执行路径信息,并将这些信息作为输出返回给控制流图构建模块。
所述的二进制代码动态插入模块包括:自定义程序分析文件、动态代码插入工具DynamoRIO;自定义程序分析文件完成了对DynamoRIO提供的回调函数的实现,用户能在此文件中定义所需的动态分析关注点和分析规则;动态代码插入工具DynamoRIO能在程序运行时,根据自定义程序分析文件中规定的分析要求和规则,在程序的任意位置插入任意二进制代码并跟踪API信息,最后将分析结果通过所述的回调函数传递给程序基本块识别模块。
所述的程序基本块识别模块包括:程序单个指令定义和识别模块、程序基本块定义和识别模块;程序单个指令定义和识别模块包含了单个指令的定义和识别规则,此模块根据由二进制代码动态插入模块传递过来的程序动态分析信息识别出程序的单个指令,并将这些单个指令的识别结果传递给程序基本块定义和识别模块;程序基本块的定义和识别模块包含了基本块的定义和识别规则,此模块根据程序单个指令定义和识别模块传递过来的单个指令的识别结果识别出程序的基本块,并将这些基本块的识别结果传递给函数调用图构建模块和控制流图构建模块。
所述的程序基本块为程序某段指令的链式集合,而程序的实际分析过程将采用基本块执行过程。
所述的函数调用图构建模块包括:函数节点识别模块、函数调用关系构建模块、函数调用图生成模块;函数节点识别模块根据由程序基本块识别模块传递过来的程序基本块集合,识别出带返回指令的基本块并将其作为函数节点对程序基本块集合进行划分,以比识别出每个函数块,并将这些函数块识别结果传递给函数识别模块,并将返回的函数识别结果和函数的特征行为传递给函数调用关系构建模块;函数调用关系构建模块根据传递过来的函数识别结果、函数的特征行为和每个函数中的调用指令构建函数间的相互调用关系,并将这些识别出来的调用关系信息传递给函数调用图生成模块;函数调用图生成模块根据由函数调用关系构建模块传递来的函数相互调用关系信息构建函数调用图,并将函数相互调用关系信息和构建出来的函数调用图传递给控制流图构建模块。
所述的控制流图构建模块包括:节点构建模块、节点关系构建和维护模块、控制流图生成模块;节点构建模块接受程序基本块识别模块传递过来的基本块集合,根据其中基本块的控制流信息构建相应的控制流节点,并将构建的节点集合传递给节点关系构建和维护模块;节点关系构建和维护模块根据传递来的节点集合构建这些节点在执行过程中的动态路径信息,同时将节点动态路径信息传递给静态分析模块,根据返回的包含未执行路径的程序执行路径信息构建完整的程序控制流,并将构建的控制流信息传递给控制流图生成模块;控制流图生成模块根据节点关系构建和维护模块传递过来的控制流信息构建程序控制流图,并将这个程序控制流图作为系统的输出传递给系统的用户。
所述的函数识别模块包括:函数信息查找模块、函数分析模块;函数信息查找模块提取由函数调用图构建模块传递过来的函数块的调用地址,根据此地址在目标程序PE文件的导入地址表(IAT,Import Address Table)中获得所调用函数的索引值,并将查找到的函数索引值传递给函数分析模块;函数分析模块根据函数信息查找模块传递来的函数索引值从API数据库中直接获得该函数的信息传播方式和特征行为,并将该函数的识别结果和特征行为返回给函数调用图构建模块。
所述的静态分析模块包括:动态执行路径记录模块、静态路径补全模块;动态执行路径记录模块根据控制流图构建模块传递来的节点动态路径信息记录程序在动态执行时走过的路径,并将此路径信息传递给静态路径补全模块;静态路径补全模块根据动态执行路径记录模块记录的程序动态执行路径信息补全剩余的未执行到的程序路径,生成包含未执行路径的完整的程序执行路径信息,并将该信息作为输出返回至控制流图构建模块。
所述的API数据库包含常见系统API和库函数的索引值、函数特征行为和函数的信息传播方式等。
与现有技术相比,本发明具有如下有益效果:将动态程序分析和静态路径补全技术相结合,其优点在于:(1)本发明继承了两种技术的优点,既有动态程序分析的实时性,并能够获得程序实际运行时的大量动态信息,又能获得较高的程序可执行路径覆盖率,使检测结果更完整、更有说服力;(2)本发明互补了两种技术的缺点,通过静态分析克服了动态程序分析覆盖率较低的缺点,通过动态分析过程中获得的信息提高静态分析的精度,因此提高了发现软件脆弱点和漏洞的可能性;(3)本发明相对同类漏洞检测系统,降低了系统的资源和时间的开销;(4)本发明能够针对目标程序的二进制代码进行漏洞的分析和检测,与同类系统大都只能针对目标程序的源代码进行检测相比,有更为广泛的应用空间。
附图说明
图1为本发明的系统架构图;
图2为本发明的系统输出样例。
具体实施方式
下面结合附图对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
如图1所示,本实施例包括:二进制代码动态插入模块、程序基本块识别模块、函数调用图构建模块、控制流图构建模块、函数识别模块、静态分析模块。所述的二进制代码动态插入模块可将用户自定义的分析代码插入程序的任意位置,并跟踪程序调用的系统API,最后将分析结果通过自定义程序分析文件提供的回调函数返回并传递给程序基本块识别模块;所述的程序基本块识别模块根据二进制代码动态插入模块传递的分析结果将目标程序按基本块规则划分,并将划分的基本块集合传递给函数调用图构建模块和控制流图构建模块;所述的函数调用图构建模块对基本块识别模块传递过来的基本块集合进行处理,得到基本的函数块集合,并将此函数块集合传递给函数识别模块,根据返回的函数行为特征得到函数之间的相互调用关系,以此构建函数调用图,并将函数调用信息传递给控制流图构建模块;所述的控制流图构建模块根据程序基本块识别模块传递来的基本块集合构建控制流节点集合并维护它们的相互关系,并将构建的节点集合和程序执行时获得的动态信息传递给静态分析模块,根据返回的包含未执行路径的完整执行信息构建完整的程序控制流信息和程序控制流图,并将此信息作为系统输出传递给用户;所述函数识别模块提取函数调用图构建模块传递过来的基本函数块的调用地址,根据此信息查找API数据库获得函数的索引值和行为特征,并将找到的函数索引值和行为特征作为输出返回给函数调用图构建模块;所述静态分析模块接受控制流图构建模块传递来的节点集合和记录的动态执行路径信息,补全未执行到的路径信息,生成完整的程序执行路径信息,并将这些信息作为输出返回给控制流图构建模块。
本实施例将以此段代码为例说明本发明每个模块的运行过程、运行结果和产生的效果如下:
1buffer[MAXLINELEN];
2InputList*il;
3
4//处理输入的代码
5int handle_input{
5if(il->flag==FLAG_INVALID)
6Input_invalid_procedure(il);
7else if(il->flag==FLAG_UNICODE)
8Input_unicode_procedure(buffer,il);
9else if(il->flag==FLAG_ANSI)
10Input_ansi_procedure(buffer,il);
11return0;
12}
13
14void Input_invalid_procedure(il)
15{
16printf(“%s”,“Error!The input is invalid!”);
17}
18
19void Input_unicode_procedure(buffer,il);
20{
21sprintf(buffer,“%s”,il->usr_str);//缓冲区溢出
22}
23
24void Input_ansi_procedure(buffer,il)
25{
26for(int i=0;i<100;i++)
27{
28printf(“%s”,buffer[i]);
29}
30}
所述的二进制代码动态插入模块,包括自定义程序分析文件和动态代码插入工具DynamoRIO。根据用户自定义的分析文件中的规则要求,动态代码插入工具DynamoRIO可以在样例代码中每个函数(如函数Input_unicode_procedure)的调用处插入二进制代码从而跟踪程序执行流,并分析记录程序运行时的信息,然后将分析记录的结果通过用户实现的回调函数传递给程序基本块识别模块。
所述的程序基本块识别模块,包括单个指令定义和识别模块、基本块定义和识别模块。单个指令定义和识别模块可以根据程序动态分析信息识别出程序的单个指令(如样例代码中的每一行即是一条指令),并将这些单个指令的识别结果传递给程序基本块定义和识别模块。因此样例代码中的存在漏洞的第21行代码“sprintf(buffer,“%s”,il->usr_str);”也将被识别为一条指令。这里定义基本块是只具有一个入口和一个出口的直线顺序的代码序列。基本块的定义和识别模块根据基本块的定义规则,对单个指令的识别结果进行处理合并,从而识别出程序的基本块,并将这些基本块的识别结果传递给函数调用图构建模块和控制流图构建模块。因此样例代码中包含存在漏洞的第21行代码的基本块为第19到22行指令构成的基本块。本发明将目标程序识别出的基本块接顺序放入一个链表,同时,所述的基本块实际为程序中某段指令的链式集合,即本发明采取嵌套链表的方式存储程序基本块识别模块中识别出来的指令和基本块。
所述的函数调用图构建模块,包括函数节点识别模块、函数调用关系构建模块和函数调用图生成模块。函数节点识别模块根据传递过来的程序基本块集合,识别出带ret(返回)指令的基本块并将其作为函数节点将程序基本块集合进行划分,以此识别出每个的函数块(如样例代码中第19到22行代码构成的函数块),并将这些函数块识别结果传递给函数识别模块。函数识别模块提取函数块的调用地址,根据此地址在目标程序PE文件的导入地址表中获得所调用函数的索引值(Hint值,每个函数有唯一的Hint值),并根据函数Hint值从API数据库中直接获得该函数的信息传播方式和特征行为。之后,系统根据函数识别的结果、函数的特征行为和每个函数中的调用指令(即call和jmp指令)构建函数间的相互调用关系,并以此为依据生成程序中所有函数的调用关系图。
所述的控制流图构建模块,包括节点构建模块、节点关系构建和维护模块和控制流图生成模块。节点构建模块接受程序基本块识别模块传递过来的基本块集合,根据其中基本块的控制流信息构建相应的控制流节点,并将构建的节点集合传递给节点关系构建和维护模块。节点关系构建和维护模块根据传递来的节点集合构建这些节点在执行过程中的动态路径信息,同时将节点动态路径信息传递给静态分析模块。静态分析模块得到程序在动态执行时走过的路径后,依据以下所示的静态分析路径补全算法补全剩余的未执行到的程序路径,生成包含未执行路径的完整的程序控制流,具体如下:
Input:branch point list:
P{p1,p2,p3,...}
CFG:B{b1,b2,...}
//基本块集合
E{e1,e2,...}
//边集合
procedure StaticAnalysis
n=1;
for branch point:pn in P;
for each new b=GetNextBB();
//获得下一个未执行的基本块
if b not in B
if last instruction is condition branch
addnewp’intoP;
end if
addbintoB;
addnewEintoE;
end if
n++;
最后控制流图生成模块根据完整的程序控制流信息生成目标程序的控制流图,并以此作为系统的输出传递给系统的用户。
如图2所示,本实施例代码真正的执行路径是由红色粗箭头所标记的,黑色细箭头标记的路径是由本发明补全的未执行路径,两者构成了样本代码的全部可执行路径。如果仅按照程序的执行路径分析,则无法检测到实施例代码中的代码漏洞;而根据本实施例经过静态分析路径补全技术处理后得到的控制流图,则可明确无误的检测到样本程序中潜在的漏洞。同时,由于获得了许多目标程序动态运行时的信息,本实施例在进行静态分析路径补全时能够更快捷、更精确地获得补全结果,提高了补全精度,降低了时间和系统资源的开销。
本实施例实施过程如下:
载入目标程序之后,二进制代码动态插入模块将插入分析代码或函数调用语句,目的是能在程序运行时动态调用系统自定义的分析代码,从而得到目标程序运行时产生的信息;
识别目标程序代码中的每条指令,并将属于同一基本块的指令链接起来构建成一个正确的程序基本块,通过程序基本块识别模块来完成指令的识别以及基本块的识别与构建任务;
在函数调用图构建模块中对程序基本块识别模块得到的程序基本块集合进行处理,识别出基本的函数块,由函数识别模块调用API数据库对以上函数块进行进一步的识别与分析,得到所调用函数的传播信息和特征行为,据此构建并维护函数的调用关系,生成目标程序的函数调用图;
使用静态分析模块对函数调用图构建模块生成的目标程序函数调用图进行分析并完成静态路径补全,通过控制流图构建模块将补全结果与程序动态执行路径相结合生成完整的目标程序控制流路径,并生成程序控制流图,以此作为整个系统的输出传递给用户。
在实施例中,第三步由函数识别模块调用API数据库完成识别与分析的过程中,涉及的API数据库包含常见系统API和库函数的索引值、函数特征行为以及信息传播方式。此API数据库可由用户根据实际需要进行修改和维护,以适应不同的程序和漏洞检测要求。
本实施例说明本发明继承了动态程序分析和静态路径补全技术各自的优点,互补了两种技术的缺点,提高了程序分析结果的覆盖度和分析精度,比同类系统有更大的可能性发现软件脆弱点和漏洞,同时降低了系统的资源和时间的开销。
Claims (9)
1.一种计算机程序实际运行时触发软件漏洞的检测系统,其特征在于,包括:二进制代码动态插入模块、程序基本块识别模块、函数调用图构建模块、控制流图构建模块、函数识别模块、静态分析模块;二进制代码动态插入模块将用户自定义的分析代码插入程序的任意位置,并跟踪程序调用的系统API,最后将程序动态分析信息通过自定义程序分析文件提供的回调函数返回并传递给程序基本块识别模块;程序基本块识别模块根据二进制代码动态插入模块传递的程序动态分析信息将目标程序按基本块规则划分,并将划分的基本块集合传递给函数调用图构建模块和控制流图构建模块;函数调用图构建模块对基本块识别模块传递过来的基本块集合进行处理,得到基本函数块集合,并将此基本函数块集合传递给函数识别模块,根据返回的函数行为特征得到函数之间的相互调用关系,以此构建函数调用图,并将函数调用信息传递给控制流图构建模块;控制流图构建模块根据程序基本块识别模块传递来的基本块集合构建控制流节点集合并维护所构建的控制流节点集合中各节点间的相互关系,并将构建的节点集合和程序执行时获得的动态执行路径信息传递给静态分析模块,根据返回的包含静态补全路径信息的完整的可执行路径信息构建完整的程序控制流信息和程序控制流图,并将此信息作为系统输出传递给用户;函数识别模块提取函数调用图构建模块传递过来的基本函数块集合中每个函数块的调用地址,根据此信息查找API数据库获得函数的索引值和行为特征,并将找到的函数索引值和行为特征作为输出返回给函数调用图构建模块;静态分析模块接受控制流图构建模块传递来的节点集合和记录的动态执行路径信息,并加入静态补全路径信息,生成完整的可执行路径信息,并将这些信息作为输出返回给控制流图构建模块。
2.根据权利要求1所述的计算机程序实际运行时触发软件漏洞的检测系统,其特征是,所述的二进制代码动态插入模块包括:自定义程序分析文件、动态代码插入工具DynamoRIO;自定义程序分析文件完成了对DynamoRIO提供的回调函数的实现,用户能在此文件中定义所需的动态分析关注点和分析规则;动态代码插入工具DynamoRIO能在程序运行时,根据自定义程序分析文件中规定的动态分析关注点和分析规则,在程序的任意位置插入任意二进制代码并跟踪API信息,最后将程序动态分析信息通过所述的回调函数传递给程序基本块识别模块。
3.根据权利要求1所述的计算机程序实际运行时触发软件漏洞的检测系统,其特征是,所述的程序基本块识别模块包括:程序单个指令定义和识别模块、程序基本块定义和识别模块;程序单个指令定义和识别模块包含了单个指令的定义和识别规则,此模块根据由二进制代码动态插入模块传递过来的程序动态分析信息识别出程序的单个指令,并将这些单个指令的识别结果传递给程序基本块定义和识别模块;程序基本块的定义和识别模块包含了基本块的定义和识别规则,此模块根据程序单个指令定义和识别模块传递过来的单个指令的识别结果识别出程序的基本块,并将这些基本块的识别结果传递给函数调用图构建模块和控制流图构建模块。
4.根据权利要求3所述的计算机程序实际运行时触发软件漏洞的检测系统,其特征是,所述的程序基本块为程序某段指令的链式集合,而程序的实际分析过程将采用基本块执行过程。
5.根据权利要求1所述的计算机程序实际运行时触发软件漏洞的检测系统,其特征是,所述的函数调用图构建模块包括:函数节点识别模块、函数调用关系构建模块、函数调用图生成模块;函数节点识别模块根据由程序基本块识别模块传递过来的程序基本块集合,识别出带返回指令的基本块并将其作为函数节点将程序基本块集合进行划分,以此识别出每个函数块,并将这些函数索引值传递给函数识别模块,并将返回的函数索引值和函数的行为特征传递给函数调用关系构建模块;函数调用关系构建模块根据传递过来的函数索引值、函数的行为特征和每个函数中的调用指令构建函数间的相互调用关系,并将这些识别出来的调用关系信息传递给函数调用图生成模块;函数调用图生成模块根据由函数调用关系构建模块传递来的函数相互调用关系信息构建函数调用图,并将函数相互调用关系信息和构建出来的函数调用图传递给控制流图构建模块。
6.根据权利要求1所述的计算机程序实际运行时触发软件漏洞的检测系统,其特征是,所述的控制流图构建模块包括:节点构建模块、节点关系构建和维护模块、控制流图生成模块;节点构建模块接受程序基本块识别模块传递过来的基本块集合,根据其中基本块的控制流信息构建相应的控制流节点,并将构建的节点集合传递给节点关系构建和维护模块;节点关系构建和维护模块根据传递来的节点集合构建这些节点在执行过程中的动态执行路径信息,同时将节点动态执行路径信息传递给静态分析模块,根据返回的静态补全路径信息构建完整的程序可执行路径信息,并将构建的可执行路径信息传递给控制流图生成模块;控制流图生成模块根据节点关系构建和维护模块传递过来的可执行路径信息构建程序控制流图,并将这个程序控制流图作为系统的输出传递给系统的用户。
7.根据权利要求1所述的计算机程序实际运行时触发软件漏洞的检测系统,其特征是,所述的函数识别模块包括:函数信息查找模块、函数分析模块;函数信息查找模块提取由函数调用图构建模块传递过来的函数块的调用地址,根据此地址在目标程序PE文件的导入地址表中获得所调用函数的索引值,并将查找到的函数索引值传递给函数分析模块;函数分析模块根据函数信息查找模块传递来的函数索引值从API数据库中直接获得该函数的信息传播方式和行为特征,并将该函数的的函数索引值和行为特征返回给函数调用图构建模块。
8.根据权利要求7所述的计算机程序实际运行时触发软件漏洞的检测系统,其特征是,所述的API数据库包含常见系统API的索引值、常见库函数的索引值、常见系统API的行为特征、常见库函数的行为特征、常见系统API的信息传播方式和常见库函数的信息传播方式。
9.根据权利要求1所述的计算机程序实际运行时触发软件漏洞的检测系统,其特征是,所述的静态分析模块包括:动态执行路径记录模块、静态路径补全模块;动态执行路径记录模块根据控制流图构建模块传递来的节点动态路径信息记录动态执行路径信息,并将动态执行路径信息传递给静态路径补全模块;静态路径补全模块根据动态执行路径录模块记录的动态执行路径信息和静态补全路径信息,生成完整的可执行路径信息,并将该信息作为输出返回至控制流图构建模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010513779A CN101968766B (zh) | 2010-10-21 | 2010-10-21 | 计算机程序实际运行时触发软件漏洞的检测系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010513779A CN101968766B (zh) | 2010-10-21 | 2010-10-21 | 计算机程序实际运行时触发软件漏洞的检测系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101968766A CN101968766A (zh) | 2011-02-09 |
CN101968766B true CN101968766B (zh) | 2012-09-05 |
Family
ID=43547926
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010513779A Expired - Fee Related CN101968766B (zh) | 2010-10-21 | 2010-10-21 | 计算机程序实际运行时触发软件漏洞的检测系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101968766B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107506644A (zh) * | 2017-08-16 | 2017-12-22 | 南京大学 | 动态生成代码中隐式常数威胁的安全保护方法 |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102222035A (zh) * | 2011-07-25 | 2011-10-19 | 公安部第三研究所 | 基于符号执行技术的软件行为检测系统及检测方法 |
CN102622558B (zh) * | 2012-03-01 | 2014-10-08 | 北京邮电大学 | 一种二进制程序漏洞的挖掘装置和方法 |
US20140130015A1 (en) | 2012-11-06 | 2014-05-08 | International Business Machines Corporation | Hybrid Program Analysis |
CN103440122B (zh) * | 2013-07-12 | 2016-06-08 | 哈尔滨工业大学 | 一种使用逆向扩展控制流图的静态函数识别方法 |
CN104008053B (zh) * | 2014-05-28 | 2016-07-06 | 电子科技大学 | 一种用于漏洞发掘的动态符号执行路径搜索方法 |
CN105468508B (zh) * | 2014-09-04 | 2018-07-03 | 阿里巴巴集团控股有限公司 | 代码检测方法及装置 |
CN104360938B (zh) * | 2014-10-21 | 2017-10-20 | 北京邮电大学 | 一种故障确认方法及其系统 |
CN104834837B (zh) * | 2015-04-03 | 2017-10-31 | 西北大学 | 一种基于语义的二进制代码反混淆方法 |
CN106933642B (zh) * | 2015-12-29 | 2021-04-27 | 阿里巴巴集团控股有限公司 | 应用程序的处理方法及处理装置 |
CN107229563B (zh) * | 2016-03-25 | 2020-07-10 | 中国科学院信息工程研究所 | 一种跨架构的二进制程序漏洞函数关联方法 |
CN106528403B (zh) * | 2016-10-08 | 2018-11-20 | 西安电子科技大学 | 基于二进制代码植入技术的软件运行时监控方法 |
CN106709356B (zh) * | 2016-12-07 | 2019-05-24 | 西安电子科技大学 | 基于静态污点分析和符号执行的安卓应用漏洞挖掘方法 |
CN106874187B (zh) * | 2016-12-29 | 2020-09-11 | 腾讯科技(深圳)有限公司 | 代码覆盖率收集方法和装置 |
CN107194252B (zh) * | 2017-05-09 | 2019-11-22 | 华中科技大学 | 一种完全上下文敏感的程序控制流完整性保护方法和系统 |
CN109359468B (zh) * | 2018-08-23 | 2021-12-14 | 创新先进技术有限公司 | 漏洞检测方法、装置及设备 |
CN109558733A (zh) * | 2018-11-22 | 2019-04-02 | 四川长虹电器股份有限公司 | 一种基于静态检测和动态检测相结合的应用程序代码缺陷检测方法 |
CN110032394B (zh) * | 2019-04-12 | 2022-05-31 | 深圳市腾讯信息技术有限公司 | 一种无源码文件的分析方法、装置和存储介质 |
CN110187988B (zh) * | 2019-06-06 | 2021-08-13 | 中国科学技术大学 | 适用于虚函数和函数指针的静态函数调用图构建方法 |
CN112395603B (zh) * | 2019-08-15 | 2023-09-05 | 奇安信安全技术(珠海)有限公司 | 基于指令执行序列特征的漏洞攻击识别方法、装置及计算机设备 |
CN111488579B (zh) * | 2020-03-25 | 2023-06-02 | 腾讯科技(深圳)有限公司 | 漏洞检测方法、装置、电子设备和计算机可读存储介质 |
CN112100054B (zh) * | 2020-08-12 | 2021-07-20 | 北京大学 | 一种面向数据管控的程序静态分析方法和系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101710378A (zh) * | 2009-10-10 | 2010-05-19 | 北京理工大学 | 一种基于序列模式挖掘的软件安全漏洞检测方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7587763B2 (en) * | 2002-12-12 | 2009-09-08 | Finite State Machine Labs, Inc. | Systems and methods for detecting a security breach in a computer system |
-
2010
- 2010-10-21 CN CN201010513779A patent/CN101968766B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101710378A (zh) * | 2009-10-10 | 2010-05-19 | 北京理工大学 | 一种基于序列模式挖掘的软件安全漏洞检测方法 |
Non-Patent Citations (1)
Title |
---|
唐艳武等.上下文相关的软件漏洞模式自动提取方法.《计算机工程》.2010,第36卷(第17期),51-53,56. * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107506644A (zh) * | 2017-08-16 | 2017-12-22 | 南京大学 | 动态生成代码中隐式常数威胁的安全保护方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101968766A (zh) | 2011-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101968766B (zh) | 计算机程序实际运行时触发软件漏洞的检测系统 | |
US11036614B1 (en) | Data control-oriented smart contract static analysis method and system | |
US11087002B2 (en) | Using the same query language for static and dynamic application security testing tools | |
Ge et al. | DyTa: dynamic symbolic execution guided with static verification results | |
US8286149B2 (en) | Apparatus for and method of implementing feedback directed dependency analysis of software applications | |
Tan et al. | Making k-object-sensitive pointer analysis more precise with still k-limiting | |
CN104573503B (zh) | 一种内存访问溢出的检测方法及装置 | |
CN102567200A (zh) | 基于函数调用图的并行化安全漏洞检测方法 | |
Meurice et al. | Static analysis of dynamic database usage in java systems | |
CN101833500A (zh) | 一种基于Agent的嵌入式软件智能测试方法 | |
CN103164331A (zh) | 一种应用程序的漏洞检测方法和装置 | |
KR101796369B1 (ko) | 소프트웨어 분석을 위한 리버스 엔지니어링 협업 장치, 방법 및 시스템 | |
CN111488579A (zh) | 漏洞检测方法、装置、电子设备和计算机可读存储介质 | |
Perez et al. | Generating predicate callback summaries for the android framework | |
US8898648B2 (en) | Methodology for fast detection of false sharing in threaded scientific codes | |
Eler et al. | An empirical study to quantify the characteristics of Java programs that may influence symbolic execution from a unit testing perspective | |
US8875100B2 (en) | Pattern analysis and performance accounting | |
Madhavan et al. | Purity analysis: An abstract interpretation formulation | |
Dósea et al. | How do design decisions affect the distribution of software metrics? | |
Eler et al. | Quantifying the characteristics of Java programs that may influence symbolic execution from a test data generation perspective | |
Guo et al. | Graphspy: Fused program semantic embedding through graph neural networks for memory efficiency | |
CN114691197A (zh) | 代码分析方法、装置、电子设备和存储介质 | |
Fornaia et al. | Is my code easy to port? using taint analysis to evaluate and assist code portability | |
Karamitas et al. | Function matching between binary executables: efficient algorithms and features | |
Kozlov et al. | Exploratory analysis of the relations between code cloning and open source software quality |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120905 Termination date: 20151021 |
|
EXPY | Termination of patent right or utility model |