在这篇文章中,我们将研究最近送达的恶意可执行文件钻机开发套件。它被包装在.NET加密器中,并包括与我们前段时间描述的类似功能(在这里).类似的封装程序是广泛的,通常用于保护各种恶意软件样本,这就是为什么有必要了解它们的共同构建模块和击败它们的方法。
分析样品
- 388548D34807FEE28DEDE8B411063927- 原始样本
- 3A5CC47413CD815B44A0329100E552DA- 装载机
- 07A08CF5211665DFCD090E7BAB6C8608- 有效载荷(Neurevt Bot)
关于此示例的有趣事实是它签署了:
打开包装
可执行文件在.NET中编写,因此我们可以使用针对此目的(.NET Reflector,DNSPy等)所做的一些流行工具来分解它。
正如我们所看到的,代码被混淆 - 函数具有乱码,无意义的名称。还有内部的代码包含了很多垃圾指令,并且很难遵循。甚至应用已知的.NET Deobfuscation(DE4DOT)的应用程序甚至没有帮助。
不管怎样,让我们从找到可能的有效载荷开始。
查看资源我们可以看到一个看起来像扭曲的PE文件的元素:
它是通过以下函数加载和处理的:
使用dnSpy,我们可以在函数的末尾设置断点,运行它并转储输出缓冲区。
倾倒的二进制文件原来是在.NET中写的另一个PE文件(3A5CC47413CD815B44A0329100E552DA).然而,它并不是我们要寻找的恶意负载,而是密码器的另一个元素——加载器。它将实际有效负载解包,并使用RunPE技术(也称为进程空化)将其注入另一个二进制文件中。
加载器不是独立 - 它依赖于上一个文件的资源。我们可以从资源的代码中看到“瓦里奥托普“包含一组参数。它被一个函数解密解密,用了一个词“参数,作为解密密钥:
真实的有效载荷隐藏在另一个加密资源的内部。文件的名称以及解密密钥包含在上一步中解密的参数中:
有效载荷可以注入其中一个预定义的可执行文件:vbc.exe.那RegAsm.exe那applaunch.ex.ex.e,notepad.exe.exe.- 或者,最终,它自己的过程。根据加密集的一个参数进行选择。
解密算法是基于自定义异或的:
使用此功能的副本,我们可以轻松地从初始二进制文件中解密转储的资源。我们能够重建样本解码器,您可以在此处找到Python脚本:msil_dec.py.。
解密参数:
./ msil_12 .py——file varitoyp——key params 0| |0|0|0|0|0|0|0|10000|0|0|0|0|0|0|0|0|0|0| LgunkLBEWL7f5asOISuri|0|0|0|0|0|0|nTEVmryG9b8grLtmS06bryl0|ZxjmzvjUYrFNhuAOygWpbtsxcVZ|6|0|
参数以字符串的形式,包含由分隔符分隔的值。参数30和31包含掩盖加密有效载荷和密钥的资源的名称。
nTEVmryG9b8grLtmS06bryl0, //二进制ZxjmzvjUYrFNhuAOygWpbtsxcVZ, //密钥
加密的可执行文件存储在初始二进制文件的资源中:
关键是:
解密:
./ msil_12 .py——file nTEVmryG9b8grLtmS06bryl0——key ZxjmzvjUYrFNhuAOygWpbtsxcVZ > payload.exe
结果,我们得到了最终有效载荷(07A08CF5211665DFCD090E7BAB6C8608) - 它是一个neurevt机器人,用于凭证窃取和ddos攻击(阅读更多在这里).
结论
这个密码破译员可能和上次描述了一个——它甚至可能是同一作者的作品。同样,我们看到一个加载器中包含了另一个PE文件。同样,这里也有一个参数数组。最后,注入有效负载的应用程序列表在这两种情况下是完全相同的。在前面的加密器中,使用了一个BMP文件来隐藏加密数据(配置和最终有效负载)。这一次,作者们放弃了任何隐写技巧。
在以前的释放近一年后,我们不能说产品进化到更复杂的东西。相反 - 我们看到了同样的想法,但是不同地突变和实施。
这是由Hasherezade,独立的研究员和程序员撰写的客座帖子,具有强烈的Infosec。她喜欢详细介绍恶意软件,并与社区分享威胁信息。看看她的推特@hasherezade.以及她的个人博客:https://hshrzd.wordpress.com.。
评论