The invention discloses an automatic identification method of a self-defined heap management function based on dynamic characteristics, which mainly includes: 1) offline analysis based on dynamic execution of binary instruction records, matching the boundary information of the recovery function through call_ret; 2) the return value of the heap management function in turn is usually a heap pointer, and the processing flow has a heap pointer. Similarity and usage have characteristics of dynamic characteristics, the candidate functions are screened; 3) The selected custom heap management functions are de-recalculated to achieve automatic identification of custom heap management functions. The invention realizes automatic identification of self-defined heap management function based on offline dynamic execution record analysis, and has high identification accuracy and high analysis efficiency.
【技术实现步骤摘要】
一种基于动态特征的自定义堆管理函数的自动识别方法
本专利技术属于软件逆向
,具体涉及一种基于动态特征的自定义堆管理函数的自动识别方法。
技术介绍
基于性能和安全性等考虑,越来越多的程序采用自定义的堆管理函数来分配和管理内存,如Jemalloc、TCmalloc、MMgc等。这些自定义的堆管理函数给程序分析、特别是二进制程序分析带来了新的挑战。例如分析程序存在的堆溢出漏洞(heapoverflow)或释放后重用漏洞(useafterfree)的时候,需要通过堆分配操作(标准系统接口,如malloc等)来确定分配的堆空间大小和时刻,根据堆释放操作(标准系统接口,如free等)来确定堆空间的生存周期。如果存在自定义的堆管理操作,程序会通过标准系统接口向系统申请一大段地址自己管理,堆状态的更新是根据自定义的堆管理函数接口确定的,不会调用标准系统接口,因此在二进制记录中无法发现这些操作,导致无法准确分析程序的运行状态和漏洞情况。目前对自定义的堆管理函数的识别主要依赖于人工分析。基于源代码,分析人员可以通过跟踪内存分配和释放过程的代码,分析是否调用了自定义堆管理函数库;基于二进制程序,分析人员可以通过IDApro等分析工具,对程序进行静态分析,发现其中的自定义堆管理函数。然而这种分析是耗时耗力的,主要依赖于分析人员的经验。阿姆斯特丹自由大学的Herbert等人尝试采用动态执行和特征匹配的方法,实现对堆管理函数进行自动化的识别(WCRE’13)。他们实现了原型系统MemBrush,通过提取堆分配、释放和重分配等操作的行为特征,在动态执行程序的同时测试和检测各项特征 ...
【技术保护点】
1.一种基于动态特征的自定义堆管理函数的自动识别方法,其步骤如下:1)获取目标程序动态执行过程的二进制指令记录;2)通过call‑ret指令配对,恢复二进制指令记录中函数边界信息,得到候选函数;3)根据自定义堆管理函数的动态特征对候选函数进行筛选;4)将筛选出的自定义堆管理函数进行统计去重,实现自定义堆管理函数的自动识别。
【技术特征摘要】
1.一种基于动态特征的自定义堆管理函数的自动识别方法,其步骤如下:1)获取目标程序动态执行过程的二进制指令记录;2)通过call-ret指令配对,恢复二进制指令记录中函数边界信息,得到候选函数;3)根据自定义堆管理函数的动态特征对候选函数进行筛选;4)将筛选出的自定义堆管理函数进行统计去重,实现自定义堆管理函数的自动识别。2.如权利要求1所述的基于动态特征的自定义堆管理函数的自动识别方法,其特征在于,所述二进制指令记录包括指令的EIP、相关寄存器信息、指令的机器码、记录编号ID。3.如权利要求2所述的基于动态特征的自定义堆管理函数的自动识别方法,其特征在于,所述寄存器包括EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP。4.如权利要求3所述的基于动态特征的自定义堆管理函数的自动识别方法,其特征在于,步骤2)还包括分析ret指令之后执行的下一条指令,采用比较ESP的值和EIP指令距离的方法对恢复得到的函数边界进行修正。5.如权利要求4所述的基于动态特征的自定义堆管理函数的自动识别方法,其特征在于,通过使call指令的ESP的值小于下一条指令的ESP的值,且ret指令之后执行的下一条指令EIP等于call指令加call指令长度对恢复得到的函数边界进行修正。6.如权利要求1所述的基于动态特征的自定义堆管理函数的自...
【专利技术属性】
技术研发人员:贾相堃,张超,苏璞睿,杨轶,和亮,闫佳,
申请(专利权)人:中国科学院软件研究所,
类型:发明
国别省市:北京,11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。