如何实现VBA编译器崩溃

嵌入式技术

1330人已加入

描述

 

本期作者/牛杰

一、介绍

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

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

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

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

二、VBA编译器崩溃

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

源码

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

源码

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

源码

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

源码

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

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

源码

三、实例

下面我们介绍一个使用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进行了源码提取。

源码

图:FORTINET报告

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

四、修复

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

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

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

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

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

源码

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

源码

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

源码

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

源码

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

源码

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

源码

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

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

源码


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

源码

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

源码

五、总结

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

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分