Recam终极版:如何一步步脱掉ConfuserEx保护壳(上)

阅读量306203

|

发布时间 : 2017-12-12 17:01:05

x
译文声明

本文是翻译文章,文章原作者 Holger Unterbrink and Christopher Marczewski,文章来源:talosintelligence.com

原文地址:http://blog.talosintelligence.com/2017/12/recam-redux-deconfusing-confuserex.html

译文仅供参考,具体内容表达以及含义原文为准。

 

传送门

Recam终极版:如何一步步脱掉ConfuserEx保护壳(下)

在本文中,我们介绍了如何解密经过.NET ConfuserEx保护的恶意软件。我们通过Advanced Malware Protection (AMP,高级恶意软件防护)感知数据发现了处于活跃期的这款恶意软件。恶意软件借助恶意Word文档来传播,最终会在内存中执行来自Recam恶意软件家族的一个嵌入式载荷(Recam是一款信息窃取恶意软件)。虽然这款恶意软件已活跃数年之久,但出于各种原因,有关该软件内部工作机理的分析文章少之又少。因为恶意软件作者花了许多精力来延缓安全人员对样本的分析研究,使用了包括多层数据加密、字符串混淆、分段置零以及数据缓冲区构造器等技术。这款恶意软件使用了自定义的C2二进制协议,协议本身及相关数据(传输之前)都经过严格加密处理。

 

技术细节

在本篇文章的上部分,将着重介绍释放器部分。

释放器

恶意文档使用了常见的恶意软件技术(比如嵌入VB代码)来释放.NET可执行程序。在本文中我们不会介绍这些技术,主要关注的是.NET恶意软件释放器(dropper)的去混淆过程。恶意软件作者使用自定义的ConfuserEx对释放器做了大量混淆处理(ConfuerEx是一款免费的.NET Framework混淆工具)。如果我们直接使用类似dnSpy之类的.NET反编译器来读取这个文件,结果并不理想(图1):

图1

网上有一些免费的反混淆工具可以处理经ConfuserEx保护的程序,然而,这些工具难以解析这款恶意软件。使用这些自动化工具处理后,只能解开其中一部分数据并会中断执行流程,程序中重要的部分仍然保持不变。这意味着我们别无选择,只能手动去混淆,没有捷径可走。网上有些文档介绍了如何手动脱掉ConfuserEx的壳,但我们的运气依然不佳,这些文档不适用于这个版本。

首先,我们使用dnSpy来加载这个程序。我们跳转到<Module>. cctor,在最后一个方法上设置断点(如图2所示)。然后,在调试器中运行这个样本,可以看到样本会解开第一个DLL(即“ykMTM…”,如下图2所示)。

图2

触发断点后,单步跟进这个方法,如图3所示,我们可以看到程序会解开下一阶段载荷(coral)。

图3

分析这阶段载荷后,我们可以在113行的qMayiwZxj类上设置另一个断点,如图4所示:

图4

这里会释放下一阶段载荷,我们可以看到新解开的stub.exe的汇编代码(图5):

图5

如果你之前分析过经过ConfuserEx处理的程序,你会觉得这个画面非常眼熟。事实上,如果你仔细观察,你会发现10082行有一行非常熟悉的代码:gchandle.free()。我们可以在这一行上设置断点。在之前版本中,这行语句是解包过程的最后一行语句。

图6

如我们所料,这会解开另一个模块:koi,这也是ConfuerEx中已知的一个模块。

图7

我们离真相已经非常接近,但koi中的类仍然是空的,没有填充任何代码:

图8

我们可以在koi中cctor调用的最后一个方法上设置断点,继续运行样本。

图9

非常好,又解开了一个DLL,不幸的是这个DLL并不重要。我们的Main类以及stub(存根类)中的大多数成员仍然为空。单步跟进后,我们再次回到<module>。分析这些方法后,我们可以在第92行设置断点,观察下一阶段的解包过程(图10)。

图10

如果我们观察这些类的stub,就可以看到各种代码。我们可以在stub.Run()上设置断点,观察这个恶意软件加载器除了解包过程以外的真正功能。

图11

可以看到,恶意软件试图规避某些反病毒软件,从资源区中读取几个配置参数。未解包之前的配置信息如图12所示,恶意软件将配置信息加密后隐藏在资源区中。

图12

恶意软件会检查当前运行路径是否与配置信息中的Startup目录相匹配(如%AppData%mozilla firefoxfirefox),如果不匹配,则会将自己复制到Startup目录中,然后通过cmd.exe来启动。这意味着我们需要停止调试,从%AppData%mozilla firefoxfirefox目录中将firefox.exe载入dnSpy,然后再次跟进解包过程,直到到达目前位置。

图13

现在我们已进入正确的代码分支(即“从Startup目录执行”条件分支)。从这里开始整个流程变得更加有趣。首先恶意软件会先完成本地持久化任务。如下所示,恶意软件会向%AppFolder%目录中写入一个Update.txt文件,文件内容如下:

C:UsersdexAppDataRoamingmozilla firefoxfirefox.exe
exit

图14

图15

随后,恶意软件会在cmd.exe中执行reg add命令,将该文件添加到自启动表项中,确保主机启动时会执行firefox.exe文件。

图16a

图16b

恶意软件会根据配置信息执行其他一些命令,然后从MainFile区加载并解压经过LZMA压缩的一个恶意软件载荷文件(即Recam)。经过实时修复后,恶意软件会加载RunPEDLL.dll,尝试将载荷文件注入用户浏览器进程中。如果注入失败(比如浏览器没有运行),则会将文件注入到自身进程中(firefox.exe)。不论哪种情况,恶意软件都会使用RunPE.Run()方法来完成这个过程。

图17

到这里为止,恶意软件释放器的任务已完成,由Recam程序接管攻击流程。

 

恶意载荷

请持续关注,文章下部分将在近期发布。

本文翻译自talosintelligence.com 原文链接。如若转载请注明出处。
分享到:微信
+12赞
收藏
興趣使然的小胃
分享到:微信

发表评论

内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66