机器学习如何检测使用沙盒逃避和静态防护的恶意软件

Unit 42研究人员讨论了基于虚拟机监控程序的沙盒中基于内存的工件构建的机器学习渠道,该沙盒是Advanced WildFire的一部分 。可以提高对恶意软件的检测精度 。
正如我们以前所介绍的,恶意软件开发者正在不断完善他们的攻击手段,以使静态分析和沙盒等策略失效 。封装方法和沙盒逃避等技术的不断发展让防御者防不胜防 。
更糟糕的是,流行的检测技术,如结构分析、静态签名和许多类型的动态分析,并不能很好地应对目前越来越复杂的攻击 。
恶意软件开发者越来越多地采用逃避技术,如混淆、封装和在进程内存中执行动态注入的shellcode 。使用来自文件结构的线索进行恶意软件检测可能并不总是成功的 。封装技术可以充分修改文件结构以消除这些线索 。因此,仅在这类特征上训练的机器学习模型将无法有效地检测出此类样本 。
这种检测方法的另一种流行的替代方法是使用机器学习模型,该模型基于恶意软件在沙盒内的执行痕迹来预测恶意行为 。然而,正如我们原来所详细介绍的那样,沙盒逃避非常普遍,有效负载通常会根据任何数量的线索选择不执行,这些线索会指向正在模拟的样本 。
恶意软件也可能会无意或有意地破坏沙盒环境,覆盖日志文件,或由于其所使用的低级技巧而阻止成功分析 。这意味着,在执行日志上训练机器学习模型也不足以捕捉这些逃避类的恶意软件 。

机器学习如何检测使用沙盒逃避和静态防护的恶意软件

文章插图
使用NSIS Crypter加密的GuLoader恶意软件
在这篇文章中,我们将分析一个使用Nullsoft Scriptable Install System(NSIS)加密器加密的GuLoader下载器 。NSIS是一个用于创建windows安装程序的开源系统 。
Hash cc6860e4ee37795693ac0ffe0516a63b9e29afe9af0bd859796f8ebaac5b6a8c
机器学习如何检测使用沙盒逃避和静态防护的恶意软件

文章插图
为什么静态分析没有帮助
GuLoader恶意软件是加密的,它也是通过NSIS安装文件传递的,这对于静态分析来说并不理想,因为必须首先解压缩文件内容 。一旦它被解压缩,我们仍然有加密的数据和一个NSIS脚本 。脚本本身也会动态地解密代码的某些部分,这是使其难以检测的另一个因素 。
然而,没有太多的结构线索可以识别这可能是恶意软件 。因此,在可移植可执行文件(PE)结构上训练的机器学习模型将不能有效地将该文件与其他良性文件区分开来 。
机器学习如何检测使用沙盒逃避和静态防护的恶意软件

文章插图
NSIS脚本和提取GuLoadershellcode
要提取NSIS脚本,我们必须使用7-Zip的旧版本15.05 。这个版本的7-Zip能够解包脚本,而新版本已经删除了解包NSIS脚本的功能 。一旦我们提取了文件内容和NSIS脚本(如图1所示),我们就可以开始分析脚本并查看GuLoader示例是如何执行的 。
机器学习如何检测使用沙盒逃避和静态防护的恶意软件

文章插图
NSIS脚本
如果向下滚动脚本,我们会很快注意到文件正在复制到新创建的名为%AppDATA%FarveladeSkaermfeltet的文件夹中 。虽然不清楚原因,但所使用的文件路径似乎是丹麦语 。在复制活动之后,脚本中有常规的安装逻辑,但是有一个名为func_30的有趣函数 。
在此函数被调用之前,字符串$INSTDIRFilterposerneMalkekvg. exeNat被复制到名为$4的字符串变量中,如图2和图3所示 。函数func_30从Programmeludviklinger210中读取数据 。Kon文件并构建代码,它将在字符Z被看到后立即调用这些代码 。
NSIS允许开发人员能够从Windows DLL调用任何导出的函数,并且还允许他们将结果直接保存在NSIS寄存器/堆栈中 。此功能允许恶意软件开发者在运行时动态调用Windows API函数,并使静态分析更加困难,因为在分析之前必须对其进行评估 。
机器学习如何检测使用沙盒逃避和静态防护的恶意软件

文章插图
调用函数func_30
机器学习如何检测使用沙盒逃避和静态防护的恶意软件


推荐阅读