DOCX 文档解析及隐藏信息提取算法

admin 2022年7月12日10:19:40评论101 views字数 8682阅读28分56秒阅读模式

摘 要:

DOCX 是一种融合可扩展标记语言(Extensible Markup Language,XML)、对象连接与嵌入 (Object Linking and Embedding, OLE) 技术、ZIP 压缩技术为一体的文档组织形式,  其格式复杂、应 用广泛,信息隐藏方式灵活且难以发现。通过研究 DOCX 文档,解析文档结构,提出在此类文档中 进行信息隐藏的可能性,并有针对性的设计了基于关联对象隐藏信息和基于文档扩展空间隐藏信息 的检测和提取算法,分析两种算法的适用性,为电子数据取证技术人员的专业工作提供一定帮助。

内容目录:
1    DOCX 文档结构解析
1.1    [Content_Types].xml 文件解析
1.2    rels 文件解析
1.3    docProps 文件夹解析
1.4    文档内容解析
2    DOCX 文档信息隐藏方法
2.1    基于关联对象的信息隐藏
2.2    基于文档扩展空间的信息隐藏
3    DOCX 文档隐藏信息检测提取算法
3.1    基于关联对象隐藏信息的检测提取算法
3.2    基于文档扩展空间隐藏信息的检测提取算法
3.3    算法分析

微软的 Office 是目前最常使用的办公软件套装,其中的一个组件 Word 是文字处理的必备工具。早期的 Word 使用的是 DOC 文档,是一种复合文档,由头部和扇区组合而成,其中的文字、图片、公式 等信息以流的形式被区分,分别存储在不同的仓库 中;而现在主流的 DOCX 文档采用的文件组织方式则是一种基于压缩文件的新型可扩展标记语言(Extensible Markup Language,XML) 格式。与之前 DOC 类型相比,DOCX 格式的文件打包方式可以  减少文件大小、节省磁盘空间。由于 DOCX 格式结  合压缩和 XML 格式, 能加载语音、文字、图像、视频、链接等多媒体,DOCX 文档结构复杂;因此,一旦存在隐藏信息,比较难以发现。对于从事电子数据取证的专业人员,如果不能深入了解 DOCX 文档的  组织结构,则无法从中提取隐藏的有效信息,势必影响证据分析和证据链的形成。基于此,本文针对DOCX 文档进行研究,通过解析文档结构,提出信息隐藏的可能性并设计对应的隐藏信息提取算法。

01


 DOCX 文档结构解析


DOCX 文 档 的 文 件 头 为“50 4B 03 04”,与 ZIP 文件头类似,  这是由于 DOCX 文档的结构是按 照压缩原理设计的;因此 DOCX 文档的目录结构展开来看和压缩文件一样具有文件系统的文件组织 形式,并以树状结构排列,包含目录和子目录,其 中叶子节点是一些文件流。

DOCX 文档中所包含的文件夹和文件各自定义  数据和属性,但相互之间有一定的联系,而完整地  读取其内容需要借助对应的应用程序。应用程序读  写文档时,能够将全部的目录、文件解压出来并打  开指定的目录,  读写出其中某个文件流。一般来说, DOCX 文档包含 [Content_Types].xml 文件、docProps  文件夹、rels 类文件和文档内容类文件(一般在  word、custom 等文件夹下),如图 1 所示。

DOCX 文档解析及隐藏信息提取算法 

图 1   DOCX 文档的目录结构

1.1    [Content_Types].xml 文件解析

[Content_Types].xml 文件对整个文档中内容所对应的媒体类型进行说明。在 DOCX 文档中每使 用一类 媒体或元数 据,[Content_Types].xml 都要增 加一项类型包定义来说明,其中包含了所增加的媒体或元数据对应的入口位置以及解释方式,例如,rels 的媒体类 型是“application/vnd.openxmlformats-  package.relationships+xml”,由这个顶级包负责解释。 因此,应用程序读取 DOCX文件时,先解析[Content_ Types].xml,就可以在 [Content_Types].xml 中得到文 档所用到的格式、内容、图片等所对应的媒体类型 以及保存的位置,为下一步调用指出入口,具体如  图 2 所示。对于大部分 DOCX 文档来说,[Content_  Types].xml 的内容都是类似的,也就是说文档格式   的媒体类型一样,生成的文件夹和子文件夹以及文件名称相同,只是在项目数量上有区别,例如某个文档没有插入图片,在 [Content_Types].xml 中就会缺 少 <Default Extension="jpeg" ContentType="image/  jpeg"/> 语句。 

DOCX 文档解析及隐藏信息提取算法

图 2   [Content_Types].xml 内容示例

1.2    rels 文件解析

rels 是 relationships 的缩写,  用来定义文档格式 与媒体类型之间的对应关系。读取 DOCX 文档时, 根据 rels 可以快速得到各部件和媒体类型格式包的 对应关系,此时不需要考虑具体的格式,可以节 省读取时间,因此统一命名为 rels 类型。[Content_ Types].xml 中解 释 了 rels 的媒体类 型, 属 于 Office Open XML 的文件格式,可以按照 XML 读取内容。在根 _rels 文件夹和 word、custom 等文件夹下都存 储有 rels 类文件,根文件夹下的 rels 文件解释文档 中主部件和顶级包的关系,如图 3 所示,对主部 件 app.xml、core.xml 和 document.xml 定义了对应系。word 文件夹下的 rels 文件 document.xml.rels 列 出 document.xml 所需的其他部件,如果文档中有用 户自定义的一些属性,则会在 custom 文件夹下分别 创建以 item 命名的 rels 文件,进一步解释当前文件 夹下子部件和包的对应关系。

DOCX 文档解析及隐藏信息提取算法

图 3   rels 内容示例

1.3    docProps 文件夹解析

docProps 文 件 夹 中 包 括 core.xml、app.xml、 custom.xml 等, 在根文件夹下的 rels 文件中解释了这 些 xml 文 件 和 包 的 对 应 关 系。custom.xml 记录文档的自定义属 性,core.xml 和 app.xml 用 于记 录 DOCX 文档的主属性。core.xml 中的信息涵盖了文 档的创建时间、修改时间、标题、作者等 OpenXML文档格式的通用文件属性,app.xml 描述 DOCX 文 档的其他一些属性 ,例如文档类型、安全属性、只读信息、版本等特有的文件属性,这些内容以新 型 文 件 系 统(New Technology File System,NTFS) 主文件流的方式保存 ,与文件属性中的详细信息 保持一致。core.xml 和 app.xml 涵盖了文档详细信息的各个项目内容,如图 4 所示。

DOCX 文档解析及隐藏信息提取算法

图 4   core.xml、app.xml 和文档属性的对应

1.4    文档内容解析

word、custom 等文件夹保存了用户对文档的各种操作。custom 中 以 item 为首命名的 xml 文件解释文档中的自定义数据部件,这个部件对文档的整 体内容影响不大,即使缺失也可以正常读取文档内 容。word 文件夹中包含了大量 xml 文件,用来解 释文档的页眉、页脚、批注、脚注、尾注、web 设 置、自定义设置、格式、内容等,具体地,是在 header1.xml、footer1.xml、comments.xml、footnotes. xml、endnotes.xml、websettings.xml、styles.xml、 settings.xml、document.xml 等文件中解 释。此外,还有一些子文件夹如 theme、embeddings、media 等对文档中涉及的其他对象进行了说明, theme 文件夹中的theme1.xml 记录文档的格式主题,media 文 件夹中存放着插入文档中的图片、视频等其他格式文件的缩略图,embeddings 文件夹中存放着文本文档等类型的文件。这些 xml 文件按照 WordXML 的语法格式对内容进行组织 ,具有很高的灵活性。在这些文件中,document.xml 非常关键,它是用来记录 DOCX 文档正文内容的文件,文档内容在 <w:body>…</w:body> 中解 释,在 body 体内有 3 类节点, 分别是:<w:p> 表示段落格式、<w:r> 表示字符格式、<w:t> 表示文本内容。其中,<w:t> 包含在 <w:r> 体 中,<w:r> 包 含 在 <w:p> 体 中。WordXML对不同的段落、字符格式进行相应的语法指定,例 如某段文本为粗体,则用 <w:bw:val=”on”> 表示。图 5 为 document.xml 中的一段 <w:p> 体,文档的格式内容都有详细解释。

DOCX 文档解析及隐藏信息提取算法

图 5 document.xml 示例

media 文件夹和 embeddings 文件夹会对文档中所插入的图片、对象等内容详细解释。图片类以源文件的形式保存在 media 文件夹中,其他类型的对象在 embeddings 文件夹中以 OLE 形式保存二进制内容,media 文件夹中只保存缩略图。图 6 为测试文档中分别插入 exe、mp3、txt、jpg 等对象,在media 文件夹中都以 image 为首命名,jpg 对象大小不变,在本示例中对源文件“示例 .jpg”和“image4.jpg”分别计算Hash 值,得到二者的 MD5 值都为“BB139707C16E35A85A6D94B7BEB023A5”, 表示文件内容没有发生改变;但其他对象很明显有改变。要提取其具体内容,需要进一步分析。

DOCX 文档解析及隐藏信息提取算法

图 6 DOCX 插入对象的存储方式

embeddings 文件夹中的 bin 文件指向其他对象,DOCX 对这些对象采用 OLE 技术进行封装,延续 了复合文档技术,以扇区链的方式对数据流进行存 储 。文档头在首扇区,大小为 512 个字节,其后是 Sectors 区,Header 中的参数包括复合文档标识、版本号以及扇区、短扇区等定义。图 7 为插入文件“示 例 .exe”在 DOCX 中生成的 OLE 对象 oleObject.bin 的文件头。

DOCX 文档解析及隐藏信息提取算法

图 7   DOCX 插入 OLE 对象的 Header 示例

 示例中 OLE 对象扇区大小为 512 个字节, 短扇区大小为 64 个字节,扇区分配表(Sector Allocation Table,SAT),短 扇 区 分 配 表(Short Sector Allocation Table, SSAT) 都是占用 1 个扇区,目录流位于第 1 扇区。目录流按照红黑树的结构对 数据进行组织,根据 Header 中的参数,结合 SAT 为文件流创建的扇区编号 SID 链,从目录流的入口 得到数据存放的位置,并从文件头开始提取,可以得到插入的源文件。按照 Header 参数计算后,在偏移 16 进制数 0A BC 处发现文件内容。该文件以 “MZ”开头,与 exe 文件头一样,说明找到了正确 的文件保存位置。其他类型的 OLE 对象可采用同样方法提取文件内容 。

02


  DOCX 文档信息隐藏方法


上文研究了 DOCX 文档的组织结构,对常用 的部分做了解析。笔者发现,尽管 DOCX 文档组织 结构严密,但由于内容复杂,部分文件存在冗余, 给信息隐藏提供了一些机会。事实上,电子数据取 证人员在处理案件时也曾遇到这类隐藏数据。在 DOCX 文档中隐藏数据时需要结合其组织结构,找到对文档没有影响并且不易被发现的位置。xml、rels 以及插入文档的对象之间存在关联,隐藏信息时一般都会对这些关系进行梳理后找到隐藏位置并自我伪装。

2.1    基于关联对象的信息隐藏

[Content_Types].xml 作 为 DOCX 文 档 的 入 口,文档中每添加一类对象, 就需要在 [Content_Types]. xml 进行声明,那么如果所添加的对象没有在其中 声明,是否 DOCX 就无法对其识别解释,而实际达到隐藏数据的目的呢?笔者将上文中的测试文件改 变扩展名为 zip 后,在 media 文件夹中添加 jpg 文件 image.jpeg, 结果 DOCX文档能够正常打开,而添加 png 文件 image.png 后, 文档出现了错误。对 [Content_ Types].xml 的内容进行分析,发现内容中存在语句:

<Default  ContentT ype= "im age/jpeg" Extension="jpeg"/>

结合前面的解析,该语句是对 jpg 类型的声明,如果文档插入有此类对象,则默认存在其他 jpg 对 象。而 [Content_Types].xml 中缺少 了对 png 类 型对象的声明,所以文档在 media 文件夹中发现 png 对象后会出现错误。按照这个思路篡改 [Content_ Types].xml 内容,添加语句:

< Default  ContentT ype="im age/png" Extension="png"/>

发现 DOCX 文档可以正常使用。

除了可以在 media 文件夹下隐藏图片类对象, 还可以在 embeddings 文 件 夹 下 隐 藏 exe、mp3 等其他类型的对象。按照 DOCX 的语法,在 media 文件夹下隐藏的文件需要命名为 image 开头, 在 embeddings 文件夹下隐藏的文件需要命名为 oleObject 开头,否则应用程序无法正常打开。

为何所隐藏的文件能正常存在于文档中而不 被 DOCX 识别到呢?上文研究证明了隐藏文件能正 常存在于文档是由于在 [Content_Types].xml 中对对 象的类别进行了声明,下面进一步分析实现隐藏的原因。

在 rels 文件中对文档与媒体类型之间的关系进 行了解释。图 2 中是对顶级包和媒体类型之间确立 关联关系,插入文档中的具体对象则在子文件夹 中的 rels 文件详细关联解释, 例如上文中插入“示例 .exe”后, 先在 [Content_Types].xml 中添加语句: <Default  ContentT ype="image/x-emf"Extension="emf"/>声明在 image 文件夹下添加这个文件的缩略图, 还需要对 word 下的 rels 文件增加的两行语句:

<Relationship Id="rId6" Type="http://schemas. openxmlformats.org/officeDocument/2006/relationships/ image" Target="media/image1.emf"/>

<Relationship Id="rId7" Type="http://schemas. openxmlformats.org/officeDocument/2006/relationships/ oleObject" Target="embeddings/oleObject1.bin"/>

这两行语句分别对 media 文件夹下的缩略图和 embeddings 文件夹下的 OLE 对象解释关联关系。

综上所述,可以得出:由于 rels 中没有解释  image.png 对象的关联关系,导致了应用程序读取DOCX 文档时,无法形成数据链,遗漏了存在于media 文件夹下的 image.png,从而实现了信息的隐藏。

2.2    基于文档扩展空间的信息隐藏

DOCX 文档的文字内容存在于 document.xml 中,结合其他 xml 文件解释页面、段落、字符内容及格   式设置。这些 xml 文件必须符合 OfficeXML 格式和语  法,如果在 xml 文件中添加信息进行隐藏,则会因语法错误造成 DOCX 文档不能正常读取。如果希望隐藏少量关键信息,则可以在扩展空间中操作 , 这种方式不会改变文档大小, 隐蔽性强, 不易被发现。

由于 DOCX 采用了 ZIP 压缩格式 ,可以根据 ZIP 文件格式找到扩展空间,按照一定规律在扩展 空间中对信息进行隐藏。ZIP 结构包括数据区(50 4B 03 04 标志)、目录区(50 4B 01 02 标志)和结 束标志区(50 4B 05 06 标志)3 部分, 其中, 数据 区和目录区按照压缩文件记录排列。数据区所占空 间最大,包括头结构和数据,头结构如图 8 所示, 文件名长度为 001CH(28 个字节) ,扩展记录长 度为 0108H(264 个字节), 即文件名后的 264 个 字节为扩展记录,扩展记录的前 8 个字节为有效内 容,其他用 0 填充,这样就存在 256 个字节的填充 区域,这部分扩展空间是冗余的,可以填充任何 数值。

DOCX 文档解析及隐藏信息提取算法

图 8   DOCX 数据区头结构

在这个拓展区域中填充“password:123”后,文档正常读取,证明针对此区域的信息篡改不会对 DOCX 文档造成任何影响,那么就可以利用这些拓 展记录的填充区域隐藏数据。

03


 DOCX 文档隐藏信息检测提取算法


上文中验证了在 DOCX 文档中隐藏信息的可能  性, 在实际工作中需要检测并提取到这些隐藏信息。 针对上述信息隐藏方法,笔者分别设计了基于关联对象隐藏信息的检测提取算法和基于文档扩展空间隐藏信息的检测提取算法。

3.1    基于关联对象隐藏信息的检测提取算法

基于关联信息的信息隐藏是对 [Content_Types].xml、document.xml.rels 和 media、embeddings 文件夹下插入对象的关联关系进行篡改后实现的,那么 检测并提取这些信息,就要按照这个思路对这些关 联信息进行检测,如果出现关系链不完整的情况, 则意味着存在隐藏信息。

具体算法流程如下:

(1)按照 ZIP 格式解压 DOCX 文档;

(2)检索 [Content_Types].xml,如果检测到语句:

< D e f a u l t   C o n t e n t T y p e = " i m a g e / * " Extension="*"/>;

(3) 则 继 续 检 索 /word/_rels/document.xml. rels,如果检测到语句包含:

T yp e= "http: //s ch em as . openxm lfor m ats .o rg/ offi c eDo cume nt/ 2006/re l a t i o nshi ps/ i ma g e "Target="media/image?.*

则提取 Target 的值;

(4) 如果Target 的值包含“emf”,则检索 / word/embeddings 文 件 夹,   否 则 检 索 /word/media 文 件夹;

(5)如果存在与(3)中不匹配的文件名,则确定该文件为隐藏文件,提取该文件。

3.2    基于文档扩展空间隐藏信息的检测提取算法

扩展空间中隐藏信息是在对 DOCX 文档解压 以前进行的,因此检测提取这些信息针对的是原始 DOCX 文档。通过检索文档的编码找到扩展空间, 提取冗余空间内容并分析获得隐藏信息。具体算法流程如下:

(1)检索文档 16 进制内容,设置检索关键字 为“504B0304”,自上向下开始检索;(2)当检索到关键字,按照 16 进制从当前位 置向后偏移 1 个字节,提取该双字节数值 len1,继 续向后偏移 2 个字节,提取该双字节数值 len2;(3)继续向后偏移 len1+8 个字节,从当前位 置开始提取 len2-8 个字节长度的内容;(4) 分析提取的内容,  如果不是 0, 则确定为 隐藏数据;(5) 继续向下检索关键字“504B0304”,  如 果命中,则按(2)~(4)处理。

3.3    算法分析

上面两个算法分别针对不同的隐藏方式,在实际应用中可能存在两种方式并存的情况,因此要同时采用两个算法进行检测。第一个算法的操作对象是目录和文档内容,如果文档插入对象较多,则会影响检测速度。第二个算法是针对文档的源文件开展检索,运行速度较快,但是提取的内容为二进制, 需要结合实际情况用智能分析手段判断数值的实际含义。

04


结 语


随着对 DOCX 文档更深入详细的解析,利用 其组织结构中的漏洞进行信息隐藏的手段会越来越多。本文通过研究的信息隐藏方法,针对解压前的 源文件和解压后的目录树,提出了检测算法。该算 法涵盖了 XML、OLE、插入对象等,覆盖面较广、 可操作性强;但提取的可疑信息是否为有效线索, 特别是如何获知扩展空间中二进制源码的含义,还需要进一步思和研究。此外,document.xml 等 xml 文件中包含的文档内容、格式,core.xml 和 app. xml 中解释的文档属性,以及 OLE、IMG 等部件中的对象等都是 DOCX 文档的关键组成 ,如何针对 这些重要部分进行信息篡改、设计检测算法,也值得继续开展研究和讨论。

引用本文: 秦志红 .DOCX 文档解析及隐藏信息提取研究 [J]. 通信技术,2021,54(11):2557-2563.


作者简介 >>>

 秦志红 ,女, 硕士,  副教授, 主要研究方向为电子数据取证分析、网络犯  罪侦查等。
基金项目: 河南警察学院 2020 年院级科研项目“电子数据取证工作中针对 DOCX 类文件的分析”(HNJY-2020-17)。 
选自《通信技术》2021年第11期(为便于排版,已省去参考文献)
商务合作 | 开白转载 | 媒体交流 | 理事服务 
请联系:15710013727(微信同号)
《信息安全与通信保密》杂志投稿
联系电话:13391516229(微信同号)
邮箱:[email protected]   
《通信技术》杂志投稿
联系电话:15198220331(微信同号)
邮箱:txjstgyx@163.com
谢谢您的「分享|点赞|在看 」一键三连

原文始发于微信公众号(信息安全与通信保密杂志社):DOCX 文档解析及隐藏信息提取算法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月12日10:19:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   DOCX 文档解析及隐藏信息提取算法http://cn-sec.com/archives/1160963.html

发表评论

匿名网友 填写信息