最近我收到一封钓鱼邮件,邮件中附带着一个.doc的附件。我们利用再平常不过的工具Notepad++,一步一步脱去ZeuS木马的伪装外衣,并进行了非常深入的静态分析。该木马的伪装用到了多项关键技术,例如信息隐藏、加密解密等。
0×01 发现猫腻
最近我遇到了一个很特别的恶意钓鱼邮件,邮件中有一个.doc附件。
起初,当我在虚拟机中运行该样本时,攻击者发送的附件看起来并不正确。但是,在我提取并解码此shellcode之后,我发现了一个很熟悉的已经传播一段时间的恶意软件。
图1 钓鱼邮件
在图2中的邮件头部,我们可以看到原始IP地址为212.154.192.150。应答字段也很有趣,因为这是一个长期的419诈骗团伙的地址。在图3中,红圈中的邮件地址告诉我们附件极有可能是恶意软件。
图2 邮件头部
图3 419诈骗团伙的邮件地址#p#
0×02 初步测试
最开始,我尝试在虚拟机中运行该附件,但是却出现了下图中的错误信息:
图4 Office错误信息
但是,测试环境系统有超过45G的可利用硬盘空间,并且有2G的内存空间,所以错误中提示的空间不足应该不是问题的根源。为了测试,我将内存空间扩展成8G,但是相同的问题依然存在。于是,我决定从静态分析的角度看一下该附件。
像往常一样,我用Notepad++打开该文件来大致分析下这到底是什么。打开之后,我看到它实际上是一个伪装成.doc文件的.rtf文件,而在.rtf格式的文件中进行内容的混淆处理非常容易。
图5 Notepad++打开的RTF文件
在.rtf文件中,表示十六进制代码的大量数据将可能为我们提供线索,让我们明白该文件到底在试图做什么。.rtf文件格式给攻击者提供了很大的自由,让其在这部分中隐藏并编码数据,如图6所示。
图6 可疑数据
然而,在这部分的末尾,我们看到了“FF D9”,而gif文件的末尾两个字节就是“FF D9”。
图7 gif文件的结尾字节#p#
0×03 抽丝剥茧
我比较喜欢使用Notepad++来解码这种数据。首先,将该区域的内容复制并粘贴到一个新的txt文档中,然后CTRL+F打开查找窗口,并选择“替换”选项卡,然后选中“扩展”按钮,如图8中所示。
图8 Notepad++查找/替换
通过这样,你将得到一行ASCII码形式的十六进制数。然后,选中所有内容,并依次操作:“插件”->“Converter”-> “Hex -> Ascii”,如图9所示。
图9 解码数据
转换完成之后,你将会看到一些好像图像数据的字符串(JFIF和Photoshop字符串,如图10)。通过将这些内容另存为.gif文件,你将能够在Paint软件或其他类似软件中打开此图片,结果如图11所示。
图10 解码后的图像数据
图11 .rtf文件中的图像
然后,沿着这条线索,我们继续手动解码每个部分,我们将得到比上一个更大的新图片,而两张图片显示的内容相同,都是同一座房子。然而,这次的文件大小为3M(图12),而上一张图片大小只有79KB(图11)。
图12 较大的图片
通过谷歌图片搜索这个图片,我们发现,这实际上是一个设计的3D房子的外观,它跟上面原始邮件中的内容并不相关。
使它看起来更可疑的是,里面竟然还嵌入了一个.docx文件(图13)。当我试着打开该文件时,弹出了错误,而且XML文件中也并没什么有趣的内容。
图13 嵌入的.docx文件
在该文件中的大概第50000行的地方,我们可以看到97-2004office文档的魔幻字节(图14)。这再一次引发我们思考,为什么该.rtf文件中同时包含了新版本和旧版本格式的Word呢?
图14 .doc魔幻字节的ASCII码表示
在几千行之后,我们看到了一些更加有趣的东西。驼峰式大小写的方式一般是一种用于绕过杀毒软件或其他签名检测机制的做法。
图15 大小写替换
大概2000行之后,我们发现了另一个函数(图16)。
图16 另一个函数
通过去除双换行符(\ r \ r 和\ n \ n),我们可以压缩这些代码以了解发生了什么,并以此方法来查看通常情况下在.rtf文件中不会被发现的代码。
图17 .rtf文件中本不该存在的代码
在图18红线圈中部分,有一些在.rtf文件中本不该存在的十六进制代码。在更下面有点(蓝线圈中部分),我们也可以看到“AAAA”,这在汇编语言中一般表示指令“inc ecx”。
图18 .rtf文件中的可疑部分
然而,在图19中,我们发现一个小片段指示shellcode的大小。通过解码这一片段,我们可以在最后面找到一个对可执行文件的引用,而这也是我们一直在寻找的东西(图 20)。
图19 看似shellcode的内容
图20 shellcode,恶意URL:http://aspks.nl/components/kom/ks.exe
#p#
0×04 IDA分析
用IDA打开这个二进制文件之后,我们可以看到实际上这只是代码的一个片段。下图中的汇编指令跟我们猜想的很吻合,这些shellcode和其他代码与一个比较老但是很稳定的漏洞CVE-2012-0158关系密切相关。
图21 shellcode入口点附近
既然现在我们已经有了链接地址,那么我们可以测试下看看该恶意链接是否有效,结果显示该地址仍旧有效(图22)。
图22 恶意文件下载
一旦执行该文件,将会在注册表中创建一个作为运行键的存储文件。
图23 恶意软件存储安装
恶意软件安装到了以下路径:C:\Users\
0×05 通信分析
对于恶意软件的服务器端来说,该恶意软件发起了很多对“file.php”和“gate.php”文件的请求(图24)。从图中可以看出,IP地址116.193.77.118也列在了ZeuS木马的追踪表单上(图25)。
图24 发出的HTTP请求
图25 ZeuS追踪IP地址
此外,通过Dump内存,我们还能看到其他的Ladycoll配置。
图26 恶意软件的内存dump
0×06 总结
最后,尽管CVE-2012-0158已经有3年了,但攻击者现在仍旧使用此漏洞。即使他们混淆了这些文档,但还是有可能通过分析找到他们的真实意图。