首页 / 专利库 / 专利权 / 专利合作条约 / 第I章 / 国际申请 / 请求书 / 保护类型 / 一种基于内存保护类型监控的恶意代码跟踪识别方法

一种基于内存保护类型监控的恶意代码跟踪识别方法

阅读:815发布:2020-05-12

专利汇可以提供一种基于内存保护类型监控的恶意代码跟踪识别方法专利检索,专利查询,专利分析的服务。并且一种基于内存 保护类型 监控的恶意代码 跟踪 识别方法,步骤如下:1:将开发的动态链接库注入到目标 进程 中;2: 申请 向量化异常处理函数接管异常,用于进行对异常段静态分析及动态分析;3:劫持 修改 内存保护属性的 接口 函数;4:检测每次调用是否位于栈空间;5:判断每次调用参数中是否包含执行属性标志;6:针对修改内存保护属性为可执行属性的接口函数调用,清除可执行保护标志位;7:记录本次接口函数调用的参数环境;8:调用原始接口函数,使程序正常运行;9:报告发现漏洞攻击(exploit);通过以上步骤,达到了识别漏洞攻击过程中恶意代码(shellcode)执行的效果,解决了 现有技术 保护 覆盖 面积小,兼容性低的问题。,下面是一种基于内存保护类型监控的恶意代码跟踪识别方法专利的具体信息内容。

1.一种基于内存保护类型监控的恶意代码跟踪识别方法,其特征在于:其步骤如下:
步骤1:将技术人员开发的动态链接库注入到目标进程中;
步骤2:在目标进程中申请向量化异常处理函数,用于接管目标进程中所发出的异常并对该异常环境进行分析,分析流程包含以下步骤;
步骤2-1:等待当前进程发生的异常事件,过滤访问违规之外的异常信息,并与收集的参数环境比对异常信息;
步骤2-2:如果步骤2-1比对信息成功,备份保留此段内存,并在此内存范围内做静态规则匹配;
步骤2-3:若静态规则匹配失败,则从异常发生的地址动态模拟解析并执行该段内存代码,做动态行为分析;
步骤2-4:根据步骤2-3的返回结果,最终输出本次的检测结论,如果为恶意代码,给出提示并退出执行过程;
步骤3:获取系统指定动态链接库中针对与修改内存保护属性的接口函数地址,劫持其执行流程到技术人员开发的动态链接库中;
步骤4:在保护程序的运行周期中监控所有关于此接口的调用流程,初步检测调用的合法性,如果不合法,进入步骤9;
步骤5:通过初步的合法性检测后,判断参数中是否包含执行属性标志;
步骤6:针对修改内存保护属性为可执行属性的接口函数调用,清除可执行属性标志;
步骤7:记录本次接口函数调用的参数环境;
步骤8:调用原始接口函数,使程序正常运行;
步骤9:报告发现漏洞攻击即exploit;
在步骤2-2中所述的“如果步骤2-1比对信息成功,备份保留此段内存,并在此内存范围内做静态规则匹配”,其作法如下:如果异常发生的地址位于记录的数据区间中,保留即dump本段内存到本地,并对该段内存数据进行符合恶意代码即shellcode模式的静态搜索。
2.根据权利要求1所述的一种基于内存保护类型监控的恶意代码跟踪识别方法,其特征在于:在步骤1中所述的“目标进程”,它是指受到保护的进程。
3.根据权利要求1所述的一种基于内存保护类型监控的恶意代码跟踪识别方法,其特征在于:在步骤2中所述的“在目标进程中申请向量化异常处理函数,用于接管目标进程中所发出的异常”,其作法如下:调用操作系统接口函数AddVectoredExceptionHandler,注册一个处理函数,用于处理进程中发生的异常中断。
4.根据权利要求1所述的一种基于内存保护类型监控的恶意代码跟踪识别方法,其特征在于:在步骤2-1中所述的“等待当前进程发生的异常事件,过滤访问违规之外的异常信息,并与收集的参数环境比对异常信息”,其作法如下:当进程环境发生异常中断后,会被步骤2中申请的向量化异常处理函数所接管,过滤掉ExceptionCode为STATUS_ACCESS_VIOLATION之外的异常消息,将其发生异常的地址即ExceptionAddress同步骤7中记录的信息做对比,判断这次异常发生的地址是否位于记录的数据区间中。
5.根据权利要求1所述的一种基于内存保护类型监控的恶意代码跟踪识别方法,其特征在于:在步骤2-3中所述的“若静态规则匹配失败,则从异常发生的地址动态模拟解析并执行该段内存代码,做动态行为分析”,其作法如下:动态模将步骤2-2中dump下来的数据块载入内存中,从异常发生地址处偏移建立执行流程,记录其对系统接口函数的访问情况,是否存在动态获取系统接口函数地址并执行敏感接口函数的行为。
6.根据权利要求1所述的一种基于内存保护类型监控的恶意代码跟踪识别方法,其特征在于:在步骤3中所述的“获取系统指定动态链接库中针对与修改内存保护属性的接口函数地址,劫持其执行流程到技术人员开发的动态链接库中”,其作法如下:获取NTDLL模块中,ZwProtectVirtualMemory接口函数的地址,HOOK其执行流程。
7.根据权利要求1所述的一种基于内存保护类型监控的恶意代码跟踪识别方法,其特征在于:在步骤4中所述的“在保护程序的运行周期中监控所有关于此接口的调用流程,初步检测调用的合法性”,其做法如下:检测要改变保护属性的内存基址是否位于当前线程信息块中所保存的栈地址的起始范围内。
8.根据权利要求6所述的一种基于内存保护类型监控的恶意代码跟踪识别方法,其特征在于:在步骤5中所述的“判断参数中是否包含执行属性标志”,其做法如下:检测本次ZwProtectVirtualMemory调用参数的NewAccessProtection中是否包含执行属性标志。
9.根据权利要求6所述的一种基于内存保护类型监控的恶意代码跟踪识别方法,其特征在于:在步骤7中所述的“记录本次接口函数调用的参数环境”,其作法如下:记录NTDLL模块中,ZwProtectVirtualMemory接口函数调用时的BaseAddress参数,
NumberOfBytesToProtect参数,OldAccessProtection参数。

说明书全文

一种基于内存保护类型监控的恶意代码跟踪识别方法

一.技术领域

[0001] 本发明提供一种基于内存保护类型监控的恶意代码跟踪识别方法,它涉及漏洞防御,恶意代码检测识别方法,属于信息安全领域。二.背景技术
[0002] 随着电子设备的普及,计算机技术不断发展,整个社会对于互联网及计算机的依赖持续增长,此时信息安全已成为不容忽视的问题,而软件漏洞的检测识别及防御技术显得尤为重要。根据专利申请者的统计,近年来漏洞攻击技术中,代码复用攻击(code reuse attacks)占主要地位,漏洞攻击者通常会通过攻击虚函数表或返回地址执行系统接口函数修改恶意代码所在内存保护属性,而现有针对这种攻击手段的防护方式如微软提供的执行流保护(CFG Control Flow Guard)有下列缺点:保护覆盖面积小,兼容性低,通常需要在应用程序编译时开发环境提供支持,且运行于Windows10以上的高系统版本,两种条件缺一不可,导致目前有大量的应用程序并无法使用该类保护方案。三.发明内容
[0003] 1.发明目的
[0004] 本发明公开了一种基于内存保护类型监控的恶意代码跟踪识别方法,目的在于精确检测出发生的漏洞攻击技术以及恶意代码威胁,从而快速进行相应的防御反应,保护沙箱环境所在网络中的计算机系统的安全。
[0005] 2.技术方案
[0006] 本发明为一种基于内存保护类型监控的恶意代码跟踪识别方法,其步骤如下:
[0007] 步骤1:将技术人员开发的动态链接库注入到目标进程中;
[0008] 步骤2:在目标进程中申请向量化异常处理函数,用于接管目标进程中所发出的异常并对该异常环境进行分析,分析流程包含以下步骤;
[0009] 步骤2-1:等待当前进程发生的异常事件,过滤访问违规之外的异常信息,并与收集的参数环境比对异常信息;
[0010] 步骤2-2:如果步骤2-1比对信息成功,备份保留此段内存,并在此内存范围内做静态规则匹配;
[0011] 步骤2-3:若静态规则匹配失败,则从异常发生的地址动态模拟解析并执行该段内存代码,做动态行为分析;
[0012] 步骤2-4:根据步骤2-3的返回结果,最终输出本次的检测结论,如果为恶意代码,给出提示并退出执行过程;
[0013] 步骤3:获取系统指定动态链接库中针对与修改内存保护属性的接口函数地址,劫持其执行流程到技术人员开发的动态链接库中;
[0014] 步骤4:在保护程序的运行周期中监控所有关于此接口的调用流程,初步检测调用的合法性,如果不合法,进入步骤9;
[0015] 步骤5:通过初步的合法性检测后,判断参数中是否包含执行属性标志;
[0016] 步骤6:针对修改内存保护属性为可执行属性的接口函数调用,清除可执行保护标志位;
[0017] 步骤7:记录本次接口函数调用的参数环境;
[0018] 步骤8:调用原始接口函数,使程序正常运行;
[0019] 步骤9:报告发现漏洞攻击(exploit)。
[0020] 其中,步骤1中所述的“目标进程”,它是指受到本发明保护的进程。
[0021] 其中,步骤1中所述的“将技术人员开发的动态链接库注入到目标进程中”,其作法如下:其中的注入方法是本领域的常见技术。
[0022] 其中,步骤2中所述的“在目标进程中申请向量化异常处理函数,用于接管目标进程中所发出的异常”,其作法如下:调用操作系统接口函数AddVectoredExceptionHandler,注册一个处理函数,用于处理进程中发生的异常中断。
[0023] 其中,步骤2-1中所述的“等待当前进程发生的异常事件,过滤访问违规之外的异常信息,并与收集的参数环境比对异常信息”,其作法如下:当进程环境发生异常中断后,会被步骤2中申请的向量化异常处理函数所接管,过滤掉ExceptionCode为STATUS_ACCESS_VIOLATION之外的异常消息,将其发生异常的地址(ExceptionAddress)同步骤7中记录的信息做对比,判断这次异常发生的地址是否位于记录的区间中。
[0024] 其中,步骤2-2、步骤2-3中所述的“静态规则匹配”,它是指符合恶意代码(SHELLCODE)形态的指令模式匹配。
[0025] 其中,步骤2-2中所述的“如果步骤2-1比对信息成功,备份保留此段内存,并在此内存范围内做静态规则匹配”,其作法如下:如果异常发生的地址位于记录的数据区间中,保留(dump)本段内存到本地,并对该段内存数据进行符合恶意代码(shellcode)模式的静态搜索,其中的搜索方法是本领域的常见技术,其中的dump方法是本领域的常见技术。
[0026] 其中,步骤2-3中所述的“若静态规则匹配失败,则从异常发生的地址动态模拟解析并执行该段内存代码,做动态行为分析”,其作法如下:动态模将步骤2-1中dump下来的数据块载入内存中,从异常发生地址处偏移建立执行流程,记录其对系统接口函数的访问情况,是否存在动态获取系统接口函数地址并执行敏感接口函数的行为。
[0027] 其中,步骤3中所述的“获取系统指定动态链接库中针对与修改内存保护属性的接口函数地址,劫持其执行流程到技术人员开发的动态链接库中”,其作法如下:获取NTDLL模块中,ZwProtectVirtualMemory接口函数的地址,HOOK其执行流程。其中HOOK方法是本领域的常见技术。
[0028] 其中,步骤4中所述的“在保护程序的运行周期中监控所有关于此接口的调用流程,初步检测调用的合法性”,其做法如下:检测要改变保护属性的内存基址是否位于当前线程信息块中所保存的栈地址的起始范围内。
[0029] 其中,步骤5中所述的“判断参数中是否包含执行属性标志”,其做法如下:检测本次ZwProtectVirtualMemory调用参数的NewAccessProtection中是否包含执行标志。
[0030] 其中,步骤6中所述的“清除可执行保护标志位”,其作法如下:该方法是本领域的常见技术。
[0031] 其中,步骤7中所述的“记录本次接口函数调用的参数环境”,其作法如下:记录NTDLL模块中,NewZwProtectVirtualMemory接口函数调用时的BaseAddress参数,NumberOfBytesToProtect参数,OldAccessProtection参数。
[0032] 其中,步骤8中所述的“调用原始接口函数,使程序正常运行”,其做法如下:该方法是本领域的常见技术。
[0033] 通过以上步骤,本发明达到了识别漏洞攻击过程中恶意代码(shellcode)执行的效果,解决了现有技术保护覆盖面积小,兼容性低的问题。
[0034] 3.优点
[0035] 本发明通过劫持修改内存保护属性的系统接口函数,判断调用参数是否位于栈地址空间,并记录包含可执行属性的调用参数,清除可执行标志位,导致受保护的应用程序因任何原因跳转,执行到属性修改过的内存块时,对于异常的地址进行向高地址反汇编,并根据反汇编结果进行的静态扫描及加载异常内存块,模拟执行的动态行为进行漏洞攻击,恶意代码的识别判断。
[0036] 针对目前常见的漏洞攻击利用手段,通过攻击虚函数表,调用修改内存属性的接口函数修改通过脚本所布置的恶意代码段所在的内存属性,并通过攻击虚表劫持中央处理器(CPU)的指令指针寄存器执行到恶意代码等代码复用攻击(code reuse attacks),目前操作系统拥有的漏洞保护方案:地址空间布局随机化,数据执行保护通常无法检测,而与WINDOWS 10操作系统上才默认开启,由微软提供的执行流保护(CFG Control Flow Guard)这一保护方案相比,本发明有以下优点:保护覆盖面积广,兼容性高,执行流保护只能被WINDOWS最新版本所支持,并且需要在编译时开启这一保护方案,而非最新操作系统或者受保护程序在编译时没有开启这一保护策略,则无法使用这种保护,导致市面上大多数的软件不支持这种防护方式,而本发明不存在这种问题,可以在保证准确度的前提下保护并支持基本上所有的应用程序。四.附图说明
[0037] 图1是本发明所述方法流程示意图。
[0038] 图2是本发明方法的异常处理流程示意图。五.具体实施方式:
[0039] 本发明通过劫持修改内存保护属性的系统接口函数,收集记录包含可执行属性的调用参数,做清除可执行标志位处理,通过监控异常的方式来拦截目标代码的执行,通过静态规则及动态模拟执行的方式高效准确的识别漏洞攻击及恶意代码。
[0040] 参见图1,为本发明所述方法流程示意图,具体流程包括:
[0041] 步骤S101:将本发明的保护模块注入到目标进程中。
[0042] 步骤S102:在受保护的目标进程中申请向量化异常处理函数,用于接管该进程在运行中所引发的异常中断,处理分析异常环境,其处理过程见参考图2,分为S201-S210 10个步骤,如下:
[0043] 步骤S201:进程运行期间发出异常中断,并被向量化异常处理所拦截。
[0044] 步骤S202:判定步骤S201所发生的异常中断信息,是否为关注的异常行为,即“访问违规”异常(MEMORY ACCESS VIOLATION OCCURRED),对于其他原因所发出的异常中断,此处不做处理,并将异常正常下发步骤S209。
[0045] 步骤S203:对于步骤S202所过滤下的异常中断信息,判断其异常中断地址(Exception-address)是否位于数据容器内,对于非该范围内的异常地址,执行步骤S209。
[0046] 步骤S204:将异常发生的内存基地址开始,地址大小范围内的内存备份复制下来,并记录异常发生地址对于这段内存的偏移地址。
[0047] 步骤S205:从异常发生的地址开始向下反汇编,将数据交由S206处理。
[0048] 步骤S206:对于反汇编后的代码,对其进行静态特征代码块扫描识别,对识别到特殊恶意指令块的操作,报告漏洞攻击行为步骤S210。
[0049] 步骤S207:如静态模块扫描识别没有危险特征,进行动态模拟执行操作,并将结果传递给步骤S208进行行为分析。
[0050] 步骤S208:分析该异常代码段的行为结果,如果命中动态特征规则,则报告漏洞攻击,执行步骤S210,否则执行步骤S09。
[0051] 步骤S209:本次异常检测结束,检测结果为非漏洞攻击。
[0052] 步骤S210:报告当前进程中发现漏洞攻击(exploit)。
[0053] 步骤S103:劫持修改内存属性的系统应用程序编程接口(Application Programming Interface),在漏洞攻击过程中,该函数常用于修改目标即恶意代码(SHELLCODE)所在内存段的内存属性,劫持该接口函数用于实现初步漏洞攻击判定及特定信息参数的收集。
[0054] 步骤S104:用于判断进程是否存在通过该接口函数修改线程栈所在内存的内存属性行为,如果修改保护属性的内存的地址位于栈地址空间中,报告漏洞攻击,执行步骤S109。
[0055] 步骤S105:判定该次调用的参数是否带有可执行标记位,即是否要将目标内存设置为带有可执行属性的内存,此处过滤不带有可执行标志位的调用,返回执行原始接口函数步骤S108。
[0056] 步骤S106:通过步骤S105的处理部分,即说明本次接口函数的调用参数中带有可执行标记位,将原始的可执行标志位取消掉。
[0057] 步骤S107:收集本次调用的参数环境信息,并加入由保护模块维护的数据容器中。
[0058] 步骤S108:内存设置完毕,调用原始函数不打断进程的正常执行流程,并等待该进程所发出的异常中断信息。
[0059] 步骤S109:报告当前进程中发现漏洞攻击(exploit)。
高效检索全球专利

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

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

申请试用

分析报告

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

申请试用

QQ群二维码
意见反馈