在恶意软件的宏中插入8KB单个命令行

华盟原创文章投稿奖励计划

  1 提取并分析宏

  这个vbaProject.bin文件是从Word或者Excel2007+文档(.docm或xlsm)中提取出来的典型的包含宏的OLE文件。使用olevba或者oledump可以很简单的提取出宏的源代码。

         在恶意软件的宏中插入8KB单个命令行

  这个确实比较独特:宏的代码相当长,但是被olevba检测出可疑的命令是“shell”。

  然而,一个典型的宏在执行它的shell前,需要向文件中写入payload。并且大部分情况下,需要从网上下载payload。

  对代码进行分析后,发现也没有多余的命令去下载或者向磁盘中写入文件。

  这就意味着,这个宏既没有释放payload从而通过shell命令去执行,也没有从网上下载payload或者其他应用程序/dll文件。

  这个代码包含了2034个整型数组:

       在恶意软件的宏中插入8KB单个命令行

  更重要的是,一些函数通过解码算法可以将这些数组转化成字符串。并将其结果作为“shell”命令行的命令。

  刚开始我尝试手动分析这些代码,分析出是如何将这些数组解码成实际的payload。但是这个太耗费时间了。

  2 运行宏指令

  后来我尝试将宏指令转化成VBScript,然后使用cscript.exe来运行。但是我发现代码使用了大量特殊的VBA解释器,而这些又不被VBScript支持。

  于是我只好使用最后一个方法:我将这些宏指令导入Windows平台上一个空的Word文档中,然后将其粘贴至VB editor。

    在恶意软件的宏中插入8KB单个命令行

  当然在没有被感染的情况下我还是无法执行代码。因此我将shell命令注释掉,用“Selection.TypeText”来替换它,采用相同的字符串变量作为参数,如下所示。这么做将会向Word文档中嵌入文本字符串,而不是执行命令。

 在恶意软件的宏中插入8KB单个命令行

  在执行完宏之后,神秘的payload就会在word文档中出现:

  在恶意软件的宏中插入8KB单个命令行

  [中间省略]

  在恶意软件的宏中插入8KB单个命令行

  因此这个证实了第一个假设:这2034个整型(32bit)数组转化成8KB的字符串,这个字符串就是命令,最后被VBA的shell执行。

  3 VBScript payload

  这些命令调用cmd.exe进程处理一系列长长的双引号字符串。每个字符串作为一行添加到名字为“%appdata%/!TQJZEIfjEY0vjO!.vbs”的文件中。最终,VBScript文件被执行。

  为了获得VBScript的代码,将命令拷贝至记事本中,将每个双引号用换行符来代替:

        在恶意软件的宏中插入8KB单个命令行

  这个VBScript的脚本同样很迷乱,但是现在却比较容易分析。我会在随后的博客中将其转换一下。

  4 相似的样本

  这里使用我之前文章“How to find malware samples containing specific strings”中的自定义搜索引擎方法,就可以查找与宏代码中相似字符串的样本。例如,使用数组名“VoZoOxr6Mn”,我发现两个样本:

        d3e1735b9257ab0a578b375f01303b541786da18b5971d7c146b65886543b666:显示具有相同宏源码,但是没有VBS payload.

      95810b7ed825c4615256b9b72d03c9811c9c602d5bf4a405c2fc2b52d09ce8d9:相同的宏,但是这里存在命令行,VBS payload以及相应的行为分析。

  因此采用这种搜索方法,我可以更快的找到相同的结果。

  5 结论

  这个包含宏的神秘文件,通过解码让人迷惑的整型数组来构造8KB的字符串。这个字符串实际上就是启动cmd.exe的命令,随后通过循环的方式一行一行构建VBScript文件,最终执行它。

  同时还显示一个宏除了简单的”Shell”命令而不包括任何可疑的关键字,完全可以释放嵌入在宏中的Payload。

www.idc126.com

原文地址:https://hack.77169.com/201603/224804.shtm

本文原创,作者:华盟君,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/17544.html

发表评论