研究人员为深入分析 Emotet 核心组件和其他模块,专门开发了名为 EmoLoad 的工具,使用该工具可以单独加载执行 Emotet 的模块。

 EmoLoad 

EmoLoad 是一个能够运行 Emotet 模块的定制化加载工具。该工具能分配所需的数据结构,并调用自定义入口点,同时允许自定义执行环境。有了该工具的帮助,分析人员就可以轻松地进行动态分析。为了进一步简化分析过程,EmoLoad 甚至提供了将模块与其嵌入到一个独立的可执行文件中的选项,这使提交模块到沙盒进行分析成为可能。

 为什么是 Emotet 

Emotet 是近年来最为突出的威胁之一,模块化设计使得 Emotet 可以通过拉取不同的模块来实现不同的目的。例如当与勒索软件相配合时,可以下发对应的恶意组件。

这些额外的组件都由核心模块直接在内存中调用执行,不会落地在磁盘上。即使使用动态分析提取 Payload,单独加载提取的模块也不可避免地会失败,毕竟自定义入口点需要在内存中分配特定的数据结构。这些数据结构是核心模块进行管理,加载的不同组件都只用到其中一部分。

 如何使用 

可以使用如下命令执行 EmoLoad:

emotet-loader64.exe -d ${dll_path} -e ${epoch} [-c ${computer_name}] [-s ${root_serial}] [-o ${output_path}]
(向右滑动、查看更多)

其中:

${dll_path}是要加载的 Emotet 模块的路径

${epoch}是模块所属的 epoch 标识

${computer_name}是计算机名称

${root_serial}是卷序号,为 32 位十六进制数

${output_path}是合并独立文件的输出路径

研究人员已经发现,与僵尸网络有关的 Emotet 模块会根据已知沙盒的特定值将其拉入黑名单。

示例一

加载计算机名称为 WIN-1234 并且卷序列号为 0x123ABC 的模块(来自 epoch 5 僵尸网络):

emotet-loader64.exe -d C:\path\to\emotet-module.dll -e 5 -c WIN-1234 -s 0x123ABC

示例二

将(来自 epoch 5 僵尸网络)的模块嵌入到独立的可执行文件中,带有随机计算机名和随机卷序列号:

emotet-loader64.exe -d C:\path\to\emotet-module.dll -e 5 -o emotet-standalone-module.exe
(向右滑动、查看更多)

生成的可执行文件 emotet-standalone-module.exe 不需要任何参数,就会将原始的 emotet-module.dll 文件释放到磁盘上,随后将其加载到内存中。

 实际使用 

为了展示 EmoLoad 如何支撑动态分析,对如下两个组件进行了演示。

来自 epoch5 的 Thunderbird 电子邮件客户端帐户窃取程序
来自 epoch 5 的通用电子邮件帐户窃取程序

每个样本都创建独立执行文件,并且提交给分析系统进行分析。

Thunderbird 电子邮件客户端帐户窃取程序

Thunderbird 电子邮件客户端帐户窃取程序被检测为 application/program (Emotet),如下所示。

检测结果

如预期的那样,检测到恶意软件试图访问当前用户的 AppData\Roaming\Thunderbird\Profiles 文件夹窃取消息、密码和用户首选项等个人信息。

窃密行为

通用电子邮件帐户窃取程序

通用电子邮件帐户窃取程序触发了多个检测规则,如下所示:

恶意行为

检测到的另一种行为是加载 pstorec.dll 库,其中包含一组 Windows 保护存储 API,可用于检索 Internet Explorer、Outlook 和其他应用程序存储的网站凭据。

访问 Windows 保护存储 API

EmoLoad 也可以辅助逆向工程。如下所示,将 EmoLoad 加载到调试器中,修改命令行后 EmoLoad 将在继续执行时加载指定的 DLL。

x64dbg 下调试情况

此时添加一个 DLL 断点,使加载 DLL 的特定函数后触发断点。如下所示,代码在检索到 LoadLibraryW 的地址后在断点处停止。随后可以进一步跟踪分析代码,如果没有 EmoLoad 的话,分析就无从展开了。

示例分析

 结论 

全球分析 Emotet 的安全厂商与研究人员非常多,大家也都开发了许多分析工具。VMware 的研究人员也将该工具开源,与社区分享分析能力。