微软Office办公套装恶意文件解析与混淆研究 审计

admin 6月前 130

Office文件格式介绍

针对Office恶意文档的分析可以划分为两个部分:

Office2007之前的版本

Office2007之后的版本

Office2007之后的版本在原有Office文件格式的基础上加入了XML文件格式,这种新的文件格式称之为Office Open XML,相比于之前的版本Office文档结构更为清晰。下面我将详细介绍两个版本之间的区别:

Office2007之前的版本

Office2007的文件储存格式可以看作二进制文件,这里用十六进制编辑器打开示例文件(CVE-2008-0320)

可以看到示例文件的文件头为D0 CF 11 E0 A1 B1 1A E1

这种文档格式是OLESS(OLE Structured Storage),微软采用是的OLE1.0的文档规范

这里我们可以直接用微软自带工具——Offvis打开文档,直观的查看OLESS文档结构

用Offvis打开后可以看到文档,一个非常重要的关键字我们需要注意——CLSID

这个关键字一般常用来区分各种CVE编号而且主义的是OLESS中CLSID的存放位置与Rtf中CLSID的存放位置不同,Rtf中存放在\objdata控制字中。

Office2007之后的版本

同样,我们使用十六进制编辑器打开一个Office2007之后的样本。

可以发现文件头为PK,对独立软件发展历史有过了解的应该知道,PK代表ZIP算法的发明者(Phil Katz)。说明该文档实际上为ZIP压缩包。

那么接下来的第一步,我们需要将文档解压。简单的方式我们可以修改文件的后缀名,使用7z等解压软件将文档解压

需要注意的是,部分文档可能会在文档中设置解压终止符,所以用现成的解压软件可能会造成解压不完成的情况,建议使用zlib自定义封装解压库解压文档.

解压后的文档目录结构如图所示

(演示文件为ppt格式,word等格式可能稍微不一样)

其中_rels文件夹中包含一个.rels.xml文件,这个xml文件定义了包中的根关系,是解析整个包中需要首先浏览的一个文件。

Office恶意文档主要通过嵌入文件的形式触发攻击,所以,我们需要知道嵌入文件的存放位置。

根据分析,嵌入文件的存放位置一般为embeddings文件夹。

可以看到嵌入文件同样为OLESS格式文件,这种文件格式的详细介绍会在下文给出。

需要指出的是,Office文件嵌套方式主要有两种,一种是上面给出的在PK包中嵌入文档;另一种是将攻击文件包装成Rtf格式,再将嵌入文件插入Rtf的/objdata流中,那么下面我们有必要再进一步介绍Rtf格式。

Rtf文档格式介绍以及解析

富文本格式(Rtf, rich text format)是微软的文本和图像信息交换制定的格式。Rtf文件可以划分为文件头和文档区两个部分组成。

文件头和文档区由文本、控制字和控制符组成,同时利用{...}来表明层级关系。

Rtf文件内容控制字解释
文件头\rtfN版本号
\fonttbl    字体表
\filetbl    文件表
\listtable  编目表
文档区\info信息组
\pict       图片
\object     对象
\sv         绘图对象值
\sn         绘图对象名称
\objupdate  自动更新机制。很重要,攻击样本中经常使用,确保OLE对象自动加载、更新

控制字是Rtf用来标记文档信息的格式命令。常见控制字如上

由一个反斜线\跟随单个非字母字符组成。例如,\~代表一个不换行空格。控制符常被用来作为文件混淆的一种方式。

组由包括在({})中的文本、控制字或控制符组成。左扩符({)表示组的开始,右扩符(})表示组的结束。拓展符内部同样可以嵌套其他组。(题外话:这种花括号的层级叠加一度让我想起了被LISP支配的恐惧。。。)

前面已经说过,Rtf恶意文档是通过嵌入文件触发的攻击。\object控制字表示Rtf中嵌入了其他格式文件。Rtf文件格式的嵌入涉及到了OLE(Object linking and embedding)技术,所以我们有必要再介绍一下OLE文件格式,在下文会有详细介绍,这里我们需要知道\object控制字之后可以嵌入其他文件。

而且根据控制字的不同可以嵌入不同格式的文件,如下:

对象类型			解释
\objemb		嵌入图片、文档、音频等
\objlink	嵌入链接文件
\objautlink	嵌入自动链接对象类型。
\objsub		Macintosh版管理签署对象类型。
\objpub		Macintosh版管理发布对象类型。
\objicemb	MS Word for Macintosh可安装命令(IC)嵌入对象类型。
\objhtml	超文本标记语言(HTML)控件对象类型。
\objocx		嵌入ActiveX控件

了解对象类型之后我们还需要了解对象数据控制字,以便知道如何数据如何储存。如下:

对象数据			解释
\objdata	采用特定格式表示的对象数据;OLE对象采用OLESaveToStream结构。常见恶意文件样本关键字。
\objalias	Macintosh编辑管理器发行对象的别名记录。
\objsect	Macintosh编辑管理器发行对象的域记录。

由上一系列分析可知\objdata控制字之后即为OLE文件内容,下面我们介绍OLE文件格式

#OLE格式介绍

OLE(Object linking and embedding)是一种基于组件对象模型(COM)的对象链接与嵌入技术。

基于OLE嵌入技术加载未开启ASLR模块的CVE以及攻击样本层出不穷,下面简单介绍一下OLE格式。

前面已经提及,Rtf中采用的是OLE 1.0的文档格式,这种文件格式分为文件头部分以及数据部分的OLESS格式。

文件头部分的格式包含的信息如下:

* ClassName字段即为Rtf中储存的CLSID,CLSID是指windows系统针对不同应用程序、文件类型、OLE对象以及各种虐系统组件分配的ID代码,恶意样本中用特定ID调用相应组件达到针对性攻击的目的,这一数值同样是检测中常用的特征值。

* Data部分即为数据区,数据区的数据中以D0 CF 11 E0 A1 B1 1A E1开头的数据即为OLESS格式内容。造成堆溢出的数据即在这部分区域。同样应该注意的是,如果OLE文件头部分中包含的CLSID不合法,那么CLSID将在OLESS部分中的clssidThis字段中读取。

在用十六进制编辑器打开Rtf文件时,我们可以看到,Rtf将嵌入的OLE文件以可见字符的形式进行了表示。所以,分析的时候我们需要将可见字符转换成相应的16进制,即——Ascii to hex,如下图

Rtf文档格式混淆

恶代样本中常采取一些混淆机制以规避杀软检查,常用的手段有以下几种:

文件头混淆

{\rtf1

正常Rtf文档打开文件头如上,实际测试中发现解析器只需识别前四个字节{\rt,一般会见到几种修改文件头的样本

{\rt{{{\{\info{\authorismail-
{\rtÈÐÏ

无用字符混淆

{\rtf1\object112\objocx9912{\*\objdata54541 {{0
1
0
5
  0
0
0
0
0
  2
0
0
0

经测试,rtf中的空格回车和不可见字符并不会被解析器识别,所以在解析rtf样本时推荐跳过Ascii码表中<=0x20和>0x7F的字符

objdata头不正确

\objdata为OLE嵌入对象数据控制字,但实际测试中发现\objdata可以写成如下形式

\ bjdata

其中空格部分代表0x00

大小写不敏感

D0 CF 11 E0 A1 B1 1A E1是OLESS的文件头,其在OLE的data部分常见于小写形式,不过实际测试样本发现
D0cf11e0a1b11ae1

可见office的解析器对大小写是不敏感的。

bin混淆

{{1521BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBE\bin2ÐÏ{}\bin5ࡱE13E3FEFF9611121FEFFFFFF

上面是一段Rtf文档,\binxx代表之后的xx个数字以二进制形式读取,所以上面中两个\bin中的内容联合起来实质为OLESS的文件头,如果编写的解析器不能正确解析相应数据将会带来误判。

组多重嵌套

rtf中的组可以循环嵌套,例如

{{}{}{}{}ddd{}ddd}

解析器在解析的时候会跳过无用的组和控制符,这也是混淆常用的手段。

Office恶意文档解析思路

针对Office恶意文档的解析可以分成三个方向来进行。

1. 对于2007之前的版本可以看作OLESS格式,对这部分直接按照OLESS格式解析扫描特征

2. 2007之后的版本,需要先进行解压缩之后找到OLE文件进行相应的分析。

3. 如果待扫描的文件头为rtf格式,则提取相应的OLE文件进行分析。

常用分析工具推荐

[Offvis]

软件官方OLESS分析工具


[OLETools]

开源OLE分析项目


[OpenXmlScanner]

开源OpenXml恶代扫描项目


少客联盟- 版权声明 1、本主题所有言论和图片纯属会员个人意见,与少客联盟立场无关。
2、本站所有主题由该帖子作者发表,该帖子作者admin少客联盟享有帖子相关版权。
3、少客联盟管理员和版主有权不事先通知发贴者而删除本文。
4、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者admin少客联盟的同意。
5、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任。
6、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
7、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意。
8、官方反馈邮箱:chinasuc@chinasuc.cn


上一篇:权限维持及后门持久化技巧总结
下一篇:Linux中的瑞士军刀
Whatever is worth doing is worth doing well. juvenile hacker league
最新回复 (0)
    • 少客联盟
      2
        登录 注册 QQ登录(停用)
返回