CN111859388A - 一种多层次混合的漏洞自动挖掘方法 - Google Patents
一种多层次混合的漏洞自动挖掘方法 Download PDFInfo
- Publication number
- CN111859388A CN111859388A CN202010616136.0A CN202010616136A CN111859388A CN 111859388 A CN111859388 A CN 111859388A CN 202010616136 A CN202010616136 A CN 202010616136A CN 111859388 A CN111859388 A CN 111859388A
- Authority
- CN
- China
- Prior art keywords
- program
- semantic information
- target
- target program
- dynamic
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明属于计算机技术领域,尤其为一种多层次混合的漏洞自动挖掘方法,包括以下步骤:S1:通过静态分析技术利用指针分析获取程序中的指针分配与赋值过程,记录所有指针指向的内存地址位置;利用别名分析技术获取CMP类指令的目的操作数而明确目标程序的跳转地址;S2:通过中间代码静态插桩技术实现向目标程序的关键位置插桩监测代码。本发明将二进制可执行程序翻译成编译器的中间层表示语言,相比于二进制可执行程序,这种方法处理得到的中间层表示语言源代码具有更多的语义信息;针对LLVM IR中间表示语言的静态分析技术,相较于针对C/C++语言的分析可以实现更加细粒度的编译时静态语义信息提取。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种多层次混合的漏洞自动挖掘方法。
背景技术
模糊测试技术仅通过构造随机的、非预期的畸形数据作为目标程序的随机输入,监控目标程序执行过程中可能存在的异常状态,通过产生的异常状态来判断目标二进制程序中是否存在漏洞。但是模糊测试仅考虑产生随机的输入,而不是针对不同的目标程序进行优化和改进,这就导致了模糊测试对不同的目标二进制程序执行的代码覆盖率低,无法对二进制程序的绝大部分功能进行测试,也就是说漏洞挖掘的范围仅局限在目标程序的浅层逻辑,无法实现对目标程序的大部分功能进行测试并挖掘出目标程序深层逻辑的复杂漏洞。覆盖导向型模糊测试虽然使用了代码覆盖率作为测试用例优劣的衡量标准,筛选出覆盖率更高的测试用例,但是却没有任何机制来指导模糊测试的测试用例生成过程。覆盖导向型模糊测试依然需要对输入的畸形数据进行盲目的修改,并通过计算代码覆盖率来判断变异后发畸形数据是否达到了预期的效果。首先,盲目的变异导致程序的大部分执行都是重复的,修改的输入数据并没有触发更多的功能,这导致了覆盖导向型模糊测试的漏洞挖掘效率很低。其次,在遇到复杂的逻辑判断条件(例如,完整性校验和安全性检查)时,盲目的修改输入数据是无法满足判断条件的。即遇到复杂的逻辑判断时,判断后的功能往往无法进行测试。更糟糕的是,这类复杂的逻辑判断条件一般都处于目标程序的开始位置,因此覆盖导向型模糊测试很难探索目标程序的大部分逻辑和功能。
将覆盖导向型模糊测试技术与符号执行相结合的方法,虽然可以求解出复杂逻辑判断条件的输入。但是由于符号执行技术的约束求解速度缓慢,而针对复杂的逻辑判断求解过程更加复杂且缓慢,而且存在无解的情况。其次,符号执行会随着目标程序规模的增加而出现路径爆炸问题,使得符号执行的求解速度更加缓慢,甚至造成操作系统崩溃。由于符号执行技术执行效率低、资源占用过大、约束无解等局限性,将符号执行技术引入到覆盖导向型模糊测试时的效果并不理想,为此,提出一种多层次混合的漏洞自动挖掘方法。
发明内容
本发明的目的是为了解决现有技术中存在的缺点,而提出的一种多层次混合的漏洞自动挖掘方法。
为了实现上述目的,本发明采用了如下技术方案:一种多层次混合的漏洞自动挖掘方法,包括以下步骤:
S1:通过静态分析技术利用指针分析获取程序中的指针分配与赋值过程,记录所有指针指向的内存地址位置;利用别名分析技术获取CMP类指令的目的操作数而明确目标程序的跳转地址;
S2:通过中间代码静态插桩技术实现向目标程序的关键位置插桩监测代码;
S3:通过动态语义信息提取技术在插桩后的目标程序中,执行到监控函数时,将当前的栈帧信息保存在全局数据结构中,所述栈帧信息包括从esp寄存器中保存的内存地址到ebp寄存器中保存的内存地址中的内存信息、各个寄存器的状态及执行路径和关键变量的当前取值;
S4:通过以动态符号执行为主导的覆盖导向型模糊测试技术将插桩监测代码的目标应用程序输入到覆盖导向型模糊测试中,通过覆盖导向型模糊测试技术将模糊测试进程生成的测试用例输入到目标应用程序中执行,在目标程序执行的过程中,插桩到目标程序中的监测代码会将目标程序执行过程中的运行时动态语义信息收集到相应的测试用例。
优选的,所述S1中,静态分析技术包括以下步骤:
A1:使用控制流分析在目标二进制程序上划分出控制流图:
A2:在目标二进制程序的控制流图上使用指针分析以及别名分析提取出指针与指向内存地址和CMP指令及其目的操作数,这些静态语义信息将帮助中间代码静态插桩模块识别敏感位置;
A3:寻找到A2所述的敏感位置,并向这些位置插桩。
优选的,所述S1中,CMP指令的目的操作数将在符号执行对复杂分支求解失败后指导模糊测试进程跳转到正确地控制流中执行,帮助模糊测试进程探索目标程序更深层的逻辑,解决目标程序无法触发目标程序深层逻辑漏洞的问题,目标程序包含的有关指针的操作是产生漏洞的危险行为,指针指向的内存位置是可能触发漏洞的危险路径,记录指针指向的内存地址的目的是实现在危险路径的精确插桩。
优选的,所述S2中,插桩位置包括每个基本块的起始位置、CMP类指令的跳转位置和危险路径,所述CMP类指令的跳转位置和危险路径分别为CMP类指令的目的操作数和指针指向的内存地址所在的路径。
优选的,所述S2中,中间代码静态插桩技术作用于程序在编译过程中的中间状态,用于目标应用程序的执行,利用所获取到的语义信息,精准定位插桩位置,所述中间状态为编译器所使用的中间代码。
优选的,所述S2中,中间代码静态插桩在编译器的中间表示层实现,针对的是LLVMIR语言,通过在目标程序的中间表示层插桩目标应用程序,借助指针分析和别名分析识别到的CMP类指令与它们的目的操作数和指针类变量的分配、赋值、指向内存位置和内存释放位置,在CMP类指令的目的操作数以及指针指向内存位置和内存释放位置插桩监控代码,如果程序在强约束分支处无法通过,则通过插桩代码跳转到分支无法通过的内存位置,在LLVM IR代码上实现插桩框架的方法是编写LLVM Pass,以clang编译器插件的形式作为代码优化过程中的一道环节作用于目标应用程序的中间层表示代码。
优选的,所述S3中,动态语义信息提取技术包括以下步骤:
B1:将测试用例输入到目标程序后,目标程序根据程序内部逻辑正常执行。如果执行到插桩的监控函数后,将调用程序状态监控函数;否则,目标程序继续执行;
B2:当调用程序状态监控函数后,监控函数将打印目标程序的运行时动态语义信息,并将其存储到相关的数据结构中:
B3:当测试用例的一次执行结束后,将存储的语义信息反馈给覆盖导向型模糊测试框架。
优选的,所述S3中,在栈帧信息、各个寄存器的状态、执行路径和关键变量的当前取值中,保存各个寄存器的状态是为了保存现场信息,当模糊测试触发漏洞后,便于调试人员恢复现场信息,实现快速的修复,其余的信息构成了程序的动态语义信息。
优选的,所述S4中,以动态符号执行为主导的覆盖导向型模糊测试技术包括以下步骤:
C1:将插桩加工后的目标二进制程序输入给模糊测试;
C2:如果模糊测试触发了未知漏洞,则输出漏洞信息及相关语义信息,以便于测试和调试;
C3:如果未触发漏洞,则调用动态符号执行对复杂校验分支进行约束求解;
C4:如果动态符号执行求解后产生了新的覆盖,则将求解后的种子输入给模糊测试进程,否则需要调用运行时动态语义信息;
C5:根据运行时动态语义信息变异测试用例,生成包含语义信息的测试用例,并将其输入给模糊测试进程。
优选的,所述S4中,在覆盖导向型模糊测试迭代的过程中,符号化调度器根据代码覆盖率的变换情况以及动态运行时信息判断模糊测试进程是否遇到无法通过的复杂校验分支,当代码覆盖率在模糊测试进程在持续一段时间内没有产生新的覆盖,而动态运行时信息也无更新时,则表示模糊测试进程遇到无法通过的复杂校验分支,需要调用动态符号执行求解相关分支的正确取值,并将满足条件的该值传递给模糊测试,使模糊测试通过当前面对的复杂判断。
与现有技术相比,本发明的有益效果是:
1)将二进制可执行程序翻译成编译器的中间层表示语言,相比于二进制可执行程序,这种方法处理得到的中间层表示语言源代码具有更多的语义信息;
2)针对LLVM IR中间表示语言的静态分析技术,相较于针对C/C++语言的分析可以实现更加细粒度的编译时静态语义信息提取;
3)使用静态分析的方式对复杂的指针操作动作和内存跳转动作(例如,完整性校验和安全性检查)语句进行识别,实现相较于覆盖率指导符号执行,可以实现更加精准快速的符号执行调用;
4)符号执行通过约束求解器产生的结果与模糊测试的输入相统一,实现两个模块的快速反馈机制,提高漏洞挖掘的效率;
5)使用在二进制目标程序执行过程中提取出的动态语义信息,将其反馈给覆盖导向型模糊测试,可以更加精确的控制目标程序的执行路径,使执行可以更加快速的逼近可能存在漏洞的高危路径;
6)在输出触发的漏洞位置的同时,输出相关的语义信息,便于安全研究人员复现、调试和修复该漏洞。
附图说明
图1为本发明的操作流程图;
图2为本发明中静态分析技术流程图;
图3为本发明中动态语义信息提取技术流程图;
图4为本发明中以动态符号执行为主导的覆盖导向型模糊测试技术流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例
请参照图1-4,本发明提供一种技术方案:一种多层次混合的漏洞自动挖掘方法,包括以下步骤:
S1:通过静态分析技术利用指针分析获取程序中的指针分配与赋值过程,记录所有指针指向的内存地址位置;利用别名分析技术获取CMP类指令的目的操作数而明确目标程序的跳转地址;
S2:通过中间代码静态插桩技术实现向目标程序的关键位置插桩监测代码;
S3:通过动态语义信息提取技术在插桩后的目标程序中,执行到监控函数时,将当前的栈帧信息保存在全局数据结构中,所述栈帧信息包括从esp寄存器中保存的内存地址到ebp寄存器中保存的内存地址中的内存信息、各个寄存器的状态及执行路径和关键变量的当前取值;
S4:通过以动态符号执行为主导的覆盖导向型模糊测试技术将插桩监测代码的目标应用程序输入到覆盖导向型模糊测试中,通过覆盖导向型模糊测试技术将模糊测试进程生成的测试用例输入到目标应用程序中执行,在目标程序执行的过程中,插桩到目标程序中的监测代码会将目标程序执行过程中的运行时动态语义信息收集到相应的测试用例。
所述S1中,静态分析技术包括以下步骤:
A1:使用控制流分析在目标二进制程序上划分出控制流图:
A2:在目标二进制程序的控制流图上使用指针分析以及别名分析提取出指针与指向内存地址和CMP指令及其目的操作数,这些静态语义信息将帮助中间代码静态插桩模块识别敏感位置;
A3:寻找到A2所述的敏感位置,并向这些位置插桩。
所述S1中,CMP指令的目的操作数将在符号执行对复杂分支求解失败后指导模糊测试进程跳转到正确地控制流中执行,帮助模糊测试进程探索目标程序更深层的逻辑,解决目标程序无法触发目标程序深层逻辑漏洞的问题,且由于目标程序包含的有关指针的操作是产生漏洞的危险行为,因此指针指向的内存位置是可能触发漏洞的危险路径,记录指针指向的内存地址的目的是实现在危险路径的精确插桩;例如,使用指向分析识别二进制程序中的Use After Free(UAF)漏洞,UAF漏洞的成因源自指向某块内存对象的指针被释放,此时该指针指向的是空地址,如果再次使用此指针则会访问错误的内存对象从而产生安全隐患。而指针分析可以快速地识别这类漏洞,因为指针分析了解所有指针的分配位置和释放位置,当指针释放后仍然被使用时将会产生UAF漏洞,这实现了对潜在内存损坏漏洞的识别。别名分析旨在分析CMP类指令与它们的目的操作数。CMP类指令是程序跳转的关键指令,它负责程序控制流的跳转。当覆盖导向型模糊测试无法通过目标程序的分支校验时,我们的别名分析可以将提取到的CMP类指令的目的操作数传递给插桩技术,使得模糊测试框架通过此类分支以达到更高的代码覆盖率。
所述S2中,插桩位置包括每个基本块的起始位置、CMP类指令的跳转位置和危险路径,所述CMP类指令的跳转位置和危险路径分别为CMP类指令的目的操作数和指针指向的内存地址所在的路径。
所述S2中,中间代码静态插桩技术作用于程序在编译过程中的中间状态,即编译器所使用的中间代码,用于目标应用程序的执行,利用所获取到的语义信息,精准定位插桩位置。
所述S2中,中间代码静态插桩是在编译器的中间表示层实现的,针对的是LLVM IR语言,通过在目标程序的中间表示层插桩目标应用程序,借助指针分析和别名分析识别到的CMP类指令与它们的目的操作数和指针类变量的分配、赋值、指向内存位置和内存释放位置,在CMP类指令的目的操作数以及指针指向内存位置和内存释放位置插桩监控代码,如果程序在强约束分支处无法通过,则通过插桩代码跳转到分支无法通过的内存位置,在LLVMIR代码上实现插桩框架的方法是编写LLVM Pass,以clang编译器插件的形式作为代码优化过程中的一道环节作用于目标应用程序的中间层表示代码。
所述S3中,动态语义信息提取技术包括以下步骤:
B1:将测试用例输入到目标程序后,目标程序根据程序内部逻辑正常执行。如果执行到插桩的监控函数后,将调用程序状态监控函数;否则,目标程序继续执行;
B2:当调用程序状态监控函数后,监控函数将打印目标程序的运行时动态语义信息,并将其存储到相关的数据结构中:
B3:当测试用例的一次执行结束后,将存储的语义信息反馈给覆盖导向型模糊测试框架。
所述S3中,在栈帧信息、各个寄存器的状态、执行路径和关键变量的当前取值中,保存各个寄存器的状态是为了保存现场信息,当模糊测试触发漏洞后,便于调试人员恢复现场信息,实现快速的修复,其余的信息构成了程序的动态语义信息。
所述S4中,以动态符号执行为主导的覆盖导向型模糊测试技术包括以下步骤:
C1:将插桩加工后的目标二进制程序输入给模糊测试;
C2:如果模糊测试触发了未知漏洞,则输出漏洞信息及相关语义信息,以便于测试和调试;
C3:如果未触发漏洞,则调用动态符号执行对复杂校验分支进行约束求解;
C4:如果动态符号执行求解后产生了新的覆盖,则将求解后的种子输入给模糊测试进程,否则需要调用运行时动态语义信息;
C5:根据运行时动态语义信息变异测试用例,生成包含语义信息的测试用例,并将其输入给模糊测试进程。
所述S4中,在覆盖导向型模糊测试迭代的过程中,符号化调度器根据代码覆盖率的变换情况以及动态运行时信息判断模糊测试进程是否遇到无法通过的复杂校验分支,当代码覆盖率在模糊测试进程在持续一段时间内没有产生新的覆盖,而动态运行时信息也无更新时,则表示模糊测试进程遇到无法通过的复杂校验分支,需要调用动态符号执行求解相关分支的正确取值,并将满足条件的该值传递给模糊测试,使模糊测试通过当前面对的复杂判断,覆盖导向型模糊测试仅仅以代码覆盖率作为程序执行状态的衡量指标,这种方法仅能获知程序执行的代码量是多少,间接的反应了测试的功能占比。以动态符号执行主导的模糊测试技术,在静态分析阶段插桩的程序状态监控函数会将程序的动态执行信息反馈给模糊测试。具体而言,监控函数将程序的当前栈帧信息、关键变量取值和执行路径反馈给模糊测试,模糊测试根据当前栈帧信息通过修改关键变量的取值,来影响执行路径,使得执行路径尽可能的指向可能存在漏洞的危险路径上。如果模糊测试进程在遇到无法通过的复杂校验分支时,将调用符号执行求解正确的输入以通过复杂分支。如果符号执行求解失败,即该约束无解时,则使用修改CMP指令目的地址的方式使得模糊测试进程跳转到指定位置。通过迭代的语义信息与模糊测试之间的相互反馈,使得目标程序的代码覆盖率更高,执行路径更加接近高危路径。当触发未知漏洞后,在输出漏洞位置的同时也将触发现场信息和相关的语义信息打印出来,方便安全人员复现、调试并修复该漏洞。
与现有技术相比,本发明的有益效果是:
1)将二进制可执行程序翻译成编译器的中间层表示语言,相比于二进制可执行程序,这种方法处理得到的中间层表示语言源代码具有更多的语义信息;
2)针对LLVM IR中间表示语言的静态分析技术,相较于针对C/C++语言的分析可以实现更加细粒度的编译时静态语义信息提取;
3)使用静态分析的方式对复杂的指针操作动作和内存跳转动作(例如,完整性校验和安全性检查)语句进行识别,实现相较于覆盖率指导符号执行,可以实现更加精准快速的符号执行调用;
4)符号执行通过约束求解器产生的结果与模糊测试的输入相统一,实现两个模块的快速反馈机制,提高漏洞挖掘的效率;
5)使用在二进制目标程序执行过程中提取出的动态语义信息,将其反馈给覆盖导向型模糊测试,可以更加精确的控制目标程序的执行路径,使执行可以更加快速的逼近可能存在漏洞的高危路径;
6)在输出触发的漏洞位置的同时,输出相关的语义信息,便于安全研究人员复现、调试和修复该漏洞。
需要说明的是,本发明的设备结构和附图主要对本发明的原理进行描述,在该设计原理的技术上,装置的动力机构、供电系统及控制系统等的设置并没有完全描述清楚,而在本领域技术人员理解上述发明的原理的前提下,可清楚获知其动力机构、供电系统及控制系统的具体。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
Claims (10)
1.一种多层次混合的漏洞自动挖掘方法,其特征在于:包括以下步骤:
S1:通过静态分析技术利用指针分析获取程序中的指针分配与赋值过程,记录所有指针指向的内存地址位置;利用别名分析技术获取CMP类指令的目的操作数而明确目标程序的跳转地址;
S2:通过中间代码静态插桩技术实现向目标程序的关键位置插桩监测代码;
S3:通过动态语义信息提取技术在插桩后的目标程序中,执行到监控函数时,将当前的栈帧信息保存在全局数据结构中,所述栈帧信息包括从esp寄存器中保存的内存地址到ebp寄存器中保存的内存地址中的内存信息、各个寄存器的状态及执行路径和关键变量的当前取值;
S4:通过以动态符号执行为主导的覆盖导向型模糊测试技术将插桩监测代码的目标应用程序输入到覆盖导向型模糊测试中,通过覆盖导向型模糊测试技术将模糊测试进程生成的测试用例输入到目标应用程序中执行,在目标程序执行的过程中,插桩到目标程序中的监测代码会将目标程序执行过程中的运行时动态语义信息收集到相应的测试用例。
2.根据权利要求1所述的一种多层次混合的漏洞自动挖掘方法,其特征在于:所述S1中,静态分析技术包括以下步骤:
A1:使用控制流分析在目标二进制程序上划分出控制流图:
A2:在目标二进制程序的控制流图上使用指针分析以及别名分析提取出指针与指向内存地址和CMP指令及其目的操作数,这些静态语义信息将帮助中间代码静态插桩模块识别敏感位置;
A3:寻找到A2所述的敏感位置,并向这些位置插桩。
3.根据权利要求1所述的一种多层次混合的漏洞自动挖掘方法,其特征在于:所述S1中,CMP指令的目的操作数将在符号执行对复杂分支求解失败后指导模糊测试进程跳转到正确地控制流中执行,帮助模糊测试进程探索目标程序更深层的逻辑,解决目标程序无法触发目标程序深层逻辑漏洞的问题,目标程序包含的有关指针的操作是产生漏洞的危险行为,指针指向的内存位置是可能触发漏洞的危险路径,记录指针指向的内存地址的目的是实现在危险路径的精确插桩。
4.根据权利要求1所述的一种多层次混合的漏洞自动挖掘方法,其特征在于:所述S2中,插桩位置包括每个基本块的起始位置、CMP类指令的跳转位置和危险路径,所述CMP类指令的跳转位置和危险路径分别为CMP类指令的目的操作数和指针指向的内存地址所在的路径。
5.根据权利要求1所述的一种多层次混合的漏洞自动挖掘方法,其特征在于:所述S2中,中间代码静态插桩技术作用于程序在编译过程中的中间状态,用于目标应用程序的执行,利用所获取到的语义信息,精准定位插桩位置,所述中间状态为编译器所使用的中间代码。
6.根据权利要求1所述的一种多层次混合的漏洞自动挖掘方法,其特征在于:所述S2中,中间代码静态插桩在编译器的中间表示层实现,针对的是LLVM IR语言,通过在目标程序的中间表示层插桩目标应用程序,借助指针分析和别名分析识别到的CMP类指令与它们的目的操作数和指针类变量的分配、赋值、指向内存位置和内存释放位置,在CMP类指令的目的操作数以及指针指向内存位置和内存释放位置插桩监控代码。
7.根据权利要求1所述的一种多层次混合的漏洞自动挖掘方法,其特征在于:所述S3中,动态语义信息提取技术包括以下步骤:
B1:将测试用例输入到目标程序后,目标程序根据程序内部逻辑正常执行。如果执行到插桩的监控函数后,将调用程序状态监控函数;否则,目标程序继续执行;
B2:当调用程序状态监控函数后,监控函数将打印目标程序的运行时动态语义信息,并将其存储到相关的数据结构中:
B3:当测试用例的一次执行结束后,将存储的语义信息反馈给覆盖导向型模糊测试框架。
8.根据权利要求1所述的一种多层次混合的漏洞自动挖掘方法,其特征在于:所述S3中,在栈帧信息、各个寄存器的状态、执行路径和关键变量的当前取值中,保存各个寄存器的状态是为了保存现场信息,模糊测试触发漏洞后并修复后,其余的信息构成了程序的动态语义信息。
9.根据权利要求1所述的一种多层次混合的漏洞自动挖掘方法,其特征在于:所述S4中,以动态符号执行为主导的覆盖导向型模糊测试技术包括以下步骤:
C1:将插桩加工后的目标二进制程序输入给模糊测试;
C2:如果模糊测试触发了未知漏洞,则输出漏洞信息及相关语义信息,以便于测试和调试;
C3:如果未触发漏洞,则调用动态符号执行对复杂校验分支进行约束求解;
C4:如果动态符号执行求解后产生了新的覆盖,则将求解后的种子输入给模糊测试进程,否则需要调用运行时动态语义信息;
C5:根据运行时动态语义信息变异测试用例,生成包含语义信息的测试用例,并将其输入给模糊测试进程。
10.根据权利要求1所述的一种多层次混合的漏洞自动挖掘方法,其特征在于:所述S4中,在覆盖导向型模糊测试迭代的过程中,符号化调度器根据代码覆盖率的变换情况以及动态运行时信息判断模糊测试进程是否遇到无法通过的复杂校验分支。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010616136.0A CN111859388B (zh) | 2020-06-30 | 2020-06-30 | 一种多层次混合的漏洞自动挖掘方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010616136.0A CN111859388B (zh) | 2020-06-30 | 2020-06-30 | 一种多层次混合的漏洞自动挖掘方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111859388A true CN111859388A (zh) | 2020-10-30 |
CN111859388B CN111859388B (zh) | 2022-11-01 |
Family
ID=72989716
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010616136.0A Active CN111859388B (zh) | 2020-06-30 | 2020-06-30 | 一种多层次混合的漏洞自动挖掘方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111859388B (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112487438A (zh) * | 2020-12-12 | 2021-03-12 | 南京理工大学 | 基于标识符一致性的堆对象Use-After-Free漏洞检测方法 |
CN112528240A (zh) * | 2020-12-02 | 2021-03-19 | 上海交通大学 | 面向密码代码的自动化程序敏感数据保护方法 |
CN113836023A (zh) * | 2021-09-26 | 2021-12-24 | 南京大学 | 一种基于体系结构交叉检查的编译器安全性测试方法 |
CN114036072A (zh) * | 2022-01-06 | 2022-02-11 | 湖南泛联新安信息科技有限公司 | 一种支持自动化检测程序缺陷的方法和系统 |
CN114238984A (zh) * | 2021-12-14 | 2022-03-25 | 东南大学 | 一种基于桩掩码的软件分析交互方法 |
CN114328173A (zh) * | 2021-10-27 | 2022-04-12 | 清华大学 | 软件模糊测试方法和装置、电子设备及存储介质 |
CN114610320A (zh) * | 2022-03-21 | 2022-06-10 | 浙江大学 | 一种基于llvm的变量类型信息修复与比较方法及系统 |
CN114860585A (zh) * | 2022-04-22 | 2022-08-05 | 中国人民解放军国防科技大学 | 一种基于多层语义恢复的网络协议软件分析方法 |
CN115129320A (zh) * | 2022-06-17 | 2022-09-30 | 南京邮电大学 | 一种基于循环不变式的间接跳转目标地址识别方法及装置 |
CN115576840A (zh) * | 2022-11-01 | 2023-01-06 | 中国科学院软件研究所 | 基于机器学习的静态程序插桩检测方法及装置 |
CN115687111A (zh) * | 2022-10-27 | 2023-02-03 | 中国人民解放军国防科技大学 | 面向计算机二进制程序的直接比对依赖识别方法与系统 |
CN116775127A (zh) * | 2023-05-25 | 2023-09-19 | 哈尔滨工业大学 | 一种基于RetroWrite框架的静态符号执行插桩方法 |
CN118094548A (zh) * | 2024-03-28 | 2024-05-28 | 河南省电子规划研究院有限责任公司 | 一种软件依赖包的安全检测系统 |
CN118094548B (zh) * | 2024-03-28 | 2024-11-05 | 河南省电子规划研究院有限责任公司 | 一种软件依赖包的安全检测系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622558A (zh) * | 2012-03-01 | 2012-08-01 | 北京邮电大学 | 一种二进制程序漏洞的挖掘装置和方法 |
CN102841844A (zh) * | 2012-07-13 | 2012-12-26 | 北京航空航天大学 | 一种基于简易符号执行的二进制代码漏洞挖掘方法 |
CN108052825A (zh) * | 2017-12-29 | 2018-05-18 | 哈尔滨工业大学 | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 |
CN109032927A (zh) * | 2018-06-26 | 2018-12-18 | 腾讯科技(深圳)有限公司 | 一种漏洞挖掘方法及装置 |
CN109308415A (zh) * | 2018-09-21 | 2019-02-05 | 四川大学 | 一种面向二进制的导向性模糊测试方法与系统 |
CN110196815A (zh) * | 2019-07-26 | 2019-09-03 | 中国人民解放军国防科技大学 | 一种软件模糊测试方法 |
CN110941552A (zh) * | 2019-11-20 | 2020-03-31 | 广州大学 | 一种基于动态污点分析的内存分析方法及装置 |
-
2020
- 2020-06-30 CN CN202010616136.0A patent/CN111859388B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622558A (zh) * | 2012-03-01 | 2012-08-01 | 北京邮电大学 | 一种二进制程序漏洞的挖掘装置和方法 |
CN102841844A (zh) * | 2012-07-13 | 2012-12-26 | 北京航空航天大学 | 一种基于简易符号执行的二进制代码漏洞挖掘方法 |
CN108052825A (zh) * | 2017-12-29 | 2018-05-18 | 哈尔滨工业大学 | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 |
CN109032927A (zh) * | 2018-06-26 | 2018-12-18 | 腾讯科技(深圳)有限公司 | 一种漏洞挖掘方法及装置 |
CN109308415A (zh) * | 2018-09-21 | 2019-02-05 | 四川大学 | 一种面向二进制的导向性模糊测试方法与系统 |
CN110196815A (zh) * | 2019-07-26 | 2019-09-03 | 中国人民解放军国防科技大学 | 一种软件模糊测试方法 |
CN110941552A (zh) * | 2019-11-20 | 2020-03-31 | 广州大学 | 一种基于动态污点分析的内存分析方法及装置 |
Non-Patent Citations (1)
Title |
---|
王夏菁等: "二进制程序漏洞挖掘关键技术研究综述", 《信息网络安全》 * |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112528240A (zh) * | 2020-12-02 | 2021-03-19 | 上海交通大学 | 面向密码代码的自动化程序敏感数据保护方法 |
CN112528240B (zh) * | 2020-12-02 | 2022-08-09 | 上海交通大学 | 面向密码代码的自动化程序敏感数据保护方法 |
CN112487438B (zh) * | 2020-12-12 | 2022-11-04 | 南京理工大学 | 基于标识符一致性的堆对象Use-After-Free漏洞检测方法 |
CN112487438A (zh) * | 2020-12-12 | 2021-03-12 | 南京理工大学 | 基于标识符一致性的堆对象Use-After-Free漏洞检测方法 |
CN113836023A (zh) * | 2021-09-26 | 2021-12-24 | 南京大学 | 一种基于体系结构交叉检查的编译器安全性测试方法 |
CN114328173B (zh) * | 2021-10-27 | 2022-08-05 | 清华大学 | 软件模糊测试方法和装置、电子设备及存储介质 |
CN114328173A (zh) * | 2021-10-27 | 2022-04-12 | 清华大学 | 软件模糊测试方法和装置、电子设备及存储介质 |
CN114238984A (zh) * | 2021-12-14 | 2022-03-25 | 东南大学 | 一种基于桩掩码的软件分析交互方法 |
CN114036072B (zh) * | 2022-01-06 | 2022-04-08 | 湖南泛联新安信息科技有限公司 | 一种支持自动化检测程序缺陷的方法和系统 |
CN114036072A (zh) * | 2022-01-06 | 2022-02-11 | 湖南泛联新安信息科技有限公司 | 一种支持自动化检测程序缺陷的方法和系统 |
CN114610320A (zh) * | 2022-03-21 | 2022-06-10 | 浙江大学 | 一种基于llvm的变量类型信息修复与比较方法及系统 |
CN114860585A (zh) * | 2022-04-22 | 2022-08-05 | 中国人民解放军国防科技大学 | 一种基于多层语义恢复的网络协议软件分析方法 |
CN115129320A (zh) * | 2022-06-17 | 2022-09-30 | 南京邮电大学 | 一种基于循环不变式的间接跳转目标地址识别方法及装置 |
CN115129320B (zh) * | 2022-06-17 | 2024-05-24 | 南京邮电大学 | 一种基于循环不变式的间接跳转目标地址识别方法及装置 |
CN115687111A (zh) * | 2022-10-27 | 2023-02-03 | 中国人民解放军国防科技大学 | 面向计算机二进制程序的直接比对依赖识别方法与系统 |
CN115687111B (zh) * | 2022-10-27 | 2024-05-14 | 中国人民解放军国防科技大学 | 面向计算机二进制程序的直接比对依赖识别方法与系统 |
CN115576840A (zh) * | 2022-11-01 | 2023-01-06 | 中国科学院软件研究所 | 基于机器学习的静态程序插桩检测方法及装置 |
CN116775127A (zh) * | 2023-05-25 | 2023-09-19 | 哈尔滨工业大学 | 一种基于RetroWrite框架的静态符号执行插桩方法 |
CN116775127B (zh) * | 2023-05-25 | 2024-05-28 | 哈尔滨工业大学 | 一种基于RetroWrite框架的静态符号执行插桩方法 |
CN118094548A (zh) * | 2024-03-28 | 2024-05-28 | 河南省电子规划研究院有限责任公司 | 一种软件依赖包的安全检测系统 |
CN118094548B (zh) * | 2024-03-28 | 2024-11-05 | 河南省电子规划研究院有限责任公司 | 一种软件依赖包的安全检测系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111859388B (zh) | 2022-11-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111859388B (zh) | 一种多层次混合的漏洞自动挖掘方法 | |
US11151018B2 (en) | Method and apparatus for testing a code file | |
US7530056B1 (en) | Method and system for detecting runtime defects in a program by comparing correct and incorrect runs | |
Falke et al. | The bounded model checker LLBMC | |
Romano et al. | An empirical study of bugs in webassembly compilers | |
CN102567164A (zh) | 用于处理器的指令集批量测试装置与方法 | |
Kukucka et al. | Confetti: Amplifying concolic guidance for fuzzers | |
CN112506801A (zh) | 一种基于注解的模糊测试方法 | |
Wu et al. | Jitfuzz: Coverage-guided fuzzing for jvm just-in-time compilers | |
CN102722438B (zh) | 一种内核调试的方法和设备 | |
Zhang et al. | JavaScript instrumentation for search-based software testing: A study with RESTful APIs | |
US9471465B2 (en) | Trace value correlation with data field declarations | |
Anderson et al. | TESLA: temporally enhanced system logic assertions | |
Lee et al. | Interactive program debugging and optimization for directive-based, efficient gpu computing | |
Gu et al. | Vetting api usages in c programs with imchecker | |
Christakis et al. | A general framework for dynamic stub injection | |
US20140289712A1 (en) | Effective Lifetime Dependency Analysis and Typestate Analysis | |
Liu et al. | Instruguard: find and fix instrumentation errors for coverage-based greybox fuzzing | |
Chen et al. | Testing and verification of compilers (Dagstuhl Seminar 17502) | |
CN115080978A (zh) | 一种基于模糊测试的运行时漏洞检测方法及系统 | |
de Sousa | Preventing atomicity violations with contracts | |
Imbugwa et al. | A case study comparing static analysis tools for evaluating SwiftUI projects | |
Fioraldi | Program state abstraction for feedback-driven fuzz testing using likely invariants | |
Zhang et al. | A partial-lifting-based compiling concolic execution approach | |
Nakagawa et al. | How compact will my system be? A fully-automated way to calculate Loc reduced by clone refactoring |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |