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

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

2015-12-7 10:29
1469
深入分析擅长“自我保护”的网银木马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请求。虽然这可能是合法请求,但这是可疑流量一个很好的预警指标。

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

第三个有趣的地方是从222K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4L8$3!0Y4L8r3g2Q4x3X3g2U0L8$3#2Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0g2Q4b7V1y4Q4z5e0g2Q4c8e0N6Q4z5e0c8Q4b7e0S2Q4c8e0g2Q4b7f1c8Q4z5e0N6Q4c8e0k6Q4b7f1g2Q4b7U0g2Q4c8e0y4Q4z5o6m8Q4z5o6u0Q4c8e0g2Q4b7V1c8Q4z5e0y4Q4c8e0c8Q4b7V1c8Q4b7e0m8Q4c8e0k6Q4z5e0m8Q4z5f1y4Q4c8e0N6Q4b7U0c8Q4b7e0u0Q4c8e0g2Q4b7U0W2Q4b7U0k6Q4c8e0N6Q4z5o6u0Q4b7U0W2Q4c8e0g2Q4z5o6N6Q4b7V1u0Q4c8e0c8Q4b7U0S2Q4z5o6m8Q4c8e0c8Q4b7U0S2Q4b7f1q4Q4c8e0W2Q4z5e0y4Q4b7V1g2Q4c8e0k6Q4z5p5g2Q4b7e0g2Q4c8e0k6Q4z5e0N6Q4b7U0k6Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0g2Q4b7e0c8Q4b7e0N6Q4c8e0W2Q4z5o6y4Q4b7e0S2Q4c8e0g2Q4z5o6S2Q4z5o6k6Q4c8e0k6Q4z5o6y4Q4z5o6g2Q4c8e0g2Q4z5o6k6Q4b7U0g2Q4c8e0g2Q4b7V1q4Q4z5e0c8Q4c8e0S2Q4b7f1k6Q4b7e0g2Q4c8e0k6Q4z5e0S2Q4b7f1k6Q4c8e0c8Q4b7V1u0Q4b7e0g2s2c8g2c8Q4c8e0k6Q4z5e0k6Q4b7U0W2Q4c8e0g2Q4b7V1y4Q4z5p5k6Q4c8e0S2Q4b7f1k6Q4b7U0N6Q4c8e0k6Q4b7U0q4Q4z5o6u0Q4c8e0W2Q4b7e0q4Q4b7U0g2Q4c8e0W2Q4z5f1c8Q4b7e0u0Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0S2Q4z5o6m8Q4z5p5y4Q4c8e0c8Q4b7U0S2Q4z5p5c8Q4c8e0k6Q4z5e0S2Q4b7f1k6b7e0#2y4f1i4@1f1K6i4K6R3H3i4K6R3J5i4@1f1^5i4K6R3H3i4K6S2o6i4@1f1$3i4@1q4p5i4@1p5@1i4@1f1$3i4K6V1%4i4@1t1$3i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1%4i4@1p5%4i4K6S2p5i4@1f1$3i4K6R3K6i4K6R3#2i4@1f1#2i4K6R3$3i4@1t1#2i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1$3i4@1p5H3i4@1t1%4i4@1f1#2i4K6R3I4i4K6W2m8i4@1f1#2i4@1q4q4i4K6S2o6i4@1f1#2i4K6R3#2i4@1p5^5i4@1f1^5i4@1q4r3i4@1t1@1i4@1f1@1i4@1t1^5i4K6S2p5i4@1f1&6i4K6R3H3i4K6W2m8i4@1f1K6i4K6R3H3i4K6R3J5

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

[Figure-20-Forged-hostnames.png]

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

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

0×07 样本下载地址

恶意软件样本下载地址:

.xls文件

4a4K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2$3K9i4u0#2M7%4c8G2N6r3q4D9i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3V1k6X3K9h3I4W2i4K6u0r3z5h3q4X3j5e0V1H3x3K6M7H3j5$3k6V1x3U0p5%4j5h3f1I4k6h3x3K6y4X3f1%4y4e0u0S2x3K6V1K6y4e0x3%4z5o6M7^5j5e0u0X3x3$3t1#2k6U0V1I4y4e0W2X3y4U0p5$3z5e0m8W2y4K6M7&6x3o6V1H3y4r3t1H3k6q4)9J5c8X3q4F1j5h3I4&6M7$3W2K6i4K6u0r3

.exe文件:

8aeK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2$3K9i4u0#2M7%4c8G2N6r3q4D9i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3V1k6X3K9h3I4W2i4K6u0r3x3K6M7%4x3K6m8S2y4U0b7@1j5h3g2V1z5r3x3%4y4X3b7^5j5$3x3#2y4h3u0V1x3U0M7@1x3r3x3K6y4$3b7K6k6h3x3@1z5o6S2V1x3$3k6S2z5h3t1%4j5K6t1&6j5h3g2U0y4r3t1#2x3X3x3I4y4U0m8X3x3o6x3J5x3W2)9J5c8X3q4F1j5h3I4&6M7$3W2K6i4K6u0r3

附:破解Dridex的宏密码

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

[Figure-21-Pwning.png]

图21 破解Dridex宏密码

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

[Figure-22-Output.png]

图22 输出内容

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

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

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

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