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


为了快速自动找到解密密钥,我们必须首先加密一个短模式(例如,用户代理字符串的前8个字节),然后搜索该结果是否在文件中的某个位置 。如果它在文件中的某个位置,那么我们可以继续解密剩余的模式以获得完整的加密密钥 。
我们会在本文的最后附上Python脚本,该脚本能够通过上述方法从有效负载中找到加密密钥 。在任何转储的第二阶段GuLoader负载上运行脚本后,我们应该能够看到一些字符串和负载URL 。
GuLoader有时在有效负载URL前面包含7到8个随机字符,它在运行时将其替换为http://或https:// 。使用http还是https的区别是由随机模式中的第四个字符决定的 。

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

文章插图
在此示例中,有效负载URL为http://ozd[.]com[.]ar/wp-includes/nHMoYlbGLWls101.qxd,并且在分析时有效载荷仍然在线 。
最终下载的有效负载来自FormBook恶意软件家族,其SHA256值为fa0b6404535c2b3953e2b571608729d15fb78435949037f13f05d1f5c1758173 。
机器学习如何检测使用沙盒逃避和静态防护的恶意软件

文章插图
机器学习如何检测?
在之前的一篇文章中,我们详细介绍了在实时沙盒运行期间可以从内存中提取的几种可观察工件 。我们发现,当与机器学习结合使用多种逃避技术检测恶意软件时,来自内存分析的数据是非常强大的 。
接下来我们回仔细观察所有这些关于运行时内存中被修改的内容,并将它们与大规模的机器学习相结合,用于恶意软件检测 。该算法可以自动找到模式,并且可以识别恶意软件试图在内存中隐藏其足迹、动态分配和执行shellcode或使用解包的共性 。
在这个GuLoader示例中,人类分析人员会立即识别出有几个独特的函数指针 。我们还会注意到,恶意软件已经将其自身进程内存中的多个页面的页面权限更改为可写和可执行 。我们的机器学习模型能够自动执行这些活动,从各种内存构件中提取有关特征来检测GuLoader示例 。
如上所述,我们为Advanced WildFire创建的自动分析平台将以一种高性能的方式自动提取所有这些基于内存的工件 。这意味着所有与动态解析函数指针、权限更改和解包可执行文件相关的信息都可以在我们手动管理的检测逻辑中使用,也可以用于我们的机器学习渠道 。
机器学习如何检测使用沙盒逃避和静态防护的恶意软件

文章插图
使用机器学习模式的检测
下图显示了我们如何创建一个机器学习模型渠道的高级视图,该模型渠道是根据从上述基于内存的工件中提取的自定义特征进行训练的 。我们选择的特性被设计成保留来自冗长工件的最有用的信息 。
我们还将恶意软件执行跟踪作为额外的信息源,并构建了一个集成模型来检测恶意样本 。如下图所示,从四个内存工件和恶意软件执行痕迹中自动提取各种自定义特征,并将它们传递给一个分类模型以检测恶意样本 。此外,我们还构建了一个集成模型,该模型基于内存工件和基于执行跟踪的特性进行训练,以提高其性能 。
机器学习如何检测使用沙盒逃避和静态防护的恶意软件

文章插图
机器学习模型架构
文件样本由流程渠道处理,以将内存工件和其他恶意软件属性保存到功能存储中 。特征提取阶段使用流式处理和批处理PySpark作业的组合来生成用于训练模型的最终特征向量 。
ground truth标签来自一个单独的渠道,该渠道根据恶意软件特征和研究人员输入为样本分配标签 。该渠道通过使用样本首次出现的时间和哈希来生成非重叠的训练和评估数据集 。
机器学习如何检测使用沙盒逃避和静态防护的恶意软件

文章插图
解释模型预测
为了识别模型的局限性和能力,理解机器学习模型的预测是至关重要的 。机器学习很容易出现误报,因为它严重依赖于训练数据的质量和多样性,以及对不断变化的文件进行预测的泛化能力 。因此,具有识别预测的因果特征的能力是非常有用的 。


推荐阅读