Office文档安全:以ODF和OOXML为例

 

OOXML和ODF是用于文字处理、电子表格和演示文稿的事实上的标准数据格式。 两种都是基于XML的功能丰富的容器格式,其历史可以追溯到2000年初期。 在这项工作中对恶意Office文档的功能进行了系统的分析,将攻击分为五类:(1)拒绝服务攻击会影响在其上处理文档的主机。 (2)跟踪文档使用情况进行隐私入侵攻击。(3)信息泄露攻击将使受害者计算机中的个人数据泄露。 (4)在受害者的系统上进行数据操纵。 (5)在受害者的机器上进行代码执行。本研究评估了Microsoft Office和LibreOffice –并发现它们都容易受到攻击,本文最后提出缓解策略以应对这些攻击。

 

0x01 Introduction

Office Open XML(OOXML)和Office应用程序的开放文档格式(ODF)是办公文档格式的实际标准。每天都有数以百万计的人使用它们:据Microsoft称,MS Office的用户超过12亿,后者将OOXML用作其本机数据格式用于文档,电子表格和演示文稿。 根据Document Foundation的介绍,LibreOffice是ODF的参考实现,在全球拥有2亿活跃用户。 除此之外,许多公司还大量使用OOXML和ODF文档。没有它们,很难想象标准的办公室任务,例如创建发票和合同、会计电子表格或演示幻灯片。 在所有主要平台上以及在云中都可以使用用于处理,创建或导出OOXML和ODF文档的软件。

不幸的是,通过恶意Office文档部署恶意软件的历史也很长,从1999年的Melissa病毒到最近的Emotet感染,这曾迫使整个城市行政管理机构的IT基础架构在2019年被关闭。 底层数据格式的功能丰富性促进了基于恶意文档的攻击:OOXML规范跨越6500页,而ODF标准约为800页-两者均不包括专有扩展名。本文介绍了有关Office文档的安全性和隐私性的大规模研究。

A.丰富的文档功能

ODF和OOXML最初于2005年和2006年发布,是表示文字处理文档,电子表格和演示文稿的两个主要标准。两种数据格式均基于包含多个文件和目录的zip压缩存档。两者都使用可扩展标记语言(XML)来描述文档的实际内容。ODF和OOXML支持许多高级功能,包括电子表格公式,表单字段,对其他基于XML的数据格式(如SVG或MathML)以及数字签名和文档加密。此外,office文档可以包含活动内容,例如用各种语言(如Basic,JavaScript和Python)编写的宏,以及任意内容的OLE文件附件。在这项工作中分析了本地OOXML / ODF函数的安全性。

B.安全和隐私威胁

对与用户安全和隐私相关的OOXML和ODF标准功能进行了系统和结构化的分析。尽管这两种数据格式都相对较老且建立良好,但研究显示出有关恶意文档滥用危险功能的令人惊讶的结果。将攻击分为五类:

1.拒绝服务(DoS)攻击会影响处理应用程序和打开文档的主机。

2.隐私攻击,该攻击允许跟踪打开某些文档或显示所包含元数据的所有用户。

3.信息泄露攻击,将受害者计算机中的个人数据泄露给攻击者,例如私有电子表格值,本地文件或用户凭据。

4.数据操纵攻击写入主机系统上的文件或掩盖文档的显示内容。

5.在受害者的主机系统上执行任意代码。

C.责任披露

本研究将调查结果报告给了受影响的供应商,并提出了适当的对策。本文的发现产生了CVE-2018-8161,CVE-2020-12802和CVE-2020-12803。虽然可以在实现级别上缓解所有攻击,但大多数攻击都基于OOXML / ODF标准中定义的合法功能。为了在未来的实现中持续消除这些漏洞的根本原因,应该从规范中删除危险的功能,或者在安全性考虑因素中添加适当的实现准则。

 

0x02 Background

OOXML和ODF都是容器格式(zip归档文件),其中包含描述实际文档内容的XML文件以及可选文件(例如图像或样式表),其中包含的XML数据可以描述用于各种目的的内容,例如文字处理,电子表格。下表给出了Office组件,通用文件扩展名以及为这两个Office套件分配的应用程序的概述。在本节中概述了zip容器归档文件和文档中的OOXML和ODF目录结构。

A.OOXML文档结构

OOXML在2006年主要由Microsoft指定为ECMA-376标准,随后在2016年被采用为ISO / IEC 29500。Microsoft Office从2007年开始使用OOXML,而以前版本的MS Office则以专有数据格式保存文档。在下表中,给出了OOXML zip归档文件中包含的文件的目录列表。OOXML zip归档文件中包含的最重要的文件是document.xml,它描述了实际的内容结构。

下面中给出了最小的“ Hello World” document.xml。

B.ODF文档结构

ODF由OASIS开发,然后提交给ISO,并被采纳为标准(ISO / IEC 26300)。当前的稳定版本是2011年的ODF 1.2,而ODF 1.3当前是草稿。与OOXML一样,ODF文档由标准ziparchive中包含的各种XML文件组成。下表给出了目录结构。

实际的文档内容和文档的内部结构在content.xml中进行了描述。下面中给出了一个用于显示文本“ Hello World”的最小content.xml文件。最著名的ODF实施是LibreOffice,由于有关开源许可问题的争议,LibreOffice在2010年从OpenOffice项目中分叉出来。

 

0x03 Attacker Model

在本节中描述攻击者的模型,包括攻击者的能力,受害者的行为和成功条件。

A.攻击者的能力

攻击者可以创建一个新的OOXML / ODF文件或修改一个现有的文件,将其称为恶意文档。通过这种方式,攻击者可以完全控制文档结构及其内容。尽管攻击者针对标准的基本功能和特征,但并不要求恶意文档符合OOXML / ODF规范。受害者以某种方式获取并打开了恶意文件,例如通过从网站,电子邮件,USB驱动器或任何其他传输方式检索它。

此攻击者模型可用于本文中的所有攻击,但不可避免的元数据除外。在这种情况下,受害者是创建文档的受害者,而攻击者的目标是从该文档中获取潜在的敏感信息,例如文档元数据中的作者姓名。

B.受害者的行为

受害者是从攻击者控制的源中检索并打开恶意的OOXML或ODF文档的人。此要求是现实的,因为即使安全意识较高的用户也可以从不受信任的源(例如,电子邮件附件或Internet(例如,科学文章,CV模板或职位申请)下载并打开Office文档。要打开恶意文档,受害者使用预先安装的Office套件应用程序(例如Microsoft Word或LibreOffice Writer)处理该文件以显示其内容。所有攻击均以默认设置进行,并且不需要受害者激活任何不安全的功能,例如作为宏。

C.成功条件

根据攻击的多样性,成功条件也有所不同。因此在下面为每种攻击类别分别定义了攻击者的目标和成功条件。

 

0x04 Atttacks

A.A方法

为了确定OOXML和ODF中的漏洞,系统地研究了安全敏感功能和功能的规范。此分析包括OOXML上的6500多个页面和ODF上的800多个页面。创建了可以使用两种标准的恶意文档进行实施的潜在攻击列表,并根据其影响对其进行分类,结果得出了五个攻击类别:DoS,侵犯隐私,信息泄露,数据篡改和代码执行。为了便于分析,为每种攻击手工制作了测试文件。

B.拒绝服务

此类攻击的目标是制作OOXML或ODF文档,以迫使处理应用程序消耗所有可用资源(例如,内存或CPU时间)。
Deflate Bomb:基于恶意zip档案的数据放大攻击。 zip文件中使用的Deflate算法允许最大压缩比为1:1023。但是,过去进行了各种尝试来提高数据放大率,例如通过应用递归。从技术上讲,OOXML和ODF都使用zip归档文件来减少所包含数据的总体文件大小,从而引发一个问题,即它们是否也容易受到基于Deflate的压缩炸弹的攻击。
请注意,尽管此类压缩炸弹对台式机设备的影响是有限的,但DoS可能导致服务器端业务严重受损。示例包括基于云的办公解决方案,以及生成上载OOXML和ODF文件的预览图像的Web应用程序。

C.侵犯隐私

此类攻击针对用户的隐私。第一个攻击是URL调用,它通过嵌入“tracking pixel”来跟踪OOXML和ODF文档的使用。另一种攻击是敏感元数据,涉及攻击者可以从受害者创建的文档中学到哪些信息。

URL调用:此攻击的目的是创建一个文档,该文档在受害者打开后以静默方式连接到攻击者控制的服务器。该文档可以包含跟踪ID(例如,在URL路径或子域中),该ID可以用于为任何打开它的人跟踪文档的使用情况。这种行为通常是不希望的,因为它表示侵犯了用户的隐私。在更具针对性的攻击情况下,此功能可用于例如通过提供文档以供在Tor网络上下载来取消对Tor用户的匿名化,或获取有关审阅者打开作为办公文档提交的论文的信息。攻击者除了学习阅读文档时受害者的IP地址和时间戳外,还可以学习其他信息,例如二手办公套件或操作系统,这些信息可以从User-Agent HTTP标头中提取。甚至有商业服务提供补丁Microsoft Office文档(以旧的专有格式),以便打开它们的每个人都可以被跟踪。 本文展示了针对ODF的新颖URL调用攻击,并评估了现代办公套件是否仍在为OOXML加载外部图像。

敏感元数据:Office文档中有各种意外的元数据暴露示例。例如,2003年,英国首相办公室发布了一个Word文档,通常称为“ Dodgy Dossier”,该文档有助于将该国推向伊拉克战争。文档修订日志和元数据显示,内容被窃,绝不是英国情报机构提供的。 Office文档和其他文件格式中不需要的元数据和隐藏信息的问题是众所周知的。即使元数据是OOXML和ODF标准的功能,从隐私的角度来看,处理应用程序也应避免默认情况下包括过多的元数据,而是让用户选择加入。如果Modernoffice套件仍然以本地办公室格式保存文档或将其导出为其他文件格式(例如PDF)后,如果现代办公套件仍静默包含潜在敏感的元数据(例如当前登录用户的名称),则会出现研究问题。在评估中,将显示MS Office和LibreOffice使用默认设置存储的元数据信息量。

D.信息披露

此类攻击的目标是向攻击者窃听OOXML和ODF电子表格数据,受害者磁盘上的本地文件甚至NTLM凭据。

数据泄露:这种攻击的想法如下:受害者从攻击者控制的源中下载OOXML或ODF电子表格(例如,用于跟踪个人财务的电子表格模板),并在此处插入敏感信息。攻击者的目标是泄漏所有用户例如,输入有关受害人财务状况的个人信息。为了实现此目标,攻击者以一种方式处理电子表格,即将包含敏感数据的单元格引用并串联起来,作为指向攻击者Web服务器的超链接的路径。如果用户单击此超链接,则会提取内容,这些内容可能会进一步混淆,例如使用基于电子表格公式的编码机制。评估了现代办公套件中是否仍然存在类似的漏洞,以及如何最大程度地减少用户交互的程度。

文件泄露:OOXML和ODF标准都提供了各种功能,这些功能使文档可以访问和包括磁盘上的本地文件。最在这项工作中提出了一种针对ODF规范的新颖攻击,该攻击允许引用并因此包括远程图像以及文本文件。可以使用file:// URI方案来利用此功能。恶意文档,可能会使用前面讨论的数据泄露技术将它们潜在地泄露给攻击者。

凭证盗窃:可以通过简单地要求用户提供凭据来窃取用户凭据。他们创建了特制的OOXML模板文档,该文档触发了与请求HTTP基本认证的Web服务器的连接。使用Microsoft Word打开模板时,将显示一个身份验证对话框,并且用户输入的任何密码都将提交给攻击者的服务器。这种攻击是基于欺骗的,需要社会工程学。因此,是否可以在无需任何用户交互的情况下泄露受害人的凭据,就会引起研究问题。

一种可能实现此目的的技术是通过滥用NTLM身份验证。 Microsoft Windows的一个著名的,十年前的设计缺陷允许主机上运行的用户和应用程序调用与SMB网络共享的连接。如果恶意SMB服务器请求身份验证,则Windows会自动提交当前登录用户的凭据的哈希值,攻击者还可以使用该哈希值来发起离线词典攻击以及传递-散列或中继攻击(以绕过身份验证。不幸的是,不仅应用程序而且文档也可以访问\\evil.com之类的网络共享。如果受害者打开了恶意的PDF文件,则可以泄露NTLM凭据。由于OOXML和ODF都支持对外部资源的访问,因此很可能可以访问网络共享,从而泄漏了NTLM哈希。本文是第一个展示针对OOXML / ODF文件的攻击的人。

E.数据操纵

此类攻击涉及恶意办公室文档的功能,它们可以写入主机文件系统上的本地文件,并根据打开的应用程序掩盖其内容。

文件写访问:OOXML和ODF文档可以包含要由用户填写的表单,这是在典型的办公室任务中日常使用的功能,例如,用于提出索赔或商务旅行应用程序。与HTML表单类似,所包含的表单数据可以提交给URI,例如,提交给外部Web服务器。要在OOXML中创建可提交的表单,需要使用宏。但是,ODF实现了XForms W3C标准,该标准允许在不需要宏或其他活动脚本的情况下提交数据。 XForms规范允许各种方法(例如,发布,获取,删除),并且表单提交的目标甚至可以是磁盘上的本地文件。如果实现,则ODF文档中的XForms可用于覆盖或删除用户文件系统上的任意文件。此外,如果攻击者设法覆盖启动脚本(例如Windows上的autoexec.bat或macOS / Linux上的.profile),则文件写访问权限可能会升级为命令执行。本研究是第一个基于XForm数据提交和评估这种新颖攻击的人,并将其评估为磁盘上的本地文件。

内容屏蔽:此攻击的目标是根据用于打开文档的应用程序制作呈现方式不同的OOXML或ODF文档。在文档内容必须明确的情况下(例如销售协议或商业合同),这可能是一个安全问题。特别令人关注的一种情况可能是攻击者创建了由受害者进行数字签名的模棱两可的合同文件,在这种情况下,如果另一个应用程序打开该文件,受害者将无意中签署了看起来不同的显示内容。内容屏蔽的其他用例可能是例如向不同的审阅者显示不同的内容,或者仅在文档由某个OOXML或ODF应用程序处理时才启动漏洞利用代码。

先前已经显示了针对其他文件格式的内容屏蔽攻击,例如PDF,PostScript或HTML电子邮件。它们在解释文件格式结构或高级语法时滥用歧义性,边界情况或条件语句,以便在特定上下文中显示或隐藏特定文本。对于OOXML或ODF文档,在目录结构层和zip容器档案中的文件命名约定以及XML语法层上创建歧义。本研究是第一个对Office文档提出这种内容屏蔽攻击的。

F.代码执行

攻击的目标是执行攻击者控制的代码,例如,用恶意软件感染主机。 OOXML和ODF文件都可以包含宏,如果启用,则宏可能会被滥用以在主机系统上运行任意代码。20年前出现了第一批宏病毒,Office文档中宏的危害已广为人知。过去,宏导致基于Microsoft Office和LibreOffice中恶意Office文档的代码执行。正如Emotet(通过OOXML宏进行传播)所显示的那样,该问题尚未得到控制。在这项工作中,回答以下研究问题:

1.要激活现代办公套件中的宏,需要多少数量的用户交互或信任?

2.启用宏后,宏是否可以按设计执行任意代码,或者它们的功能是否有任何限制?

3.还有其他可能导致代码执行的功能吗?

 

0x05 Evalution

为了评估建议的攻击,针对OOXML和ODF的实际参考实现对它们进行了测试:MSOffice(365 ProPlus)和LibreOffice(6.4.0.3)。两家官方都声称彼此的本机文件格式至少具有部分兼容性。例如,现代版本的MS Word可以打开使用LibreOffice Writer创建的ODF文件。因此,在这两个应用程序中都测试了恶意的OOXML和ODF文档。在所有可用平台(Windows,macOS,Linux6和Web7)上进行了测试,因为结果可能会因某些实现而有所不同。如果办公套件至少在一个平台上易受攻击,会将其分类为易受攻击的。上表中提供了每个测试平台的完整详细信息。所有测试都是使用应用程序的默认设置执行的。可在https://github.com/RUB-NDS/Office-Security 上获得PoC漏洞利用文件,以允许复制。评价结果示于下表。

A.拒绝服务

Deflate Bomb:此攻击的目的是构建基于OOXML和ODF的压缩炸弹,迫使处理应用程序分配所有可用资源。为了实现此目标,构建了具有有效目录结构和有效XML语法的合法OOXML和ODF容器档案。制作了主要的document.xml和content.xml文件,每个文件都包含一个由10 GB的重复字符“ AAAAA …”组成的长字符串,以便显示。MicrosoftOffice尝试扩展内存中的容器。在Windows上,一旦无法分配更多的内存,它就会显示一条错误消息,指出无法打开该文档。但是,在macOS上,MS Office被强制进入CPU消耗循环。 LibreOffice而是将zip存档扩展到磁盘。但是,对于每个文档,它在4 GB之后停止。因此将漏洞分类为受限漏洞。还测试了基于OOXML和ODF的“ XML炸弹”(XML实体扩展攻击]);但是,没有一个经过测试的办公套件被发现容易受到攻击。

B.侵犯隐私

URL调用:为了测试(静默)URL调用,系统地研究了OOXML和ODF的XML语法,以获取触发网络连接的合法功能。类似于HTML电子邮件中的“跟踪像素”,远程图像可以包含在两种文件格式中。在下面记录的OOXML关系中描述了一种简单的方法。

它包含一个带有外部图像的字段。必须从document.xml主文件中进一步引用此关系。

在ODF文档中,可以通过将外部图像的URL设置为<draw:image> XML标签的href属性的值来包含外部图像,如下所示。

必须注意的是,URL调用是OOXML和ODF中“通过设计”的合法功能,并且不打算由Microsoft和LibreOffice开发人员都删除。但是,对于所有用户而言,恶意文档可以静默“phone home”。此外,请注意,如果在服务器端预览文件,例如,生成上传到云存储网站的Office文档的预览图像(超出范围),则可能导致服务器端请求伪造(SSRF)漏洞。

敏感元数据:为了测试现代办公套件存储了多少元数据,在MS Office和LibreOffice中都创建了一个新文档,并将其保存为OOXML和ODFformat。另外,将文档导出为PDF和HTML格式,以查看元数据是否仍保留在导出的文件格式中。评估结果如下表所示。请注意,评估结果对于两个经过测试的Office套件都是一致的,无论文档是否另存为OOXML,ODF,PDF或HTML格式,每种格式都导致相同的元数据。

Microsoft Office不仅存储相对无害的信息,例如文档创建的时间戳和用于生成文档的软件,还存储从当前登录用户的名称派生的作者的姓名。姓名,共同作者的用户名和修改日期也添加到元数据中。下面(docProps / core.xml)提供了由MS Office生成的简化的OOXML元数据文件。

另一方面,LibreOffice仅存储时间戳和生成器软件,在评估中并未将其归类为易受攻击的对象。下面(meta.xml)给出了由LibreOffice生成的简化的ODF元数据文件。

还测试了文档的先前修订版本是否已存储并可以恢复,默认设置不是这种情况。过去,此功能在Office文档中引起了很多隐私问题。如今,必须在MS Office和LibreOffice的currentversion中显式启用跟踪更改。此外,在Internet上搜寻了由办公套件创建的PDF文件(基于生成器软件元数据)。使用Microsoft Of-fice创建的40,981个获得的文件中,有39,445个(96.25%)包含作者姓名,而使用LibreOfficeor OpenOffice创建的2,654个文件中的1,801个(67.85%)仅适用于作者姓名-可能是在此处故意设置的。这表明“默认情况下的隐私”方法对于敏感元数据的公开具有实际效果。

5.3信息披露

数据泄露:为了测试是否可以将电子表格数据渗漏到攻击者控制的服务器,创建了带有超链接的电子表格公式,将文档中的某些单元格引用为URL路径,如下所示。

如果用户主动跟随该链接,则MS Office和LibreOffice都将包含引用的单元格的内容,并将其作为URL路径提交。下面描述了一个改进的版本,该版本使用web服务功能可在打开文档后自动泄漏电子表格内容。

在此示例中,一旦受害者重新打开或刷新了电子表格,A–Z列中所有单元格的内容就会被泄漏到攻击者的服务器。但是,在MSOffice和LibreOffice中,都要求用户在调用Web服务连接之前更新内容。因此,将漏洞分类为受限。对于MS Office,Web服务功能仅在Windows上可用。对于LibreOffice,还可以通过引用内容=’’’file://‘#$B2的单元格来泄漏当前打开的文档的路径名,该单元格在内部翻译为file:///home/victim/path/to/document。

文件泄露:此攻击的想法是将功能(如前所示)与不安全的功能(可在磁盘上包含本地文件)结合使用。第一步是将磁盘上的本地文件嵌入文档中。对于OOXML,没有找到实现此功能的功能。对于ODF,可以重复使用用于引用远程映像的功能–这次使用file:// URI方案如下所示。

这样一来,文档就可以在磁盘上嵌入任意图像,而无需任何用户交互。而且,使用<draw:object>或<text:section-source> ODFXML标签,可以将任意类型的文件包含到恶意文档中,如下所示。

在此示例中,受害者的SSH私钥(〜/ .ssh / id_rsa)包含在文档中。请注意,此类嵌入式对象的存在可以完全隐藏。但是,LibreOffice要求用户在包含磁盘中的任意文件之前更新文档中的引用。

实际上,无法使用电子表格功能来提取嵌入式文件,因为它们的内容无法放置到某个单元格中,因此无法被引用。但是,还存在其他潜在的渗透渠道:如果受害者重新保存了恶意文档,则磁盘上文件的副本将以静默方式嵌入到ODF zip容器存档中。如果文档已导出(例如,导出为PDF),则保持不变。这在攻击者可以访问新保存的文档的情况下是有问题的,例如,如果要求受害者查看并向攻击者控制的文档添加反馈。由于缺乏全自动渗透渠道,将该漏洞归类为有限漏洞。

还测试了使用XForm getmethod和file:// URI方案访问本地文件的能力。尽管可以观察到对目标文件的读取系统调用,但LibreOffice并未实际使用文件内容更新文档的XForm。此外,测试了XML包含(XInclude)和DTD / XXE 攻击以访问本地文件。文件,但是,没有一个经过测试的办公套件容易受到攻击。最后制作了OOXML和ODF zip容器归档文件,其中包含指向磁盘上本地文件的符号链接,以验证是否会遵循这样的链接以及是否可以访问引用的文件。但是,这种方法也不成功。

凭据窃取:如上所述,为了测试基于特制办公文档的NTLM哈希的泄漏,使用了该技术来包括跟踪像素。将目标设置为//evil.com,而不是URL,在现代Windows版本上将其转换为\evil.com。11对于OOXML,下面提供了一种关系,以静默方式触发与在evil.com上运行的SMB服务器的连接。

对于ODF,下面描述了相应的XML语法:

使用Responder作为恶意身份验证服务器,可以在不通知受害者的情况下获得客户端的NTLM哈希值,而无需要求受害人确认是否打开了针对经过测试的办公套件和每种Office文件格式的恶意网络共享的连接。当然,有效的破解或中继攻击实际上是可行的,这取决于受害者设置的配置(即密码强度,安全策略和Windows版本)。请注意,根据设计,只有在Windows上运行的应用程序会受到影响。

D.数据处理

文件写入访问权限:为了测试是否可以将表单数据写入本地文件,使用XForm创建了ODF文档。 XForm使用put方法将数据提交到磁盘上的本地文件,该文件由file:// URI方案指定,请参见下面。

表单由按钮触发。但是可以将该按钮设置为看起来像普通文本并覆盖整个文档。因此,单击文档中的某个位置将触发表单提交并将包含的表单数据写入指定的目标。这允许写入或覆盖磁盘上由其路径名指定的任意文件。除绝对路径名外,还可以使用波浪号(〜)来访问相对于用户主目录的文件。 macOS和Linux容易受到此攻击。

内容屏蔽:为了测试基于Office文档的内容屏蔽攻击,在目录结构和XML结构级别上系统地研究了OOXML和ODF标准的歧义性。如果可以创建一个在不同的打开应用程序中显示不同文本的文档,则将Office套件定义为易受攻击的。 ODF将主要内容文件定义为content.xml,但是,该规范未对区分大小写作出声明。通过将两个带有混合大小写名称的OpenDocument内容文件放入ODF容器Content.xml和content.XML,可以决定是否由应用程序处理哪个文件:LibreOffice解析第一个文件,而MS Office使用第二个文件文件。有趣的是,由于存在第二个(大写或小写)document.xml文件,MS Office完全拒绝打开OOXML文档,因此该概念无法适应OOXML。

例如,如果文档包含多个主体节点,则在XML结构的层上还会产生更多的歧义。在这种情况下,处理应用程序需要确定要处理的是哪一个,这会导致办公套件之间产生混乱。下面给出了一个示例OOXML文档,该文档在Libre Office和Microsoft Office中呈现了不同的文本。

document.xml文件包含两个彼此包裹的正文元素。 LibreOffice仅处理第二个bodynode并显示所包含的文本,而MS Office解析两个body节点。尽管这不是OOXML架构内的有效XML,但两种实现仍会接受它。

必须注意的是,在这项工作中,仅分析了目录结构和externalXML结构各层的内容屏蔽。这不太可能是完整的,因为OOXML和ODF的高级语法非常复杂,并且潜在地提供了更多基于处理应用程序中启用/禁用功能来显示/隐藏文本的可能性。

E.代码执行

宏:宏的执行默认情况下处于禁用状态,用户必须在MicrosoftOffice和LibreOffice中显式启用它。但是,对于受信任实体签名的文档和具有受信任位置的文档也有一些例外,如下表所示。

在MS Office中,默认设置是在通知用户有关宏的存在时禁用宏。但是,无论宏设置如何,由受信任的发布者签名的文档或不受信任的位置的文档都可以执行宏。这意味着,如果攻击者对这些预定义的受信任位置中的任何一个具有写访问权,则攻击者可以在此处放置宏代码,而无需任何确认即可执行该宏代码。在LibreOffice中,没有预定义的受信任位置。此外,最新版本的MS Office使用户更容易做出错误的决定。激活宏通常需要进行工程设计,一旦启用,对其功能就没有限制。在MS Office中,宏是用Visual Basic for Applications(VBA)编写的。启用的宏允许在主机系统上执行任意命令,请参见下面。

在LibreOffice中,可以使用下面给出的BASIC代码来执行任意shell命令。LibreOffice宏还支持要执行的JavaScript和Python代码。

总而言之,宏在两个办公套件中都“通过设计”提供了代码执行,不认为这是一个漏洞,因为用户必须主动激活明显不安全的功能。但是在研究过程中发现了进一步的弱点,导致这两个经过测试的Office套件都执行了代码。在MS Office中测试URL调用时,发现了由下面给出的HTML代码引起的内存损坏。

Microsoft在MS Office中将这种偶然发现的远程代码执行分类为CVSS评分为9.3。但是,本研究将该漏洞归类为有限漏洞,因为1.它是偶然发现的,而不是通过任何系统方法发现的; 2.仅是一个实现错误,而不是符合标准的文档功能; 3.严格来说,它不是OOXML中的错误,而是Microsoft Office的XHTML解析器中的错误。

此外,发现将磁盘上的XForms提交文件的功能可以升级为LibreOffice中的代码执行。实现此目的的一种方法是将恶意XML数据提交到LibreOffice本身的配置文件,如下所示。

恶意XML包含新的配置设置(请参见下面),以允许任意宏,然后可以自动启动这些宏,例如,一旦关闭恶意文档,即可执行任意shell命令。

 

0x06 Countermeasures

A.删除不安全的功能

除了基于针对某些攻击的实施修复的短期缓解措施(例如,不允许XForms将数据提交到本地文件)之外,该标准还应删除很少使用的危险功能,例如在文档中包括外部文件的可能性。不幸的是,这取决于用例,并不总是很清楚哪些功能可以归类为“不安全”。例如,宏可用于良性目的,例如将公司的信笺插入文档中以及安装恶意软件。这种关于宏的全有或全无的方法值得商榷。一旦用户允许,它就可以通过设计使代码执行。通常,从安全性的角度来看,OOXML和ODF的功能丰富性是有问题的。作者认为,降低复杂性将使Office文档的安全性和隐私性受益。Microsoft Office和LibreOffice这两个主要的Office套件都可以从包含细化权限系统的现代体系结构中受益。例如,办公应用程序在访问相应的API时应向用户询问网络权限,即使允许使用宏,也应限制其功能(例如,使用沙箱)。

B.默认情况下的隐私

Office套件不应允许文档以静默方式打开网络连接。如果必须完全支持远程内容,则应在与第三方建立任何网络连接之前要求用户进行确认。此外,在默认设置中,应将保存或导出的文档中包含的元数据减少到最小,以防止意外泄露诸如用户名之类的潜在敏感信息。

C.资源限制

一旦解压缩后的数据的总大小超过上限,数据解压缩就应该停止。此缓解策略应由现代办公套件实施,以防止恶意文档消耗所有可用资源。

D.消除歧义

为了应对内容掩盖攻击,需要精确说明要处理和显示文档结构的哪些部分,从而不允许实现为解释提供空间。但是,必须指出的是,消除歧义和边界情况是一项具有挑战性的任务,因为OOXML和ODF标准非常复杂。此外,明确的规范只会保护文档结构,而不会阻止高级条件语句,例如嵌入在电子表格公式或宏,也可能会被滥用以根据某些预定义的条件显示模糊的内容。

 

0x07 Conclusion

OOXML和ODF是功能丰富的办公文档格式。虽然宏等某些精致功能的风险已为大众所熟知,但其他一些安全专家甚至不知道。在这项工作中,对OOXML和ODF提供的危险功能进行了系统分析,并评估了事实上的参考实现,MS Office和LibreOffice。除了提供对基于恶意Office文档的过去攻击的全面调查之外,还提出了各种新颖的方法,例如,基于对合法功能的纯逻辑链利用,导致LibreOffice中的任意代码执行。本文描述了OOXML和ODF的异同,并表明两种文件格式都存在相似的弱点。这种相似性凸显了对安全的现场文件格式的需求,并留下了一个问题,即文件格式是否需要所有这些可能不安全的功能。未来的研究应在规范设计过程中直接解决在此工作中发现的漏洞。

(完)