首页 / 专利库 / 电信 / 输出节点 / 一种基于动态污点传播的程序异常分析方法

一种基于动态污点传播的程序异常分析方法

阅读:275发布:2024-02-15

专利汇可以提供一种基于动态污点传播的程序异常分析方法专利检索,专利查询,专利分析的服务。并且本 发明 提供一种基于动态污点传播的程序异常分析方法,步骤包括:在虚拟化环境下动态运行目标程序,监控所述目标程序的目标 进程 并记录执行序列信息;将引起所述目标程序异常的输入数据标记为污点源,根据所述目标进程执行过的指令的指令语义进行污点传播分析,获得内存的污点状态信息;识别出所述目标程序运行过程中的内存 访问 异常,提取异常指令的异常 位置 ,根据所述内存的污点状态信息检测所述异常位置的操作数和寄存器的污点状态;如果所述操作数和寄存器被污染,则通过污点回溯 定位 出错误点;否则对所述寄存器进行逆向切片分析,找出相关的数据链路,并在所述数据链路上的各个 节点 进行堆溢出检测、UAF检测,以及通过对比分析定位出错误点。,下面是一种基于动态污点传播的程序异常分析方法专利的具体信息内容。

1.一种基于动态污点传播的程序异常分析方法,其步骤包括:
在虚拟化环境下动态运行目标程序,监控所述目标程序的目标进程并记录执行序列信息;
将引起所述目标程序异常的输入数据标记为污点源,根据所述目标进程执行过的指令的指令语义进行污点传播分析,获得内存的污点状态信息;
识别出所述目标程序运行过程中的内存访问异常,提取异常指令的异常位置,根据所述内存的污点状态信息检测所述异常位置的操作数和寄存器的污点状态;
如果所述操作数和寄存器被污染,则通过污点回溯定位出错误点;否则对所述寄存器进行逆向切片分析,找出相关的数据链路,并在所述数据链路上的各个节点进行堆溢出检测、UAF检测,以及通过对比分析定位出错误点。
2.根据权利要求1所述的方法,其特征在于,对所述目标程序进行监控时,解析所述目标进程的数据结构,提取关键变量,获取当前执行的进程信息,所述进程信息包括指令、指令地址、通用寄存器、操作数内存地址和内存的值。
3.根据权利要求1所述的方法,其特征在于,所述污点源的标记需要在虚拟化引擎中进行,解析所述目标程序动态库PE结构信息,提取所述输入数据的相关API函数并监控,获取标记的污点源数据读入到内存中的位置,记录下内存地址、内存大小、映射的输入位置、输入类型以及当前执行指令的序号。
4.根据权利要求1或3所述的方法,其特征在于,所述输入数据包括文件、网络、外设操作信息。
5.根据权利要求1所述的方法,其特征在于,所述污点传播分析的方法是:每执行一条所述目标进程的指令都检测所述指令的输入数据是否为污点数据,如果是,根据设定规则修改所述指令的输出的污点状态,该污点状态包括污点标签、标记该存储为污点的时序ID和指令地址;如果否,而所述指令的输出位置的前序状态是污点数据,则对所述输出位置进行漂白处理。
6.根据权利要求5所述的方法,其特征在于,所述漂白处理还包括对特殊指令xor eax,eax、sub ebx,ebx、and edx,0的特殊操作进行漂白处理。
7.根据权利要求1所述的方法,其特征在于,所述内存的污点状态信息通过改进的页表存储,该改进的页表的每个页表项均为污点状态的指针,如果对应内存未被污染,该指针为空,否则该指针指向一个污点状态结构。
8.根据权利要求7所述的方法,其特征在于,所述污点状态结构包括污点字节的数量、污点源标签集合,以及最后一次给存储位置标记污点的时序ID、指令地址和位置的值。
9.根据权利要求1所述的方法,其特征在于,
所述堆溢出检测的方法是:监控所述目标程序运行过程中的堆分配、释放,记录所述堆分配的地址、大小,标记存储堆地址的空间为污点,对指针解引用过程进行污点传播分析,检测所述数据链路的各个节点是否有访问超出堆分配范围大小的堆溢出。
所述UAF检测的方法是:监控所述目标程序运行过程中的堆分配、释放,对指针解引用过程进行污点传播分析,检测所述数据链路的各个节点是否有引用了释放后的堆指针。
所述对比分析的方法是:分析所述目标程序对正常输入在异常位置下的属性差异,所述属性包括寄存器值、操作数地址、操作数的值、切片路径以及切片路径节点,对差异明显的节点进一步分析差异与所述输入数据之间的逻辑关系。
10.根据权利要求1所述的方法,其特征在于,对所述数据链路的各个节点可迭代进行逆向切片分析。

说明书全文

一种基于动态污点传播的程序异常分析方法

技术领域

[0001] 本发明属于网络安全技术领域,具体涉及一种在虚拟化平台上,基于动态污点传播的数据流分析,对二进制程序的异常或漏洞进行分析和错误点定位的方法。

背景技术

[0002] 随着程序功能、规模、复杂度的不断提升和更新迭代速度的加剧,以及软件开发人员安全意识的不足,软件漏洞已严重威胁到网络空间的安全,其造成的破坏日益严重。而漏洞的危害起初表现在程序的崩溃和异常,这些崩溃和异常大多数是内存访问异常引起。目前内存访问异常包括内存读异常、写异常、执行异常,常见的起因有空指针引用、野指针引用(使用未初始化的数据或者释放掉的指针)、栈溢出、堆溢出等。而传统的程序异常分析基于调试器进行,通常给出发生异常的位置,以及访问的内存信息及异常类型,缺乏对异常成因的分析,对异常成因的分析很大程度依赖于源代码。但是,市面是大量的闭源软件不提供源代码,也缺少调试用的PDB文件,提高闭源二进制程序的异常分析能十分必要。
[0003] 当前的程序崩溃成因分析技术,通常使用如下的几种方法:
[0004] 1.基于调试器和反汇编反编译工具的分析
[0005] 通过调试器捕获触发的异常,获得异常模、异常位置和异常类型。对异常模块进行反汇编和反编译分析,阅读反汇编和反编译代码,理解程序逻辑,分析程序代码逻辑中存在的错误点。这种方法很大程度依赖于分析人员的平,依赖于分析人员对目标程序的认识和理解程度,人力成本高,分析能力难以复制和传承,能力的培养成本也很高。
[0006] 2.基于静态函数调用图的分析
[0007] R.Wu等人在静态函数调用图的基础上,提出了一种程序崩溃运行记录恢复方法,用来定位程序中的漏洞位置,但是基于静态分析无法应当加壳保护的目标软件,部分模块的缺失将导致记录恢复不完整而影响分析结果。
[0008] 3.RETracer系统
[0009] 微软公司的W.Cui等人研制的RETracer系统,通过分析程序崩溃的转储文件,提取崩溃点指针和程序栈数据,采用逆向污点分析技术推断被破坏的指针解引用的过程,该方法虽然能识别导致程序崩溃的位置,但仍无法有效地识别某些缓冲区溢出和释放后重用引起的内存破坏。
[0010] 4.CREDAL
[0011] 宾夕法尼亚大学的J.Xu等人提出的CREDAL方法借助控制流图以及数据依赖错配的识别来定位软件脆弱性,该方法建立在具备源代码的条件下,依赖于栈空间的完整性,不适用栈空间被破坏的情况。
[0012] 综上,目前程序异常分析方法的主要缺陷在于:依赖调试器和大量的分析人员,无法应对具有加壳混淆、反调试能力的目标软件,分析深度不够,停留在表层,无法有效深入分析引发异常的根本原因,对源代码具有一定的依赖性。

发明内容

[0013] 针对现有技术中存在的技术问题,本发明的目的在于提供一种基于动态污点传播的程序异常分析方法,该方法对二进制程序动态运行过程中产生的崩溃和异常进行监测跟踪,能够精确分析和定位异常形成的原因和关键点,并且不依赖于目标程序源代码。
[0014] 为达到上述目的,本发明采用的技术方案如下:
[0015] 一种基于动态污点传播的程序异常分析方法,其步骤包括:
[0016] 在虚拟化环境下动态运行目标程序,监控所述目标程序的目标进程并记录执行序列信息;
[0017] 将引起所述目标程序异常的输入数据标记为污点源,根据所述目标进程执行过的指令的指令语义进行污点传播分析,获得内存的污点状态信息;
[0018] 识别出所述目标程序运行过程中的内存访问异常,提取异常指令的异常位置,根据所述内存的污点状态信息检测所述异常位置的操作数和寄存器的污点状态;
[0019] 如果所述操作数和寄存器被污染,则通过污点回溯定位出错误点;否则对所述寄存器进行逆向切片分析,找出相关的数据链路,并在所述数据链路上的各个节点进行堆溢出检测、UAF检测,以及通过对比分析定位出错误点。
[0020] 进一步地,对所述目标程序进行监控时,解析目标进程的数据结构,提取关键变量,获取当前执行的进程信息,以便甄别是否为目标进程的指令;所述进程信息包括指令、指令地址、通用寄存器、操作数内存地址和内存的值。
[0021] 进一步地,所述污点源的标记需要在虚拟化引擎中进行,解析所述目标程序动态库PE结构信息,提取所述输入数据的相关API函数并监控,获取标记的污点源数据读入到内存中的位置,记录下内存地址、内存大小、映射的输入位置、输入类型以及当前执行指令的序号。
[0022] 进一步地,所述输入数据包括文件、网络、外设操作信息。
[0023] 进一步地,所述污点传播分析的方法是:每执行一条所述目标进程的指令都检测所述指令的输入数据是否为污点数据,如果是,根据设定规则修改所述指令的输出的污点状态,该污点状态包括污点标签、标记该存储为污点的时序ID和指令地址;如果否,而所述指令的输出位置的前序状态是污点数据,则对所述输出位置进行漂白处理。
[0024] 进一步地,所述漂白处理还包括对特殊指令xor eax,eax、sub ebx,ebx、and edx,0的特殊操作进行漂白处理。
[0025] 进一步地,所述内存的污点状态信息通过改进的页表存储,该改进的页表的每个页表项均为污点状态的指针,如果对应内存未被污染,该指针为空,否则指向一个污点状态结构。
[0026] 进一步地,所述污点状态结构包括污点字节的数量、污点源标签集合,以及最后一次给存储位置标记污点的时序ID、指令地址和位置的值。
[0027] 进一步地,所述堆溢出检测的方法是:监控所述目标程序运行过程中的堆分配、释放,记录所述堆分配的地址、大小,标记存储堆地址的空间为污点,对指针解引用过程进行污点传播分析,检测所述数据链路的各个节点是否有访问超出堆分配范围大小的堆溢出。
[0028] 进一步地,所述UAF检测的方法是:监控所述目标程序运行过程中的堆分配、释放,对指针解引用过程进行污点传播分析,检测所述数据链路的各个节点是否有引用了释放后的堆指针。
[0029] 进一步地,所述对比分析的方法是:分析所述目标程序对正常输入在异常位置下的属性差异,所述属性包括寄存器值、操作数地址、操作数的值、切片路径以及切片路径节点,对差异明显的节点进一步分析差异与所述输入数据之间的逻辑关系。
[0030] 进一步地,对所述数据链路的各个节点可迭代进行逆向切片分析。
[0031] 本发明通过虚拟化环境动态运行目标程序,能够完整地监控程序的运行全过程,对引起目标程序异常的输入数据进行污点传播分析,利用改进的页表对寄存器和内存的污点状态进行更新,找出引起目标程序内存访问异常的异常位置,对异常位置的寄存器进行逆向切片分析或迭代逆向切片分析,找出相关数据链路,对链路上各节点进行堆溢出检测、UAF检测,以及通过对比分析定位出错误点。本发明能够对程序动态运行过程中产生的崩溃和异常进行监测跟踪,能够深度分析程序异常的形成原因,从数据流内部逻辑关系对程序溢出进行诊断,能够精确分析和定位异常形成的原因和关键点,并且不依赖于目标程序源代码,分析能力方面具备分析传统方法难以应对的使用加壳技术和反调试技术的目标程序,分析效率提升30%以上。附图说明
[0032] 图1为本发明一种基于动态污点传播的程序异常分析方法流程图

具体实施方式

[0033] 为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
[0034] 如图1所示,一种基于动态污点传播的程序异常分析方法,包括步骤:
[0035] 1、配置虚拟化环境
[0036] 本发明采用动态虚拟化技术,首先需要安装目标程序运行的虚拟机操作系统,并在虚拟机操作系统内安装部署好目标程序,导入引起异常的输入数据文件,配置运行所需的软硬件环境、网络环境等条件。
[0037] 2、动态运行目标程序
[0038] 本发明采用动态分析方法,使用具有监测能力的虚拟化引擎动态运行目标程序,并给予目标程序所需的输入用例,如在运行的虚拟化环境中双击打开样本文件,或者命令行带参数启动目标程序。
[0039] 3、监控目标程序的进程,记录执行序列信息
[0040] 本发明采用指令级的细粒度分析,需要在目标程序运行过程中记录进程的执行序列信息,监控在虚拟化引擎内实现,目标程序对分析过程无感,因此具备不受目标程序反调试、反分析的影响。在虚拟化引擎中的分析,需要解析进程数据结构,提取目标进程的关键变量CR3,获得当前执行的进程信息,以便甄别是否为目标进程的指令,该进程信息包括指令、指令地址、寄存器值、操作数地址和操作数的值。
[0041] 4、污点源标记
[0042] 本发明需要监控引起程序异常的输入数据在程序执行过程中起到的作用,因此需要将输入数据标记为污点源,这些输入数据可能是文件、网络、外设操作信息等,如将指定文件的输入标记为污点,将指定网络IP和端口的输入数据标记为污点,或者将输入到指定编辑框的外设操作信息标记为污点。
[0043] 污点源的标记需要在虚拟化引擎中进行,解析目标程序动态库的PE结构信息,提取输入数据相关API函数,通过在虚拟化引擎中监控这些关键函数及参数,获取标记的污点源数据读入到内存中的位置,最终记录下标记的内存地址、内存大小、映射的输入位置、输入类型以及当前执行指令的序号。
[0044] 5、污点传播分析
[0045] 本发明在污点源标记成功之后进行污点传播分析,根据标记的污点源,解析进程执行过的每一条指令,根据指令语义进行污点传播分析。每执行一条目标进程的指令都检测指令的输入是否为污点数据,如果是,根据规则修改指令的输出的污点状态,状态包括污点标签、标记该存储为污点的时序ID和指令地址等;如果不是,而输出位置的前序状态是污点数据,需要对输出位置进行漂白处理。另外对于特殊指令xor eax,eax、sub ebx,ebx、and edx,0等特殊操作需要漂白处理。
[0046] 内存的污点状态使用改进的页表进行存储,既节省空间又方便快速查询,具有高效的污点状态更新能力。每个页表项均为污点状态的指针,如果对应内存未被污染,指针为空,否则指向一个污点状态结构,该污点状态结构如下所示:
[0047]
[0048] 其中count是对应污点字节的数量,Labels数组记录了对应的污点源标签集合,标签上限为TAINT_MAX_LABELS_COUNT,可根据具体目标对象调整,srcId是最后一次给该存储位置标记污点的时序ID,srcEip是最后一次给该存储位置标记污点的指令地址,val是该存储位置最后一次标记污点后的值。此外,寄存器的地址空间映射到用户态程序不常用的内存地址0x0000~0xFFFF空间,不同线程映射不同空间以便区分。
[0049] 6、程序异常监控
[0050] 本发明需要监控目标程序是否发生异常以及在何时何处发生何种异常,通过在虚拟化引擎中解析PE结构信息,获得异常处理API函数的地址信息。插桩监控异常处理的执行,通过错误号筛选出内存访问异常,获取异常指令,提取异常代码类型、异常位置,并根据污点传播分析的结果检测异常位置的寄存器、内存、访存指针是否与输入有直接的数据依赖关系或者逻辑依赖关系,即分析其是否受到输入数据直接控制,以及具体受到具体哪几个输入字节的控制,分析精度达到字节级精确度。
[0051] 分析异常位置指令操作数、寄存器的污点状态,以及各寄存器指向的有效内存的污点状态,如果是寻址指针寄存器被污点数据控制导致的崩溃,则是数组越界未检测导致的异常,通过污点回溯可绘制出异常数据的计算过程,定位错误点。如果异常位置的操作数和相关寻址寄存器均未被污点数据控制,通过逆向数据流分析提取指针解引用的过程和数据链路节点。
[0052] 7、逆向切片分析
[0053] 逆向切片分析是对异常位置的关键数据进行逆向溯源分析。当异常位置与输入数据没有直接的数据流关系和逻辑依赖关系时,需要分析它们之间的间接关系,本发明通过逆向切片异常位置的关键数据,找出异常路径上的关键数据节点,然后结合步骤8和9的方法筛选出众多路径点上的可疑关键点。
[0054] 8、堆溢出与UAF检测
[0055] 本发明对污点传播功能进行了扩充,也支持将堆分配返回的指针标记为污点,同时记录堆分配的大小,并在执行过程中进行污点传播计算,当访问一块堆内存时可根据污点标签定程序指令意图访问的堆块信息,同时结合堆分配时的大小获知合法堆范围,检测访问的内存地址是否落在堆块合法范围即可进行堆溢出检测。同时本发明还对释放的堆进行标记,并采用了特定的奇偶标签进行区分,如果引用的堆指针对应的标签被释放也能有效地被检测出来。由于内存堆访问频繁,如对每条指令都进行检测开销巨大,本发明只检测步骤7中筛选出的异常路径节点,当异常路径节点存在堆溢出或者UAF,再分析输入与溢出点或者UAF的逻辑关系。与传统的堆溢出检测相比,本发明只检测提取的异常路径节点,检测点更精简,同时堆分配与堆使用通过污点传播建立直接联系,而传统的堆溢出检测只能检测出是否访问的合法堆地址,对跨堆溢出到另一个堆存在漏报。
[0056] 9、对比分析
[0057] 本发明还使用了对比分析方法,对比正常输入的切片数据链路。根据训练样本库数据链路关系统计,分析目标程序对正常输入(不引起程序异常的输入)的处理情况,分析其在异常位置(触发异常的输入的异常位置)下的属性差异,这些属性包括寄存器值、操作数地址和操作数的值、切片路径和切片路径节点。对于差异明显的点,再进一步分析差异与输入数据之间的逻辑关系。通过节点属性对比分析,检测指针解引用过程的关键点的异常。
[0058] 10、迭代分析
[0059] 本发明采用迭代分析方法,对于切片路径上的点可再次进行切片分析,同时分析新生成的切片路径上的堆异常情况和对比正常情况的差异。
[0060] 本方法能够对程序动态运行过程中产生的崩溃和异常进行监测跟踪,能够深度分析程序异常的形成原因,从数据流内部逻辑关系对程序溢出进行诊断,能够精确分析和定位异常形成的原因和关键点,并且不依赖于目标程序源代码,分析能力方面具备分析传统方法难以应对的使用加壳技术和反调试技术的目标程序,分析效率提升30%以上。
[0061] 对于本领域的技术人员而言,可以根据需要自己配置所要监控的进程模块,从而全面分析目标进程对输入数据的处理过程,并建立输入和异常之间的直接或间接关系。
[0062] 尽管本发明公开了具体实施例和附图,其目的在于帮助理解本发明的内容并据以实施,本领域的技术人员可在不脱离本发明及权利要求的精神和范围内,进行各种替换、变化和修改。因此,本发明不应局限于最佳实施例和附图所公开的内容,保护范围以权利要求书界定的范围为准。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈