vue.js word文档解析_原创干货 | 【恶意代码分析技巧】09文档漏洞

1a1841a9bcbf8b2248bfef3df5e6fb20.png

1. Office文档

1.1.  DDE

DDE(Dynamic Data Exchange),动态数据交换协议,它用于在共享数据的应用程序之间发送消息,使用共享内存在应用程序之间交换数据。 应用程序可以使用DDE协议进行一次性数据传输和持续交换。 该协议目前已被微软的对象链接与嵌入(OLE)协议所代替,但DDE协议仍然能够使用。 我们使用“插入—对象”功能插入的对象一般都是采用OLE协议的:

b344a0cc96df40685f6e4b5c86516993.png

虽然DDE已经被OLE替代,但是Office依然提供了对DDE的支持。我们可以通过word域代码访问DDE协议,并且利用DDE执行任意命令,具体操作如下:

第一步,申请一个windows域:

e3e0381c20259f46ac7f692723d38d7c.png

第二步,编辑域代码,使用DDE协议,打开cmd运行任意命令:

46b7188286d9199057a7c7137d0b4665.png

7f9b5153a60c0595762da4eb6829521a.png

word域(Field)也是一个很古老的功能,其目的是通过代码引导Word在文档中自动插入文字、图形、页码或其他信息。 在域代码中,我们指定DDEAUTO方法,便可以直接使用DDE协议,并利用DDE链接到cmd,从而实现任意命令的执行。

不过DDE在链接到文件的时候,会弹出一系列的提示信息:

4b4ad07c8861cef1764ec38bc0dbf2c5.png

49cedcbc71580365ef6a9a8b782c9b83.png

点了两次”是”之后,我们就成功运行cmd,打开了计算器:

614f2814f61b55c51da238161f376324.png

虽然DDE能执行任意命令,但微软认为这并不是安全问题因此没有发布解决方案,只是说未来会更新运行 DDE 功能时的安全提醒内容(类似宏安全告警)。 除了任意命令执行,DDE还能躲避安全软件检测。 由于DDE本身是Microsoft Office系列软件的合法功能,所以绝大多数安全软件不会阻止DDE字段文档运行。 而用户打开攻击者特制文档并允许运行 DDE 功能后,文档里内嵌的恶意代码就会运行。 接下来,我们以腾讯反病毒实验室发现的利用DDE传播勒索病毒的恶意文档(md5:0910541c2ac975a49a28d7a939e48cd3)为例,分析使用DDE的恶意文档。 用户打开包含恶意代码的文档时会收到两个提示,如果全部点是,恶意代码就会执行。

11444fb67a66010ec8f10c331869350d.png

71e2fcf2d515788e689dcf4926193d58.png

我们找到恶意文档中的word域,选择切换域代码,可以看到此文档使用DDE运行powershell命令,从远程站点下载勒索病毒:

7b0666c82fc2e8e58d8344fae8eea43b.png

ac9fe90d5e21d1c9aae300e3e3782ba3.png

除了Word,Excel、Outlook等应用也都可以执行DDE攻击。 DDE攻击是不同于宏的另一种方式,宏是在VBA工程中编辑和执行的,而DDE攻击直接在Office应用中嵌入一段恶意代码,我们可以直接在Office中看到DDE执行的代码。 如果你不想运行恶意文档,我们也可以根据文件结构,找到DDE执行的代码。 如果是docx文件,我们可以将其解压,然后查找在document.xml中的instrText标签中,instrText标签里就是DDE执行的代码:

6be8b722eec15fc9e7daf67a52a94132.png

如果是doc文件,则使用Structured Storage Viewer打开,找到WorDocument,DDE代码就在这个stream中:

6c35e57c4f93e1bfb2d43a295c547907.png

1.2. 漏洞(cve-2017-11882)

CVE-2017-11882是Office的一个栈溢出的远程代码执行漏洞,该漏洞的影响范围极广,使用该漏洞的恶意文档也很多,本文就介绍一下遇到使用该漏洞的恶意样本的分析技巧。 本文并不是漏洞分析文章,不会分析该漏洞的细节,感兴趣的同学可以去网上查看相关分析文章。 CVE-2017-11882漏洞是Office软件上的漏洞,但该漏洞不是发生在word.exe、excel.exe等进程中的,而是发生在公式编辑器EQNEDT32.EXE进程中的。 所以使用该漏洞的文档在进行漏洞利用时一定会启动EQNEDT32.exe进程,而恶意代码也一定是在EQNEDT32.exe进程内执行的。 我们可以在EQNEDT32.exe启动时,将EQNEDT32.exe附加进调试器,之后再定位到恶意代码并进行分析。 设置EQNEDT32.exe启动附加调试器的方式很简单,只需要设置注册表就行了。 修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\EQNEDT32.EXE项,如下图设置EQNEDT32.exe启动时自动附加到windbg上:

ccdffa5623f1a880a4d82f6bcf8a8fec.png

之后运行恶意文档,EQNEDT32.exe启动时会自动打开windbg。接下来,只需要按照如下五步就可以定位到shellcode了:

①bp 0041160f;

②执行6个g;

③下断点bp 00411874;

④执行g,执行到00411874,是一条ret,可以看到此时的esp已经被修改了;

c30885835533f7f19d1d2ae155690ccb.png

⑤单步执行ret。 程序返回就来到了shellcode的位置,就可以详细分析shellcode; e1c7c717ea0aab15496c012b8234a2ec.png

2.rtf文件

2.1. rtf介绍

RTF(RichTextFormat),富文本格式,本质是一种文本文件,任何软件都可以直接读取RTF文件,但是RTF却定义了一套规范——RTF规范。 凭借RTF规范,文档文件可以被不同的操作系统和不同的软件使用。 如将WPS文件另存为RTF格式,用Word进行编辑处理,原WPS下设置的字形、字号依然能够保持不变。

RTF文件由未格式化文本(Text)、控制字(Control word)、控制符(Control Symbol)和群组(Group)组成,每个{}就是一个组,文档中的所有数据都是在这样一个个的{}中的。一个典型rtf文件长得这个样子:

e2b683360a8614d5c0e4020b7544f952.png

如果你使用word打开上图的文件,只会显示一句“Hello World!”,而不是上图中的复杂字符,这是因为word对rtf进行了解析。 一个软件要能支持rtf文件,必须要能正确的解析rtf格式,于是这引发了rtf文档的第一个安全性问题——rtf解析漏洞(如CVE-2016-7193)。 除了“Hello World!”这样的字符串,rtf文件中还可以嵌入各种对象,例如OLE对象和图像对象。 这又引发了rtf文档的第二个安全性问题——rtf文档中的对象可能不安全。 rtf中即可以直接嵌入的恶意可执行文件,也可以嵌入含有漏洞的文档对象(如doc)。 RTF通过\object控制字嵌入各类对象,对象会以十六进制数据流的形式存储在\objdata控制字后,有时候在分析rtf文件时,可以直接搜索\objdata关键字进行分析:

bb9d19927d4fc8387af17391455675cf.png

近年来,最流行的rtf文档攻击是嵌入含有漏洞的文档对象(如doc),当用户使用word打开rtf文档时,就可能触发word软件漏洞。本文主要分析的也是这个问题。

2.2. rtfobj.py

rtfobj.py是oletools的一部分(可以在github中下载),是一款专门分析提取rtf内嵌对象的工具。

7987903bff85aa269be330ce74be9f7c.png

rtfobj.py的使用比较简单,可以直接使用-s命令提取对象。除了提取对象,rtfobj.py还会对rtf文件进行简单的分析,判断rtf中的对象是否含有某些漏洞。如图所示,分析出来rtf中含有一个OLE对象,对象id是0,该对象可能使用了cve-2017-11882或cve-2018-0802漏洞:

dc51075d4aab2dc8a14255da1850e72d.png

使用-s all命令可以将所有对象(\objdata)提取出来,提取出的是.bin文件。对比.rtf和.bin文件,*.bin里存储的数据是*.rtf中以文本形式存储的数据:

331031452ae2d0d3526d6ff12a1e9a13.png

2.3. CVE-2017-11882的RTF版 在前文中我们已经分析过该漏洞了,不过在实际恶意代码分析中,你会发现rtf版本的cve-2017-11882漏洞利用的是最多的。 在rtf中使用该漏洞,你不需要将整个OLE文件(如doc)嵌入rtf文件中,你只需要嵌入MTEF data就可以了。 MTEF data是EQNEDT32使用的数据,其数据结构可以参考《 漏洞分析1-cve-2017-11882分析 》一文( https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=30974&highlight=cve-2017-11882 )。 如图,某样本(md5:0a8efb742ef488bcb8ccd6b616125eea)就是使用了该技术,其objdata嵌入的就是MTEF data,使用rtfobj可以直接提取出来:

03960eb8f11542baa845b1aa10b1f37b.png

office能正确解析rtf中的MTEF data,具体原理可以参考《利用了Office公式编辑器特殊处理逻辑的最新免杀技术分析(CVE-2017-11882)》(超链接:https://www.freebuf.com/column/183735.html)一文;而许多杀软不能正确解析MTEF data,导致此类样本查杀率较低:

127beff5e64e0996bed6cb64736983ec.png

2.4. CVE-2017-0199

cve-2017-0199是一个逻辑漏洞,该漏洞利用office OLE对象链接技术,将包裹的恶意链接对象嵌在文档中,office 调用URL Moniker(COM对象)将恶意链接指向的HTA文件通过 HTTP 请求下载到本地并执行,某大国挺喜欢用这个漏洞进行鱼叉攻击的。

使用此漏洞的rtf文件中一般会使用各种符号混淆(md5:e5a622a7bde4823ebec87373792e1118):

8a632632310b30a621f5107cc5bf7b80.png

不过rtfobj已经能够处理此类混淆了,我们可以直接使用-s all参数提取对象。 因为cve-2017-0199的触发需要使用HTTP请求,我们可以通过搜索关键字查找恶意链接:

487395a838ffe66e81cd09635c94d4d3.png

3.pdf文件

3.1. pdf介绍

PDF,便携式文件格式,Portable Document Format。 使用文本编辑器打开PDF,就会发现一个典型的PDF文件长这个样子(下图摘自freebuf):

885a57c9fa2e10e6ebbb8f231040977f.png

从文件结构上讲,PDF文件格式包含以下4个部分:

·文件头(Header)——指明了该文件所遵从的PDF规范的版本号,它出现在PDF文件的第一行。

·文件体(Body)——又称对象集合,PDF文件的主要部分,由一系列对象组成,就是上图红框里的东西。

·交叉引用表(Cross reference table)——对对象进行随机存取而设立的一个间接对象的地址索引表。

·文件尾(Trailer)——声明了交叉引用表的地址,即指明了文件体的根对象(Catalog),从而能够找到PDF文件中各个对象体的位置,达到随机访问。另外还保存了PDF文件的加密等安全信息。

pdf文件本质上是一个个obj对象的集合,对pdf文件进行分析,实际上就是分析这些对象和对象的关系。为了对抗分析,恶意样本也开始采取一些混淆方式,增强obj对象分析的难度。

第一种方式是进行ASCII编码,如下所示是两个完全相同的obj:

117363da4ba41ed600d5c98990ec7023.png

第二种方式是利用Filter对obj数据进行编码压缩。 在pdf的文件体中,pdf可以通过Filter标签对对象进行编码压缩。 下图是pdf中一段使用FlateDecode压缩的JAVASCRIT代码:

788215b4447facadebb4f9c77b43956c.png

3.2. 分析技巧

在分析包含漏洞利用的PDF时,我们主要关注的是其中的对象和JavaScript代码。

一般我们通过如下步骤进行分析:

①利用pdfid.py或peepdf.py之类的工具对文档初步分析,寻找存在风险的obj;

②使用 pdf-parser.py、、 pdftk.py 、 pdfextract 或peepdf.py解码流;

③分析pdf中存在JavaScript或shellcode;

3.3. peepdf

peepdf是一个专门用于分析PDF文件的Python工具,它还提供了Javascript和shellcode分析的功能,可以对文件进行简单的威胁判断。 同时,peepdf中支持如下filter的解码:

dd3fa90d6c4efc1ecb3190701b54eec0.png

接下来,我们使用peepdf对样本(md5:32c83ebbca9cbfe298ad270fa50bc5d3)进行分析:

b8c1eccbab20d2131e03d481d0e4f02a.png

可以看到peepdf分析出id是90的obj里含有JavaScript代码,接下来我们分析的重点就是90这个obj。

在上面分析时使用了-i参数,是为了进入peepdf控制台:

93076e7887be93e771a436e5e8443901.png

分析id是90的obj使用的filters,发现其使用的FlateDecode:

e47a70358126b94255337f3d4eb80c1c.png

提取js代码:

a279186a8b2fe5983dc22ee9c7e92400.png

2079f62e354fa371921f35e1b23d1d01.png

再接下来就是对JS代码的分析了,关于JS代码的分析,在本系列之后的文章中再做分享。

参考资料

https://www.varonis.com/blog/adventures-in-malware-free-hacking-part-iv/

https://securityoversimplicity.wordpress.com/2017/10/22/not-all-she-wrote-part-2-rigged-office-documents-part-1/

https://www.freebuf.com/column/152267.html

https://www.freebuf.com/column/154931.html

https://securityoversimplicity.wordpress.com/2017/11/23/not-all-she-wrote-part-3-rigged-rtf-documents/

https://blog.csdn.net/gongzixiaobai8842/article/details/78317580

https://www.freebuf.com/vuls/154468.html

https://securityoversimplicity.wordpress.com/2017/09/28/not-all-she-wrote-part-1-rigged-pdfs/

https://www.anquanke.com/post/id/87127

https://www.freebuf.com/articles/system/178920.html

https://eternal-todo.com/category/pdf?page=2

下方查看 历史文章云众可信征稿进行时
原创干货 | MuddyWater(污水)APT组织针对塔吉克斯坦的攻击活动的分析
原创干货 | 【恶意代码分析技巧】04-exe_VB

b7627c7fffcff1b7501d39c8ae8b455c.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值