CN111832026A - 一种漏洞利用定位方法、系统、装置及介质 - Google Patents
一种漏洞利用定位方法、系统、装置及介质 Download PDFInfo
- Publication number
- CN111832026A CN111832026A CN202010559324.4A CN202010559324A CN111832026A CN 111832026 A CN111832026 A CN 111832026A CN 202010559324 A CN202010559324 A CN 202010559324A CN 111832026 A CN111832026 A CN 111832026A
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- memory
- pointer
- control flow
- path
- 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
- 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/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- 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)
- 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
本发明公开了一种漏洞利用定位方法、系统、装置及介质,方法包括:获取待分析的漏洞崩溃点;根据所述漏洞崩溃点,获取可以抵达漏洞路径的控制流图;对堆内存中的第一指针进行信息标记;通过使用符号对所述控制流图上的基本块进行探索,确定不动环;分析所述不动环的新路径,确定第一指针中被所述新路径覆盖到的第二指针;根据所述第二指针对内存布局进行分析,构建到达漏洞利用点的路径。本发明通过在内存中动态添加不动环,能够遍历内存中的危险状态,快速查找漏洞可利用点,可广泛应用于计算机技术领域。
Description
技术领域
本发明涉及计算机技术领域,尤其是一种漏洞利用定位方法、系统、装置及介质。
背景技术
近年来,随着互联网技术飞速发展,针对各类网络关键设施已知或潜在漏洞的攻击,不仅会给个人、企业利益造成严重损害,甚至可以上升到国家安全的层面。因此,修补安全漏洞以防御网络攻击迫在眉睫,对未知漏洞的挖掘和利用进行深入研究,找到安全缺陷并进行安全补强,是提高防御能力的至关重要的一环。
针对Windows、Linux等主流操作系统平台中的程序,在使用人工审计或模糊测试等手段进行漏洞挖掘,发现漏洞并得到漏洞触发点相关内存信息之后,分析对漏洞的利用是解决安全问题的关键,也是二进制安全的核心内容之一。从程序到漏洞再到利用,往往需要安全研究员花费大量心血去对二进制程序及其运行过程进行透彻的分析、研究,然后编写利用代码。所以人工的方式效率低下且成本颇高,需要一个更快捷且有效的方式来代替代人工操作,自动化漏洞利用分析技术则应运而生。
目前,世界各国研究人员均已在自动化漏洞利用领域投入力量,已经问世的有面向数据流、控制流、补丁比较的漏洞自动化构建方案。随着程序分析技术的不断发展,研究人员开始尝试利用这些技术进行高效的软件漏洞利用自动构造。现有的漏洞智能利用方法大致可分为三个类别:基于补丁、基于劫持控制流和基于数据流的漏洞利用方案。
1、基于补丁比较的自动化利用方案:
现有技术提出了基于二进制补丁比较的漏洞利用自动生成方法APEG。其假设补丁程序中增加了对触发原程序崩溃的过滤条件,因此只要在找到补丁程序中添加过滤条件位置的同时,构造不满足过滤条件的“违规”输入,即可认为是原始程序的一个可利用的输入候选项,利用污点传播等监控方法筛选所有能够对原始程序造成溢出或者控制流劫持等崩溃发生的有效利用。APEG是对漏洞利用自动化构建的初次探索,但是该方法无法处理补丁程序中不添加过滤判断的情况,从实际利用效果来看,所构造的利用类型只能造成原程序的崩溃,而无法造成直接的控制流劫持。因此,该方案①只能处理较低级的漏洞(例如栈溢出),依赖于源程序中直接存在的控制流劫持点。
2、面向控制流的自动化利用方案:
这是一种基于源码的漏洞自动挖掘利用方法,弥补了补丁依赖方法无法构造控制流劫持的缺陷,该方法的核心思想是借助POC找出能够使得程序进入非安全状态(如内存越界写、恶意的格式化字符串等)且可被利用的输入。该方案集成了优化后的符号执行和动态指令插桩技术,实现了从软件漏洞自动挖掘到软件漏洞自动利用的整个过程。因此,该方案无法充分有效的识别并利用程序自身的其他逻辑,只能关注与漏洞出发点相关的少量逻辑,否则使用符号执行很容易引起路径爆炸。
3、面向数据流的自动化利用方案:
随着广泛部署地址随机化以及控制流完整性防护手段,面向控制流劫持的攻击利用变得非常困难。而面向数据流利用的自动化构造方法能在不改变程序控制流的前提下,利用已知的内存错误直接或者间接篡改程序原有数据流中关键位置上的变量,进而完成利用的自动化构造。因此,该方案难以解决堆相关问题,因此堆相关的利用状态较少;这些导致系统难以实现对漏洞可利用点的精确定位。
发明内容
有鉴于此,本发明实施例提供一种漏洞利用定位方法、系统、装置及介质,以快速定位漏洞的可利用点。
本发明的第一方面提供了一种漏洞利用定位方法,包括:
获取待分析的漏洞崩溃点;
根据所述漏洞崩溃点,获取可以抵达漏洞路径的控制流图;
对堆内存中的第一指针进行信息标记;
通过使用符号对所述控制流图上的基本块进行探索,确定不动环;
分析所述不动环的新路径,确定第一指针中被所述新路径覆盖到的第二指针;
根据所述第二指针对内存布局进行分析,构建到达漏洞利用点的路径。
在一些实施例中,所述根据所述漏洞崩溃点,获取可以抵达漏洞路径的控制流图,包括:
获取漏洞挖掘过程中的日志信息;
根据所述日志信息获取可以抵达漏洞路径的控制流图;
对所述控制流图中每个基本块进行编号。
在一些实施例中,所述对堆内存中的第一指针进行信息标记,包括:
对堆内存的分配位置进行标记;
对堆内存的释放位置进行标记;
对堆内存的的溢出字节数进行统计;
以及,拓展AddressSanitizer的影子内存功能。
在一些实施例中,所述通过使用符号对所述控制流图上的基本块进行探索,确定不动环,包括:对所述控制流图上的所有基本块使用符号进行探索,
该步骤具体包括:
获取使用符号值作为初始输入;
根据所述初始输入收集路径集上的符号约束;
根据所述符号约束,通过启发式搜索策略和约束求解方法,获取新的目标输入;
根据所述目标输入,从所述控制流图中搜索不动环。
在一些实施例中,所述分析所述不动环的新路径,确定第一指针中被所述新路径覆盖到的第二指针,包括:
通过在LLVM平台进行插桩处理;
获取插桩处理的反馈结果;所述反馈结果包括内存信息;所述内存信息用于确定覆盖在进行了信息标记的第二指针。
在一些实施例中,所述根据所述第二指针对内存布局进行分析,构建到达漏洞利用点的路径,包括:
以一个不动环为单位,通过动态污点分析技术来获取所述第二指针对内存状态的影响;
选用动态二进制插桩平台作为原型系统,基于函数INS_AddInstrumentFunction,在每执行一条新指令时,调用回调函数INS_InsertCall,将分析代码插入源代码序列中,生成一个新的代码序列并自动切换代码的控制权;
在污点数据列表中进行查找,获取指针数据;
对获得的指针数据赋予目标属性值,确定到达漏洞利用点的路径。
本发明的第二方面提供了一种漏洞利用定位系统,包括:
第一获取模块,用于获取待分析的漏洞崩溃点;
第二获取模块,用于根据所述漏洞崩溃点,获取可以抵达漏洞路径的控制流图;
标记模块,用于对堆内存中的第一指针进行信息标记;
探索模块,用于通过使用符号对所述控制流图上的基本块进行探索,确定不动环;
分析模块,用于分析所述不动环的新路径,确定第一指针中被所述新路径覆盖到的第二指针;
路径构建模块,用于根据所述第二指针对内存布局进行分析,构建到达漏洞利用点的路径。
在一些实施例中,所述标记模块包括:
第一标记单元,用于对堆内存的分配位置进行标记;
第二标记单元,用于对堆内存的释放位置进行标记;
第三标记单元,对堆内存的的溢出字节数进行统计;
拓展单元,用于拓展AddressSanitizer的影子内存功能。
本发明的第三方面提供了一种装置,包括处理器以及存储器;
所述存储器用于存储程序;
所述处理器用于根据所述程序执行如本发明第一方面所述的方法。
本发明第四方面提供了一种存储介质,所述存储介质存储有程序,所述程序被处理器执行完成如本发明第一方面所述的方法。
本发明的实施例根据漏洞崩溃点,获取可以抵达漏洞路径的控制流图;对堆内存中的第一指针进行信息标记;通过使用符号对所述控制流图上的基本块进行探索,确定不动环;分析所述不动环的新路径,确定第一指针中被所述新路径覆盖到的第二指针;根据所述第二指针对内存布局进行分析,构建到达漏洞利用点的路径;本发明通过在内存中动态添加不动环,能够遍历内存中的危险状态,快速查找漏洞可利用点。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例的整体步骤流程图;
图2为本发明实施例中基于不动环的内存分析流程图;
图3为本发明实施例中可抵达漏洞路径的控制流图;
图4为本发明实施例中基于不动环内存分析技术的控制流图;
图5为本发明实施例的不动环的探索装置示意图。
具体实施方式
下面结合说明书附图和具体实施例对本发明作进一步解释和说明。对于本发明实施例中的步骤编号,其仅为了便于阐述说明而设置,对步骤之间的顺序不做任何限定,实施例中的各步骤的执行顺序均可根据本领域技术人员的理解来进行适应性调整。
在漏洞挖掘领域,当挖掘成功发现漏洞之后,对漏洞的利用是解决安全问题的关键,也是二进制安全的核心内容之一。漏洞利用的本质是通过覆盖内存中跳转地址,实现漏洞的利用。然而,由于数据执行保护、地址随机化以及控制流完整性等防护手段的加入,以及部分程序内存区域不存在明确的内存跳转地址,大大增加了可利用点的定位难度。因此,如何准确定位漏洞可利用点是漏洞自动利用的关键问题。由于当前系统大多难以解决堆相关问题,因此堆相关的可利用状态极少,针对无法定位逻辑复杂漏洞利用点问题,本发明旨在通过研究一种基于智能内存布局的漏洞利用点精准定位技术,通过在内存中动态添加不动环,遍历内存中的危险状态,快速查找漏洞可利用点。
本发明实施例中的不动环是指:在需要测试的程序空间中,针对某个特定的控制流图,不被其包含的一组基本块的组合。该基本块的组合在引入该控制流图的执行路径后,不会引起接入点后续的控制流图的改变。
通过本发明的方案,能够解决在漏洞挖掘得到了触发崩溃的测试样本后,通过不动环内存分析,对漏洞影响范围进行评估,实现利用点精准定位。
具体地,参照图1和图2,本发明实施例的漏洞利用定位方法包括:
S1、获取待分析的漏洞崩溃点;
本实施例中步骤S1具体为:可以通过模糊测试或人工分析等漏洞挖掘方法,获取漏洞崩溃点
S2、根据所述漏洞崩溃点,获取可以抵达漏洞路径的控制流图;
本实施例的步骤S2包括:
S21、获取漏洞挖掘过程中的日志信息;
S22、根据所述日志信息获取可以抵达漏洞路径的控制流图;
S23、对所述控制流图中每个基本块进行编号。
具体地,本实施例针对需要分析的崩溃点,通过漏洞挖掘时的日志信息获取这条可以抵达漏洞路径的控制流图,本实施例的控制流图如图3所示,对控制流图中的每个基本块进行编号b1,b2,b3…bn,其中bn基本块是指触发程序崩溃的漏洞崩溃点。
S3、对堆内存中的第一指针进行信息标记;
本实施例的步骤S3包括:
S31、对堆内存的分配位置进行标记;
其中,本实施例对分配位置的标记得到的信息的作用在于:在后续步骤找到不动环后判断可利用内存的分配地址。
S32、对堆内存的释放位置进行标记;
其中,本实施例对释放位置的标记得到的信息的作用在于:在后续步骤找到不动环后判断可利用内存的释放地址。
S33、对堆内存的的溢出字节数进行统计;
其中,本实施例对溢出字节数的统计,能够确定可利用的溢出覆盖范围大小。
以及,S34、拓展AddressSanitizer的影子内存功能。
其中,影子内存是AddressSanitizer的一项功能,启用该功能会在内存中划分一块区域,该内存区仅AddressSanitizer可感知,影子顾名思义是指该内存区与主应用内存区存在一种类似“影子”的对应关系。例如,当AddressSanitizer在将主内存区的一个字节标记为“中毒”状态时,也会在对应的影子内存区写一个特殊值,该值称为“影子值”。
具体地,本实施例可以使用AddressSanitizer对堆内存中的重要信息进行标记,例如堆在何处被分配,在何处被释放,具体溢出了多少字节等,并扩展AddressSantinizer的影子内存功能,记录地址等信息,堆特定内容进行标记。
S4、通过使用符号对所述控制流图上的基本块进行探索,确定不动环;
本实施例的步骤S4包括:
S41、获取使用符号值作为初始输入;
S42、根据所述初始输入收集路径集上的符号约束;
S43、根据所述符号约束,通过启发式搜索策略和约束求解方法,获取新的目标输入;
S44、根据所述目标输入,从所述控制流图中搜索不动环。
具体地,本实施例对控制流图上的所有基本块使用符号执行进行探索,具体而言是使用KLEE这一工具,通过使用符号值作为初始输入来执行程序,同时收集路径集上的符号约束,用求解器在这个新的约束集上生成一个新的输入(即为目标输入)。另外,本实施例使用两种启发式搜索策略,包括覆盖率优化搜索和随机路径选择;在约束求解方面,本实施例综合使用无关约束消除技术和缓存求解策略,通过不断测试新的输入,检查控制流图,将在探索过程中得到的不动环进行记录。
需要说明的是,本实施例不断测试新的输入的过程,如图5所示,具体地:
本实施例首先读取需要分析的漏洞崩溃点的控制流图信息,并调用第一个基本块的内存信息。然后使用符号执行技术对当前基本块进行探索。通过不断尝试执行新路径,并对比执行后与原来的控制流图相比,当前探索的基本块后续的控制流图是否发生了改变,对于并未改变的新的基本块的组合,进行记录并标记为不动环。之后更新代码覆盖率等信息。之后检查当前覆盖率等信息是否达到指标——该指标由使用者根据程序实际情况自行设定,当达到指标说明当前基本块已经探索完成,之后不断以此方法对所有基本块进行探索,最终得到该控制流图的所有不动环信息。
S5、分析所述不动环的新路径,确定第一指针中被所述新路径覆盖到的第二指针;
本实施例的步骤S5包括:
S51、通过在LLVM平台进行插桩处理;
S52、获取插桩处理的反馈结果;
本实施例中,插桩处理本身用于反馈程序中各个基本块的执行情况,从而实现代码覆盖率的统计。此处通过反馈结果得到内存信息;获知程序在执行中覆盖到的基本块,从而结合基本块的入口地址和出口地址(该入口地址和出口地址均包含在所获得的内存信息中),判断程序执行是否覆盖了进行了信息标记的第二指针。
具体地,本实施例对不动环进行分析,通过在LLVM平台重新编译进行插桩,此处同样使用AddressSanitizer(ASAN)工具,二进制插桩是ASAN工具中的关键技术,具体由SanitizerCoverage模块实现。通过执行程序获得插桩反馈的信息,信息包括不动环在内产生的新路径的覆盖率等内存数据,从而判断是否覆盖在标记环节有标记的重要指针等,并进行记录与标记。
S6、根据所述第二指针对内存布局进行分析,构建到达漏洞利用点的路径。
本实施例的步骤S6包括:
S61、以一个不动环为单位,通过动态污点分析技术来获取所述第二指针对内存状态的影响;
S62、选用动态二进制插桩平台作为原型系统,基于函数INS_AddInstrumentFunction,在每执行一条新指令时,调用回调函数INS_InsertCall,将分析代码插入源代码序列中,生成一个新的代码序列并自动切换代码的控制权;
S63、在污点数据列表中进行查找,获取指针数据;
S64、对获得的指针数据赋予目标属性值,确定到达漏洞利用点的路径。
具体地,本实施例利用覆盖到的重要指针(本实施例的重要指针即第二指针)对内存布局进行分析,以每一个不动环为单位,通过动态污点分析技术来获取其对内存状态的影响,选用动态二进制插桩平台Pin作为原型系统,通过函数INS_AddInstrumentFunction,在每执行一条新指令时,调用回调函数INS_InsertCall,并且在不影响原代码正常执行的同时将分析代码插入源代码序列中,进而生成一个新的代码序列并自动切换代码的控制权,一方面对寄存器中的操作指令进行污点追踪,一方面对call、jmp、ret等跳转指令、mov等读写内存指令进行可利用性判断,之后再污点数据列表中进行查找从而输出查找对比的结果,并对获得的指针赋予attribute(属性),例如noalloc(未分配内存等),分析到达利用点的路径构建方法。
通过本发明的方法,当得到一条可抵达漏洞路径的控制流图(如图3所示),针对控制流图上的每一个基本块(basic block)依次进行探索(explore),尝试寻找新的基本块组合而成的新路径,这一组合称为不动环(如图4所示)。本发明的探索方式的判断依据是:①当前探索中的基本块在控制流图中后续的路径保持不变。②是否能够覆盖到内存中的漏洞可利用点,如存在在堆上的可读写指针。
本发明在判断新的基本块组合是否覆盖到漏洞可利用点时,是通过引入AddressSanitizer内存错误检测工具来实现的,通过使用AddressSanitizer的影子内存(shadow memory)功能,将堆上的重要的特定函数、变量的指针进行标记。
综上所述,相较于现有技术在漏洞利用分析时使用直接控制流劫持的方法,本发明在漏洞利用分析预处理阶段引入内存错误检测工具AddressSanitizer,对堆上的特定内容进行标记,并从触发漏洞崩溃点的控制流图出发,探索控制流中的“不动环”,并分析覆盖的新范围中标记到的重要指针等内存信息,从而提高漏洞利用分析的可行性与效率。
本发明实施例在漏洞挖掘时,对内存分析以求获得漏洞可利用点,现有的系统一般依赖于源程序中直接存在的控制流劫持点(polyaeg),难以处理堆相关问题。而本发明中,当得到了一条可抵达漏洞路径的控制流图(如图3所示),之后基于fuzz得到的覆盖率信息,配合符号执行技术,针对控制流图上的每一个basic block依次进行探索(explore),寻求对后续控制流不产生影响的基本块组合,在本发明中称其为“不动环”。不动环的探索重点解决堆相关的漏洞可利用状态分析,并且不需要直接的控制流劫持点。
另外,现有技术在分析漏洞触发点相关的逻辑时,使用符号执行很容易引起路径爆炸。本发明在漏洞利用分析阶段引入AddressSanitizer这一内存错误检测工具,通过扩展AddressSanitizer的影子内存(shadow memory)技术,将堆上的特定内容做具体标记,例如存在堆上的可读写指针,从而扩大程序逻辑分析的范围,帮助内存布局的分析。
与图1的方法相对应,本发明实施例还提供了一种漏洞利用定位系统,包括:
第一获取模块,用于获取待分析的漏洞崩溃点;
第二获取模块,用于根据所述漏洞崩溃点,获取可以抵达漏洞路径的控制流图;
标记模块,用于对堆内存中的第一指针进行信息标记;
探索模块,用于通过使用符号对所述控制流图上的基本块进行探索,确定不动环;
分析模块,用于分析所述不动环的新路径,确定第一指针中被所述新路径覆盖到的第二指针;
路径构建模块,用于根据所述第二指针对内存布局进行分析,构建到达漏洞利用点的路径。
在一些实施例中,所述标记模块包括:
第一标记单元,用于对堆内存的分配位置进行标记;
第二标记单元,用于对堆内存的释放位置进行标记;
第三标记单元,对堆内存的的溢出字节数进行统计;
拓展单元,用于拓展AddressSanitizer的影子内存功能。
与图1的方法相对应,本发明实施例还提供了提供了一种装置,包括处理器以及存储器;
所述存储器用于存储程序;
所述处理器用于根据所述程序执行上述的漏洞利用定位方法。
本发明第四方面提供了一种存储介质,所述存储介质存储有程序,所述程序被处理器执行完成上述的漏洞利用定位方法。
在一些可选择的实施例中,在方框图中提到的功能/操作可以不按照操作示图提到的顺序发生。例如,取决于所涉及的功能/操作,连续示出的两个方框实际上可以被大体上同时地执行或所述方框有时能以相反顺序被执行。此外,在本发明的流程图中所呈现和描述的实施例以示例的方式被提供,目的在于提供对技术更全面的理解。所公开的方法不限于本文所呈现的操作和逻辑流程。可选择的实施例是可预期的,其中各种操作的顺序被改变以及其中被描述为较大操作的一部分的子操作被独立地执行。
此外,虽然在功能性模块的背景下描述了本发明,但应当理解的是,除非另有相反说明,所述的功能和/或特征中的一个或多个可以被集成在单个物理装置和/或软件模块中,或者一个或多个功能和/或特征可以在单独的物理装置或软件模块中被实现。还可以理解的是,有关每个模块的实际实现的详细讨论对于理解本发明是不必要的。更确切地说,考虑到在本文中公开的装置中各种功能模块的属性、功能和内部关系的情况下,在工程师的常规技术内将会了解该模块的实际实现。因此,本领域技术人员运用普通技术就能够在无需过度试验的情况下实现在权利要求书中所阐明的本发明。还可以理解的是,所公开的特定概念仅仅是说明性的,并不意在限制本发明的范围,本发明的范围由所附权利要求书及其等同方案的全部范围来决定。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。
计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
以上是对本发明的较佳实施进行了具体说明,但本发明并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。
Claims (10)
1.一种漏洞利用定位方法,其特征在于,包括:
获取待分析的漏洞崩溃点;
根据所述漏洞崩溃点,获取可以抵达漏洞路径的控制流图;
对堆内存中的第一指针进行信息标记;
通过使用符号对所述控制流图上的基本块进行探索,确定不动环;
分析所述不动环的新路径,确定第一指针中被所述新路径覆盖到的第二指针;
根据所述第二指针对内存布局进行分析,构建到达漏洞利用点的路径。
2.根据权利要求1所述的一种漏洞利用定位方法,其特征在于,所述根据所述漏洞崩溃点,获取可以抵达漏洞路径的控制流图,包括:
获取漏洞挖掘过程中的日志信息;
根据所述日志信息获取可以抵达漏洞路径的控制流图;
对所述控制流图中每个基本块进行编号。
3.根据权利要求1所述的一种漏洞利用定位方法,其特征在于,所述对堆内存中的第一指针进行信息标记,包括:
对堆内存的分配位置进行标记;
对堆内存的释放位置进行标记;
对堆内存的的溢出字节数进行统计;
以及,拓展AddressSanitizer的影子内存功能。
4.根据权利要求1所述的一种漏洞利用定位方法,其特征在于,所述通过使用符号对所述控制流图上的基本块进行探索,确定不动环,包括:对所述控制流图上的所有基本块使用符号进行探索,
该步骤具体包括:
获取使用符号值作为初始输入;
根据所述初始输入收集路径集上的符号约束;
根据所述符号约束,通过启发式搜索策略和约束求解方法,获取新的目标输入;
根据所述目标输入,从所述控制流图中搜索不动环。
5.根据权利要求1所述的一种漏洞利用定位方法,其特征在于,所述分析所述不动环的新路径,确定第一指针中被所述新路径覆盖到的第二指针,包括:
通过在LLVM平台进行插桩处理;
获取插桩处理的反馈结果;所述反馈结果包括内存信息;所述内存信息用于确定覆盖在进行了信息标记的第二指针。
6.根据权利要求1所述的一种漏洞利用定位方法,其特征在于,所述根据所述第二指针对内存布局进行分析,构建到达漏洞利用点的路径,包括:
以一个不动环为单位,通过动态污点分析技术来获取所述第二指针对内存状态的影响;
选用动态二进制插桩平台作为原型系统,基于函数INS_AddInstrumentFunction,在每执行一条新指令时,调用回调函数INS_InsertCall,将分析代码插入源代码序列中,生成一个新的代码序列并自动切换代码的控制权;
在污点数据列表中进行查找,获取指针数据;
对获得的指针数据赋予目标属性值,确定到达漏洞利用点的路径。
7.一种漏洞利用定位系统,其特征在于,包括:
第一获取模块,用于获取待分析的漏洞崩溃点;
第二获取模块,用于根据所述漏洞崩溃点,获取可以抵达漏洞路径的控制流图;
标记模块,用于对堆内存中的第一指针进行信息标记;
探索模块,用于通过使用符号对所述控制流图上的基本块进行探索,确定不动环;
分析模块,用于分析所述不动环的新路径,确定第一指针中被所述新路径覆盖到的第二指针;
路径构建模块,用于根据所述第二指针对内存布局进行分析,构建到达漏洞利用点的路径。
8.根据权利要求7所述的一种漏洞利用定位系统,其特征在于,所述标记模块包括:
第一标记单元,用于对堆内存的分配位置进行标记;
第二标记单元,用于对堆内存的释放位置进行标记;
第三标记单元,对堆内存的的溢出字节数进行统计;
拓展单元,用于拓展AddressSanitizer的影子内存功能。
9.一种装置,其特征在于,包括处理器以及存储器;
所述存储器用于存储程序;
所述处理器用于根据所述程序执行如权利要求1-6中任一项所述的方法。
10.一种存储介质,其特征在于,所述存储介质存储有程序,所述程序被处理器执行完成如权利要求1-6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010559324.4A CN111832026B (zh) | 2020-06-18 | 2020-06-18 | 一种漏洞利用定位方法、系统、装置及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010559324.4A CN111832026B (zh) | 2020-06-18 | 2020-06-18 | 一种漏洞利用定位方法、系统、装置及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111832026A true CN111832026A (zh) | 2020-10-27 |
CN111832026B CN111832026B (zh) | 2022-04-26 |
Family
ID=72897765
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010559324.4A Active CN111832026B (zh) | 2020-06-18 | 2020-06-18 | 一种漏洞利用定位方法、系统、装置及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111832026B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113761540A (zh) * | 2021-09-07 | 2021-12-07 | 中国科学院上海高等研究院 | BranchScope及其编译器防护方法的验证方法 |
CN114579976A (zh) * | 2022-02-25 | 2022-06-03 | 中国人民解放军国防科技大学 | 基于状态转换的堆内存破坏漏洞自动验证方法和系统 |
CN115168871A (zh) * | 2022-08-03 | 2022-10-11 | 中国电子科技集团公司信息科学研究院 | 一种攻击利用组件的自动生成方法和装置 |
CN115310100A (zh) * | 2022-10-12 | 2022-11-08 | 鹏城实验室 | 智能合约漏洞修复方法、设备以及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120317647A1 (en) * | 2011-05-26 | 2012-12-13 | Carnegie Mellon University | Automated Exploit Generation |
US20130312103A1 (en) * | 2012-05-21 | 2013-11-21 | Carnegie Mellon University | Detecting exploitable bugs in binary code |
CN105487983A (zh) * | 2015-12-24 | 2016-04-13 | 郑州恩倍网络科技有限公司 | 基于智能路径引导的敏感点逼近方法 |
CN108959936A (zh) * | 2018-06-28 | 2018-12-07 | 中国人民解放军国防科技大学 | 一种基于路径分析的缓冲区溢出漏洞自动利用方法 |
CN110941552A (zh) * | 2019-11-20 | 2020-03-31 | 广州大学 | 一种基于动态污点分析的内存分析方法及装置 |
-
2020
- 2020-06-18 CN CN202010559324.4A patent/CN111832026B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120317647A1 (en) * | 2011-05-26 | 2012-12-13 | Carnegie Mellon University | Automated Exploit Generation |
US20130312103A1 (en) * | 2012-05-21 | 2013-11-21 | Carnegie Mellon University | Detecting exploitable bugs in binary code |
CN105487983A (zh) * | 2015-12-24 | 2016-04-13 | 郑州恩倍网络科技有限公司 | 基于智能路径引导的敏感点逼近方法 |
CN108959936A (zh) * | 2018-06-28 | 2018-12-07 | 中国人民解放军国防科技大学 | 一种基于路径分析的缓冲区溢出漏洞自动利用方法 |
CN110941552A (zh) * | 2019-11-20 | 2020-03-31 | 广州大学 | 一种基于动态污点分析的内存分析方法及装置 |
Non-Patent Citations (2)
Title |
---|
WANG, ZHONGRU ETAL: "Automated Vulnerability Discovery and Exploitation in the Internet of Things", 《SENSORS》 * |
万云鹏等: "基于符号执行的自动利用生成系统", 《计算机系统应用》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113761540A (zh) * | 2021-09-07 | 2021-12-07 | 中国科学院上海高等研究院 | BranchScope及其编译器防护方法的验证方法 |
CN114579976A (zh) * | 2022-02-25 | 2022-06-03 | 中国人民解放军国防科技大学 | 基于状态转换的堆内存破坏漏洞自动验证方法和系统 |
CN115168871A (zh) * | 2022-08-03 | 2022-10-11 | 中国电子科技集团公司信息科学研究院 | 一种攻击利用组件的自动生成方法和装置 |
CN115168871B (zh) * | 2022-08-03 | 2023-06-13 | 中国电子科技集团公司信息科学研究院 | 一种攻击利用组件的自动生成方法和装置 |
CN115310100A (zh) * | 2022-10-12 | 2022-11-08 | 鹏城实验室 | 智能合约漏洞修复方法、设备以及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111832026B (zh) | 2022-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111832026B (zh) | 一种漏洞利用定位方法、系统、装置及介质 | |
CN108052825B (zh) | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 | |
CN109583200B (zh) | 一种基于动态污点传播的程序异常分析方法 | |
CN111695119B (zh) | 一种基于细粒度静态污点分析与符号执行的web漏洞检测方法 | |
CN110287693B (zh) | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 | |
CN114996126B (zh) | 一种针对eosio智能合约的漏洞检测方法及系统 | |
CN110941552A (zh) | 一种基于动态污点分析的内存分析方法及装置 | |
CN112035359A (zh) | 程序测试方法、装置、电子设备及存储介质 | |
CN105678168A (zh) | 一种基于栈异常的shellcode检测方法及装置 | |
CN115455435A (zh) | 一种智能合约模糊测试方法、装置、存储介质及电子设备 | |
Harzevili et al. | Characterizing and understanding software security vulnerabilities in machine learning libraries | |
CN101388055A (zh) | 一种用于漏洞模型检测的程序操作特征提取方法 | |
CN117555523A (zh) | 一种基于辅助程序执行反馈的控制流构建方法及系统 | |
CN114741700B (zh) | 基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置 | |
CN115795489B (zh) | 一种基于硬件级进程跟踪的软件漏洞静态分析方法及装置 | |
Bahaa et al. | A systematic literature review on software vulnerability detection using machine learning approaches | |
CN116881921A (zh) | 一种基于afl的二进制命令注入漏洞检测方法及系统 | |
Liu et al. | Detecting Exploit Primitives Automatically for Heap Vulnerabilities on Binary Programs | |
Gao et al. | Automatic buffer overflow warning validation | |
Kim et al. | Source code analysis for static prediction of dynamic memory usage | |
CN117034288A (zh) | 漏洞检测方法和装置、存储介质及电子设备 | |
CN118246025A (zh) | 漏洞检测方法和装置、存储介质及电子设备 | |
Wei et al. | An Efficient Metric-Based Approach for Static Use-After-Free Detection | |
Zhou et al. | Detecting prototype pollution for node. js: Vulnerability review and new fuzzing inputs | |
Ashouri et al. | Hybrid taint flow analysis in Scala |
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 |