首页
社区
课程
招聘
深入分析擅长“自我保护”的网银木马Dridex
发表于: 2015-12-7 10:29 1302

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

2015-12-7 10:29
1302
深入分析擅长“自我保护”的网银木马Dridex
JackFree 2015-03-24 共26575人围观,发现7个不明物体 专题系统安全       

[14259045016652.jpg]

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

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

0×01 木马行为表现

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

[Figure-1-tax-rebate.png]

图1 “退税”主题邮件

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

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

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

0×02 沙箱检测技术

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

[Figure-2-beginning-of-macro-code.png]

图2 宏代码开始处

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

[Figure-3-List-of-classes.png]

图3 类和模块列表

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

[Figure-4-Possible-anti-debugging.png]

图4 可疑的反调试代码

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

[Figure-5-VMware.png]

图5 宏内的反虚拟机检测

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

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

[Figure-6-Check-for-Snadboxie.png]

图6 检测Sandboxie

[Figure-7-Check-for-Anibus-1024x315.png]

图7 检测Anubis沙箱

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

[Figure-8-encoded-data.png]

图8 编码之后的数据(重要)

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

[Figure-9-gibberish.png]

图9 一些混乱的函数

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

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

[Figure-10-Suspicious-VM-code.png]

图10 可疑的虚拟机相关代码

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

[Figure-11-Modified-macro.png]

图11 修改宏代码

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

[Figure-12-successful-bypass.png]

图12 成功绕过木马对安全机制的检测

0×04 查看通信代码

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

[Figure-13-Modifying-code.png]

图13 修改攻击者代码,实现打印数据

[Figure-14-Decoded-data.png]

图14 攻击者的解码数据

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

[Figure-15-VBA-code.png]

图15 写出数据的VBA代码

[Figure-16-Malicious-Script.png]

图16 恶意脚本代码

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

0×05 获取远程文件

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

[Figure-17-GET-request.png]

图17 对恶意软件的GET请求

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

[Figure-18-.exe-file.png]

图18 .exe文件

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

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

[Figure-19-Malware-Beacon.png]

图19 恶意信标

0×06 可疑之处总结

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

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

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

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

[Figure-20-Forged-hostnames.png]

图20 恶意文件中伪造的主机名

此外,这个恶意软件还与下面两个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是脚本代码的截图。

[Figure-21-Pwning.png]

图21 破解Dridex宏密码

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

[Figure-22-Output.png]

图22 输出内容

要获取这些代码,你可以从这里下载Python脚本。

[参考来源phishme,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)]

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//