CN113656280A - 基于符号执行的漏洞利用点查找方法及装置 - Google Patents
基于符号执行的漏洞利用点查找方法及装置 Download PDFInfo
- Publication number
- CN113656280A CN113656280A CN202110777874.8A CN202110777874A CN113656280A CN 113656280 A CN113656280 A CN 113656280A CN 202110777874 A CN202110777874 A CN 202110777874A CN 113656280 A CN113656280 A CN 113656280A
- Authority
- CN
- China
- Prior art keywords
- branch
- execution
- variable
- target program
- determining
- 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
- 238000000034 method Methods 0.000 title claims abstract description 76
- 230000008569 process Effects 0.000 claims abstract description 24
- 230000006870 function Effects 0.000 claims description 42
- 238000012360 testing method Methods 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 11
- 230000003068 static effect Effects 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- 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
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于符号执行的漏洞利用点查找方法及装置,方法包括:基于符号执行循环执行目标程序中分支条件为具体值的第一分支;确定满足预设条件,并基于所述符号执行循环执行所述目标程序中包括间接影响变量的第二分支;根据所述符号执行过程中的敏感函数的长度参数,确定所述目标程序中的漏洞利用点。所述装置用于执行上述方法。本发明使得符号执行在分支条件为具体值时,仍有探索两个分支的能力,能够在扩充了符号执行的探索路径的基础上,根据符号执行过程中遇到的敏感函数的长度参数实现对目标程序如二进制程序的漏洞利用点查找。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于符号执行的漏洞利用点查找方法及装置。
背景技术
符号执行是一种重要的形式化方法和软件分析技术。通过使用符号执行,将程序中变量的值表示为符号值和常量组成的计算表达式,并随着程序后续代码对变量的修改将输出表示为输入符号值的函数。在遇到分支时,将分支条件加入路径约束,并最终约束求解,从而得到一条执行路径对应的一个输入。但是,符号执行的路径约束必须包含符号时才能进入两个分支,当其为具体值时,路径约束被确定,只能进入对应的一个分支。此外,单纯符号执行难以找到程序中的漏洞点。
由于符号执行遇到分支时,如果分支条件为具体值,就不会对两个分支都进行探索,而是只探索具体值对应执行的分支。同时,单纯符号执行难以在执行中查找程序中的漏洞点。
发明内容
本发明提供的基于符号执行的漏洞利用点查找方法,用于克服现有技术中存在的上述问题,使得符号执行在分支条件为具体值时,仍有探索两个分支的能力,能够在扩充了符号执行的探索路径的基础上,根据符号执行过程中遇到的敏感函数的长度参数实现对目标程序如二进制程序的漏洞利用点查找。
本发明提供一种基于符号执行的漏洞利用点查找方法,包括:
基于符号执行循环执行目标程序中分支条件为具体值的第一分支;
确定满足预设条件,并基于所述符号执行循环执行所述目标程序中包括间接影响变量的第二分支;
根据所述符号执行过程中的敏感函数的长度参数,确定所述目标程序中的漏洞利用点;
其中,所述预设条件包括:
所述间接影响变量的赋值指令的次数达到预设循环次数;或
被赋值后的间接影响变量使得所述第二分支的分支条件为具体值。
根据本发明提供的一种基于符号执行的漏洞利用点查找方法,所述间接影响变量通过如下方式确定:
根据所述目标程序中受输入间接影响的变量,确定所述间接影响变量。
根据本发明提供的一种基于符号执行的漏洞利用点查找方法,所述根据所述目标程序中受输入间接影响的变量,确定所述间接影响变量,包括:
基于污点分析,确定所述目标程序中受输入直接影响的变量为直接影响变量;
对所述目标程序进行静态分析,确定所述目标程序中循环部分的变量为所述直接影响变量的目标分支;
若所述目标分支下被赋值的变量为非立即数,则根据所述被赋值的变量确定所述间接影响变量。
根据本发明提供的一种基于符号执行的漏洞利用点查找方法,所述根据在所述符号执行过程中的敏感函数的长度参数,确定所述目标程序中的漏洞利用点,包括:
为所述长度参数添加约束并要求所述长度参数小于零,并进行约束求解,若求解成功,则确定所述长度参数发生溢出;
根据溢出的输入地址和目标程序的地址,确定所述漏洞利用点。
根据本发明提供的一种基于符号执行的漏洞利用点查找方法,所述敏感函数包括如下函数中的至少一个:
vsnprintf、snprintf、memcpy、memncpy、memmove、strncpy、strndup、strndupa和malloc。
根据本发明提供的一种基于符号执行的漏洞利用点查找方法,还包括:
基于模糊测试判断所述敏感函数的长度参数是否超过目标大小,以确定所述漏洞利用点。
本发明还提供一种基于符号执行的漏洞利用点查找装置,包括:第一执行模块、第二执行模块和第一查找模块;
所述第一执行模块,用于基于符号执行循环执行目标程序中分支条件为具体值的第一分支;
所述第二执行模块,用于确定满足预设条件,并基于所述符号执行循环执行所述目标程序中包括间接影响变量的第二分支;
所述第一查找模块,用于根据所述符号执行过程中的敏感函数的长度参数,确定所述目标程序中的漏洞利用点;
其中,所述预设条件包括:
所述间接影响变量的赋值指令的次数达到预设循环次数;或
被赋值后的间接影响变量使得所述第二分支的分支条件为具体值。
根据本发明提供的一种基于符号执行的漏洞利用点查找装置,还包括:
第二查找模块,用于基于模糊测试判断所述敏感函数的长度参数是否超过目标大小,以确定所述漏洞利用点。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述基于符号执行的漏洞利用点查找方法的步骤。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述基于符号执行的漏洞利用点查找方法的步骤。
本发明提供的基于符号执行的漏洞利用点查找方法及装置,使得符号执行在分支条件为具体值时,仍有探索两个分支的能力,能够在扩充了符号执行的探索路径的基础上,根据符号执行过程中遇到的敏感函数的长度参数实现对目标程序如二进制程序的漏洞利用点查找。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的基于符号执行的漏洞利用点查找方法的流程示意图之一;
图2是本发明提供的基于符号执行的漏洞利用点查找方法的流程示意图之二;
图3是本发明提供的基于符号执行的漏洞利用点查找装置的结构示意图;
图4是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供的基于符号执行的漏洞利用点查找方法,可以针对二进制程序,以尽可能更多得探索程序路径,并对程序中的漏洞可利用点进行查找。首先,本发明通过静态分析与污点分析获取程序中受输入间接影响的变量,变量被赋值时的指令必须在循环中,即可以被多次赋值。接着,在符号执行过程中,当发现分支的条件包含此前记录的变量时,回溯到该变量赋值的循环处,并进行符号执行以尝试使其可以满足分支条件为真与假的两种情况,从而使得后续执行时能进入两条分支。具体实现如下:
图1是本发明提供的基于符号执行的漏洞利用点查找方法的流程示意图之一,如图1所示,方法包括:
S1、基于符号执行循环执行目标程序中分支条件为具体值的第一分支;
S2、确定满足预设条件,并基于符号执行循环执行目标程序中包括间接影响变量的第二分支;
S3、根据符号执行过程中的敏感函数的长度参数,确定目标程序中的漏洞利用点;
其中,预设条件包括:
间接影响变量的赋值指令的次数达到预设循环次数;或
被赋值后的间接影响变量使得第二分支的分支条件为具体值。
需要说明的是,上述方法的执行主体可以是电子设备、电子设备中的部件、集成电路、或芯片。该电子设备可以是移动电子设备,也可以为非移动电子设备。示例性的,移动电子设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载电子设备、可穿戴设备、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本或者个人数字助理(personal digital assistant,PDA)等,非移动电子设备可以为服务器、网络附属存储器(Network Attached Storage,NAS)、个人计算机(personal computer,PC)、电视机(television,TV)、柜员机或者自助机等,本发明不作具体限定。
可选地,本发明提供的基于符号执行的漏洞利用点查找方法可适用于对二进制程序的漏洞利用点的查找,例如针对Linux系统下的ELF二进制程序的漏洞利用点的查找。
在对目标程序进行漏洞利用点查找时,当遇到分支(第一分支和第二分支)时,首先判断分支是否满足具体值分支条件判断,即其中一个分钟的分支条件为具体值,另外一个分支的分支条件为包括间接影响变量。
假设,第一分支满足分支条件为具体值,第二分支满足分支条件包括间接影响变量,则基于符号执行循环执行目标程序中的第一分支,并在确定第二分支中的间接影响变量的赋值指令的次数达到预设循环次数,或第二分支中被赋值后的间接影响变量使得第二分支的分支条件为具体值后,同样基于符号执行循环执行满足上述条件的第二分支。
此外,由于可能循环多次之后,间接影响变量的取值仍然无法使得第二分支的分支条件为具体值,需要设置循环次数以避免执行次数过多。例如循环100次后终止该分支的探索。当某次间接影响变量被赋值后使得第二分支的分支条件为具体值时,退出循环并执行到分支处,此时程序将进入另一条分支,从而增加了探索路径。
根据在符号执行过程中遇到的敏感函数,通过判断该敏感函数的长度参数,判断是否存储缓存区溢出,以找到目标程序中的漏洞利用点。
需要说明的是,符号执行采用的符号执行引擎可以具体为angr。
本发明提供的基于符号执行的漏洞利用点查找方法,使得符号执行在分支条件为具体值时,仍有探索两个分支的能力,能够在扩充了符号执行的探索路径的基础上,根据符号执行过程中遇到的敏感函数的长度参数实现对目标程序如二进制程序的漏洞利用点查找。
进一步地,在一个实施例中,步骤S2中的间接影响变量通过如下方式确定:
S21、根据目标程序中受输入间接影响的变量,确定间接影响变量。
可选地,一般来说,二进制程序输入所能够影响变量的影响可以总结为3种:直接影响变量、间接影响定值变量以及间接影响不定值变量。
直接影响变量是由输入赋值或输入经过变换之后赋值,这种变量在符号执行时是符号值,当这种变量作为分支条件中的一部分时,可以对分支条件的真假两种情况进行约束求解,并后续探索两个分支。
间接影响定值变量根据输入可能有限定的2个或多个取值,如判断输入中某处是否为某个Magic字段,包含则将结果变量设为1,不包含设为0。间接影响定值变量一般在程序中被赋值时都是用立即数赋值。间接影响定值变量由于取值有限,且赋值前一般有输入的比较,符号执行比较容易探索完其全部取值。
间接影响不定值变量的值与输入有关,但不包含输入本身,且取值范围较大。典型例子如统计输入中某字符数量的count计数变量。
需要说明的是,本发明提供的基于符号执行的漏洞利用点查找方式,就是通过对目标程序中的间接影响不定值变量进行统计,得到受输入间接影响的变量,即间接影响变量。
为方便说明,以下面的代码样例为例,其中input是输入直接影响变量,符号执行时input内是输入的符号值;type是输入间接影响变量,其根据输入前4字节可能取值0,1,2;count是输入间接影响不定值变量,值为输入中“1689”的个数。在符号执行中,每次执行根据循环中进入if的次数,count会等于该次数的具体值。而后续执行到count==2的判断时,由于其为具体值会直接决定进入分支或不进入分支,而无法同时探索两条分支。
代码如下:
本发明提供的基于符号执行的漏洞利用点查找方法,通过对受输入间接影响变量的统计,得到间接影响变量,为后续符号执行实现探索路径的扩充奠定了基础。
进一步地,在一个实施例中,步骤S21可以具体包括:
S211、基于污点分析,确定目标程序中受输入直接影响的变量为直接影响变量;
S212、对目标程序进行静态分析,确定目标程序中循环部分的变量为直接影响变量的目标分支;
S213、若目标分支下被赋值的变量为非立即数,则根据被赋值的变量确定间接影响变量。
可选地,通过污点分析,记录目标程序中被输入直接影响的变量(即其值是输入通过变换得到的,在符号执行中是符号值),并将其作为直接影响变量。
接着对目标程序进行静态分析,获取其中的循环部分,以及循环部分中的条件分支,当条件分支的变量带有污点标记时,其分支下被赋值的变量就是受输入间接影响的变量。其中需要过滤被赋值为具体数字的变量,因为这种变量随着循环次数增加也不会改变。记录了被赋值变量后,还需记录下该赋值指令所在循环的入口地址。
需要说明的是,对循环部分的识别可以转化为CFG(控制流图)中有向图循环识别的问题。将循环部分的变量为直接影响变量(带有污点标记)的条件分支作为目标分支,其中,目标分支下被赋值的变量就是受输入间接影响的变量。当该变量不是被赋值立即数时,可将其视为间接影响不定值变量,即间接影响变量。
在符号执行中,每当执行到步骤中记录的循环的入口地址时,就会为当前状态记录快照。当遇到分支时,分支条件中包含记录间接影响变量且分支条件为具体值时,将并行处理两个分支。对于分支条件为具体值的第一分支,让符号执行继续执行;对于另一条分支(即第二分支),读取该间接影响变量对应的赋值指令循环的入口地址的快照,将分支条件为具体值作为约束加入当前状态,并控制符号执行循环执行,直到间接影响变量被赋值后满足分支条件为具体值的状态约束条件,此时再执行到分支处时将进入另一条分支,从而增加了探索路径。
由于循环部分中包含分支时,在多次循环的情况下容易出现路径爆炸,因此在循环中不采用普通符号执行,而是选择符号执行。当遇到与间接影响不定值变量无关的分支(即第二分支)时,如果分支两边的路径约束都可满足,就随机选择一条分支执行下去,而不同时对两条分支进行探索。在循环时,如果不对路径进行选取,无法保证能够对间接影响不定值变量的修改,因此在遇到间接影响不定值变量赋值语句前的分支时,选择进入赋值语句所在的分支。
本发明提供的基于符号执行的漏洞利用点查找方法,通过污点分析与静态分析找到约束符号执行的间接影响变量,并通过执行变量赋值所在循环尝试使包含该变量的分支条件能满足另一分支的分支条件,从而扩充了符号执行的探索路径,增加了查找程序漏洞利用点的可能性。
进一步地,在一个实施例中,步骤S3可以具体包括:
S31、为长度参数添加约束并要求长度参数小于零,并进行约束求解,若求解成功,则确定长度参数发生溢出;
S32、根据溢出的输入地址和目标程序的地址,确定漏洞利用点。
可选地,在符号执行的过程中,每当遇到敏感函数(或不安全函数)时,判断其长度参数,如果长度参数为符号值,则增加约束计算该长度参数是否能小于0,如果可以则说明长度参数在计算的过程中发生了溢出,而负数在传递给这些函数时会视为无符号整数,最终导致复制大量字节,发生缓冲区溢出。当约束求解得到参数可以小于0时,将输出该调用指令地址(即目标程序的地址)以及触发溢出的输入地址,从而查找到漏洞利用点。
本发明提供的基于符号执行的漏洞利用点查找方法,在扩充了符号执行探索路径的基础上,通过对敏感函数的长度参数进行约束求解,当其能发生整数溢出时,输出该指令位置与造成溢出的输入作为查找到的一个漏洞可利用点,从而实现对目标程序的漏洞利用点查找。
进一步地,在一个实施例中,敏感函数可以具体包括如下函数中的至少一个:
vsnprintf、snprintf、memcpy、memncpy、memmove、strncpy、strndup、strndupa和malloc。
可选地,在符号执行中,每当遇到memcpy、malloc、strncpy等不敏感函数时,判断其长度参数,如果其长度参数小于零,则根据目标程序的地址和触发溢出的输入地址,查找到目标程序中的漏洞点。其中不安全函数列表以及对应的长度参数在基于System V AMD64调用约定的x86_64架构中的对应寄存器如表1所示。
表1
以图2为例对本发明提供的基于符号执行的漏洞利用点查找方法进行详细说明:
步骤1、输入间接影响变量统计;
对待查找的目标程序进行测试,通过污点分析,记录程序中被输入直接影响变量,接着对目标程序进行静态分析,以获取其中的循环部分,以及循环部分中的条件分支。其中循环的识别可以转化为CFG(控制流图)中有向图循环识别的问题。当循环中条件分支的变量为直接影响变量(带有污点标记)时,其分支下被赋值的变量就是受输入间接影响的变量。当该变量不是被赋值立即数时,可将其视为间接影响不定值变量。记录了间接影响不定值变量(即间接影响变量)后,还需记录下该赋值指令所在循环的入口地址。
步骤2、符号执行;
在符号执行中,每当执行到步骤1中记录的循环的入口地址时,就会为当前状态记录快照。当遇到分支时,分支条件中包含间接影响不定值变量且分支条件为具体值时,将并行处理两个分支。对于分支条件为具体值对应的分支,符号执行继续执行将会执行该分支;对于另一条分支,符号执行将无法探索其内路径。因此将读取该间接影响不定值变量所在赋值循环的循环入口快照,并在被赋值后的间接影响变量所在的分支满足具体值分支条件判断时(即,该分支的分支条件为具体值),基于符号执行循环执行该分支,然后对符号执行过程中的敏感函数的长度参数进行判断。
步骤3、输出漏洞可利用点,以定位漏洞。
如果敏感函数长度参数为符号值,则增加约束计算该参数作为有符号数是否能小于0,如果可以则说明长度参数在计算的过程中发生了溢出,而负数在传递给这些函数时会视为无符号整数,最终导致复制大量字节,发生缓冲区溢出。当约束求解得到参数可以小于0时,将输出该调用指令地址,以及触发溢出的输入地址,从而查找到漏洞利用点。
本发明提供的基于符号执行的漏洞利用点查找方法,通过所有可能发生缓冲区溢出的敏感函数的长度参数进行全面筛查,从而实现对所有可能存在的漏洞进行全面查找。
进一步地,在一个实施例中,本发明提供的基于符号执行的漏洞利用点查找方法,还可以具体包括:
S4、基于模糊测试判断所述敏感函数的长度参数是否超过目标大小,以确定漏洞利用点。
可选地,在符号执行过程中,除了敏感函数的长度溢出导致的漏洞以外,还有可能在数据复制时因长度超过目标大小而导致缓冲区溢出。对于这种情况,基于模糊测试一般比较容易发现这种漏洞,利用模糊测试判断上述敏感函数的长度参数是否超过目标大小,若超过,则确定缓冲区溢出,并根据溢出的输入地址和目标程序的地址,确定目标程序中的漏洞利用点。
由于模糊测试对于整数溢出的情况一般较难触发,因为整数溢出往往要求长度取值在一个较小的范围内,随机变异输入难以命中这个范围。
本发明提供的基于符号执行的漏洞利用点查找方法,能够基于模糊测试,查找目标程序的漏洞,能够基于一个模糊测试实例,测试多段目标程序,可复用性好。
下面对本发明提供的基于符号执行的漏洞利用点查找装置进行描述,下文描述的基于符号执行的漏洞利用点查找装置与上文描述的基于符号执行的漏洞利用点查找方法可相互对应参照。
图3是本发明提供的基于符号执行的漏洞利用点查找装置的结构示意图,如图3所示,包括:第一执行模块310、第二执行模块311和第一查找模块312;
第一执行模块310,用于基于符号执行循环执行目标程序中分支条件为具体值的第一分支;
第二执行模块311,用于确定满足预设条件,并基于符号执行循环执行目标程序中包括间接影响变量的第二分支;
第一查找模块312,用于根据符号执行过程中的敏感函数的长度参数,确定目标程序中的漏洞利用点;
其中,预设条件包括:
间接影响变量的赋值指令的次数达到预设循环次数;或
被赋值后的间接影响变量使得第二分支的分支条件为具体值。
本发明提供的基于符号执行的漏洞利用点查找装置,使得符号执行在分支条件为具体值时,仍有探索两个分支的能力,能够在扩充了符号执行的探索路径的基础上,根据符号执行过程中遇到的敏感函数的长度参数实现对目标程序如二进制程序的漏洞利用点查找。
进一步地,在一个实施例中,本发明提供的基于符号执行的漏洞利用点查找方法装置,还包括:
第二查找模块313,用于基于模糊测试判断敏感函数的长度参数是否超过目标大小,以确定漏洞利用点。
本发明提供的基于符号执行的漏洞利用点查找装置,能够基于模糊测试,查找目标程序的漏洞,能够基于一个模糊测试实例,测试多段目标程序,可复用性好。
图4是本发明提供的电子设备的结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(communication interface)411、存储器(memory)412和总线(bus)413,其中,处理器410,通信接口411,存储器412通过总线413完成相互间的通信。处理器410可以调用存储器412中的逻辑指令,以执行如下方法:
基于符号执行循环执行目标程序中分支条件为具体值的第一分支;
确定满足预设条件,并基于符号执行循环执行目标程序中包括间接影响变量的第二分支;
根据符号执行过程中的敏感函数的长度参数,确定目标程序中的漏洞利用点;
其中,预设条件包括:
间接影响变量的赋值指令的次数达到预设循环次数;或
被赋值后的间接影响变量使得第二分支的分支条件为具体值。
此外,上述的存储器中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
进一步地,本发明公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的基于符号执行的漏洞利用点查找方法,例如包括:
基于符号执行循环执行目标程序中分支条件为具体值的第一分支;
确定满足预设条件,并基于符号执行循环执行目标程序中包括间接影响变量的第二分支;
根据符号执行过程中的敏感函数的长度参数,确定目标程序中的漏洞利用点;
其中,预设条件包括:
间接影响变量的赋值指令的次数达到预设循环次数;或
被赋值后的间接影响变量使得第二分支的分支条件为具体值。
另一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的基于符号执行的漏洞利用点查找方法,例如包括:
基于符号执行循环执行目标程序中分支条件为具体值的第一分支;
确定满足预设条件,并基于符号执行循环执行目标程序中包括间接影响变量的第二分支;
根据符号执行过程中的敏感函数的长度参数,确定目标程序中的漏洞利用点;
其中,预设条件包括:
间接影响变量的赋值指令的次数达到预设循环次数;或
被赋值后的间接影响变量使得第二分支的分支条件为具体值。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种基于符号执行的漏洞利用点查找方法,其特征在于,包括:
基于符号执行循环执行目标程序中分支条件为具体值的第一分支;
确定满足预设条件,并基于所述符号执行循环执行所述目标程序中包括间接影响变量的第二分支;
根据所述符号执行过程中的敏感函数的长度参数,确定所述目标程序中的漏洞利用点;
其中,所述预设条件包括:
所述间接影响变量的赋值指令的次数达到预设循环次数;或
被赋值后的间接影响变量使得所述第二分支的分支条件为具体值。
2.根据权利要求1所述的基于符号执行的漏洞利用点查找方法,其特征在于,所述间接影响变量通过如下方式确定:
根据所述目标程序中受输入间接影响的变量,确定所述间接影响变量。
3.根据权利要求2所述的基于符号执行的漏洞利用点查找方法,其特征在于,所述根据所述目标程序中受输入间接影响的变量,确定所述间接影响变量,包括:
基于污点分析,确定所述目标程序中受输入直接影响的变量为直接影响变量;
对所述目标程序进行静态分析,确定所述目标程序中循环部分的变量为所述直接影响变量的目标分支;
若所述目标分支下被赋值的变量为非立即数,则根据所述被赋值的变量确定所述间接影响变量。
4.根据权利要求1所述的基于符号执行的漏洞利用点查找方法,所述根据在所述符号执行过程中的敏感函数的长度参数,确定所述目标程序中的漏洞利用点,包括:
为所述长度参数添加约束并要求所述长度参数小于零,并进行约束求解,若求解成功,则确定所述长度参数发生溢出;
根据溢出的输入地址和目标程序的地址,确定所述漏洞利用点。
5.根据权利要求4所述的基于符号执行的漏洞利用点查找方法,所述敏感函数包括如下函数中的至少一个:
vsnprintf、snprintf、memcpy、memncpy、memmove、strncpy、strndup、strndupa和malloc。
6.根据权利要求1-5任一项所述的基于符号执行的漏洞利用点查找方法,其特征在于,还包括:
基于模糊测试判断所述敏感函数的长度参数是否超过目标大小,以确定所述漏洞利用点。
7.一种基于符号执行的漏洞利用点查找装置,其特征在于,包括:第一执行模块、第二执行模块和第一查找模块;
所述第一执行模块,用于基于符号执行循环执行目标程序中分支条件为具体值的第一分支;
所述第二执行模块,用于确定满足预设条件,并基于所述符号执行循环执行所述目标程序中包括间接影响变量的第二分支;
所述第一查找模块,用于根据所述符号执行过程中的敏感函数的长度参数,确定所述目标程序中的漏洞利用点;
其中,所述预设条件包括:
所述间接影响变量的赋值指令的次数达到预设循环次数;或
被赋值后的间接影响变量使得所述第二分支的分支条件为具体值。
8.根据权利要求7所述的基于符号执行的漏洞利用点查找装置,其特征在于,还包括:
第二查找模块,用于基于模糊测试判断所述敏感函数的长度参数是否超过目标大小,以确定所述漏洞利用点。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6任一项所述基于符号执行的漏洞利用点查找方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述基于符号执行的漏洞利用点查找方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110777874.8A CN113656280B (zh) | 2021-07-09 | 2021-07-09 | 基于符号执行的漏洞利用点查找方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110777874.8A CN113656280B (zh) | 2021-07-09 | 2021-07-09 | 基于符号执行的漏洞利用点查找方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113656280A true CN113656280A (zh) | 2021-11-16 |
CN113656280B CN113656280B (zh) | 2024-04-05 |
Family
ID=78489297
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110777874.8A Active CN113656280B (zh) | 2021-07-09 | 2021-07-09 | 基于符号执行的漏洞利用点查找方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113656280B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2479673A2 (en) * | 2011-01-20 | 2012-07-25 | Fujitsu Limited | Software architecture for validating C++ programs using symbolic execution |
CN103389939A (zh) * | 2013-07-03 | 2013-11-13 | 清华大学 | 一种针对堆可控分配漏洞的检测方法及系统 |
US9454659B1 (en) * | 2014-08-15 | 2016-09-27 | Securisea, Inc. | Software vulnerabilities detection system and methods |
CN108021507A (zh) * | 2017-12-25 | 2018-05-11 | 首都师范大学 | 符号执行的并行路径搜索方法及装置 |
CN108959936A (zh) * | 2018-06-28 | 2018-12-07 | 中国人民解放军国防科技大学 | 一种基于路径分析的缓冲区溢出漏洞自动利用方法 |
US20190220387A1 (en) * | 2018-01-15 | 2019-07-18 | Fujitsu Limited | Unexplored branch search in hybrid fuzz testing of software binaries |
CN110399730A (zh) * | 2019-07-24 | 2019-11-01 | 上海交通大学 | 智能合约漏洞的检查方法、系统及介质 |
CN112631901A (zh) * | 2020-12-16 | 2021-04-09 | 中国科学院信息工程研究所 | 基于妨碍特征的模糊测试工具测试方法及电子装置 |
KR20210045122A (ko) * | 2019-10-16 | 2021-04-26 | 연세대학교 산학협력단 | 기호 실행을 사용하는 소프트웨어 테스트 입력 생성 장치 및 방법 |
-
2021
- 2021-07-09 CN CN202110777874.8A patent/CN113656280B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2479673A2 (en) * | 2011-01-20 | 2012-07-25 | Fujitsu Limited | Software architecture for validating C++ programs using symbolic execution |
CN103389939A (zh) * | 2013-07-03 | 2013-11-13 | 清华大学 | 一种针对堆可控分配漏洞的检测方法及系统 |
US9454659B1 (en) * | 2014-08-15 | 2016-09-27 | Securisea, Inc. | Software vulnerabilities detection system and methods |
CN108021507A (zh) * | 2017-12-25 | 2018-05-11 | 首都师范大学 | 符号执行的并行路径搜索方法及装置 |
US20190220387A1 (en) * | 2018-01-15 | 2019-07-18 | Fujitsu Limited | Unexplored branch search in hybrid fuzz testing of software binaries |
CN108959936A (zh) * | 2018-06-28 | 2018-12-07 | 中国人民解放军国防科技大学 | 一种基于路径分析的缓冲区溢出漏洞自动利用方法 |
CN110399730A (zh) * | 2019-07-24 | 2019-11-01 | 上海交通大学 | 智能合约漏洞的检查方法、系统及介质 |
KR20210045122A (ko) * | 2019-10-16 | 2021-04-26 | 연세대학교 산학협력단 | 기호 실행을 사용하는 소프트웨어 테스트 입력 생성 장치 및 방법 |
CN112631901A (zh) * | 2020-12-16 | 2021-04-09 | 中国科学院信息工程研究所 | 基于妨碍特征的模糊测试工具测试方法及电子装置 |
Non-Patent Citations (3)
Title |
---|
YUAN, MING ET AL.: "Hijacking Your Routers via Control-Hijacking URLs in Embedded Devices with Web Interfaces", 19TH INTERNATIONAL CONFERENCE ON INFORMATION AND COMMUNICATIONS SECURITY (ICICS), 15 March 2019 (2019-03-15), pages 363 - 373 * |
苏云飞: "基于程序分析与测试的二进制软件漏洞挖掘技术研究", 《中国博士学位论文全文数据库 信息科技辑》, no. 02, 15 February 2019 (2019-02-15), pages 138 - 19 * |
谢肖飞 等: "基于符号执行与模糊测试的混合测试方法", 《软件学报》, vol. 30, no. 10, 31 October 2019 (2019-10-31), pages 3071 - 3089 * |
Also Published As
Publication number | Publication date |
---|---|
CN113656280B (zh) | 2024-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3506139B1 (en) | Malware detection in event loops | |
US10565379B2 (en) | System, apparatus and method for instruction level behavioral analysis without binary instrumentation | |
US11363058B2 (en) | Detecting execution of modified executable code | |
KR20150059564A (ko) | 전자 장치의 무결성 검증을 위한 방법, 저장 매체 및 전자 장치 | |
CN110325994B (zh) | 增强软件应用的控制流完整性的设备和方法 | |
CN112395612A (zh) | 一种恶意文件检测方法、装置、电子设备及存储介质 | |
EP3531329A1 (en) | Anomaly-based-malicious-behavior detection | |
WO2018063756A1 (en) | System, apparatus and method for performing on-demand binary analysis for detecting code reuse attacks | |
US11126721B2 (en) | Methods, systems and apparatus to detect polymorphic malware | |
CN117579395B (zh) | 一种应用人工智能进行网络安全漏洞扫描的方法及系统 | |
US10867030B2 (en) | Methods and devices for executing trusted applications on processor with support for protected execution environments | |
US11361077B2 (en) | Kernel-based proactive engine for malware detection | |
CN112395603B (zh) | 基于指令执行序列特征的漏洞攻击识别方法、装置及计算机设备 | |
US20240126874A1 (en) | Security processing device, method and electronic device for handling attacks | |
CN113656280A (zh) | 基于符号执行的漏洞利用点查找方法及装置 | |
US20230273998A1 (en) | System for detecting malwares in a resources constrained device | |
CN114462041A (zh) | 基于双体系架构的动态可信访问控制方法及系统 | |
Deguchi et al. | Low Resource and Power Consumption and Improved Classification Accuracy for IoT Implementation of a Malware Detection Mechanism using Processor Information | |
CN114070659B (zh) | 一种设备锁定方法、装置及终端设备 | |
KR102174393B1 (ko) | 악성 코드 탐지 장치 | |
CN112437093B (zh) | 安全状态的确定方法、装置及设备 | |
US20230161877A1 (en) | Efficient integrity monitoring of processing operations with multiple memory arrays | |
CN109190383B (zh) | 访问指令的处理方法、装置及设备 | |
CN117708817A (zh) | 内存马检测方法、装置、电子设备及存储介质 | |
CN117786692A (zh) | 一种恶意程序的检测方法、设备及储存介质 |
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 |