一种基于内存取证技术的代码注入攻击检测方式

专利2023-08-05  129



1.本发明涉及一种基于内存取证技术的windows x64代码注入攻击检测方法,该方法在内存取证领域中对于windows x64代码注入攻击检测方面有着很好的应用。


背景技术:

2.操作系统或应用程序执行的每项操作都会导致对计算机内存(ram)进行特定的修改,这些修改通常会在操作后持续很长时间并且会保留在系统中,因此关键数据通常只存在于内存中,例如磁盘加密密钥、内存驻留注入的代码片段、记录外的聊天信息、未加密的电子邮件信息和不可缓存的互联网历史记录等。内存取证是对计算机系统的物理内存内容进行分析的技术,以得出诸如故障或恶意活动来源等信息。此外,内存取证为系统所运行的状态提供了可见性,例如哪些进程正在运行、打开的网络连接以及最近执行的命令。在获取内存转储文件之后可以独立于目标系统进行取证分析,从而减少恶意软件或rootkit干扰结果的可能性。
3.恶意软件利用代码注入在另一个进程的上下文中执行操作。通过这样做,恶意软件可以迫使一个合法的进程以其名义执行操作,例如下载额外的木马程序或从系统中窃取信息。攻击者可以通过多种方式将代码注入进程,比如直接写入远程进程的内存,或者添加一个注册表键,使新进程加载攻击者选择的dll等。近年来,防范和检测cia一直被广泛关注,开放web应用程序安全项目(openweb application security project,owasp)评估了十大web应用程序安全风险,其中cia技术名列首位。随着windows 10x64的普及,对代码注入技术产生了一定影响。随着物理内存大小的增加,取证人员需要对每个案例分析的数据量越来越大,增加了安全事件响应所需的周转时间。因此,在windows取证过程中识别64位代码注入攻击是至关重要的。


技术实现要素:

4.为了辅助取证分析人员定位代码注入攻击的内存区域,本发明公开了一种基于内存取证技术的windows x64代码注入攻击检测方法。
5.为此,本发明提供了如下技术方案:
6.1.基于内存取证技术的windows x64代码注入攻击检测方法,其特征在于,该方法包括以下步骤:
7.步骤1:将内存样本载入volatility取证框架并读取内存样本的配置文件信息。
8.步骤2:加载地址空间,读取进程信息。
9.步骤3:解析进程线程调用堆栈并获取栈帧信息。
10.步骤4:将vad节点信息与堆栈信息进行交叉验证并输出检测结果。
11.2.根据权利要求1所述的基于内存取证技术的windows x64代码注入攻击检测方法,其特征在于,所述步骤1中,将内存样本载入取证框架并读取内存样本的配置文件信息,具体步骤为:
12.步骤1-1使用内存转储工具获取内存转储文件(.raw、.dmp等);
13.步骤1-2使用volatility取证框架判断内存样本配置信息版本(win10、win7 等);
14.3.根据权利要求1所述的基于内存取证技术的windows x64代码注入攻击检测方法,其特征在于,所述步骤2中,读取进程信息并加载地址空间,具体步骤为:
15.步骤2-1查找并解析进程环境快数据结构_peb;
16.步骤2-2判断进程类型(x64或wow64);
17.步骤2-3使用volatility取证框架内部功能函数加载地址空间。
18.4.根据权利要求1所述的基于内存取证技术的windows x64代码注入攻击检测方法,其特征在于,所述步骤3中,解析进程线程调用堆栈并获取栈帧信息,具体步骤为:
19.步骤3-1根据进程对象eprocess对象获得进程线程执行上下文结构;
20.步骤3-2获取64位pe文件中的.pdata节作为runtime_function结构;
21.步骤3-3根据线程调用堆栈的栈帧指针寄存器计算栈桢大小及函数返回地址。
22.5.根据权利要求1所述的基于内存取证技术的windows x64代码注入攻击检测方法,其特征在于,在所述步骤4中,将vad节点信息与堆栈信息进行交叉验证,具体过程为:
23.步骤4-1首先通过vad节点中staringvpn和endingvpn字段确定函数返回地址在vad树中的位置,若vad节点被恶意软件破坏则进行步骤4-4;
24.步骤4-2利用vad节点中controlarea字段获取函数返回地址所对应的文件对象信息,若controlarea字段为空则进行步骤4-4,若controlarea字段非空则进行步骤4-3;
25.步骤4-3判断函数返回地址所在的vad节点中fileobject字段是否为空,若空则输出对应堆栈信息并标记为代码注入攻击;
26.步骤4-4通过获取到的进程线程堆栈信息过滤该函数返回地址所对应的函数名是否为敏感函数,若是则输出对应堆栈信息并标记为代码注入攻击;
27.步骤4-5匹配进程vad信息中获取的文件对象和堆栈分析中获取的文件对象,若不一致则输出对应堆栈信息并标记为代码注入攻击。
28.有益效果:
29.1.本发明是一种基于内存取证技术的windows x64代码注入攻击检测方法。主要针对计算机内存转储文件进行分析,能够有效检测windows x64代码注入攻击,帮助取证人员分析注入来源以及攻击流程。
30.2.传统的windows代码注入攻击检测方法利用vad进行检测。vad描述了进程运行时的内存布局,但是只记录了内存空间的首次分配信息,并且在不同的windows版本中对于维护vad的数据结构也有所不同,所以只依赖进程vad 无法有效检测代码注入。本发明所使用检测技术摒弃了vad保护字段可被恶意软件修改的局限性,结合进程的堆栈信息和vad信息以检测windows代码注入。
31.3.以往的windows代码注入攻击检测只针对于windows x86系统,随着 windows 10x64版本的普及现存的检测方法失效,本发明可以针对windows 10 x64各版本进行有效的代码注入攻击检测。
附图说明:
32.图1为本发明实施方式中的获取进程信息并解析进程线程堆栈流程图。
33.图2为本发明实施方式中的检测windows x64代码注入攻击检测流程图。
具体实施方式:
34.为了使本发明的实施例中的技术方案能够清楚和完整地描述,以下结合实施例中的附图,对本发明进行进一步的详细说明。
35.步骤1获取获取内存样本并载入取证框架过程如下:
36.以windows 10x64 15063系统虚拟机为例。
37.本发明实施例在获取内存样本、载入取证框架并解析进程堆栈的流程图,如图1所示,包括以下步骤。
38.步骤1-1将恶意软件在虚拟机运行结束后,利用内存转储工具获取虚拟机系统内存样本;
39.步骤1-2利用volatility取证框架载入内存样本;
40.步骤2将内存样本载入取证框架后判断进程类型。
41.步骤2-1利用取证框架内部函数loadaddressspace()加载地址空间;
42.步骤2-2根据进程环境块区分出64位进程。
43.步骤3解析进程线程调用堆栈、计算函数返回地址及其对应的文件对象。
44.步骤3-1获取线程对象_kthread及线程上下文对象;
45.步骤3-2windows 64位pe文件中的.pdata节对应于runtime_function 结构,该结构描述了当前函数的范围和指向当前调用堆栈展开结构 unwind_info的指针。unwind_info结构包含可变数量的unwind_code 结构,unwind_code中的codeoffset和unwindop字段描述了栈帧大小。因此,本质上,unwind_code是函数序言的元数据,通过unwind_code结构计算当前函数栈桢大小;
46.步骤3-3通过栈桢指针及函数栈桢大小计算函数返回地址。
47.步骤3-4根据函数返回地址获取其对应的文件对象信息。
48.步骤4交叉验证vad节点信息与进程堆栈信息并输出结果。
49.本发明实施例基于交叉验证文件对象流程图与输出结果,如图2所示。具体为:
50.步骤4-1判断函数返回地址是否在vad节点范围内,如不在,则进行步骤 4-4;
51.步骤4-2对于vad节点,可以找到记录内存区域的_control_area地址,如果该内存区域用于映射文件,则可以引用相应的_file_object结构提取文件对象信息。此外,由于vad树在系统中不稳定,若恶意软件通过修改vad 节点信息则易引起系统崩溃,从而在vad节点中获取的文件对象信息具有可靠性,以此来来获取文件对象信息;
52.步骤4-3函数返回地址应该由一个文件支持(无论是可执行文件还是dll),当确定函数返回地址在进程vad中的位置后,利用节点中的controlarea字段获取函数返回地址所对应的文件对象信息。若函数返回地址位于一个没有映射到任何文件对象的页面内,那么表明存在直接注入到内存中的代码;
53.步骤4-4在发现vad节点被恶意软件修改时,通过分析进程堆栈函数返回地址是否对应为敏感函数(分配空间、更改权限等);
54.步骤4-5对比堆栈分析所得到的文件信息与vad分析所得到的文件信息,若对比失败则表明进程的内存空间已被恶意代码修改。
55.以上所述是结合附图对本发明的实施例进行的详细介绍,本文的具体实施方式只是用于帮助理解本发明的方法。对于本技术领域的普通技术人员,依据本发明的思想,在具体实施方式及应用范围内均可有所变更和修改,故本发明书不应理解为对本发明的限制。

技术特征:
1.基于内存取证技术的代码注入攻击检测方法,其特征在于,该方法包括以下步骤:步骤1:将内存样本载入volatility取证框架并读取内存样本的配置文件信息。步骤2:加载地址空间,读取进程信息。步骤3:解析进程线程调用堆栈并获取栈帧信息。步骤4:将vad节点信息与堆栈信息进行交叉验证并输出检测结果。2.根据权利要求1所述的基于内存取证技术的代码注入攻击检测方法,其特征在于,所述步骤1中,将内存样本载入取证框架并读取内存样本的配置文件信息,具体步骤为:步骤1-1使用内存转储工具获取内存转储文件(.raw、.dmp等);步骤1-2使用volatility取证框架判断内存样本配置信息版本(win10、win7等)。3.根据权利要求1所述的基于内存取证技术的代码注入攻击检测方法,其特征在于,所述步骤2中,读取进程信息并加载地址空间,具体步骤为:步骤2-1查找并解析进程环境快数据结构_peb;步骤2-2判断进程类型(x64或wow64);步骤2-3使用volatility取证框架内部功能函数加载地址空间。4.根据权利要求1所述的基于内存取证技术的代码注入攻击检测方法,其特征在于,所述步骤3中,解析进程线程调用堆栈并获取栈帧信息,具体步骤为:步骤3-1根据进程对象eprocess对象获得进程线程执行上下文结构;步骤3-2获取64位pe文件中的.pdata节作为runtime_function结构;步骤3-3根据线程调用堆栈的栈帧指针寄存器计算栈桢大小及函数返回地址。5.根据权利要求1所述的基于内存取证技术的代码注入攻击检测方法,其特征在于,在所述步骤4中,将vad节点信息与堆栈信息进行交叉验证,具体过程为:步骤4-1首先通过vad节点中staringvpn和endingvpn字段确定函数返回地址在vad树中的位置,若vad节点被恶意软件破坏则进行步骤4-4;步骤4-2利用vad节点中controlarea字段获取函数返回地址所对应的文件对象信息,若controlarea字段为空则进行步骤4-4,若controlarea字段非空则进行步骤4-5;步骤4-3判断函数返回地址所在的vad节点中fileobject字段是否为空,若空则输出对应堆栈信息并标记为代码注入攻击;步骤4-4通过获取到的进程线程堆栈信息过滤该函数返回地址所对应的函数名是否为敏感函数,若是则输出对应堆栈信息并标记为代码注入攻击;步骤4-5匹配进程vad信息中获取的文件对象和堆栈分析中获取的文件对象,若不一致则输出对应堆栈信息并标记为代码注入攻击。

技术总结
本发明涉及一种基于内存取证技术的Windows代码注入检测方法。本发明首先有效区分Windows 64位进程和WoW64进程;然后基于遍历进程堆栈得到的函数返回地址以确定函数名、模块名等信息;然后将遍历堆栈得到的信息结合进程VAD结构来检测函数返回地址是否在VAD节点范围内、匹配堆栈信息中文件名与VAD结构中的文件名以定位注入代码。本发明的方法能够有效检测Windows代码注入,辅助取证分析人员定位内存中的代码注入攻击。位内存中的代码注入攻击。位内存中的代码注入攻击。


技术研发人员:翟继强 韩旭 孙海旭 王家乾
受保护的技术使用者:哈尔滨理工大学
技术研发日:2022.05.25
技术公布日:2022/11/1
转载请注明原文地址: https://tieba.8miu.com/read-4376.html

最新回复(0)