VBA脚本终章编译器崩溃

admin 2023年7月15日18:44:23评论24 views字数 2279阅读7分35秒阅读模式

VBA脚本终章编译器崩溃

本期作者/牛杰


一、介绍


本篇文章为VBA脚本隐藏技术的最后一篇,将介绍如何在保证VBA脚本正常执行的情况下,使分析人员无法打开编译器。


那么为什么需要分析人员无法打开编译器呢?


首先,我们需要引入一个知识点。


在上篇《VBA隐藏技术stomping》中,我们分析过,当编译脚本的VBA版本与运行时版本一致时,才能执行P-Code,可以通过修改VBA脚本的源码,来欺骗OLE分析工具,但是该方法无法欺骗编译器,因为编译器版本与脚本文件运行版本一致时,编译器会将P-Code反编译,分析人员可以看到VBA脚本的真实代码,stomping技术便会失效,因此我们需要阻止分析人员打开编译器。反之,当我们分析恶意代码时,遇到编译器无法打开的情况下,如何排查该技术的使用,下面我们介绍如何实现编译器崩溃。


二、VBA编译器崩溃


我们先创建一个OFFICE文档文件,更改文件类型为zip压缩文件,然后解压,在word目录下找到vbaProject.bin。


VBA脚本终章编译器崩溃


打开vbaProject.bin文件,找到PROJECT流处的”Module=“,可以直接搜索特征”/&H00000000“,找到“Module=NewMacros“,NewMacros的非固定值,该字符串需要自行判断,为了使编译器崩溃,我们需要修改该字符串。


VBA脚本终章编译器崩溃


下图中,NewMacros被清零,也可以将Module=NewMacros删除,但是换行符"0x0D,0x0A"需要保留,同时后面的信息需要前移。


VBA脚本终章编译器崩溃


修改后保存,然后重新将文件打压缩包,然后修改文件后缀,改为文档文件,打开文件让宏执行,观察宏是否能够正常执行,如果宏能够正在执行,打开红管理器,点击编译。


VBA脚本终章编译器崩溃


当点击编译时,提示未知的错误则说明修改成功,编译器无法打开。


注:高版本OFFICE会提示位置的错误,如果使用的是低版本的OFFICE,OFFICE会随编译器一同崩溃。


VBA脚本终章编译器崩溃



三、实例


下面我们介绍一个使用VBA编译器崩溃技术的实例,FORTINET发布了一篇关于Energoatom公司被钓鱼文件入侵的报告,其链接为https://www.fortinet.com/blog/threat-research/malware-disguised-as-document-ukraine-energoatom-delivers-havoc-demon-backdoor。


钓鱼文件HASH[b773fa65bb375e6fe6d387f301f6bf33219189ea1d4a06762e965a9eba7de4e8],该钓鱼文件是一个word文档,报告中称钓鱼文件中VBA脚本使用了重定向技术,将vbaProject.bin重定位到EbDYTPZ[.]vEypm,随后在打开word查看VBA代码时,编译器崩溃,分析人员怀疑是PROJECT流中包含了错误签名导致编译器崩溃,因此使用oletools对EbDYTPZ[.]vEypm进行了源码提取。


VBA脚本终章编译器崩溃

图:FORTINET报告


我们找到该样本,对EbDYTPZ[.]vEypm重新进行了分析,发现导致编译器崩溃的原因是攻击者删除了Module的信息。同时确认该样本中没有使用stomping技术,因此使用OLE分析工具解析代码不会影响后续分析。



四、修复


因为微软没有开源P-code解析方法,所以我们在分析恶意代码时,如果遇到同时使用VBA脚本编译器崩溃和stomping技术的样本时,又该如何应对呢?


根据上文提到的方法反推,可以试着修复VBA文件,查看崩溃原因是否是由Module信息的缺失引起的,如果是该原因,修复该处缺失的信息。


那么我们如何知道Module模块的名称呢?


此处我们对文件EbDYTPZ[.]vEypm文件进行修复,并验证之前的分析结果。


常规OFFICE文档文件中,在word目录下的vbaData.xml文件中含有模块信息。


VBA脚本终章编译器崩溃


在[b773fa65bb375e6fe6d387f301f6bf33219189ea1d4a06762e965a9eba7de4e8]中,vbaData.xml文件被重定位到iuM.dsn,因此我们打开iuM.dsn。


VBA脚本终章编译器崩溃


我们可以看到wne:name="Project.Module1.AutoOpen",其中Project代表Project流,Module1是Module的名字,等于同我们自己生成文件的NewMacros,后门AutoOpen是函数名。


VBA脚本终章编译器崩溃


打开EbDYTPZ[.]vEypm文件,通过特征”/&H00000000“特征定位Module,可以发现该处并没有Module模块,确定攻击者将该字段抹除。


VBA脚本终章编译器崩溃


因此修复该文件需要Module的信息重新编辑进去,其余信息后移。


VBA脚本终章编译器崩溃


修复完脚本文件后,重新将文档文件打包,修改后缀,然后打开word,点击的编译器编辑按钮,发现VBA脚本编译器可以正常打开。


VBA脚本终章编译器崩溃


接下来,我们分析一下为什么修改Module信息会导致崩溃。


将调试器附加到word进程,点击编辑后,word会执行vbe6.dll中的代码,该dll创建Visual Basic环境,当加载Module1实例时,因Module信息确实,对象创建失败,this指针为空。


VBA脚本终章编译器崩溃


在后面的调用中会产生地址错误。


VBA脚本终章编译器崩溃


我们将脚本修复,重新附加word进程,对象创建成功,this指针指向正确的位置。


VBA脚本终章编译器崩溃


五、总结


VBA编译器崩溃技术与stomping和重定向技术没有冲突,三者可以相互组合使用,互补每个技术中存在的缺陷,希望读者可以在攻防对抗中,灵活使用这些技术。


—END—


VBA脚本终章编译器崩溃

原文始发于微信公众号(蛇矛实验室):VBA脚本终章编译器崩溃

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月15日18:44:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   VBA脚本终章编译器崩溃http://cn-sec.com/archives/1877311.html

发表评论

匿名网友 填写信息