CN114579976B - 基于状态转换的堆内存破坏漏洞自动验证方法和系统 - Google Patents
基于状态转换的堆内存破坏漏洞自动验证方法和系统 Download PDFInfo
- Publication number
- CN114579976B CN114579976B CN202210180253.6A CN202210180253A CN114579976B CN 114579976 B CN114579976 B CN 114579976B CN 202210180253 A CN202210180253 A CN 202210180253A CN 114579976 B CN114579976 B CN 114579976B
- Authority
- CN
- China
- Prior art keywords
- heap
- memory
- path
- constraint
- test program
- 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.)
- Active
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
- 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
-
- 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 Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提出基于状态转换的堆内存破坏漏洞自动验证方法和系统。利用CFG图分析技术和程序的静态分析技术实现堆操作相关静态路径抽取,在得到堆操作相关路径后,以符号执行的方式获取与堆操作相关的路径约束,并添加对所述路径约束参数的约束;依照不同的类型的漏洞及对应的内存状态的转换方式,对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换,得到能够满足漏洞验证的约束条件;在能够满足漏洞验证的约束条件中剔除原有的输入约束,得到最终的目标约束,利用约束求解器,实现漏洞验证代码自动生成。本发明的方案能够解决手工堆内存破坏漏洞验证效率低下、专业知识要求高的问题。
Description
技术领域
本发明属于互联网领域,尤其涉及基于状态转换的堆内存破坏漏洞自动验证方法和系统。
背景技术
随着信息系统安全的不断提高,程序执行流直接被劫持的漏洞所占比例已越来越少,更多的漏洞出现在堆空间上。为了判断堆内存破坏漏洞的危害程度,方便安全人员对其进行针对性修补,漏洞验证方法在这其中具有十分重要的作用。实现堆内存破坏漏洞的自动验证,能够极大减少漏洞安全修补当中手工完成的工作量,极大提高安全修补能力。同时,为了验证漏洞而产生的漏洞验证代码,也为其进行漏洞防御提供了极大支撑。
当前,漏洞自动验证主要针对两类漏洞,第一种是控制流劫持漏洞,这类漏洞常常能够导致程序的执行控制流被程序外部输入影响,使得程序的控制流能够直接被劫持到任意地址,常见的栈溢出、虚表被覆盖等漏洞都属于这类漏洞;另一种是堆管理数据篡改漏洞,这类漏洞常常是由于程序代码问题导致堆空间出现释放后重用(Use After Free简称UAF)、堆溢出等漏洞,从而使得堆管理结构中的数据被篡改,最终导致程序控制流间接被劫持。对于上述两类漏洞,漏洞自动验证方法主要分别对应两类方法:直接劫持控制流的漏洞自动验证方法和篡改堆管理数据的漏洞自动验证方法。
在篡改堆管理数据的漏洞自动验证方法中,为了判断堆漏洞会对后续执行造成何种影响,He等人提出了针对堆漏洞的可利用性评估办法HCSIFTER,该方法能够分析内存破坏点是否潜在漏洞验证的条件,同时也能够判断漏洞验证的难度,虽然其还不具备内存布局的能力,但是也为堆管理数据篡改漏洞的自动验证做出了贡献。2017年Repel等人针对堆内存破坏漏洞漏洞,构建了一个可利用状态堆操作序列数据库,在堆操作模糊测试过程中挑选出与堆操作序列数据库中匹配的测试用例,该方式虽然在一定程度上提高了堆漏洞验证效率,但并未进行堆内存空间的布局,其效果受到数据库规模限制。2018年,Heelan等人通过对PHP堆管理分析,提出了构造输入序列,对堆内存空间进行布局的方法,尝试了对于堆内存空间的布局。
2019年Wang等人提出了一种堆内存破坏漏洞内存空间自动布局方法Maze。该方法通过静态和动态方式,对程序内存操作路径进行分析,并使用Dig&Fill技术将这些内存路径进行排布,实现堆内存空间的自动布局。同年,Heelan等人尝试实现了第一个用于解释器堆溢出漏洞的自动化漏洞验证生成方案Gollum,该方法使用纯灰盒的方式实现,不需要符号执行或者白盒分析,而是进行轻量级插桩和模糊测试,此外,该方法还提供了堆内存空间自动布局方案,实现漏洞内存状态向堆漏洞可利用内存状态的转变。最后,文献针对了PHP和Python的10个不同漏洞进行了实验,其中有5个漏洞没有公开的漏洞利用代码,Gollum都能顺利生成可用的漏洞验证代码。2020年,Zhao等人提出了HAEPG方法,该方法在一定程度上实现了对于堆内存空间的自动布局,并能够生成漏洞验证代码。该方法通过分析模糊测试产生的PoC样本,并与静态分析相结合,在其构建的模拟程序上尝试进行模拟堆分配和释放操作,最终得到可利用状态的堆内存空间布局。
发明内容
为解决上述技术问题,本发明提出一种基于状态转换的堆内存破坏漏洞自动验证的技术方案,采用探测反馈机制与公共文件属性组合关系进行突变规则约束,从渗透测试角度进行模糊测试的自动化文件上传漏洞挖掘方法以解决上述技术问题。
本发明第一方面公开了一种基于状态转换的堆内存破坏漏洞自动验证方法;所述方法包括:
步骤S1、利用CFG图分析技术和程序的静态分析技术实现堆操作相关静态路径抽取,在得到堆操作相关路径后,以符号执行的方式从所述堆操作相关路径中获取与堆操作相关的路径约束,并添加对所述路径约束的参数的约束,实现堆操作相关路径的自动抽取;
步骤S2、依照不同的类型的漏洞及对应的内存状态的转换方式,对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换,得到能够满足漏洞验证的约束条件;
步骤S3、在所述能够满足漏洞验证的约束条件中剔除原有的输入约束,得到最终的目标约束,利用约束求解器,实现漏洞验证代码自动生成。
根据本发明第一方面的方法,在所述步骤S1中,所述利用CFG图分析技术和程序的静态分析技术实现堆操作相关路径抽取的具体方法包括:
生成目标测试程序的CFG图,定位目标测试程序的功能调度结构,并获取目标测试程序的函数信息;
在定位到所述目标测试程序的函数信息后,从目标测试程序的函数的PLT表出发,求解从所述目标测试程序的功能调度结构到所述目标测试程序的函数之间的所有静态路径。
根据本发明第一方面的方法,在所述步骤S1中,所述目标测试程序的函数包括:
所述目标测试程序的函数的PLT表中的堆内存分配和释放相关函数。
根据本发明第一方面的方法,在所述步骤S1中,所述利用CFG图分析技术和程序的静态分析技术实现堆操作相关路径抽取的具体方法还包括:
在定位修改堆内存的执行路径时,需要剔除与堆内存无关的内存修改路径,这就需要分析内存修改函数的参数是否与目标堆地址相关,定位与堆内存内容修改相关的函数和执行路径。
根据本发明第一方面的方法,在所述步骤S1中,所述定位与堆内存内容修改相关的函数和执行路径的具体方法包括:
从中间语言层面分析所述目标测试程序的数据流,得到堆内存相关数据的修改路径,从而定位与堆内存内容修改相关的函数和执行路径。
根据本发明第一方面的方法,在所述步骤S2中,所述对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换的具体方法包括:
需要对堆内存的堆块的使用状态进行切换时,将所述堆块申请和释放的路径拼接到原本的路径上。
根据本发明第一方面的方法,在所述步骤S2中,所述对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换的具体方法还包括:
当需要对堆内存中符号内容进行更改时,重新构建所述堆内存中符号的约束。
本发明第二方面公开了一种基于状态转换的堆内存破坏漏洞自动验证系统;所述系统包括:
第一处理模块,被配置为,利用CFG图分析技术和程序的静态分析技术实现堆操作相关静态路径抽取,在得到堆操作相关路径后,以符号执行的方式从所述堆操作相关路径中获取与堆操作相关的路径约束,并添加对所述路径约束的参数的约束,实现堆操作相关路径的自动抽取;
第二处理模块,被配置为,依照堆空间内存状态转换模型,对测试程序的堆空间内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换,得到能够满足漏洞验证的约束条件;
第三处理模块,被配置为,在所述能够满足漏洞验证的约束条件中剔除原有的输入约束,得到最终的目标约束,利用约束求解器,实现漏洞验证代码自动生成。
根据本发明第二方面的系统,所述第一处理模块具体被配置为,
所述利用CFG图分析技术和程序的静态分析技术实现堆操作相关路径抽取的具体方法包括:
生成目标测试程序的CFG图,定位目标测试程序的功能调度结构,并获取目标测试程序的函数信息;
在定位到所述目标测试程序的函数信息后,从目标测试程序的函数的PLT表出发,求解从所述目标测试程序的功能调度结构到所述目标测试程序的函数之间的所有静态路径。
所述目标测试程序的函数包括:
所述目标测试程序的函数的PLT表中的堆内存分配和释放相关函数。
所述利用CFG图分析技术和程序的静态分析技术实现堆操作相关路径抽取的具体方法还包括:
在定位修改堆内存的执行路径时,需要剔除与堆内存无关的内存修改路径,这就需要分析内存修改函数的参数是否与目标堆地址相关,定位与堆内存内容修改相关的函数和执行路径。
所述定位与堆内存内容修改相关的函数和执行路径的具体方法包括:
从中间语言层面分析所述目标测试程序的数据流,得到堆内存相关数据的修改路径,从而定位与堆内存内容修改相关的函数和执行路径。
根据本发明第二方面的系统,所述第二处理模块具体被配置为,
所述对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换的具体方法包括:
需要对堆内存的堆块的使用状态进行切换时,将所述堆块申请和释放的路径拼接到原本的路径上。
所述对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换的具体方法还包括:
当需要对堆内存中符号内容进行更改时,重新构建所述堆内存中符号的约束。
本发明第三方面公开了一种电子设备。电子设备包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时,实现本公开第一方面中任一项的一种基于状态转换的堆内存破坏漏洞自动验证方法中的步骤。
本发明第四方面公开了一种计算机可读存储介质。计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时,实现本公开第一方面中任一项的一种基于状态转换的堆内存破坏漏洞自动验证方法中的步骤。
可见,本发明提出的方案,(1)利用所述方法可以实现自动化对程序堆内存状态进行静态分析,实现对程序堆内存操作执行路径进行抽取,提高了程序分析效率;(2)利用所述方法可以实现自动化对Linux系统中Glibc堆管理下的堆内存破坏漏洞进行漏洞验证,并生成漏洞验证代码,有助于后续对其手工进行研究和漏洞修补。
综上,本发明提出的方案能够解决手工堆内存破坏漏洞验证效率低下、专业知识要求高的问题。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为根据本发明实施例的一种基于状态转换的堆内存破坏漏洞自动验证方法的流程图;
图2为根据本发明实施例的程序功能调度结构图;
图3为根据本发明实施例的求解从程序的功能调度结构到所述目标测试程序的函数之间的所有静态路径示意图;
图4为根据本发明实施例的从中间语言层面分析所述目标测试程序的数据流,得到堆内存相关数据的修改路径示意图;
图5为根据本发明实施例的将常见的Glibc堆漏洞验证方法以及堆内存空间布局方法中的内存状态转换刻画成模型示意图;
图6为根据本发明实施例的在从堆重叠向Free链污染的过程中转换时,需要将重叠的堆块释放,造成Free链上存在同一块内存区域,达到Free链被污染的状态的示意图;
图7为根据本发明实施例的在从Fd可控到Tcache poisoning状态转换的过程中,需要构建Fd为free_hook的约束条件,并利用约束求解进行状态转换示意图;
图8为根据本发明实施例的一种基于状态转换的堆内存破坏漏洞自动验证系统的结构图;
图9为根据本发明实施例的一种电子设备的结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例只是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明第一方面公开了一种基于状态转换的堆内存破坏漏洞自动验证方法。图1为根据本发明实施例的一种基于状态转换的堆内存破坏漏洞自动验证方法的流程图,如图1所示,所述方法包括:
步骤S1、利用CFG图分析技术和程序的静态分析技术实现堆操作相关静态路径抽取,在得到堆操作相关路径后,以符号执行的方式从所述堆操作相关路径中获取与堆操作相关的路径约束,并添加对所述路径约束的参数的约束,实现堆操作相关路径的自动抽取;
步骤S2、依照不同的类型的漏洞及对应的内存状态的转换方式,对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换,得到能够满足漏洞验证的约束条件;
步骤S3、在所述能够满足漏洞验证的约束条件中剔除原有的输入约束,得到最终的目标约束,利用约束求解器,实现漏洞验证代码自动生成。
在步骤S1,利用CFG图分析技术和程序的静态分析技术实现堆操作相关静态路径抽取,在得到堆操作相关路径后,利用符号执行获取堆操作相关的路径约束,并添加对其参数的约束,实现堆操作相关路径的自动抽取。
在一些实施例中,在所述步骤S1中,所述利用CFG图分析技术和程序的静态分析技术实现堆操作相关路径抽取的具体方法包括:
生成目标测试程序的CFG图,定位目标测试程序的功能调度结构,并获取目标测试程序的函数信息;
在定位到所述目标测试程序的函数信息后,从目标测试程序的函数的PLT表出发,求解从所述目标测试程序的功能调度结构到所述目标测试程序的函数之间的所有静态路径。
在一些实施例中,在所述步骤S1中,所述目标测试程序的函数包括:
所述目标测试程序的函数的PLT表中的堆内存分配和释放相关函数。
具体地,程序功能调度结构普遍存在于软件程序当中,如图2所示。如JavaScript引擎、网络服务类程序等。功能调度结构一般存在一个循环当中,其根据用户的输入选择功能单元,各功能单元执行完毕后,若未发生错误则返回到功能调度结构,且各个功能单元之间独立性较高。因此分布在不同功能的堆操作相关路径比较独立,且便于后续的路径拼接组合。
生成目标测试程序的CFG图,目标测试程序的功能调度结构,并获取目标测试程序的函数信息。由于该步骤主要是抽取堆操作相关路径,因此,需要重点关注程序PLT表中的堆内存分配(malloc、calloc等)和释放(free等)相关函数。在定位到所述目标测试程序的函数信息后,从函数PLT表出发,求解从程序的功能调度结构到所述目标测试程序的函数之间的所有静态路径。若图3所示,获取了从malloc的PLT表地址到程序功能调度结构的两条路径。
在一些实施例中,在所述步骤S1中,所述利用CFG图分析技术和程序的静态分析技术实现堆操作相关路径抽取的具体方法还包括:
在定位修改堆内存的执行路径时,需要剔除与堆内存无关的内存修改路径,这就需要分析内存修改函数的参数是否与目标堆地址相关,定位与堆内存内容修改相关的函数和执行路径。
在一些实施例中,在所述步骤S1中,所述定位与堆内存内容修改相关的函数和执行路径的具体方法包括:
从中间语言层面分析所述目标测试程序的数据流,得到堆内存相关数据的修改路径,从而定位与堆内存内容修改相关的函数和执行路径。
具体地,应用程序中存在着大量与修改内存内容相关的函数和执行路径,在定位修改堆内存的执行路径时,需要剔除与堆内存无关的内存修改路径,这就需要分析内存修改函数的参数是否与目标堆地址相关,因此,需要对程序的数据流进行静态分析。本申请将程序的汇编指令转换VEX中间语言,从中间语言层面分析程序的数据流,得到堆相关数据的传播路径,如图4所示,从而定位与堆内存内容修改相关的函数和执行路径.
在步骤S2,依照不同的类型的漏洞及对应的内存状态的转换方式,对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换,得到能够满足漏洞验证的约束条件。
在一些实施例中,在所述步骤S2中,所述对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换的具体方法包括:
需要对堆内存的堆块的使用状态进行切换时,将所述堆块申请和释放的路径拼接到原本的路径上。
在一些实施例中,在所述步骤S2中,所述对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换的具体方法还包括:
当需要对堆内存中符号内容进行更改时,重新构建所述堆内存中符号的约束。
具体地,将常见的Glibc堆漏洞验证方法以及堆内存空间布局方法中的内存状态转换刻画成模型,其部分内容如图5所示。
UAF漏洞和Heap Overflow漏洞使得Free之后的堆块内容能够被用户所改写,因此,其内存状态可以直接转换为Fd可控状态和Bk可控的内存状态。
Double Free漏洞可以使得同一堆块被Free两次,但是若是连续Free同一堆块两次,会导致程序崩溃,因此,可以先将Doubl e Free的内存状态转换为Free链污染的内存状态,之后,由于,一条Free链中存在同一堆块,就可以将其内存状态转换为Fd和Bk可控的内存状态。
Off by One漏洞可以向下一个堆块溢出任意一个字节,使得下一堆块的size字段被改写,导致堆管理模块会错误判断堆块大小,因此其内存状态可以转换为堆缓冲区重叠的内存状态,进而将其转换为Fd可控状态和Bk可控的内存状态。
Off by Null漏洞可以向下一个堆块溢出一个空字节,使得下一堆块的pre_inuse位被置零,导致堆管理模块错误判断上一堆的使用情况,因此其内存状态可以转换为堆空间的Unlink状态,进而将其转换为堆重叠的状态,最终实现其向Fd可控状态和Bk可控的内存状态的转换。
在内存转换过程中主要存在两种方式,第一种是对于堆操作路径的拼接,第二种是对于内存中符号值进行约束构建并求解。当内存目标转换的过程中,需要对堆内存的堆块的使用状态进行切换时,将所述堆块申请和释放的路径拼接到原本的路径上,例如在从堆重叠向Free链污染的过程中转换时,需要将重叠的堆块释放,造成Free链上存在同一块内存区域,达到Free链被污染的状态,如图6所示。
需要对堆内存的堆块的使用状态进行切换时,将所述堆块申请和释放的路径拼接到原本的路径上。例如在从Fd可控到Tcache poisoning状态转换的过程中,需要构建Fd为free_hook的约束条件,并利用约束求解进行状态转换,如图7所示。
在步骤S3,在所述能够满足漏洞验证的约束条件中剔除原有的输入约束,得到最终的目标约束,利用约束求解器,实现漏洞验证代码自动生成。
具体的,将程序在符号执行当中的约束条件进行收集,在经过上述状态转换的过程后,程序会得到能够满足漏洞验证的约束条件,此时从该约束条件中剔除原有的输入约束,得到最终的目标约束。利用约束求解器进行求解,获取能够触发漏洞验证路径的输入示例,并将其转换为漏洞验证代码,从而实现漏洞验证代码的生成。
本发明第二方面公开了一种基于状态转换的堆内存破坏漏洞自动验证系统。图8为根据本发明实施例的一种基于状态转换的堆内存破坏漏洞自动验证系统的结构图;如图8所示,所述系统800包括:
第一处理模块801,被配置为,利用CFG图分析技术和程序的静态分析技术实现堆操作相关静态路径抽取,在得到堆操作相关路径后,以符号执行的方式从所述堆操作相关路径中获取与堆操作相关的路径约束,并添加对所述路径约束的参数的约束,实现堆操作相关路径的自动抽取;
第二处理模块802,被配置为,依照堆空间内存状态转换模型,对测试程序的堆空间内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换,得到能够满足漏洞验证的约束条件;
第三处理模块803,被配置为,在所述能够满足漏洞验证的约束条件中剔除原有的输入约束,得到最终的目标约束,利用约束求解器,实现漏洞验证代码自动生成。
根据本发明第二方面的系统,所述第一处理模块801具体被配置为,
所述利用CFG图分析技术和程序的静态分析技术实现堆操作相关路径抽取的具体方法包括:
生成目标测试程序的CFG图,定位目标测试程序的功能调度结构,并获取目标测试程序的函数信息;
在定位到所述目标测试程序的函数信息后,从目标测试程序的函数的PLT表出发,求解从所述目标测试程序的功能调度结构到所述目标测试程序的函数之间的所有静态路径。
所述目标测试程序的函数包括:
所述目标测试程序的函数的PLT表中的堆内存分配和释放相关函数。
所述利用CFG图分析技术和程序的静态分析技术实现堆操作相关路径抽取的具体方法还包括:
在定位修改堆内存的执行路径时,需要剔除与堆内存无关的内存修改路径,这就需要分析内存修改函数的参数是否与目标堆地址相关,定位与堆内存内容修改相关的函数和执行路径。
所述定位与堆内存内容修改相关的函数和执行路径的具体方法包括:
从中间语言层面分析所述目标测试程序的数据流,得到堆内存相关数据的修改路径,从而定位与堆内存内容修改相关的函数和执行路径。
根据本发明第二方面的系统,所述第二处理模块802具体被配置为,
所述对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换的具体方法包括:
需要对堆内存的堆块的使用状态进行切换时,将所述堆块申请和释放的路径拼接到原本的路径上。
所述对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换的具体方法还包括:
当需要对堆内存中符号内容进行更改时,重新构建所述堆内存中符号的约束。
本发明第三方面公开了一种电子设备。电子设备包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时,实现本公开第一方面中任一项的一种基于状态转换的堆内存破坏漏洞自动验证方法中的步骤。
图4为根据本发明实施例的一种电子设备的结构图,如图9所示,电子设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、近场通信(NFC)或其他技术实现。该电子设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该电子设备的输入装置可以是显示屏上覆盖的触摸层,也可以是电子设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图9中示出的结构,仅仅是与本公开的技术方案相关的部分的结构图,并不构成对本申请方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本发明第四方面公开了一种计算机可读存储介质。计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时,实现本公开第一方面中任一项的一种基于状态转换的堆内存破坏漏洞自动验证方法中的步骤中的步骤。
综上,本发明提出的方案能够决手工堆内存破坏漏洞验证效率低下、专业知识要求高的问题。
请注意,以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (7)
1.一种基于状态转换的堆内存破坏漏洞自动验证方法,其特征在于,所述方法包括:
步骤S1、利用CFG图分析技术和程序的静态分析技术实现堆操作相关静态路径抽取,在得到堆操作相关路径后,以符号执行的方式从所述堆操作相关路径中获取与堆操作相关的路径约束,并添加对所述路径约束的参数的约束,实现堆操作相关路径的自动抽取;
步骤S2、依照不同的类型的漏洞及对应的内存状态的转换方式,对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换,得到能够满足漏洞验证的约束条件;
步骤S3、在所述能够满足漏洞验证的约束条件中剔除原有的输入约束,得到最终的目标约束,利用约束求解器,实现漏洞验证代码自动生成;
其中,在所述步骤S1中,所述利用CFG图分析技术和程序的静态分析技术实现堆操作相关路径抽取的具体方法包括:
生成目标测试程序的CFG图,定位目标测试程序的功能调度结构,并获取目标测试程序的函数信息;
在定位到所述目标测试程序的函数信息后,从所述目标测试程序的函数的PLT表出发,求解从所述目标测试程序的功能调度结构到所述目标测试程序的函数之间的所有静态路径;
其中,在所述步骤S1中,所述利用CFG图分析技术和程序的静态分析技术实现堆操作相关路径抽取的具体方法还包括:
在定位修改堆内存的执行路径时,剔除与堆内存无关的内存修改路径,分析内存修改函数的参数是否与目标堆地址相关,定位与堆内存内容修改相关的函数和执行路径;
其中,在所述步骤S1中,所述定位与堆内存内容修改相关的函数和执行路径的具体方法包括:
从中间语言层面分析所述目标测试程序的数据流,得到堆内存相关数据的修改路径,从而定位与堆内存内容修改相关的函数和执行路径。
2.根据权利要求1所述的一种基于状态转换的堆内存破坏漏洞自动验证方法,其特征在于,在所述步骤S1中,所述目标测试程序的函数包括:
所述目标测试程序的函数的PLT表中的堆内存分配和释放相关函数。
3.根据权利要求1所述的一种基于状态转换的堆内存破坏漏洞自动验证方法,其特征在于,在所述步骤S2中,所述对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换的具体方法包括:
需要对堆内存的堆块的使用状态进行切换时,将所述堆块申请和释放的路径拼接到原本的路径上。
4.根据权利要求3所述的一种基于状态转换的堆内存破坏漏洞自动验证方法,其特征在于,在所述步骤S2中,所述对测试程序的堆内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换的具体方法还包括:
当需要对堆内存中符号内容进行更改时,重新构建所述堆内存中符号的约束。
5.一种基于状态转换的堆内存破坏漏洞自动验证系统,其特征在于,所述系统包括:
第一处理模块,被配置为,利用CFG图分析技术和程序的静态分析技术实现堆操作相关静态路径抽取,在得到堆操作相关路径后,以符号执行的方式从所述堆操作相关路径中获取与堆操作相关的路径约束,并添加对所述路径约束的参数的约束,实现堆操作相关路径的自动抽取;
第二处理模块,被配置为,依照堆空间内存状态转换模型,对测试程序的堆空间内存进行布局,重新规划堆操作序列,实现堆漏洞内存状态自动转换,得到能够满足漏洞验证的约束条件;
第三处理模块,被配置为,在所述能够满足漏洞验证的约束条件中剔除原有的输入约束,得到最终的目标约束,利用约束求解器,实现漏洞验证代码自动生成;
其中,所述第一处理模块具体被配置为执行:
所述利用CFG图分析技术和程序的静态分析技术实现堆操作相关路径抽取包括:
生成目标测试程序的CFG图,定位目标测试程序的功能调度结构,并获取目标测试程序的函数信息;
在定位到所述目标测试程序的函数信息后,从所述目标测试程序的函数的PLT表出发,求解从所述目标测试程序的功能调度结构到所述目标测试程序的函数之间的所有静态路径;
所述利用CFG图分析技术和程序的静态分析技术实现堆操作相关路径抽取还包括:
在定位修改堆内存的执行路径时,剔除与堆内存无关的内存修改路径,分析内存修改函数的参数是否与目标堆地址相关,定位与堆内存内容修改相关的函数和执行路径;
所述定位与堆内存内容修改相关的函数和执行路径包括:
从中间语言层面分析所述目标测试程序的数据流,得到堆内存相关数据的修改路径,从而定位与堆内存内容修改相关的函数和执行路径。
6.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现权利要求1至4中任一项所述的一种基于状态转换的堆内存破坏漏洞自动验证方法中的步骤。
7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现权利要求1至4中任一项所述的一种基于状态转换的堆内存破坏漏洞自动验证方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210180253.6A CN114579976B (zh) | 2022-02-25 | 2022-02-25 | 基于状态转换的堆内存破坏漏洞自动验证方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210180253.6A CN114579976B (zh) | 2022-02-25 | 2022-02-25 | 基于状态转换的堆内存破坏漏洞自动验证方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114579976A CN114579976A (zh) | 2022-06-03 |
CN114579976B true CN114579976B (zh) | 2023-07-14 |
Family
ID=81770634
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210180253.6A Active CN114579976B (zh) | 2022-02-25 | 2022-02-25 | 基于状态转换的堆内存破坏漏洞自动验证方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114579976B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103389939A (zh) * | 2013-07-03 | 2013-11-13 | 清华大学 | 一种针对堆可控分配漏洞的检测方法及系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104732152B (zh) * | 2015-04-07 | 2017-11-24 | 南京大学 | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 |
CN111832026B (zh) * | 2020-06-18 | 2022-04-26 | 广州大学 | 一种漏洞利用定位方法、系统、装置及介质 |
CN111859372B (zh) * | 2020-07-29 | 2023-08-22 | 中国工商银行股份有限公司 | 堆内存攻击的检测方法、装置和电子设备 |
CN114065208A (zh) * | 2021-10-15 | 2022-02-18 | 中国科学院信息工程研究所 | 一种面向堆内存错误的检测方法及装置 |
-
2022
- 2022-02-25 CN CN202210180253.6A patent/CN114579976B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103389939A (zh) * | 2013-07-03 | 2013-11-13 | 清华大学 | 一种针对堆可控分配漏洞的检测方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN114579976A (zh) | 2022-06-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108027722B (zh) | 在编译和部署中动态更新应用 | |
Huang et al. | Crax: Software crash analysis for automatic exploit generation by modeling attacks as symbolic continuations | |
CN106156186B (zh) | 一种数据模型管理装置、服务器及数据处理方法 | |
Memon | Automatically repairing event sequence-based GUI test suites for regression testing | |
US8756460B2 (en) | Test selection based on an N-wise combinations coverage | |
CN105094783B (zh) | 安卓应用稳定性测试的方法及装置 | |
CN105808266B (zh) | 代码运行方法及装置 | |
US20130117855A1 (en) | Apparatus for automatically inspecting security of applications and method thereof | |
CN113590454A (zh) | 测试方法、装置、计算机设备和存储介质 | |
CN103389939A (zh) | 一种针对堆可控分配漏洞的检测方法及系统 | |
CN112148278A (zh) | 可视化的区块链智能合约框架及智能合约开发部署方法 | |
CN103186463B (zh) | 确定软件的测试范围的方法和系统 | |
CN115270131A (zh) | 一种Java反序列化漏洞检测方法及系统 | |
CN111597114A (zh) | 小程序的验证方法、装置、设备及存储介质 | |
CN113467784A (zh) | 应用程序处理方法及其装置、计算机可读存储介质 | |
CN111488275A (zh) | Ui自动化测试方法、装置、存储介质及电子设备 | |
Baradaran et al. | A unit-based symbolic execution method for detecting memory corruption vulnerabilities in executable codes | |
CN114389978A (zh) | 一种基于静态污点分析的网络协议侧信道检测方法和系统 | |
US9646252B2 (en) | Template clauses based SAT techniques | |
CN105468531A (zh) | 一种挖掘漏洞的方法、装置及电子设备 | |
CN114579976B (zh) | 基于状态转换的堆内存破坏漏洞自动验证方法和系统 | |
CN112579475A (zh) | 代码测试方法、装置、设备及可读存储介质 | |
CN117009972A (zh) | 漏洞检测方法、装置、计算机设备和存储介质 | |
CN111143227B (zh) | 一种数据操作方法、装置、终端及存储介质 | |
CN115687129A (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 |