深入分析擅长“自我保护”的网银木马Dridex

最近我们收到了一封主题为“你的退税”的邮件,邮件附件中包含了一个Dridex变种木马和一个受密码保护的宏。这个特殊的Dridex新变种采取了一些自我保护措施:例如添加了一个长密码来防止被分析,程序内部添加了对虚拟机环境的检测功能,使得它一旦它检测到自己运行在虚拟机环境,就能自动退出运行。

本文就来一步一步对该木马新变种进行分析,并通过Python脚本破解它的宏密码;分析过程中,我们通过修改木马的相关代码,废除了它对虚拟机环境的检测功能,使得我们能够在虚拟机中运行并分析该木马。

0×01 木马行为表现

首先,看一下钓鱼邮件的截图:

深入分析擅长“自我保护”的网银木马Dridex

20150324100614125

一旦打开附件,恶意软件将试图运行宏。对Dridex来说,这不是什么新东西,接下来就出现了启用宏的正常选项。

针对前面得到的Dridex样本,我按下Alt+F11获取该宏并对其进行检测,然而攻击者使用了密码来保护它的宏。

参考上一篇对Dridex分析的博文,我使用了跟它相同的技术。为了破解这个密码,我使用一些我知道的东西创建了一个空excel文件。然而,因为不知道密码的位数,我不得不多次改变长度来破解,发现最终工作的密码是一个拥有19个字符的密码。

0×02 沙箱检测技术

在修改这些字符并重新打开excel文件之后,按Alt+F11出现了以下宏页面,下面我们看一下里面有什么内容(图2)。

深入分析擅长“自我保护”的网银木马Dridex

20150324100553160

通过展开模块和类(图3),我们可以看到里面包含了很多其他的模块和类。看来,攻击者付出了额外的努力来混淆他们的代码。

深入分析擅长“自我保护”的网银木马Dridex

20150324100530396

通过查看模块文件夹下的“load”项,我们发现一些有趣的子程序,其中一个提到了调试技术(图4)和可能的沙箱逃避策略。

20150324100512267

通过查看其他模块,我们发现模块“dfsdf”中包含了函数IsVirtualPCPresent()以及实现代码,该函数在“load”模块中被调用。接着查看样本宏代码,其中有关虚拟机检测和沙箱逃避技术的代码令人印象深刻(图5)。

20150324100454234

通过查询OSINT的报道,发现这段代码至少从2008年就已经存在,貌似来源于一个西班牙黑客论坛。

攻击者甚至寻找Sandboxie(图6)和Anubis沙箱(图7)。

20150324100438929

20150324100424761

既然现在我们知道代码的位置了(图8),那么下一步我们需要解决如何到达那里,并查看下一阶段的攻击。然而,有一个问题:我们感兴趣的代码却是一堆混乱的数据(图9)。

20150324100410670

然而,当你查看宏里面的其他函数和模块时,你将发现攻击者对代码做了很好的混淆工作。

20150324100253692

0×03 修改代码:废除木马的虚拟机检测功能

虽然很难找出这些函数是干什么用的,但是我们可以看到一个子程序,它包含了有关虚拟机检测的一些信息(图10),然后是调用了编码数据(图11)的代码。对于大多数恶意软件来说,它们都会首先检测是否存在合适的运行环境,如果检测满足条件,那么它将对重要的函数进行解码。明白了这一点,就找到了我们将要“攻击”恶意程序的地方。

20150324100223609

通过修改包含虚拟机检测代码的函数,我们可以取消它对安全机制的检测。此外,我们还可以在我们感兴趣的数据位置设置一个断点,以此来查看当代码执行时,我们是否跳转到了预期的位置。

20150324100208555

在保存修改的.xls文件并重新执行它之后,我们将启用宏。如果我们进入文件并运行了宏,可以看到(图12)代码停在了我们的断点处,成功绕过了攻击者所有的反虚拟机、反调试等程序。

20150324100148308 (1)

0×04 查看通信代码

成功绕过之后,我们看一下编码数据,这些数据被存储到了变量oPOJidsf中。好消息是,我们已经来到了这里,然而目前来看我们还没有办法查看这些数据。如果我们在代码的下一行处添加一个消息框(图13),并在这里设置一个断点,那么我们将能够查看攻击者试图向变量oPOJidsf中输出的内容(图14)。

20150324100126192

20150324100108411

因为很难从消息框中复制、粘贴(图15),所以我们可以将这些数据写入到Excel文件中的一个单元格中,然后复制并粘贴这些内容(图16)。

20150324100030787 20150324095942873

简而言之,攻击者将试图从IP地址85.143.166.190处下载一个文件,并将其保存为一个扩展名为.exe的CAB文件,保存目录为%temp%,然后启动它。

0×05 获取远程文件

现在,我们可以构造一个GET请求,用以请求该文件(图17),作者写这篇分析时,该文件仍存在于服务器上。

20150324095913316

有趣的是,恶意软件是以.exe格式(图18)下载的。

20150324095758804

虽然该脚本期望下载的是一个cab文件,但即使扩展名不是.cab的文件也能够正常工作,例如扩展名为.exe时。这可能是攻击者的一个小掩饰手段,或者只是另一种不使用“copy”指令的方法。

一旦恶意软件成功连接,它会作为95.163.121.33的信标(图19),该IP就是它发送信息的目标地址。

20150324095716246

0×06 可疑之处总结

从恶意软件的角度来看,该样本并不是很完美。从上到下,第一个可疑行为是对root目录的POST请求。虽然这可能是合法请求,但这是可疑流量一个很好的预警指标。

第二个有趣的区域是内容类型。不得不再次怀疑,为什么要下载这个文件?而且它看起来也不像是视频文件。

第三个有趣的地方是从https://google.com的引用字段。当你搜索并点击一个链接时,大部分情况应该是以GET方式请求页面,而不是POST。而此时这种情况,这样做完全说不通。

最后一个可疑点是Host字段,因为通常情况下这个字段应该包含请求的域名,但是本例中,它并没有一个真正的域名(图20)。

20150324095549662

此外,这个恶意软件还与下面两个IP地址通信:95.163.121.33和87.236.215.105。

0×07 样本下载地址

恶意软件样本下载地址:

.xls文件

https://www.virustotal.com/en/file/9afa90370cfd217ae1ec36e752a393537878a2f3b5f9159f61690e7790904b0d/analysis/

.exe文件:

https://www.virustotal.com/en/file/37730a644aed8c76d8cc55bd2740c37d3ec488d3fa9b7c29aec4b52c160f0322/analysis/

附:破解Dridex的宏密码

想要成功进行上面的分析,取决于一件事:破解Dridex的宏密码。利用这些文件,很容易利用一个正常无害的xls文件进行反复实验,以此来猜解密码长度。为了简化这些操作,我写了一个脚本,它将尝试从1个一直到20个字符长度,来破解宏密码。图21是脚本代码的截图。

20150324095444451

图22显示了成功破解密码时的输出:

20150324095413435

图22 输出内容

文章来源:FreeBuf黑客与极客(FreeBuf.COM)

 

上一篇:小漏洞大影响:来看看希尔顿酒店官网的CSRF漏洞

下一篇:谷歌正为Gmail开发PGP端到端加密技术