CN116166535A - 一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法 - Google Patents

一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法 Download PDF

Info

Publication number
CN116166535A
CN116166535A CN202211660540.3A CN202211660540A CN116166535A CN 116166535 A CN116166535 A CN 116166535A CN 202211660540 A CN202211660540 A CN 202211660540A CN 116166535 A CN116166535 A CN 116166535A
Authority
CN
China
Prior art keywords
memory
heap
state
fuzzy test
original
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
Application number
CN202211660540.3A
Other languages
English (en)
Inventor
杨栋
陈浩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hunan University
Original Assignee
Hunan University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hunan University filed Critical Hunan University
Priority to CN202211660540.3A priority Critical patent/CN116166535A/zh
Publication of CN116166535A publication Critical patent/CN116166535A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明属于堆漏洞挖掘领域,涉及一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法。本发明的方法包括:选择非易失内存分配器作为堆漏洞挖掘对象;迅速判断内存区域是否处于可以被攻击的状态;模糊测试工具检测出内存区域处于可攻击状态;对冗余的二进制代码进行删减以及将删减后的二进制代码转换为高级程序语言代码。其流程图如图1所示。该方法可以全面评估非易失内存动态内存分配器的安全性,帮助开发人员发现漏洞,分析漏洞产生原因,及时弥补。

Description

一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法
技术领域
本发明属于堆漏洞挖掘领域,涉及一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法。
背景技术
大数据时代的到来,导致数据系统从计算密集型向数据密集型方向发展,如何构建可靠高效的数据存储系统,成为大数据时代迫切需要解决的问题。而新型的非易失存储器(non-volatilememory,NVM)以高集成度、低静态能耗、掉电数据不丢失和接近DRAM的性能等特性,吸引了研究人员的管饭关注。Intel公司于2019年推出的OptaneDC非易失内存以及一系列的开发工具则将非易失内存推向了商用阶段,然而不同于传统存储体系,其安全性没有得到很好评估,堆漏洞便是其一。
与栈这种汇编级别的数据区域不同,堆实现在系统层级。因为堆数据的布局并不是编译时确定的,而是根据运行时的状态动态确定的,其分配和管理的难度都要比栈数据大。堆漏洞的两大特性受到了攻击者的欢迎:第一,程序独立性,即攻击者不需要对目标程序内部有深入理解也能写出攻击代码;第二,功能强大性,例如对ptmalloc2(Linux操作系统的默认内存分配器)的元数据覆盖一个NULL字节,这样一个看似良性的bug会导致软件在操作系统上的特权升级。当前与堆相关的漏洞是系统软件中安全问题最常见且最关键的来源。
早于攻击者发现并且及时修复漏洞能够有效的降低潜在漏洞对于系统安全的威胁,因此主动挖掘并分析系统安全漏洞具有重要的价值。然而传统的堆漏洞挖掘方法主要依赖人工分析,这导致对于内存分配器安全性的评估不够全面。模糊测试是漏洞挖掘领域常用的技术,其核心思想是将自动或半自动生成的随机会数据输入到一个程序中,并监视程序异常,如崩溃,断言(assertion)失败,以发现可能的程序错误。将模糊测试技术运用于非易失内存堆漏洞挖掘,不仅可以解放程序员,而且可以更为全面的评估内存分配器的安全性,对系统安全有十分重要理论价值和实践意义。
发明内容
为了解决基于非易失内存所研发的全新存储系统堆内存的安全性问题,本发明提供了一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法。本方法不仅可以全面评估非易失内存分配器的安全性,而且还能帮助程序员更加便利地分析漏洞产生原因,修复漏洞,有效降低潜在漏洞对于系统安全性的威胁。本发明所述方法步骤如图1所示,包括以下主要步骤:
S1.插桩:对模型进行插桩的预处理,以记录代码覆盖率;
S2.模糊测试:选择输入文件,作为初始测试集加入输入队列。将队列中的文件按一定的策略进行“突变”,如果经过变异文件更新了覆盖范围,则将其保留添加到队列中。上述过程会一直循环进行,若某一文件使得模型产生期待信号,则该文件被记录下来;
S3.生成min-PoC(Proof of Concept)代码:对记录下来的文件中的代码进行Delta-Debugging,以去除代码当中的冗余部分,然后将二进制文件转化常用的编程语言,例如C语言,便于研究人员的后续分析研究;
S4.人工分析。
对于该方法主要部分,下面将做出详细说明:
1.插桩
插桩是在保证被测程序原有逻辑完整性的基础上,在程序中插入一些探针(本质上就是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息。代码覆盖率使得模糊测试工具对变异的输入文件的质量有了判断依据,可以更加高效地生成变异文件。
2.堆漏洞挖掘模型
常规的模糊测试只需要将测试用例注入软件,然后对软件的异常情况进行监控即可。但是将此方式直接应用于非易失内存分配器期望发现堆漏洞是不可行的,为此设计了一个模型用以模拟堆漏洞挖掘的常见操作,然后用模糊测试软件对该模型进行模糊测试即可。
内存分配器设计时由于性能、效率等因素的考量,难免存在一些bug(即使得攻击者将程序转换到未曾预知到的状态),但是这些bug往往无伤大雅,所一直存在。攻击者通过对这些bug的一些恶意使用技巧,可以达到攻击软件系统目的,这便是堆漏洞挖掘了。堆漏洞实质上是对于内存分配器的操作序列,每一个操作既可以是常规操作,也可以是bug的使用,而且序列中至少有一次对于bug的使用。
(1)我们的模型将堆技术抽象成两个方面:
Ⅰ.bug类型。有四种与堆相关的常见bug类型:
·溢出(overflow,OF):数据写在对象边界以外;
·释放后写(Write-after-free,WF):被释放的对象依旧被使用;
·任意释放(Arbitrary free,AF):释放任意的指针,即该指针很可能不指向一个动态分配的内存区域;
·双重释放(Double free,DF):对于已释放的指针再次释放。
Ⅱ.可攻击态。堆漏洞挖掘技术的目的是将一般类型的堆相关bug开发成更加具有威胁性的可攻击态,以进行全面性攻击。当模型处于可攻击态时,可以认为使模型转换到可攻击态所对应的内存分配器操作序列是一种堆漏洞挖掘技术。我们将可攻击态分为四类:
·任意内存块(Arbitrary-chunk,AC):使将要分配的内存块是已经有指针指向的内存块;
·内存块重叠(Overlapping-chunk,OC):使得将要分配的内存块与攻击者控制的内存块重叠;
·任意写(Arbitrary-write,AW):堆上的数据或全局数据存放区上的数据被攻击者修改;
·有限制写(Restricted-write,RW):类似于任意写,但是有一些限制。
(2)攻击模型。为了一般性描述堆漏洞挖掘技术,我们定义了攻击者可以发起的操作:
Ⅰ.攻击者可以不限制次数地动态分配任意大小的内存块,且能够以任意顺序释放这些内存块;
Ⅱ.攻击者可以在合法的内存区域写任何数据(即动态分配的内存的负载数据存储区,或全局变量、静态类型的变量所在的内存区域);
Ⅲ.攻击者在一次攻击当中只可以使用一种bug类型,但是可以同种bug类型可以多次使用。例如:攻击者在一次攻击中使用了WF类型的bug,那么之后便不能使用OF、AF、DF类型的bug,但是对于之后WF类型的bug使用不做限制。这是为了模拟实际攻击情况。
3.模糊测试
模糊测试向系统注入非法、畸形或非预期的输入,以揭示软件缺陷和漏洞。在模糊测试的过程中,我们要实时监控故障或异常,及时发现问题,这是模糊测试过程中一个至关重要的环节。
常规模糊测试工具监控程序运行中的故障或异常,但是堆漏洞挖掘模型处于可攻击态时不一定产生故障或异常,所以常规的检测手段并不适用。为了高效、准确地检测出堆漏洞挖掘模型运行过程中是否处于可攻击态,我们采用如下解决办法:
(1)屏蔽常规模糊测试工具所关注的信号,例如段错误。避免这些信号对检测产生干扰,记录不必要的文件;
(2)堆漏洞挖掘模型处于攻击态,会产生信号SIGUSR2(非标准信号,自己定义的)。当模糊测试工具监测到SIGUSR2时,会将测试用例所对应的文件记录下来;
(3)采用影子内存的方式可以快速、准确地判断堆漏洞挖掘模型是否处于攻击态。影子内存本质上是对分配的堆空间和全局数据存储区域的复制,在原始内存空间上的任何操作,都会在影子内存上重复一边。通过比较影子内存和原始内存空间是否有差别,以及差别的类型,可以迅速判断堆漏洞挖掘模型是否处于攻击态,何种攻击态。
4.min-PoC生成
由于模糊测试的随机性,所记录文件中代码所对应的序列有冗余,给后续人工分析带来不必要的干扰。我们采用Delta-Debugging的方式去掉代码当中的冗余部分。其基本原理如下:操作序列是模拟实际攻击者攻击动态内存分配器所执行的一系列操作S=<A1,A2,A3,...,An>,其中Ai是某一具体操作。通过从头到尾的去掉某一操作得到一个新序列,执行新序列,测试能否达到原序列相同的状态。如果能达到相同状态,则说明去掉的操作是冗余的,否则说明该操作并非冗余。通过一轮又一轮的删除操作然后判断是否达到与原序列相同的状态,可以得到最小化的操作序列Smin。在获取Smin后,即可将二进制代码转化为我们常用的编程语言,本方法中转换为C语言,如此便得到了min-PoC。
5.人工分析
虽然生成了min-PoC,但是其只能去除代码中的冗余部分,而不能判断不同的min-PoC所揭露的漏洞是否相同。例如,攻击序列S1=<A1,A2,A3,...,Ai,...,An>,攻击序列S2=<B1,B2,B3,...,Bi,...,Bn>,S1和S2除了Ai、Bi操作不相同,其余编号相同操作都一致,但是Ai为“a=10”,而Bi为“a=100”。这两个攻击序列所对应的漏洞是相同的,但是却会生成不同的min-PoC。这只是一个简单的例子,实际上还有更多的情况,在此不做赘述。
附图说明
图1:基于模糊测试自动化挖掘非易失内存堆漏洞的方法的流程图示意图。
具体实施方式
本发明的硬件环境主要是一台服务器。其中,服务器的Intel(R)Xeon(R)Gold5218 CPU@2.30GHz,内存为32GB RAM和128GB OptaneDC,64位操作系统。
本发明的软件实现以18.04.1-Ubuntu为平台,C语言和Python语言开发,模糊测试工具是AFL。gcc版本为9.2.1,Python版本为2.7.17,AFL版本为2.52b。
待验证的非易失内存动态内存分配器为PMDK(Persistent Memory DevelopmentKit)的默认动态内存分配器。
漏洞挖掘过程所涉及到的操作主要分为两个部分:第一部分为堆漏洞挖掘模型,其核心为生成随机的操作并验证执行该操作后是否导致堆漏洞挖掘模型处于可攻击态;第二部分为生成min-PoC。
1.堆漏洞挖掘模型
算法描述
算法输入:binaryFile、heapManager、bufferManager、A
算法输出:S
说明:binaryFile随机的二进制文件,确保生成攻击操作的随机性;heapManager为了方便管理和监测heap空间所定义的数据结构;bufferManager为了方便管理和监测buffer空间所定义的数据结构;A为具体的某一操作;S模拟攻击者的操作序列。
算法步骤:
(1)依据随机的二进制文件,获取下一个要执行的操作类型;
(2)依据操作类型,执行相应操作;
(3)执行完步骤(2)中的操作后,判断堆漏洞挖掘模型是否处于可攻击态;
(4)按照步骤(1)(2)(3)的顺序循环,直到遇到异常。
其伪代码如下:
Figure BDA0004013674530000051
2.生成min-PoC
算法描述
算法输入:actions、origImpact、A、tempActions、tempImpact、minActions
算法输出:min-PoC
说明:actions是会导致堆漏洞挖掘模型处于可攻击态的一系列操作;origImpact是执行actions会导致的某一可攻击态;A是actions操作序列中某一具体操作;tempActions是指actions删除某一操作后的操作序列;tempImpact是执行tempActions会导致的某一状态;minActions是指能达到origImpact的actions的最小子序列;min-PoC是minActions所对应的高级编程语言代码,本方法中的是C语言。
算法步骤:
(1)获取actions的origImpact;
(2)从头到尾地获取actions中的某一操作并删除;
(3)比较tempImpact与OrigImpact,若二者相同,则tempActions成为新的actions;
(4)循环(2)(3)步骤,直到没有操作可以删除结束,则最终actions即为minActions;
(5)将minActions转换为PoC。
其伪代码如下:
Figure BDA0004013674530000061
/>

Claims (6)

1.一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法,其特征在于实施步骤为:
(1)选择非易失内存分配器作为堆漏洞挖掘对象;
(2)迅速判断内存区域是否处于可以被攻击的状态;
(3)模糊测试工具检测出内存区域处于可攻击状态;
(4)对冗余的二进制代码进行删减以及将删减后的二进制代码转换为高级程序语言代码。
2.根据权利要求1所述的选择非易失内存分配器作为堆漏洞挖掘对象的方法,其特征在于本方法模拟攻击者执行攻击操作:
(1)正常的堆内存分配、释放;
(2)可以分配任意大小的动态内存区域,能够以任意顺序释放动态内存区域;
(3)在合法的内存数据区域写入任意的数据;
(4)对于内存分配器中一些固有bug的调用。
3.根据权利要求1所述的迅速判断内存区域是否处于可以被攻击的状态的方法,其特征在于本方法对可攻击态的定义和识别:
(1)将可攻击态定义为以下四类:任意内存块、内存块重叠、任意写、有限制写;
(2)本方法定义的一个特殊的数据结构——影子内存,通过影子内存与原内存空间的比对,可以迅速发现异常。
4.根据权利要求1所述的模糊测试工具检测出内存区域处于可攻击状态的方法,其特征在于本方法对原有的模糊测试工具做出以下修改:
(1)屏蔽常规模糊测试工具所关注的信号,例如段错误;
(2)定义了新的信号SIGUSR2,当模糊测试工具监测到SIGUSR2时,会将测试用例所对应的文件记录下来。
5.根据权利要求1所述的对冗余的二进制代码进行删减的方法,其特征在于本方法采用Delta-Debugging的方法,算法如下:
(1)记录原始操作序列所导致的内存状态;
(2)从原始操作序列中第一个操作开始删除,若能达到原始状态即说明被删除的是冗余操作,更新操作序列;
(3)循环步骤(2),没有新的操作可被删除结束,最后得到的操作序列是与原始操作序列等效的最小操作序列。
6.根据权利要求2所述的对于内存分配器中一些固有bug的调用的方法,其特征在于本方法对bug的定义以及使用规则的确立:
(1)将bug定义为以下四类:溢出、释放后写、任意释放、双重释放;
(2)bug的使用规则:模拟攻击时,对于同一类bug只能调用一次,但是调用的次数不做出限制。
CN202211660540.3A 2022-12-23 2022-12-23 一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法 Pending CN116166535A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211660540.3A CN116166535A (zh) 2022-12-23 2022-12-23 一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211660540.3A CN116166535A (zh) 2022-12-23 2022-12-23 一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法

Publications (1)

Publication Number Publication Date
CN116166535A true CN116166535A (zh) 2023-05-26

Family

ID=86414026

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211660540.3A Pending CN116166535A (zh) 2022-12-23 2022-12-23 一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法

Country Status (1)

Country Link
CN (1) CN116166535A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116502239A (zh) * 2023-06-27 2023-07-28 清华大学 二进制程序的内存漏洞检测方法、装置、设备及介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116502239A (zh) * 2023-06-27 2023-07-28 清华大学 二进制程序的内存漏洞检测方法、装置、设备及介质
CN116502239B (zh) * 2023-06-27 2023-09-19 清华大学 二进制程序的内存漏洞检测方法、装置、设备及介质

Similar Documents

Publication Publication Date Title
CN111859388B (zh) 一种多层次混合的漏洞自动挖掘方法
Wang et al. {MAZE}: Towards automated heap feng shui
Jiang et al. Fuzzing Error Handling Code using {Context-Sensitive} Software Fault Injection
CN112181833A (zh) 一种智能化模糊测试方法、装置及系统
US10681076B1 (en) Automated security analysis of software libraries
CN110362485B (zh) 一种挖掘Windows内核API漏洞的模糊测试方法
US20230050691A1 (en) System for detecting malicious programmable logic controller code
Bao et al. Mining sandboxes: Are we there yet?
CN113158191B (zh) 基于智能探针的漏洞验证方法及相关iast方法、系统
CN116166535A (zh) 一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法
Mouzarani et al. Smart fuzzing method for detecting stack‐based buffer overflow in binary codes
Wang et al. Tunter: assessing exploitability of vulnerabilities with taint-guided exploitable states exploration
US11687646B2 (en) Forensic data collection and analysis utilizing function call stacks
CN116522345A (zh) 漏洞挖掘方法、装置、设备及可读存储介质
CN114741700B (zh) 基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置
Chen et al. A memory-related vulnerability detection approach based on vulnerability model with petri net
CN114676436A (zh) 一种基于结构化变异的安卓应用多媒体解析库漏洞挖掘系统及方法
Zhou et al. Hunting garbage collection related concurrency bugs through critical condition restoration
Mouzarani et al. A smart fuzzing method for detecting heap‐based vulnerabilities in executable codes
Kim et al. Source code analysis for static prediction of dynamic memory usage
CN116414722B (zh) 模糊测试处理方法、装置、模糊测试系统及存储介质
CN111858307A (zh) 模糊测试方法和设备
Bhardwaj et al. Fuzz testing in stack-based buffer overflow
CN117972707A (zh) 软件漏洞检测方法、装置、设备及存储介质
Yu et al. SEnFuzzer: Detecting SGX Memory Corruption via Information Feedback and Tailored Interface Analysis

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