CN101482846A - 基于可执行代码逆向分析的漏洞挖掘方法 - Google Patents
基于可执行代码逆向分析的漏洞挖掘方法 Download PDFInfo
- Publication number
- CN101482846A CN101482846A CNA2008102077695A CN200810207769A CN101482846A CN 101482846 A CN101482846 A CN 101482846A CN A2008102077695 A CNA2008102077695 A CN A2008102077695A CN 200810207769 A CN200810207769 A CN 200810207769A CN 101482846 A CN101482846 A CN 101482846A
- Authority
- CN
- China
- Prior art keywords
- leak
- software
- code
- program
- vulnerability
- 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.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种软件工程技术领域的基于可执行代码逆向分析的漏洞挖掘方法,具体为:对于可执行文件,这里是指Windows系统下的PE格式文件,采用的是灰箱的检测方法,利用调试软件捕获程序的漏洞信息,通过分析漏洞造成程序脱离安全态时的具体代码,并逆向分析程序指令流及输入决策信息,动态分析交互数据和决策。挖掘出程序中的固有和逻辑漏洞,确定漏洞的危害,从而达到检测漏洞的目的。本发明具有较高的检测效率,并对于程序中的可能漏检的逻辑漏洞能够较为成功地进行挖掘。
Description
技术领域
本发明涉及一种计算机技术领域的漏洞挖掘方法,具体地说,涉及的是一种基于可执行代码逆向分析的漏洞挖掘方法。
背景技术
目前已有多种针对漏洞进行挖掘及检测的技术,但往往在检测中需消耗大量的人力和物力,如采用黑盒方式的自动挖掘技术。为增加检测效率,在代码检测中也常常采用一些通过规范来检查代码安全性的工具,这种基于匹配查找的方式可以快速检测出固有漏洞,但对于逻辑性的代码漏洞却无法进行详细的检测。基于逆向分析的漏洞发掘实际上属于灰盒测试方法,是采用逆向分析技术来辅助漏洞的挖掘,既能直接对问题域进行衡量,又测试了尽可能多的脆弱点。同时可以降低检测中消耗的人力成本,同时对于逻辑性漏洞也具备较高的检测率。
另外一种对基于目标代码的检测方法,是先用反汇编工具对待测程序进行处理,再依赖基于源码的检测分析技术来对所得结果进行处理。返回点检测技术是一种通过判决调用的返回点位置(堆或者栈)来判决正在执行的代码是否是溢出代码的方法。这种漏洞发掘方法对普通的溢出代码的防范是有效的,但是存在不少众所周知的缺点,许多病毒程序绕过其检测的问题依然可以入侵到系统中。基于可执行代码逆向分析的漏洞挖掘技术由于可以针对程序的决策进行判断,因此对基于目标代码的检测方法可以进行补充的检测,防止病毒程序绕过。
经对现有技术文献的检索发现,中国专利申请号为:200610103592.5,名称为“一种整型溢出漏洞自动化挖掘方法”。该技术自述为:“设置填充字符长度、内容及存储地址,在指定的存储地址用指定的字符填充数据,被测对象执行对文件型数据或网络协议型数据的处理,捕获被测对象是否有错误发生,如果有错误发生,记录出错的位置或/和保存出错的数据,并修改存储地址,如此循环测试,直到被测对象的数据尾为止。”利用该方法,能够实现黑盒测试或独立的安全测试人员在不知道数据格式的情况下,通过自动对数据内容遍历的方法来尝试发现可能存储整型变量的位置,从而有效地进行整型溢出漏洞挖掘工作,提高软件开发的质量及稳定性。该检测技术属于黑盒测试的一种,其发现的漏洞类型比较单一,并且无法知道造成漏洞的输入可能造成的其他问题。采用基于可执行代码逆向分析的漏洞发掘可以对漏洞产生的所有分支进行检查,因此可以挖掘出其他类型及代码分支带来的漏洞。
发明内容
本发明的目的在于克服现有技术中的不足,提供一种基于可执行代码逆向分析的漏洞挖掘方法。使其能够在符合测试要求的前提下,尽可能多地穿越代码树的所有节点,检测受测软件中固有的与逻辑的脆弱点,同时对问题域进行衡量,判断漏洞的危害,主要用来辅助网络服务型软件和本地应用型软件的漏洞挖掘和安全性检测。
本发明是通过以下技术方案实现的,本发明对于可执行文件,这里是指Windows系统下的PE格式文件,采用的是灰箱的检测方法,利用调试软件捕获程序的漏洞信息,通过分析漏洞造成程序脱离安全态时的具体代码,并逆向分析程序指令流及输入决策信息,动态分析交互数据和决策。挖掘出程序中的固有和逻辑漏洞,确定漏洞的危害,从而达到检测漏洞的目的。
本发明包括如下步骤:
第一步,对可执行二进制代码进行软件漏洞的捕捉,软件漏洞捕捉用来提升对软件系统错误的可观测性。具体为:使用受检测软件内置调试程序或附加到软件上的调试程序,将低观测性的软件变成高观测性软件。漏洞捕捉的可行性在一定程度上需要取决于受测软件与调试程序的结合度。其结果将用于指导是否将软件系统错误和导致错误的外部输入进行深入的漏洞探测。
第二步,当漏洞捕捉完成后,由于此时已确定受测软件存在一定的可检测漏洞,则将造成漏洞的输入数据作为主要输入,因为在输入后系统将脱离安全态。对于脱离安全态的程序点检测其完整的代码覆盖情况。代码覆盖主要使用指令流追踪的技术。代码覆盖记录能够测试尽可能多的、已生成的代码树分支。
第三步,通过对代码覆盖检测观察程序执行路径,再通过附加到软件的调试器追踪指令流,尽可能多地收集程序的内部状态信息,实时收集状态信息从而指导重构恶意输入,有效影响正在执行的程序的状态,弥补了黑盒测试的盲目性、片面性,并以此确定出现漏洞的具体位置前执行的指令流,来完成漏洞点的回溯。
第四步,指令流回溯寻找到的漏洞点,通过追踪代码执行分支来确定软件漏洞和外部输入的联系。判断受测软件基于用户提交的数据所做出的决策。通过追踪交互数据在内存页中断点的情况有利于追踪外部输入的流向,确定漏洞和外部输入的关联关系,最终用来确定漏洞的危害性。
本发明通过对可执行代码逆向分析,并对捕捉的漏洞进行代码覆盖完整性分析,可视化其二进制代码的指令流,追踪实际输入输出的交互数据以探测其漏洞是否真实存在。
本发明经过了性能测试,测试结果表明了本发明对于二进制可执行文件具有很好的漏洞检测率;特别是对于Windows系统平台下的PE文件,漏洞检测率较高;对于网络服务型软件的漏洞,当输入接口可以全部定义时,该检测方法能够较全面地分析漏洞情况;当软件交互比较复杂时,也能够检测出漏洞。
附图说明
图1基于可执行代码逆向分析的漏洞挖掘方法流程示意图
具体实施方式
下面结合附图对本发明的实施例作详细说明:本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
基于本发明开发了可执行代码逆向分析的漏洞挖掘方法,其主要针对可执行代码的漏洞进行逆向分析的检测,对其中可能出现的固有漏洞和逻辑漏洞进行灰箱检测处理,判断并定位出漏洞位置及相应危害。下面描述具体的实施方法:
对于可执行代码文件,主要是指Windows下的可执行PE文件,具体的检测流程见图1。
第一步,根据可执行PE文件的格式,判断定位出可执行文件的执行入口点位置,作为下面检测分析之用。定位执行入口点可以采用已有的入口点检测软件,如Windows系统下的PeditorW等,但要注意一些病毒和后门代码为了躲避逆向分析常常可能修改入口点位置。获取入口点后,可以采用调试器如Windows系统下的OllyDbg从程序的入口点开始通过断点、级指令的追踪、多线程的调试、进程快照等功能对软件的漏洞进行检查。在使用调试器对程序运行进行检查中出现的任何异常状态如程序异常退出或出现不可预测数据结果等都可以作为漏洞进行进一步检查。如在调试器单步运行中出现某变量分配内存不足,造成缓冲区溢出等;程序执行了编写时既定的跳转代码以外的意外代码等问题。
第二步,对捕获的漏洞进行进一步检查,利用调试器通过指令流回溯找到造成漏洞的输入数据所对应代码的位置,检查不同输入数据导致程序的不同跳转。并通过调试器追踪代码执行分支来确定软件漏洞和外部输入的联系。如在PE文件中跳转基本以JMP的汇编代码在调试器中出现。因此检查代码中造成漏洞的所有可能分支就转变为找到造成漏洞的异常输入后所有JMP的位置。同时收集不同分支执行后程序运行的状态,对于状态异常的情况,记录导致代码执行到该分支其输入的具体数值。由于漏洞是程序错误设计导致的,因此采用该步骤就可以寻找到此错误设计可能造成的多个漏洞或该漏洞代码附近同类型的漏洞。
第三步,对于上一步发现的异常状态的情况,利用调试器单步执行每一条代码,收集程序的运行状态信息。因为并不是只有一种输入才会导致漏洞的发生,因此收集到的状态如果发现异常,就可以用来指导构造出造成该问题的所有恶意输入。只要是输入的数据会使程序由分支跳转到该异常状态,则该输入就是具有造成漏洞可能的恶意输入内容。通过该步骤就可以较快地找到所有可能造成漏洞的输入,而通常找到所有恶意输入数据必须通过对所有可能输入的数据进行全部检查才可能得到结果。如在代码跳转的条件中要求A大于0小于10跳转到路径一,而路径一在单步执行中发生状态异常,则当A等于1至9时都可能会导致程序产生漏洞。
第四步,由于程序设计时,在数据被输入后可能在不同的代码位置对数据的有效性进行检查。因此,在漏洞以及造成漏洞的所有输入确定后,必须了解该输入是否真的能导致程序的跳转并产生漏洞。因此需要通过调试器进行代码回溯检查输入数据代码及执行跳转代码周边的代码情况,检查产生漏洞的输入是否在输入数据的代码后面有格式及条件方面的检查,由于产生漏洞的输入在程序代码中如果已被过滤条件屏蔽,则该造成问题的输入内容实际上并不会造成程序跳转到异常的状态,而是在输入后由于格式或其他方面不符合被过滤掉了,因此由该输入造成的问题就不存在。对于所有可能造成危害的输入都需要进行上述的检查,最后可以确定能够造成漏洞的所有输入。从而最终确定漏洞可能造成的所有危害,检测完成。
本实施例具有较高的检测效率,并对于程序中的可能漏检的逻辑漏洞能够较为成功地进行挖掘,涉及的一些具体的操作都是现有的成熟技术领域,简单方便。
Claims (3)
1、一种基于可执行代码逆向分析的漏洞挖掘方法,其特征在于包括如下步骤:
第一步,对可执行二进制代码进行软件漏洞的捕捉,软件漏洞捕捉用来提升对软件系统错误的可观测性;
第二步,当漏洞捕捉完成后,确定受测软件存在可检测漏洞时,则将造成漏洞的输入数据作为主要输入,在输入后系统将脱离安全态,对于脱离安全态的程序点检测其完整的代码覆盖情况;
第三步,通过对代码覆盖检测观察程序执行路径,再通过附加到软件的调试器追踪指令流,收集程序的内部状态信息,实时收集状态信息指导重构恶意输入,影响正在执行的程序的状态,并以此确定出现漏洞的具体位置前执行的指令流,来完成漏洞点的回溯;
第四步,指令流回溯寻找到的漏洞点,通过追踪代码执行分支来确定软件漏洞和外部输入的联系,判断受测软件基于用户提交的数据所做出的决策,通过追踪交互数据在内存页中断点的情况有利于追踪外部输入的流向,确定漏洞和外部输入的关联关系,最终用来确定漏洞的危害性。
2、根据权利要求1所述的基于可执行代码逆向分析的漏洞挖掘方法,其特征是,第一步中,使用受检测软件内置调试程序或附加到软件上的调试程序,将低观测性的软件变成高观测性软件,其结果用于指导是否将软件系统错误和导致错误的外部输入进行深入的漏洞探测。
3、根据权利要求1所述的基于可执行代码逆向分析的漏洞挖掘方法,其特征是,第一步中,代码覆盖使用指令流追踪的技术,代码覆盖记录能够测试尽可能多的、已生成的代码树分支。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008102077695A CN101482846A (zh) | 2008-12-25 | 2008-12-25 | 基于可执行代码逆向分析的漏洞挖掘方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008102077695A CN101482846A (zh) | 2008-12-25 | 2008-12-25 | 基于可执行代码逆向分析的漏洞挖掘方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101482846A true CN101482846A (zh) | 2009-07-15 |
Family
ID=40879965
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2008102077695A Pending CN101482846A (zh) | 2008-12-25 | 2008-12-25 | 基于可执行代码逆向分析的漏洞挖掘方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101482846A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814053A (zh) * | 2010-03-29 | 2010-08-25 | 中国人民解放军信息工程大学 | 一种基于功能模型的二进制代码漏洞发现方法 |
CN102034045A (zh) * | 2010-12-15 | 2011-04-27 | 上海交通大学 | 低计算机系统资源开销的软件漏洞检测系统 |
CN101714118B (zh) * | 2009-11-20 | 2011-06-22 | 北京邮电大学 | 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法 |
CN102129538A (zh) * | 2011-03-04 | 2011-07-20 | 北京邮电大学 | 传感器网络源代码缓冲区溢出漏洞检测系统和方法 |
CN102541729A (zh) * | 2010-12-31 | 2012-07-04 | 航空工业信息中心 | 软件安全漏洞检测装置和方法 |
CN103369532A (zh) * | 2012-04-09 | 2013-10-23 | 黄余晖 | 一种移动终端恶意软件行为的黑盒检测方法 |
CN103577315A (zh) * | 2012-07-30 | 2014-02-12 | 国际商业机器公司 | 反向调试器和反向调试方法 |
CN104115117A (zh) * | 2012-02-07 | 2014-10-22 | 国际商业机器公司 | 用于安全性测试的单元测试的自动合成 |
CN104965777A (zh) * | 2015-02-04 | 2015-10-07 | 腾讯科技(深圳)有限公司 | 一种安全测试的方法、装置及系统 |
CN104978532A (zh) * | 2011-12-27 | 2015-10-14 | 北京奇虎科技有限公司 | 一种漏洞修复客户端逻辑的测试方法及系统 |
CN105138459A (zh) * | 2015-09-11 | 2015-12-09 | 北京金山安全软件有限公司 | 一种对软件程序进行测试的方法及装置 |
TWI566090B (zh) * | 2014-10-17 | 2017-01-11 | Insyde Software Corp | Debugging firmware / software to produce tracking systems and methods, recording media and computer program products |
-
2008
- 2008-12-25 CN CNA2008102077695A patent/CN101482846A/zh active Pending
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714118B (zh) * | 2009-11-20 | 2011-06-22 | 北京邮电大学 | 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法 |
CN101814053B (zh) * | 2010-03-29 | 2013-03-13 | 中国人民解放军信息工程大学 | 一种基于功能模型的二进制代码漏洞发现方法 |
CN101814053A (zh) * | 2010-03-29 | 2010-08-25 | 中国人民解放军信息工程大学 | 一种基于功能模型的二进制代码漏洞发现方法 |
CN102034045A (zh) * | 2010-12-15 | 2011-04-27 | 上海交通大学 | 低计算机系统资源开销的软件漏洞检测系统 |
CN102034045B (zh) * | 2010-12-15 | 2012-11-28 | 上海交通大学 | 低计算机系统资源开销的软件漏洞检测系统 |
CN102541729A (zh) * | 2010-12-31 | 2012-07-04 | 航空工业信息中心 | 软件安全漏洞检测装置和方法 |
CN102129538A (zh) * | 2011-03-04 | 2011-07-20 | 北京邮电大学 | 传感器网络源代码缓冲区溢出漏洞检测系统和方法 |
CN104978532A (zh) * | 2011-12-27 | 2015-10-14 | 北京奇虎科技有限公司 | 一种漏洞修复客户端逻辑的测试方法及系统 |
CN104978532B (zh) * | 2011-12-27 | 2018-10-23 | 北京奇虎科技有限公司 | 一种漏洞修复客户端逻辑的测试方法及系统 |
CN104115117B (zh) * | 2012-02-07 | 2017-09-05 | 国际商业机器公司 | 对计算机程序施行安全性分析的方法、系统和存储介质 |
CN104115117A (zh) * | 2012-02-07 | 2014-10-22 | 国际商业机器公司 | 用于安全性测试的单元测试的自动合成 |
CN103369532B (zh) * | 2012-04-09 | 2018-07-13 | 黄余晖 | 一种移动终端恶意软件行为的黑盒检测方法 |
CN103369532A (zh) * | 2012-04-09 | 2013-10-23 | 黄余晖 | 一种移动终端恶意软件行为的黑盒检测方法 |
CN103577315B (zh) * | 2012-07-30 | 2017-02-22 | 国际商业机器公司 | 反向调试器和反向调试方法 |
CN103577315A (zh) * | 2012-07-30 | 2014-02-12 | 国际商业机器公司 | 反向调试器和反向调试方法 |
TWI566090B (zh) * | 2014-10-17 | 2017-01-11 | Insyde Software Corp | Debugging firmware / software to produce tracking systems and methods, recording media and computer program products |
CN104965777A (zh) * | 2015-02-04 | 2015-10-07 | 腾讯科技(深圳)有限公司 | 一种安全测试的方法、装置及系统 |
CN104965777B (zh) * | 2015-02-04 | 2019-02-05 | 腾讯科技(深圳)有限公司 | 一种安全测试的方法、装置及系统 |
CN105138459A (zh) * | 2015-09-11 | 2015-12-09 | 北京金山安全软件有限公司 | 一种对软件程序进行测试的方法及装置 |
CN105138459B (zh) * | 2015-09-11 | 2019-02-15 | 珠海豹趣科技有限公司 | 一种对软件程序进行测试的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101482846A (zh) | 基于可执行代码逆向分析的漏洞挖掘方法 | |
Cao et al. | MVD: memory-related vulnerability detection based on flow-sensitive graph neural networks | |
US10664601B2 (en) | Method and system automatic buffer overflow warning inspection and bug repair | |
Tian et al. | Automatically diagnosing and repairing error handling bugs in C | |
CN107111544B (zh) | 生产诊断中的历史控制流可视化 | |
CN101853200B (zh) | 一种高效动态软件漏洞挖掘方法 | |
Imtiaz et al. | How do developers act on static analysis alerts? an empirical study of coverity usage | |
CN112733150B (zh) | 一种基于脆弱性分析的固件未知漏洞检测方法 | |
CN104732152A (zh) | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 | |
KR20190041912A (ko) | 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램 | |
Yao et al. | Statsym: vulnerable path discovery through statistics-guided symbolic execution | |
CN112181833A (zh) | 一种智能化模糊测试方法、装置及系统 | |
CN111723380B (zh) | 一种检测组件漏洞的方法及装置 | |
Chen et al. | A large-scale empirical study on control flow identification of smart contracts | |
CN107193732A (zh) | 一种基于路径比对的校验函数定位方法 | |
Lin et al. | Recovering fitness gradients for interprocedural Boolean flags in search-based testing | |
Xu et al. | Melton: a practical and precise memory leak detection tool for C programs | |
Di Nardo et al. | Generating complex and faulty test data through model-based mutation analysis | |
CN112817787A (zh) | 中断驱动嵌入式系统数据竞争的自动检测方法 | |
CN103914374A (zh) | 基于程序切片和频繁模式提取的代码缺陷检测方法及装置 | |
US7624304B2 (en) | Defect detection for integers | |
Zhao et al. | Context-sensitive interprocedural defect detection based on a unified symbolic procedure summary model | |
Wang et al. | Find bugs in static bug finders | |
Yan et al. | A comprehensive evaluation of android icc resolution techniques | |
Li et al. | Comparison and Evaluation on Static Application Security Testing (SAST) Tools for Java |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20090715 |