CN103389939B - 一种针对堆可控分配漏洞的检测方法及系统 - Google Patents
一种针对堆可控分配漏洞的检测方法及系统 Download PDFInfo
- Publication number
- CN103389939B CN103389939B CN201310277696.8A CN201310277696A CN103389939B CN 103389939 B CN103389939 B CN 103389939B CN 201310277696 A CN201310277696 A CN 201310277696A CN 103389939 B CN103389939 B CN 103389939B
- Authority
- CN
- China
- Prior art keywords
- analysis
- symbol
- heap
- value
- size
- 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
- 238000001514 detection method Methods 0.000 title claims abstract description 21
- 238000013519 translation Methods 0.000 claims abstract description 23
- 238000000034 method Methods 0.000 claims abstract description 19
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 claims abstract description 7
- 238000012544 monitoring process Methods 0.000 claims abstract description 5
- 230000006870 function Effects 0.000 claims description 32
- 230000009467 reduction Effects 0.000 claims description 2
- 238000010230 functional analysis Methods 0.000 claims 2
- 238000005259 measurement Methods 0.000 abstract description 2
- 230000003068 static effect Effects 0.000 description 9
- 238000012360 testing method Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 4
- 230000007547 defect Effects 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000009412 basement excavation Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000011076 safety test Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明为一种针对堆可控分配漏洞的检测方法,覆盖率比Fuzzing等动态测试技术高,并且同时具备动态检测的准确性,误报率低。第一步:对目标分析文件进行逆向获取需要分析的函数和参数信息;第二步:对需要分析的函数的参数进行符号化,第三步:利用符号执行引擎对目标程序进行具体执行和符号执行相结合的分析;第四步:利用二进制翻译方法对堆分配函数进行监控分析;第五步:通过堆栈获取堆分配函数需要分配的大小,并判断是否为符号值;第六步:对符号值进行分析求解;第七步:对符号值size进行整数溢出分析。
Description
技术领域
本发明涉及一种针对堆可控分配漏洞的检测方法及系统,属于操作系统漏洞检测领域。
背景技术
内存管理方面的安全问题是操作系统安全领域非常重要的一部分,内存分配以及内存访问安全问题的研究非常重要。一般来说漏洞挖掘的方法分为静态检测和动态运行测试。它们分别指:
静态检测:主要是通过对软件系统的源代码进行安全扫描,根据程序中数据流,控制流,语义等信息与其特有软件安全规则库进行匹对,从中找出代码中潜在的安全漏洞。静态的源代码安全测试是非常有用的方法,它可以在编码阶段找出所有可能存在安全风险的代码,这样开发人员可以在早期解决潜在的安全问题。
动态测试:动态检测技术是一种不同于静态检测技术的动态的检测技术,它通过调试器运行被检测的软件的某项功能,检查运行结果与预期结果的差距,来确定被测软件此功能是否存在安全缺陷。这是一种针对软件功能的检测技术,它主要由构造测试用例,调试软件程序,分析软件程序三个部分构成。
现有的漏洞检测技术主要是基于源代码的静态分析、基于二进制代码的静态分析、Fuzzing测试技术。单纯的静态检测准确度低、误报率高,而动态测试的覆盖率又比较低,漏报较多。
可控堆分配漏洞定义:当一个函数调用,在某个分支或路径上进行堆分配操作(即malloc),在linux内核中一般调用kmalloc来实现。而此时要分配的大小可由函数传入的参数来控制的,那么该函数存在可控堆分配漏洞。攻击者可以通过构造相应的输入使得kmalloc的大小为0或者很大的数,从而使得程序的运行得到意想不到的结果。如果此时的可控分配大小还可以存在整数溢出,使得通过一个较大的输入因子溢出后分配的结果为较小的值,而这种情况容易被程序员疏忽,在后面进行内存操作时发生错误。如cve-2004-1334、cve-2004-2013、cve-2011-1746,皆为这类型漏洞。
可控堆分配漏洞并不被认为是一种新的漏洞类型(像缓冲区溢出漏洞一样)。但是我们认为这是一种新的类型的代码缺陷,类似整数溢出,许多时候会发生,但是是合法的,且不会导致漏洞。但这种缺陷发生的同时,还有整数溢出发生,那么之后发生堆缓冲区溢出的可能性将大大增加,从而导致严重的安全隐患。
发明内容
本发明提供一种针对堆可控分配漏洞的检测方法及系统,基于融合了使用虚拟机技术动态执行测试和使用符号执行静态分析技术的通用测试平台,覆盖率比Fuzzing等动态测试技术高,并且同时具备动态检测的准确性,误报率低。
该针对堆可控分配漏洞的检测方法包括以下步骤:
第一步:对目标分析文件进行逆向分析,通过反汇编、反编译、调试分析手段,对目标分析文件进行信息的获取和还原,获取的信息包括文件的执行流程信息、函数名称、参数信息、资源信息;
第二步:对需要分析的文件的函数参数进行符号化;
第三步:利用符号执行引擎对目标分析文件进行具体执行和符号执行相结合的分析,从而遍历所有路径;
第四步:利用二进制翻译方法对堆分配函数进行监控分析;
第五步:在目标分析文件执行到被监控的堆分配函数处时,对堆分配函数进行分析,通过堆栈获取堆分配函数需要分配的大小,并判断是否为符号值,如果是具体值,则继续运行,跳转至第八步;如果是符号值,则报告该路径所达的堆分配函数是存在可控堆分配漏洞,返回第三步;
第六步:对符号值进行分析求解,如果size可以等于0,则表示通过设置相关参数,可以使得堆分配函数分配大小为0的内存,则报告中等危险漏洞;
第七步:对符号值size进行整数溢出分析,并结合该路径上对size的约束,检测是否存在通过设定相应的变量,使得该符号值size存在整数溢出的可能,如果存在,则报告高等危险漏洞,并结束该路径。
本发明的优点在于将选择性符号执行和整数溢出错误检测结合,在脱离了源码依赖的基础上又提高了检测结果的正确性和全面性,而且在时间消耗上也比完全符号执行更有优势,这是目前单纯的动态和静态整数溢出错误检测所无法同时达到的。
附图说明
图1是本发明所提出方法工作流程图;
图2为本发明针对堆可控分配漏洞的检测系统结构图。
具体实施方式
下面结合具体实施例和附图详细说明本发明,但本发明并不仅限于此。
如图1所示,本发明将提出的针对可控堆分配漏洞进行检测的方法,包括以下步骤:
1、对目标分析文件进行逆向工程,获取需要分析的函数和参数信息;
2、对需要分析的函数的参数进行符号化,
3、利用基于虚拟机技术的符号执行引擎对目标程序进行具体执行和符号执行相结合的分析,从而可以遍历所有路径。
4、利用二进制翻译技术对*malloc函数(实现堆分配的函数,如在linux内核中是kmalloc)进行监控分析。
5、在目标程序执行到被监控的*malloc函数处时,对*malloc进行分析,通过堆栈获取*malloc需要分配的大小,并判断是否为符号值。如果是具体值,则继续运行,跳转至步骤8;如果是符号值,则报告该路径所达的*malloc是存在可控堆分配漏洞,跳转至步骤3。
6、对符号值size进行分析求解,如果size可以等于0,则表示可以通过设置相关参数,使得*malloc分配大小为0的内存。如果可以,则报告中等危险漏洞
7、对符号值size进行整数溢出分析,并结合该路径上对size的约束,检测是否存在通过设定相应的变量,使得该符号值size存在整数溢出的可能。如果存在,则报告高等危险漏洞。
8、结束该路径。
如图2所示,本发明的针对堆可控分配漏洞的检测系统是在虚拟机技术的基础上,结合具体执行和符号执行来实现的。在执行过程中,系统将目标程序在虚拟机中执行,对需要分析的函数的参数进行符号化,在*malloc处进行监控分析,并判断*malloc要分配内存的大小是否也为符号值,是否可能等于0,是否存在整数溢出等情况。
本系统主要可分为三个子系统,包括动态二进制翻译子系统、执行引擎子系统和硬件虚拟子系统。
动态二进制翻译子系统主要完成对目标程序进行动态二进制翻译。动态二进制翻译(DBT)在代码执行时,将一个平台的可执行代码转换为另一个平台的可执行代码。例如QEMU能运行x86windows在MIPS机器上,通过将X86代码转换成MIPS指令集。QEMU运行在一个循环中:不断的抓取guest代码块,将它们转换成host的指令集,并将翻译结果运行在执行引擎上。
DBT通过读取虚拟机CPU和guest内存的状态来决定抓取哪段代码(例如,CPU当中的当前程序计数和内存中存储的程序代码)。这个状态被更新成部分被翻译的执行代码。
首先,DBT将guest指令翻译成micro-operations,QEMU中间解释(IR)。Micro-operations将复杂的guest执行查分成简单的操作,使其更容易模拟。DBT将多个微操作打包成翻译块。一个翻译块包含一个微操作序列,并包含第一个修改控制流程的微操作,像一个branch,一个call或者一个return。对于控制流的改变,翻译器不能增加翻译块指令,因为翻译器不能总是静态决定在代码何处继续翻译。DBT将微操作形成的翻译块转换成host指令集的机器指令,通过使用一个将微操作和host指令一一映像的代码字典将每个微操作转换成一个等效的host指令。大多数的转换是从微指令到相对应的机器指令的一一映像。
对于更复杂的指令,像操作处理器的控制状态或者访问内存,DBT发送微操作来调用emulationhelper.一些helpers大且使用频繁,因此对于生成的代码大小,在被翻译的代码中内联它们的代价是高昂的。其次,为了使用KLEE符号执行引擎的接口,增加LLVMback-end到QEMU,这个back-end将微指令翻译成LLVMIR(中间表达),可以被KLEE直接解释。无论是guestOS或者KLEE都不知道x86-to-LLVM翻译器:guestOS看它的指令被执行,KLEE仅仅看见LLVM指令,就好像它们是从程序上完全编译成LLVM。这样guest认为全部都是具体执行,而KLEE认为全部都是符号执行。DBT必须翻译代码,同时允许精确的异常处理,随时发生的硬件中断,页面错误等。
通过扩展DBT来使其能够精确处理LLVMcode中产生的异常。当一个异常发生时,QEMU将产生异常的翻译的指令地址转成guest代码的程序计数。这种转换是可行的,因为每个guest指令对应一个明确的界定序列的host机器指令。然而,LLVM没有这样明确的通信,因为LLVM应用更多在每个翻译块的优化方面。为了解决这个问题,我们通过插入微指令修改DBT,在每个guest指令被执行前明确的更新程序计数。这样LLVM代码和本地代码在执行程序的每一点上都有一致的程序计数,允许精确的异常处理。
执行引擎子系统主要包括具体执行模块、符号执行模块和*malloc分析模块。本子系统集成QEMU和KLEE两个工具,分别实现具体执行和符号执行。我们扩展了QEMU的执行引擎,使具体执行、符号执行之间能够透明切换,同时保持状态的一致性。执行引擎是一个循环组成的,其中调用DBT来翻译guest代码,然后在native模式运行或者在符号执行引擎中解释执行。
执行引擎不知道要求DBT生成LLVM或是native代码。它首先通知DBT生成nativecode,但如果代码在读取的内存中包含符号数据时,它让DBT重新将代码翻译成LLVM。DBT在cache中存储翻译的指令,来避免不必要的重译,例如当执行一个循环或者重复调用相同的函数。可以通过emulationhelpers调解访问大多数的VM状态。简单的指令直接访问CPU状态,内存访问,设备I/O,复杂的CPU状态操作可以通过特定的helpers,这是为了减少翻译代码的尺寸。
例如,在执行过程中,软件中断指令的翻译代码触发dointerrupthelper。helper通过检测当前执行模块和权限级别,保存寄存器,注意潜在异常等来模拟软件中断指令的行为。本子系统提供符号执行(LLVM)和具体执行(native)emulationhelpers。在hostCPU上执行具体代码时,Native-modehelpers调解访问共享状态,而LLVMhelpers用于符号执行模式。当执行引擎在hostCPU上运行在native-modehelpers和在符号执行引擎中使用LLVMhelpers解释。LLVMhelpers有时必须调用native-modeQEMU代码,例如模拟一个虚拟设备。LLVMemulationhelpers避免来自KLEE内的对nativeemulationhelpers的调用而产生的不必要的强制具体化。由被翻译的代码调用的emulationhelpers,编译两次:X86和LLVM。当运行在符号模式时,KLEE执行LLVM版本的helper来处理符号数据。如果版本错误,KLEE将强制调用nativex86版本的helper,这将强制具体化符号数据。
*malloc分析模块主要完成对*malloc函数动态运行时的分析,包括判断*malloc要分配内存的大小是否为符号值;分析该符号值是否可能等于0;分析该符号表达式是否存在整数溢出等情况。
硬件虚拟子系统主要实现对CPU、内存、设备的模拟实现。
Claims (2)
1.针对堆可控分配漏洞的检测方法,其特征在于,包括以下步骤:
第一步:对目标分析文件进行逆向分析,通过反汇编、反编译、调试分析手段,对目标分析文件进行信息的获取和还原,获取的信息包括文件的执行流程信息、函数名称、参数信息、资源信息;
第二步:对需要分析的文件的函数参数进行符号化;
第三步:利用符号执行引擎对目标分析文件进行具体执行和符号执行相结合的分析,从而遍历所有路径;
第四步:利用二进制翻译方法对堆分配函数进行监控分析;
第五步:在目标分析文件执行到被监控的堆分配函数处时,对堆分配函数进行分析,通过堆栈获取堆分配函数需要分配的大小,并判断是否为符号值,如果是具体值,则继续运行,跳转至第八步;如果是符号值,则报告该路径所达的堆分配函数是存在可控堆分配漏洞,返回第三步;
第六步:对符号值进行分析求解,如果size可以等于0,则表示通过设置相关参数,可以使得堆分配函数分配大小为0的内存,则报告中等危险漏洞;
第七步:对符号值size进行整数溢出分析,并结合该路径上对size的约束,检测是否存在通过设定相应的变量,使得该符号值size存在整数溢出的可能,如果存在,则报告高等危险漏洞,并结束该路径。
2.针对堆可控分配漏洞的检测系统,其特征在于:包括动态二进制翻译子系统、执行引擎子系统和硬件虚拟子系统;
动态二进制翻译子系统完成对目标程序进行动态二进制翻译,在代码执行时,将一个平台的可执行代码转换为另一个平台的可执行代码;
执行引擎子系统包括具体执行模块、符号执行模块和堆分配函数分析模块,实现具体执行和符号执行;执行引擎子系统调用DBT来翻译guest代码,然后在native模式运行或者在符号执行引擎中解释执行;
具体执行模块提供在hostCPU上执行具体代码,符号执行模块提供符号执行;执行引擎子系统首先通知DBT生成nativecode进行具体执行,但如果代码在读取的内存中包含符号数据时,它让DBT重新将代码翻译成LLVM,进行符号执行;堆分配函数分析模块完成对堆分配函数动态运行时的分析,包括判断堆分配函数要分配内存的大小是否为符号值;分析该符号值是否可能等于0;分析该符号表达式是否存在整数溢出情况;
硬件虚拟子系统实现对CPU、内存、设备的模拟实现。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310277696.8A CN103389939B (zh) | 2013-07-03 | 2013-07-03 | 一种针对堆可控分配漏洞的检测方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310277696.8A CN103389939B (zh) | 2013-07-03 | 2013-07-03 | 一种针对堆可控分配漏洞的检测方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103389939A CN103389939A (zh) | 2013-11-13 |
CN103389939B true CN103389939B (zh) | 2015-11-25 |
Family
ID=49534218
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310277696.8A Active CN103389939B (zh) | 2013-07-03 | 2013-07-03 | 一种针对堆可控分配漏洞的检测方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103389939B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103745153B (zh) * | 2013-12-30 | 2015-07-08 | 北京控制工程研究所 | 一种航天器软件空间使用安全性检查方法 |
CN104732152B (zh) * | 2015-04-07 | 2017-11-24 | 南京大学 | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 |
CN106407113B (zh) * | 2016-09-09 | 2018-12-11 | 扬州大学 | 一种基于Stack Overflow和commit库的bug定位方法 |
CN107368417B (zh) * | 2017-07-25 | 2020-10-23 | 中国人民解放军63928部队 | 一种漏洞挖掘技术测试模型的测试方法 |
CN112783755B (zh) * | 2019-11-07 | 2024-03-22 | 上海蜚语信息科技有限公司 | 一种基于自然语言理解函数原型发现内存破坏漏洞的方法 |
CN111488579B (zh) * | 2020-03-25 | 2023-06-02 | 腾讯科技(深圳)有限公司 | 漏洞检测方法、装置、电子设备和计算机可读存储介质 |
CN111931191A (zh) * | 2020-09-09 | 2020-11-13 | 中国人民解放军国防科技大学 | Linux平台二进制软件堆溢漏洞动态检测方法及系统 |
CN113656280B (zh) * | 2021-07-09 | 2024-04-05 | 中国科学院信息工程研究所 | 基于符号执行的漏洞利用点查找方法及装置 |
CN113553593B (zh) * | 2021-07-21 | 2023-08-04 | 浙江大学 | 基于语义分析的物联网固件内核漏洞挖掘方法及系统 |
CN114036072B (zh) * | 2022-01-06 | 2022-04-08 | 湖南泛联新安信息科技有限公司 | 一种支持自动化检测程序缺陷的方法和系统 |
CN114579976B (zh) * | 2022-02-25 | 2023-07-14 | 中国人民解放军国防科技大学 | 基于状态转换的堆内存破坏漏洞自动验证方法和系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714118A (zh) * | 2009-11-20 | 2010-05-26 | 北京邮电大学 | 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法 |
CN102521079A (zh) * | 2011-12-02 | 2012-06-27 | 华中科技大学 | 软件栈缓冲区溢出的容错方法 |
CN102622558A (zh) * | 2012-03-01 | 2012-08-01 | 北京邮电大学 | 一种二进制程序漏洞的挖掘装置和方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102006029138A1 (de) * | 2006-06-22 | 2007-12-27 | Dspace Digital Signal Processing And Control Engineering Gmbh | Verfahren und Computerprogrammprodukt zur Detektion von Speicherlecks |
-
2013
- 2013-07-03 CN CN201310277696.8A patent/CN103389939B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714118A (zh) * | 2009-11-20 | 2010-05-26 | 北京邮电大学 | 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法 |
CN102521079A (zh) * | 2011-12-02 | 2012-06-27 | 华中科技大学 | 软件栈缓冲区溢出的容错方法 |
CN102622558A (zh) * | 2012-03-01 | 2012-08-01 | 北京邮电大学 | 一种二进制程序漏洞的挖掘装置和方法 |
Non-Patent Citations (1)
Title |
---|
《基于不安全函数的缓冲区溢出发现技术研究》;任华;《中国优秀硕士学位论文全文数据库 信息科技辑》;20080715(第7期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN103389939A (zh) | 2013-11-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103389939B (zh) | 一种针对堆可控分配漏洞的检测方法及系统 | |
CN103778061B (zh) | 数组越界错误的自动检测和校正方法 | |
CN102760098B (zh) | 面向bit软件测试的处理器故障注入方法及其模拟器 | |
Eceiza et al. | Fuzzing the internet of things: A review on the techniques and challenges for efficient vulnerability discovery in embedded systems | |
CN102402479B (zh) | 用于静态分析的中间表示结构 | |
CN110750459A (zh) | 基于白盒分析的测试用例自动生成和测试进程管理方法 | |
EP2972828B1 (en) | Operating system support for contracts | |
CN102651062A (zh) | 基于虚拟机架构的恶意行为跟踪系统和方法 | |
Guth et al. | Rv-match: Practical semantics-based program analysis | |
Cai et al. | SENSA: Sensitivity analysis for quantitative change-impact prediction | |
Li et al. | On-line control flow error detection using relationship signatures among basic blocks | |
CN102722438A (zh) | 一种内核调试的方法和设备 | |
CN116738436B (zh) | 一种漏洞可达性分析方法、系统、计算机设备和处理器 | |
Liu | Jsoptimizer: an extensible framework for javascript program optimization | |
Chen et al. | Diagconfig: Configuration diagnosis of performance violations in configurable software systems | |
Ren et al. | A dynamic taint analysis framework based on entity equipment | |
Wang et al. | Detecting data races in interrupt-driven programs based on static analysis and dynamic simulation | |
US11886589B2 (en) | Process wrapping method for evading anti-analysis of native codes, recording medium and device for performing the method | |
Höller et al. | Evaluation of diverse compiling for software-fault detection | |
CN101539976B (zh) | 二进制程序内存腐烂攻击的实时检测系统 | |
Pomorova et al. | Assessment of the source code static analysis effectiveness for security requirements implementation into software developing process | |
Kashima et al. | Comparison of backward slicing techniques for java | |
Duraibi et al. | A Survey of Symbolic Execution Tools. | |
Balzarotti et al. | Using program slicing to analyze aspect-oriented composition | |
Van Der Kouwe et al. | On the soundness of silence: Investigating silent failures using fault injection experiments |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |