欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

分析一个用于传播Hancitor恶意软件的Word文档(第一部分)

来源:本站整理 作者:佚名 时间:2018-08-25 TAG: 我要投稿

最近,TechHelpList将一个用于传播Hancitor恶意软件的Word文档上传到了VirusBay,并概述了与之相关的站点、C2服务器以及由该文档所释放的payload。由于Hancitor通常被用于下载Pony和ZeusPanda恶意软件,因此我决定对这个文档进行分析,以了解程序流程和功能。
恶意文档
在打开恶意文档之后,我们首先会看到一张图片,告诉我们有一份新的传真电文,并且只有在单击“Enable Editing”和“Enable Content”之后才能查看具体的内容。可恨的是,在点击了所述的按钮之后,我仍然没有能够看到传真电文的实质内容。好吧!反正我也不想看。
在我们激活了宏的几秒钟之后,Word突然退出,给人的印象是“Word似乎崩溃了”。正如你可能已经猜到的那样,Word并没有崩溃,实际上这是Hancitor恶意软件所使用的一种策略。它提取了一个经打包的可执行文件,并用一个干净版本(即不包含恶意宏)替换了恶意文档,以防止出现几个Hancitor实例同时运行的情况。

恶意宏
接下来,让我们来看看恶意宏,你会注意到Document_Open()子程序首先会被执行,但是还有一个Document_Close()子程序会在程序关闭时执行,它调用了子程序closee()。让我们暂时先忘掉这个最后被执行Document_Close()子程序,来看看这个首先被执行的Document_Open()子程序。

通过查看它,你会发现Document_Open()负责调用另外3个子程序:kfs()、sdfsdf()和Module1.killo()。接着,让我们看看每个函数的作用。

kfs()
kfs()看上去像是垃圾代码,因为它的作用只是简单地将页面向下移动14,向右移动24,使用backspace一次,然后复制一些东西,而这并不会造成太大的影响。

这让我感到很困惑,因为Hancitor的开发者应该不会做一些无用功。于是,我决定对文档和宏进行了更细致的观察。我注意到,在恶意文档中有一个很小的但很显眼的小黄点。

我们可以点击它并将其放大,从而看到这样一张图片:

在查看了下一个子程序sdfsdf()之后,我明白了这张图片的作用。我们在下图中可以看到,恶意宏将目录更改为了“TEMP”,并创建了一个 Scripting.FileSystemObject。Scripting.FileSystemObject会将5C.pif的内容复制到UserForm2.TextBox1.Text和6.pif,然后返回。
sdfsdf()
sdfsdf()似乎负责提取恶意代码,因为在与文档中的.pif图标交互时,它会在%TEMP%文件夹中创建一个快捷方式文件,即使你没有单击启用宏。在关闭文档时,快捷方式文件会消失。因此,它似乎是由恶意文档所创建的临时文件。这样,sdfsdf()就能够将内容复制到另一个文件,而不是执行5C.pif。此外,将5C.pif的数据复制到UserForm2.TextBox1.Text,还会导致一个名为“6.exe”的文件在%TEMP%文件夹中被创建。实际上,6.exe 和  6.pif 是两个完全相同的文件,只是文件扩展名不同而已。

让我想想,如果.pif文件被嵌入在文档中,那么我们该如何提取它呢?又怎样才能找到这个文件的位置呢?这让我想到了名为hexedit和  CFF Explorer的小工具。我在主机上执行了  hexedit ,看看是否可以通过检查十六进制代码找到嵌入的文件。由于.pif文件的执行方式与可执行文件相同,因此我搜索了“MZ”。果然,我能够在一个有意思的文件路径下找到嵌入的文件,可能来自攻击者的主机:
C:\Users\win7home\Desktop\5C.pif
现在,我们已经找到了这个文件,它可以被确认为一个可执行文件,我们可以使用CFF Explorer或其他十六进制查看器/转储工具来提取它。

只需要搜索“ MZ ”,并单击鼠标右键选择Begin Of Block,然后滚动到可执行文件的末尾(在文件信息之后),并单击鼠标右键选择End Of Block。然后,再次单击鼠标右键并选择Copy -> Into New File。使用这种方法,你最终得到的哈希值可能会与原始文件的哈希值有所不同,因为你比预期多复制了一个 “00”,但这似乎不会影响程序的整体执行。

Module1.killo()
现在,我们已经提取到了可执行文件,以供进一步分析使用。让我们回到宏,并查看最后一个子程序Module1.killo()。简单来说,killo()负责保存Word文档的干净版本(即不包含恶意宏)。为此,它将其保存为XML格式,从而删除文件中的所有宏。最后,killo()会终止程序,让它看起来像是意外崩溃。到这里,恶意宏看起来似乎就已经执行完了,但实际上什么也没有发生。在这种情况下,你忘记了前面提到的会在程序关闭时执行的Document_Close()和closee()。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载