Membrane: 通过内存分页分析检测恶意代码加载的后验检测

作者:{Doris}@ArkTeam

原文作者:G Pék Z Lázár Z Várnagy M Félegyházi L Buttyán

原文题目:Membrane: A Posteriori Detection of Malicious Code Loading by Memory Paging Analysis

原文来源:European Symposium on Research in Computer Security, 2016 :199-216

    恶意软件可以使用各种方法来控制系统并隐藏其存在。由于其多功能性,代码加载通常被当代恶意软件使用,也是恶意软件用于实现持久性的关键技术之一。当恶意软件添加或替换现有代码的功能以执行其自己的组件时,就会发生代码加载。

当前存储器取证技术的最大问题之一是它们仅利用在获取时OS主动使用的存储器位置。也就是说,如果在抓取内存时恶意软件或其中的一部分处于非活动状态,则有关代码加载的重要信息可能会丢失。此外,Windows的丰富功能集允许不法分子构建独特的代码加载技术,因此它仍然是一个威胁。

该文中探讨了Windows内存管理的领域,系统地识别关键的分页状态,并在这些分页状态的基础上构建,以检测系统成功破坏后的恶意行为。该文设计并实现了Membrane,这是一种基于异常的内存取证工具,用于检测恶意软件的代码加载攻击。其结果表明,在大多数情况下,该工具可以检测到加载恶意软件行为的代码,成功率为86-98%,包括高级针对性攻击。该方法足够通用,因此可以显着提高攻击者保持隐身的限制并持续很长一段时间。

实施过程:首先,选择分页状态的关键特征,并训练随机森林分类器来检测代码加载行为。稍后评估和过滤这些候选特征以选择适合于检测代码加载的最相关特征。在测试阶段,重复训练阶段,但仅使用所选特征对样本进行分类(即,检测为恶意或非恶意)。

特征创建:首先使用Volatility本地打开内存快照文件(即.vmsn)。然后,通过迭代EPROCESS内核结构来定位运行进程的VadRoot值。VadRoot存储进程VAD树的虚拟地址。此时,通过定位VAD条目来遍历VAD树,VAD条目描述属于进程虚拟地址空间的所有有效虚拟地址。之后需要通过将它们切成页面大小的缓冲区来解析所有这些虚拟地址。

下一步,修改了Volatility的内部地址转换过程,如下所示。每当Volatility检索到新的进程虚拟地址时,它就会通过遍历进程页表来开始解析地址。与硬件MMU类似,如果所有页表条目(例如,PDE、PTE)都有效,则它返回相应的物理地址。如果遇到无效条目(例如,软件PTE),则会引发异常或返回零值。因此,必须在这里实现软件MMU以检索确切的分页条目类型。为此,使用VAD树解析无效条目,如图1所示。


图1

检测代码加载:在选择突出特征后,使用随机森林分类来检测代码加载。随机森林是一个随机分裂的决策树。如图2所示,可以用这种方法收集树的分支,通过树分支投票数来对给定的样本进行分类。最初,遵循图1中所示的Flame恶意软件执行所获得的提示。首先拍摄了受恶意软件感染的VM的单个快照,看看是否检测到了在之前研究(文中4.3部分)中发现的一些功能。然后,定期从同一受感染的VM创建多个快照,以详细了解代码加载攻击如何修改分页状态的数量以及操作系统如何随时间操纵它们。执行此测量有多种原因。首先,单个快照可能错过执行停止恶意软件的激活,该恶意软件将其寄生行为推迟到特定事件发生(例如,对于Duqu没有键盘按压5分钟)。其次,恶意软件可以检索更多组件并将其加载到其他系统进程中。只有在重复拍摄快照时才能检测到此行为。


图2


发表评论

邮箱地址不会被公开。 必填项已用*标注