CN110941552A - 一种基于动态污点分析的内存分析方法及装置 - Google Patents

一种基于动态污点分析的内存分析方法及装置 Download PDF

Info

Publication number
CN110941552A
CN110941552A CN201911152291.5A CN201911152291A CN110941552A CN 110941552 A CN110941552 A CN 110941552A CN 201911152291 A CN201911152291 A CN 201911152291A CN 110941552 A CN110941552 A CN 110941552A
Authority
CN
China
Prior art keywords
memory
pollution
analysis
input function
module
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
Application number
CN201911152291.5A
Other languages
English (en)
Other versions
CN110941552B (zh
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.)
Guangzhou University
Original Assignee
Guangzhou 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 Guangzhou University filed Critical Guangzhou University
Priority to CN201911152291.5A priority Critical patent/CN110941552B/zh
Publication of CN110941552A publication Critical patent/CN110941552A/zh
Priority to JP2020153673A priority patent/JP6867066B1/ja
Application granted granted Critical
Publication of CN110941552B publication Critical patent/CN110941552B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • 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)
  • Software Systems (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

本发明公开了一种基于动态污点分析的内存分析方法、装置、终端设备及可读存储介质,所述方法包括:将预设的输入函数指定为污染源,以将所述输入函数读入的数据标记为污染,并通过一个set对象记录被污染的地址;对所有的内存操作指令插桩以进行内存操作检查,并根据源操作数的污染情况对目的操作数进行标记处理;对ret指令插桩以进行栈顶内存检查,并根据当前栈顶内存的污染情况进行栈溢出检测。本发明能够在无源码的情况下分析程序,检测内存溢出问题,从而提取生成漏洞利用所需的关键信息。

Description

一种基于动态污点分析的内存分析方法及装置
技术领域
本发明涉及计算机技术领域,尤其是涉及一种基于动态污点分析的内存分析方法、装置、终端设备及可读存储介质。
背景技术
由于程序数量的飞速增长,人工程序测试已经很难满足程序测试的需要。为了应对这个问题,一些自动化的程序测试方案相继被提出。根据程序是否真实执行,自动化的程序测试方案被划分为静态分析和动态分析。在不运行程序代码的方式下,静态分析通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描验证代码是否满足规范性、安全性、可靠性、可维护性等指标。而程序动态分析是指随着程序的运行,获取程序在执行过程中的信息,包括寄存器信息,内存信息等,以探索程序可能存在的漏洞。另一方面,模糊测试技术近年来取得了飞快的发展,它能够有效地产生能使程序崩溃的输入。这些崩溃是否会对程序的正常运行产生很大的影响,还需要大量人力去评估。如何基于模糊测试得到的崩溃输入进行程序动态分析,并评估该崩溃是否为高风险的漏洞,是一个很有意义的挑战。
要获得程序运行时的内存信息,一种最常规的操作就是进行代码插桩,通过插桩代码的执行,来获得当时的程序现场信息。现有一些技术,例如addresssanitizer就通过程序编译时插桩来获取与内存相关的信息。另一种方式就是使用类似pin,qemu来模拟程序执行过程,在模拟的过程中进行插桩分析。
在插桩的基础上,就可以对程序进行污点分析,现有的污点分析包括三个步骤:定义污染源,定义污染槽和跟踪污染传播。其中,污染源是你要跟踪的数据的程序位置。例如,系统调用,函数入口或某个内存操作指令都有可能是污染源。污染槽是指程序中的一些位置,你想检查这些位置的某些数据有没有受到污染。例如,为了检查程序控制流是否受到输入的影响,你可能会检查间接调用,间接跳转和return指令处下一条执行指令的位置是否受到输入的污染。污染传播是对污染源在程序中传播指定的规则。例如,如果mov的源操作数被污染,目的操作数也将被标记成污染。如此,受污染的数据将从污染源一路传播到污染槽。
对于现有技术的内存分析方案,依赖于程序源代码,无法对难以获取源码的程序进行分析。
发明内容
本发明实施例所要解决的技术问题在于,提供一种基于动态污点分析的内存分析方法、装置、终端设备及可读存储介质,能够在无源码的情况下分析程序,检测内存溢出问题,进而能够提取生成漏洞利用所需的关键信息。
为了解决上述技术问题,本发明实施例提供了一种基于动态污点分析的内存分析方法,包括:
将预设的输入函数指定为污染源,以将所述输入函数读入的数据标记为污染,并通过一个set对象记录被污染的地址;
对所有的内存操作指令插桩以进行内存操作检查,并根据源操作数的污染情况对目的操作数进行标记处理;
对ret指令插桩以进行栈顶内存检查,并根据当前栈顶内存的污染情况进行栈溢出检测。
进一步地,所述对所有的内存操作指令插桩以进行内存操作检查,并根据源操作数的污染情况对目的操作数进行标记处理,具体为:
对所有的内存操作指令插桩以进行内存操作检查,判断所述源操作数是否被污染;
若是,则将所述目的操作数标记为污染;
若否,则净化所述目的操作数的污染。
进一步地,所述对ret指令插桩以进行栈顶内存检查,并根据当前栈顶内存的污染情况进行栈溢出检测,具体为:
对ret指令插桩以进行栈顶内存检查,判断所述栈顶内存是否被污染;
若是,则判定内存产生栈溢出问题。
进一步地,所述基于动态污点分析的内存分析方法还包括:
对所述预设的输入函数进行插桩,并打印出所述输入函数的内存影响范围;
当产生栈溢出问题时,将当前存放污染数据的set对象进行打印;
判断是否存在同时处于所述内存影响范围以及所述存放污染数据的set对象中的目标地址;
若是,则将所述目标地址判定为受控制地址。
为了解决相同的技术问题,本发明还提供了一种基于动态污点分析的内存分析装置,包括:
污染源标记模块,用于将预设的输入函数指定为污染源,以将所述输入函数读入的数据标记为污染,并通过一个set对象记录被污染的地址;
污染处理模块,用于对所有的内存操作指令插桩以进行内存操作检查,并根据源操作数的污染情况对目的操作数进行标记处理;
内存检测模块,用于对ret指令插桩以进行栈顶内存检查,并根据当前栈顶内存的污染情况进行栈溢出检测。
进一步地,所述污染处理模块具体用于:对所有的内存操作指令插桩以进行内存操作检查,判断所述源操作数是否被污染;若是,则将所述目的操作数标记为污染;若否,则净化所述目的操作数的污染。
进一步地,所述内存检测模块具体用于:对ret指令插桩以进行栈顶内存检查,判断所述栈顶内存是否被污染;若是,则判定内存产生栈溢出问题。
进一步地,所述基于动态污点分析的内存分析装置还包括:
范围打印模块,用于对所述预设的输入函数进行插桩,并打印出所述输入函数的内存影响范围;
地址打印模块,用于当产生栈溢出问题时,将当前存放污染数据的set对象进行打印;
目标查询模块,用于判断是否存在同时处于所述内存影响范围以及所述存放污染数据的set对象中的目标地址;
目标判定模块,用于将所述目标地址判定为受控制地址。
为了解决相同的技术问题,本发明还提供了一种基于动态污点分析的内存分析终端设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述存储器与所述处理器耦接,且所述处理器执行所述计算机程序时,实现任一项所述的基于动态污点分析的内存分析方法。
为了解决相同的技术问题,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在的设备执行任一项所述的基于动态污点分析的内存分析方法。
与现有技术相比,本发明具有如下有益效果:
本发明提供了一种基于动态污点分析的内存分析方法、装置、终端设备及可读存储介质,所述方法包括:将预设的输入函数指定为污染源,以将所述输入函数读入的数据标记为污染,并通过一个set对象记录被污染的地址;对所有的内存操作指令插桩以进行内存操作检查,并根据源操作数的污染情况对目的操作数进行标记处理;对ret指令插桩以进行栈顶内存检查,并根据当前栈顶内存的污染情况进行栈溢出检测。本发明能够在无源码的情况下分析程序,检测内存溢出问题,从而提取生成漏洞利用所需的关键信息。
附图说明
图1是本发明一实施例提供的基于动态污点分析的内存分析方法的流程示意图;
图2是本发明一实施例提供的动态二进制插桩引擎的结构示意图;
图3是本发明一实施例提供的应用动态污点分析的流程示意图;
图4是本发明一实施例提供的内存分析的具体例子示意图;
图5是本发明一实施例提供的基于动态污点分析的内存分析装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参见图1,本发明实施例提供了一种基于动态污点分析的内存分析方法,包括步骤:
S1、将预设的输入函数指定为污染源,以将所述输入函数读入的数据标记为污染,并通过一个set对象记录被污染的地址;
S2、对所有的内存操作指令插桩以进行内存操作检查,并根据源操作数的污染情况对目的操作数进行标记处理。
在本发明实施例中,进一步地,步骤S2具体为:
对所有的内存操作指令插桩以进行内存操作检查,判断所述源操作数是否被污染;
若是,则将所述目的操作数标记为污染;
若否,则净化所述目的操作数的污染。
S3、对ret指令插桩以进行栈顶内存检查,并根据当前栈顶内存的污染情况进行栈溢出检测。
在本发明实施例中,进一步地,步骤S3具体为:
对ret指令插桩以进行栈顶内存检查,判断所述栈顶内存是否被污染;
若是,则判定内存产生栈溢出问题。
进一步地,所述基于动态污点分析的内存分析方法还包括步骤:
S4、对所述预设的输入函数进行插桩,并打印出所述输入函数的内存影响范围;
S5、当产生栈溢出问题时,将当前存放污染数据的set对象进行打印;
S6、判断是否存在同时处于所述内存影响范围以及所述存放污染数据的set对象中的目标地址;
S7、若是,则将所述目标地址判定为受控制地址。
需要说明的是,现有技术中,对于类似addresssanitizer之类的内存分析方案,依赖于程序源代码,无法对难以获取源码的程序进行分析。对于污点分析,它的初衷是检测程序的某些关键位置是否被污染,因此它的侧重点在于考虑污染数据在整个程序范围内的传播。在这种情况下,因为每个涉及到污染数据处理的指令都有可能需要开辟额外的空间来标记,所以内存的开销是一个非常严重的问题。现有的污点分析中,也考虑到了这一点,使得污染传播中能够记录的信息非常有限。例如,最基本的污点分析对一个内存位置仅用一位来标记是否被污染。然而在内存分析时,栈这样的内存位置是被重复使用的,并且会随着函数的返回使得函数局部栈的内容不再有意义,因此在函数内部,可以用污点分析的方式记录局部栈内受污染情况,并且不用过于顾虑内存的开销,对于进一步的内存分析来说,我们也确实需要更多的内存位置来标记污染的来源和污染生效的地址。
本发明的目的在于,提供一种基于动态污点分析的内存分析方法,应对无源码的情况,借助于动态插桩技术及污点分析技术,能够检测内存溢出问题,并提取生成漏洞利用所需的关键信息。通过应用动态插桩平台,能够在无源码的情况下分析程序,在函数调用中,分析内存信息,检测是否产生栈溢出,并输出可以用于生成漏洞利用的关键信息。
请参见图2,在本发明实施例中,通过使用动态二进制插桩引擎进行内存分析的主要过程如下:
1、二进制插桩引擎动态地从进程中抓取部分数据与代码;
2、抓取后的代码不直接执行,而是在其中插入使用者定义的插桩代码,插桩代码负责指定在程序的哪些位置插桩,以便于程序执行到指定位置时,通过插桩代码跳转到分析代码。
3、经过插桩引擎的代码经过JIT编译后成为可执行的代码,并放入代码缓冲区等待执行。
4、缓冲区中的代码逐条进入模拟器模拟执行,当执行到插桩代码时,调用特定的分析代码获取动态信息,这些动态信息中包括了支撑污点分析的污染传播信息,也包括了生成漏洞利用的关键信息。
5、缓冲区中的代码耗尽时,通过调度器继续获取代码重复上述过程。
可以理解的是,使用者需要首先定义插桩函数和分析函数,插桩函数指明在程序中要插桩的位置,分析函数规定在插桩处需要进行的分析,这将在之后影响程序的执行过程。用二进制插桩引擎执行程序时,它并不是直接运行应用程序进程,而是在包含所有插桩代码的代码缓存中运行代码。开始,代码缓存是空的,插桩引擎通过代码抓取器从进程中取出一个代码块,并在用户定义的插桩函数和分析函数的指导下对这块代码进行插桩。在代码插桩完成后,动态二进制插桩引擎用一个JIT编译器来编译它,这将再次优化被插桩的代码,并把编译好的代码存在代码缓存中。JIT编译器还会重写控制流指令,确保控制流执行回到动态二进制插桩引擎,防止进程在未插桩的代码中继续执行。代码缓存中的代码逐条执行,直到出现一个控制流指令需要取回新的代码或者寻找缓存中的另一个代码块,之后操作全将交给调度器,重复上述的操作。
另一方面,C函数在执行时有着如下的特点:当一个函数调用发生之后,首先把当前命令的下一条压入栈中,继而将当前的栈基址指针也保存在栈中,最后将栈顶指针保存在栈基址寄存器中,在这之后,栈顶指针就可以处理局部变量。值得注意的是,局部栈的长度是在定义局部变量之前发生的,如果之后的写入操作没有被限制,就可能发生越界写,最终影响到存放在栈上的栈基址指针和返回地址。
请参见图3,需要说明的是,在动态二进制插桩引擎获取到的信息的基础上应用污点分析和提取栈溢出利用关键信息过程如下:
应用动态污点分析:
1、指定read等输入函数为污染源,将外部读入的数据标记成污染,通过一个set对象记录被污染的地址,用特定的数据结构记录寄存器的污染情况。
2、插桩每个内存操作指令,包括MOV,PUSH,POP,ADD,每次操作前进行检查,如果源操作数被污染,则将目的操作数标记成污染,如果源操作数未被污染,而目的操作数已被污染,则净化目的操作数的污染。
3、插桩ret指令,检查当前栈顶内存是否被污染,如果被污染,说明用户输入可以影响程序执行的控制流。
提取栈溢出利用关键信息:
1、插桩输入函数,打印出输入函数影响的内存范围。
2、在函数返回时,如果发现用户输入可以影响程序控制流,则打印当前存放污染数据的set对象。
3、如果某些地址同时处于某个输入函数影响的内存范围和存放污染数据的set对象,初步认定该内存地址受该输入函数控制,进而可以计算修改用户输入的哪些内容会影响控制流。
请参见图4,本方案具体生效的一个具体例子如下:
1、某个输入函数向内存读入了44个字符。
2、函数返回时,发现栈顶的内存地址被污染。
3、记录当前栈顶内存地址,结合插桩输入函数得到的信息,计算出当前栈顶地址受到该输入函数的第41到第44个字符控制。
4、同时,由于第1到第40个字符存放的地址同时存在于存放污染数据的set与读入函数的范围中,初步判定该40个字符存放地址的内容可通过此输入函数被用户控制。
本发明实施例通过动态程序模拟执行,在执行某个函数中的输入函数时,将内存中被输入影响的位置标记成被污染,并在函数返回时,检查返回地址是否被输入劫持。
另外本发明实施例还能够获取输入影响的内存地址,并将程序返回地址与受影响的内存地址比对。从而计算输入中的哪些字节影响了程序的控制流。
需要说明的是,对于以上方法或流程实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作并不一定是本发明实施例所必须的。
请参见图5,为了解决相同的技术问题,本发明还提供了一种基于动态污点分析的内存分析装置,包括:
污染源标记模块1,用于将预设的输入函数指定为污染源,以将所述输入函数读入的数据标记为污染,并通过一个set对象记录被污染的地址;
污染处理模块2,用于对所有的内存操作指令插桩以进行内存操作检查,并根据源操作数的污染情况对目的操作数进行标记处理;
内存检测模块3,用于对ret指令插桩以进行栈顶内存检查,并根据当前栈顶内存的污染情况进行栈溢出检测。
进一步地,所述污染处理模块2具体用于:对所有的内存操作指令插桩以进行内存操作检查,判断所述源操作数是否被污染;若是,则将所述目的操作数标记为污染;若否,则净化所述目的操作数的污染。
进一步地,所述内存检测模块3具体用于:对ret指令插桩以进行栈顶内存检查,判断所述栈顶内存是否被污染;若是,则判定内存产生栈溢出问题。
进一步地,所述基于动态污点分析的内存分析装置还包括:
范围打印模块,用于对所述预设的输入函数进行插桩,并打印出所述输入函数的内存影响范围;
地址打印模块,用于当产生栈溢出问题时,将当前存放污染数据的set对象进行打印;
目标查询模块,用于判断是否存在同时处于所述内存影响范围以及所述存放污染数据的set对象中的目标地址;
目标判定模块,用于将所述目标地址判定为受控制地址。
可以理解的是上述装置项实施例,是与本发明方法项实施例相对应的,本发明实施例提供的一种基于动态污点分析的内存分析装置,可以实现本发明任意一项方法项实施例提供的基于动态污点分析的内存分析方法。
为了解决相同的技术问题,本发明还提供了一种基于动态污点分析的内存分析终端设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述存储器与所述处理器耦接,且所述处理器执行所述计算机程序时,实现任一项所述的基于动态污点分析的内存分析方法。
所述基于动态污点分析的内存分析终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述处理器可以是中央处理单元(Central ProcessingUnit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述基于动态污点分析的内存分析终端设备的控制中心,利用各种接口和线路连接整个基于动态污点分析的内存分析终端设备的各个部分。
所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
为了解决相同的技术问题,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在的设备执行任一项所述的基于动态污点分析的内存分析方法。
所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

Claims (10)

1.一种基于动态污点分析的内存分析方法,其特征在于,包括:
将预设的输入函数指定为污染源,以将所述输入函数读入的数据标记为污染,并通过一个set对象记录被污染的地址;
对所有的内存操作指令插桩以进行内存操作检查,并根据源操作数的污染情况对目的操作数进行标记处理;
对ret指令插桩以进行栈顶内存检查,并根据当前栈顶内存的污染情况进行栈溢出检测。
2.根据权利要求1所述的基于动态污点分析的内存分析方法,其特征在于,所述对所有的内存操作指令插桩以进行内存操作检查,并根据源操作数的污染情况对目的操作数进行标记处理,具体为:
对所有的内存操作指令插桩以进行内存操作检查,判断所述源操作数是否被污染;
若是,则将所述目的操作数标记为污染;
若否,则净化所述目的操作数的污染。
3.根据权利要求1所述的基于动态污点分析的内存分析方法,其特征在于,所述对ret指令插桩以进行栈顶内存检查,并根据当前栈顶内存的污染情况进行栈溢出检测,具体为:
对ret指令插桩以进行栈顶内存检查,判断所述栈顶内存是否被污染;
若是,则判定内存产生栈溢出问题。
4.根据权利要求1所述的基于动态污点分析的内存分析方法,其特征在于,还包括:
对所述预设的输入函数进行插桩,并打印出所述输入函数的内存影响范围;
当产生栈溢出问题时,将当前存放污染数据的set对象进行打印;
判断是否存在同时处于所述内存影响范围以及所述存放污染数据的set对象中的目标地址;
若是,则将所述目标地址判定为受控制地址。
5.一种基于动态污点分析的内存分析装置,其特征在于,包括:
污染源标记模块,用于将预设的输入函数指定为污染源,以将所述输入函数读入的数据标记为污染,并通过一个set对象记录被污染的地址;
污染处理模块,用于对所有的内存操作指令插桩以进行内存操作检查,并根据源操作数的污染情况对目的操作数进行标记处理;
内存检测模块,用于对ret指令插桩以进行栈顶内存检查,并根据当前栈顶内存的污染情况进行栈溢出检测。
6.根据权利要求5所述的基于动态污点分析的内存分析装置,其特征在于,所述污染处理模块具体用于:对所有的内存操作指令插桩以进行内存操作检查,判断所述源操作数是否被污染;若是,则将所述目的操作数标记为污染;若否,则净化所述目的操作数的污染。
7.根据权利要求5所述的基于动态污点分析的内存分析装置,其特征在于,所述内存检测模块具体用于:对ret指令插桩以进行栈顶内存检查,判断所述栈顶内存是否被污染;若是,则判定内存产生栈溢出问题。
8.根据权利要求5所述的基于动态污点分析的内存分析装置,其特征在于,还包括:
范围打印模块,用于对所述预设的输入函数进行插桩,并打印出所述输入函数的内存影响范围;
地址打印模块,用于当产生栈溢出问题时,将当前存放污染数据的set对象进行打印;
目标查询模块,用于判断是否存在同时处于所述内存影响范围以及所述存放污染数据的set对象中的目标地址;
目标判定模块,用于将所述目标地址判定为受控制地址。
9.一种基于动态污点分析的内存分析终端设备,其特征在于,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述存储器与所述处理器耦接,且所述处理器执行所述计算机程序时,实现如权利要求1至4任一项所述的基于动态污点分析的内存分析方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在的设备执行如权利要求1至4任一项所述的基于动态污点分析的内存分析方法。
CN201911152291.5A 2019-11-20 2019-11-20 一种基于动态污点分析的内存分析方法及装置 Active CN110941552B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201911152291.5A CN110941552B (zh) 2019-11-20 2019-11-20 一种基于动态污点分析的内存分析方法及装置
JP2020153673A JP6867066B1 (ja) 2019-11-20 2020-09-14 動的ステイン分析に基づくメモリ分析方法及び装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911152291.5A CN110941552B (zh) 2019-11-20 2019-11-20 一种基于动态污点分析的内存分析方法及装置

Publications (2)

Publication Number Publication Date
CN110941552A true CN110941552A (zh) 2020-03-31
CN110941552B CN110941552B (zh) 2023-07-07

Family

ID=69907300

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911152291.5A Active CN110941552B (zh) 2019-11-20 2019-11-20 一种基于动态污点分析的内存分析方法及装置

Country Status (2)

Country Link
JP (1) JP6867066B1 (zh)
CN (1) CN110941552B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111832026A (zh) * 2020-06-18 2020-10-27 广州大学 一种漏洞利用定位方法、系统、装置及介质
CN111859388A (zh) * 2020-06-30 2020-10-30 广州大学 一种多层次混合的漏洞自动挖掘方法
CN113176990A (zh) * 2021-03-25 2021-07-27 中国人民解放军战略支援部队信息工程大学 一种支持数据间关联分析的污点分析框架及方法
CN113268427A (zh) * 2021-06-15 2021-08-17 中国电子科技网络信息安全有限公司 一种针对二进制程序的崩溃分析方法及系统
CN114741700A (zh) * 2022-03-28 2022-07-12 中国人民解放军战略支援部队信息工程大学 基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置
CN114780962A (zh) * 2022-04-02 2022-07-22 中国人民解放军战略支援部队信息工程大学 基于动态能量调控的Windows程序模糊测试方法及系统
CN115329346A (zh) * 2022-10-09 2022-11-11 支付宝(杭州)信息技术有限公司 一种检测侧信道漏洞的方法和装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103995782A (zh) * 2014-06-17 2014-08-20 电子科技大学 一种基于污点不变集的污点分析方法
CN105117332A (zh) * 2015-08-19 2015-12-02 电子科技大学 一种栈溢出位置的检测方法
CN105138903A (zh) * 2015-08-14 2015-12-09 电子科技大学 一种基于ret指令与jmp指令的rop攻击检测方法
CN109583200A (zh) * 2017-09-28 2019-04-05 中国科学院软件研究所 一种基于动态污点传播的程序异常分析方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1630710B1 (en) * 2004-07-21 2019-11-06 Microsoft Technology Licensing, LLC Containment of worms
JP2006172003A (ja) * 2004-12-14 2006-06-29 Ntt Docomo Inc プログラム実行監視装置、プログラム実行監視方法及びプログラム作成方法
US8381198B2 (en) * 2005-08-15 2013-02-19 Sony Ericsson Mobile Communications Ab Systems, methods and computer program products for safety checking executable application programs in a module
US9519533B2 (en) * 2015-01-28 2016-12-13 Qualcomm Incorporated Data flow tracking via memory monitoring
US20160232346A1 (en) * 2015-02-05 2016-08-11 Qualcomm Incorporated Mechanism for tracking tainted data
CN105678169B (zh) * 2015-12-30 2019-02-26 西安胡门网络技术有限公司 一种二进制程序漏洞挖掘方法和系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103995782A (zh) * 2014-06-17 2014-08-20 电子科技大学 一种基于污点不变集的污点分析方法
CN105138903A (zh) * 2015-08-14 2015-12-09 电子科技大学 一种基于ret指令与jmp指令的rop攻击检测方法
CN105117332A (zh) * 2015-08-19 2015-12-02 电子科技大学 一种栈溢出位置的检测方法
CN109583200A (zh) * 2017-09-28 2019-04-05 中国科学院软件研究所 一种基于动态污点传播的程序异常分析方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
鲁辉等: "网络空间安全人才培养新模式探索", 《保密科学技术》 *

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111832026A (zh) * 2020-06-18 2020-10-27 广州大学 一种漏洞利用定位方法、系统、装置及介质
CN111832026B (zh) * 2020-06-18 2022-04-26 广州大学 一种漏洞利用定位方法、系统、装置及介质
CN111859388A (zh) * 2020-06-30 2020-10-30 广州大学 一种多层次混合的漏洞自动挖掘方法
CN111859388B (zh) * 2020-06-30 2022-11-01 广州大学 一种多层次混合的漏洞自动挖掘方法
CN113176990A (zh) * 2021-03-25 2021-07-27 中国人民解放军战略支援部队信息工程大学 一种支持数据间关联分析的污点分析框架及方法
CN113176990B (zh) * 2021-03-25 2022-10-18 中国人民解放军战略支援部队信息工程大学 一种支持数据间关联分析的污点分析框架及方法
CN113268427A (zh) * 2021-06-15 2021-08-17 中国电子科技网络信息安全有限公司 一种针对二进制程序的崩溃分析方法及系统
CN114741700A (zh) * 2022-03-28 2022-07-12 中国人民解放军战略支援部队信息工程大学 基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置
CN114741700B (zh) * 2022-03-28 2024-05-03 中国人民解放军战略支援部队信息工程大学 基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置
CN114780962A (zh) * 2022-04-02 2022-07-22 中国人民解放军战略支援部队信息工程大学 基于动态能量调控的Windows程序模糊测试方法及系统
CN114780962B (zh) * 2022-04-02 2024-04-26 中国人民解放军战略支援部队信息工程大学 基于动态能量调控的Windows程序模糊测试方法及系统
CN115329346A (zh) * 2022-10-09 2022-11-11 支付宝(杭州)信息技术有限公司 一种检测侧信道漏洞的方法和装置

Also Published As

Publication number Publication date
CN110941552B (zh) 2023-07-07
JP2021082256A (ja) 2021-05-27
JP6867066B1 (ja) 2021-04-28

Similar Documents

Publication Publication Date Title
CN110941552B (zh) 一种基于动态污点分析的内存分析方法及装置
CN110059009B (zh) 用于测试代码文件的方法和装置
US9824214B2 (en) High performance software vulnerabilities detection system and methods
US9274923B2 (en) System and method for stack crawl testing and caching
Huang et al. Software crash analysis for automatic exploit generation on binary programs
CN104508672B (zh) 程序执行装置以及程序分析装置
US10599558B1 (en) System and method for identifying inputs to trigger software bugs
US10599852B2 (en) High performance software vulnerabilities detection system and methods
CN111832026B (zh) 一种漏洞利用定位方法、系统、装置及介质
US8117499B2 (en) Generation of a stimuli based on a test template
CN111859380A (zh) Android App漏洞的零误报检测方法
CN112925524A (zh) 一种检测驱动程序中不安全直接存储器访问的方法及装置
US11868465B2 (en) Binary image stack cookie protection
Wang et al. Tunter: assessing exploitability of vulnerabilities with taint-guided exploitable states exploration
CN115795489B (zh) 一种基于硬件级进程跟踪的软件漏洞静态分析方法及装置
Ren et al. A dynamic taint analysis framework based on entity equipment
CN114741700B (zh) 基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置
Gratchoff et al. Proving the wild jungle jump
CN102708054A (zh) 二进制程序循环写内存安全漏洞的检测方法
Jurn et al. A survey of automated root cause analysis of software vulnerability
Baradaran et al. A unit-based symbolic execution method for detecting memory corruption vulnerabilities in executable codes
CN115374017A (zh) 一种仿真运行可执行文件时抓取现场的方法及计算设备
CN114065208A (zh) 一种面向堆内存错误的检测方法及装置
CN114443418A (zh) 一种基于硬件虚拟化的riscv内存溢出漏洞检测方法及装置
Jiang et al. An exploitability analysis technique for binary vulnerability based on automatic exception suppression

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