(翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)

时间:2022-01-26 14:45:13

标题:Open Document 和 Open XML安全性(OpenOffice.org and MS Office 2007)

(翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)

  • 摘要,OpenDocumentOpen XML 都是 Office 打开文件的一种新格式。OpenDocumentISO 标准,由 OpenOffice.orgSun StarOffice 推广。Open XMLMicrosoft Office 2007 文档的新格式,即 ECMA 标准。这两种格式具有相同的基本原则:ZIP 存档中的 XML 文件,具有开放模式,与旧的专有格式(MS WordExcelPowerPoint,…)形成对比。 但是,它们都存在许多安全问题,类似于以前的 Office 格式:由于宏,脚本,OLE 对象和类似功能,恶意人员仍然可以嵌入和隐藏恶意软件(特洛伊木马和病毒)。本文介绍了技术细节的安全问题,包括可用于绕过反病毒的 XMLZIP 混淆技术,并描述了如何设计过滤器以安全地去除不需要的部分。

1 简介

  • Office 文件格式一直存在安全问题,主要是因为它们具有丰富的“活动”功能,如宏或 OLE 对象 [SSTIC03],或者因为文档隐藏信息泄漏 [OSSIR03]。最近,安全研究人员更加关注这些格式和相关应用程序,以发现许多实现漏洞 [CVEMSO,CVEOOo]
  • 通常的情况如下:用户收到恶意文档作为电子邮件的附件或通过其他方式。打开此文件会触发宏,对象或漏洞中的某些恶意代码,无论是否有用户交互,结果都可能导致计算机受损。目前由于各种原因,许多用户感觉 OpenOfficeMS Office 2007 比以前的办公套件更安全。
  • 然而,这可能是一种错觉,正如 Eric FiliolSSTIC06 [ESAT1,ESAT2,ESAT3] 中所宣布的那样。例如,在 20066 月,第一个名为 Stardust 的 “概念验证” 病毒表明该威胁对 OpenOffice 是真实存在的。此外,在 OpenOffice 2.0.2 中发现了三个漏洞,允许恶意代码绕过默认安全策略(绕过宏和 Java 沙箱的警告弹出窗口)。
  • Open XML 是一种基于开放标准的新格式,其规范刚刚由 ECMAMicrosoft2006 年发布,尚未发布真正的完整安全性分析。本文重点介绍这些新格式及其相关办公套件带来的一些安全问题,然后提出一些解决方案来保护我们的系统免受威胁。它还表明,ZIPXML 为恶意代码带来了额外的混淆可能性,并强调了绕过防病毒和内容过滤器的警告。
  • 原始出版物可在 www.springerlink.com上获取:www.springerlink.com:http://dx.doi.org/10.1007/s11416-007-0060-2

1.1 注释

这些是用于此分析的产品和版本:

  • OpenDocument 规范 v1.0 [ODSPEC10]。新版本1.1 [ODSPEC11] 尚未分析。

  • OpenOffice v2.2.0

  • 开放的 XML ECMA-376 规范,200612 月发布的最终版本:[OXSPEC]

  • Microsoft Office 2007 版本 12.0.4518.1014

  • 所有测试均在 Windows XP SP2 上执行。

  • 这不是一个完整的安全性分析,一些功能,如加密和数字签名尚未经过彻底测试。此分析侧重于与文件格式和应用程序的功能相关联的安全问题。目标不是找到缓冲区溢出等漏洞。这篇文章的研究工作始于法国的 DGA / CELAR。这项工作的早期版本于 200611 月的 PEPEC 安全会议上发布[PACSEC06],然后在 20076 月的 SSTIC 安全会议上以法语发布 [SSTIC07]。在本文档中,OpenOffice.org 可能被称为 "OpenOffice""OOo",以及 Microsoft Office "MS Office" 或简称为 "Office"

2 两种新的 “开放” 格式

  • OpenDocument v1OpenOffice v2 使用的开放格式。它也被其他办公应用程序使用,如 Sun StarOfficeKofficeAbiword。自 20065 月以来,OpenDocument 已成为 ISO 标准。Office 2007200612 月首次发布的 Microsoft Office 的新版本。产品中有许多变化,例如用户界面和文件格式。Open XMLMS Office 主应用程序的新默认格式:WordExcelPowerPoint。它是自 2006 年底以来的 ECMA 标准,并且逐渐成为 ISO 标准。

OpenDocument 和 Open XML 共享类似的特性:

  • 它们都基于开放的文件格式并且被广泛使用:文档主要由压缩 ZIP 存档中的 XML 文件组成。
  • 它们的规范是开放的,可在互联网上免费获取:[ODSPEC10,ODSPEC11,OXSPEC]
  • 它们都被国际机构接受为标准:OpenDocumentISOOpen XML 的 ECMA
  • 它们都处理常见的办公文档格式:文本,电子表格,演示文稿,矢量绘图。

通过更密切地研究已发布的规范,可以突出一些差异:

  • Open XML 结构比 OpenDocument 更复杂,功能更丰富。微软的目标是处理其 Office 套件的所有现有功能;而 OpenDocument 更像是一种文档模型。
  • OpenDocument 规范仅 700 页长,而 Open XML 达到了 6045 页!
  • Open XML 规范中有许多有趣的功能还未涉及安全,如 VBA 宏,OLE 对象或加密。根据 [ECMA]15 页,MicrosoftECMA 将这些功能视为超出 Open XML 标准范围的专有技术。因此,MS Office 生成的 Open XML 文件格式未完全公开,标准应仅被视为文件格式的子集。在实践中,防病毒和内容分析过滤器必须处理整个格式,包括这些未指定的专有功能。
  • OpenDocument 规范尚未完成,因为这仍然是一项正在进行的工作,而不是为了保护技术不被泄漏。可以在其他文档中找到有关安全功能的更多信息,并且可以获得 OpenOffice.org 的完整源代码。
  • 与专有文件格式相比,OpenDocumentOpen XML 的安全性分析由于其开放状态而更加容易。然而,他们的规格的复杂性和缺乏一些细节并没有使过于简单。

3 关于漏洞利用的几句话

  • 如今,有关 Office 文档的最常见威胁并未涉及到宏或 OLE 对象,而是基于办公套件 [CVEMSO,CVEOOo] 中的漏洞。由于 OpenDocumentOpen XML 由结构化且定义良好的 XML 而不是二进制数据组成,因此可以假设与格式解码相关联的漏洞的可能性要小得多。此外,如果办公室应用程序使用严格的 XML 模式来验证数据,则格式错误的文档不应该能够触发潜在的漏洞。但是,OpenDocumentOpen XML 不仅包含 XML:二进制部分(如位图图片和 OLE 对象)仍然存在 Office 套件还依赖外部库来处理某些类型的数据,这些库可能很容易受到攻击。 另一个问题是,由于其开放的规范,将创建许多第三方应用程序来处理这些格式。由于格式不是那么简单,可以猜测在这些应用程序中也会发现漏洞。

4 OpenDocument 和 OpenOffice.org

4.1 OpenDocument 格式

  • 当前的 OpenDocument 规范 [ODSPEC11] 仅涵盖 OpenOffice v2 套件处理的各种文件格式的子集。仅描述了文本文档,电子表格,演示文稿和矢量绘图。 尽管其他文档类型(如数据库,HTML 模板和数学公式)共享非常相似的结构。下表显示了与 OpenOffice v1v2 使用的大多数本机格式关联的扩展。OpenDocument 规范中描述的格式以粗体突出显示。

    (翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)

4.2 内部结构

  • 每个文档都存储在 ZIP 压缩存档中。它基本上由几个 XML 文件组成,这些文件位于存档的根目录或子目录中。以下是常见文档中的主要 XML 文件:
	 -  content.xml:文档正文
- styles.xml:样式数据
- meta.xml:元数据(作者,标题,...)
- settings.xml:文档的 OOo 设置
- META-INF / manifest.xml:文件描述
  • 请注意,其他非 XML 文件也可能存储在存档中:
	 - 图片和缩略图:JPEG,PNG,SVG等
- 嵌入式图表/图纸/文档,OLE 对象

4.3 宏

  • 最重要的安全问题涉及宏。OpenOffice v2 提供了 4 种不同的语言来编写宏:BasicJavaScriptJavaBeanshell)和 Python。将来可能会添加更多语言。常规的 OpenOffice 安装包含这些解释器或依赖于JVMJava 虚拟机)之类的外部解释器。
  • 每种宏语言都可以访问一个名为 UNO(通用网络对象)的非常强大的 API,它可以在操作系统上运行。因此,可以编写有效的恶意软件。此外,宏可以分配给事件,并且可以在打开或读取文档时自动启动。
  • 2006 年以来,反病毒厂商已经报告了至少 3 次使用 OpenDocument 宏编写病毒的尝试:StardustStarbugsBadBunny。但是,他们都没有能力在没有用户确认的情况下运行。
  • 为了保护用户免受恶意宏的攻击,OpenOffice 提供了 4 个安全级别,与 MS Office 2000/XP/2003 非常相似:
	 - 低(要避免):完全没有保护。
- 中(默认):用户可以在访问文档之前启用宏(简单弹出警告)。
- 高:仅允许签名的宏或受信任的目录。 如果已接受签名授权或来自受信任位置,则不会发出警告。
- 非常高:只有受信任的位置,没有签名,没有警告

(翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)

  • 默认级别为中等,因此如果文档中有宏,则弹出窗口会询问用户是否要在允许查看文件内容之前启用或禁用宏。

    (翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)
  • 请注意,这与 MS Office 97 中的默认级别相同。自 2000 版以来,MS Office 默认级别已更改为高,并且只有签名的宏才有权运行。
  • 但是,在 20079 月安排的下一版 OpenOffice v2.3 中,默认安全级别应更改为 “高”。
  • 2006 年中期,在 OpenOffice 2.0.2 中发现了一个弱点(并且从那时起被修复),这可能允许攻击者绕过宏安全警告
  • 宏存储:宏文件位于 OpenDocument 文件中的 2 个不同子目录中:
	 - 基本宏存储在存档的 “基本” 目录中的 XML 文件中。
- Java(Beanshell),JavaScript 和 Python 宏存储在脚本文件的 “Scripts” 目录中。
  • 例子:
	 -  Basic / Standard / Module1.xml
- Scripts / beanshell / Library1 / MyMacro.bsh
- Scripts / javascript / Library1 / MyMacro.js
- Scripts / python / MyMacro.py
  • 使用 OpenOffice v2,可以从 BasicJavaJavascript 的应用程序创建和编辑宏。目前,Python宏仍然需要手动操作(参见 [OSFP]):在归档中包含文件,并编辑 manifest.xml
  • 宏签名:ESAT 研究人员发现的主要问题之一是宏未与文档的其余部分签名。然后可以修改签名文档中的宏,并欺骗那些认为他正在打开真实文档的用户 [ESAT1,ESAT2,ESAT3]
  • VBA 宏:从版本 2 开始,OpenOffice 已经能够读取 MS Office 文档中的 VBA 宏源代码。目前,无法从 OpenOffice 实际运行 VBA 宏。
  • MS Office 文档转换为 OpenDocument 格式时,VBA 宏以明文形式存储在 OOo Basic 宏的注释中。因此,即使没有活动代码,文档也会触发与普通宏相同的警告。但是,如果将文档转换回 MS Office 格式,则会重新激活 VBA 宏。
  • 正在进行的工作是使用 UNO 包装器从 OpenOffice 提供本机 VBA 宏支持。 2007 年,一些替代版本已经为 Excel 宏提供了有限的支持。

4.4 OLE对象

  • 在宏之后,第二个主要的安全问题涉及嵌入的 OLE 对象。 可以在 OpenDocument 文件中存储多种类型的 OLE 对象,并至少在 Windows 上能打开它们。
  • OLE 对象通常以 Microsoft OLE2 格式(也称为结构化存储)存储在归档根目录中名为 “Object xxx” 的二进制文件中。 因此,即使 OpenDocument 是一种开放格式,它也可以保存封闭格式的部分。
  • 最危险的 OLE 对象类型是 OLE 包:它可能包含任何文件,包括可执行文件或任何命令行。 如果用户双击该对象,则弹出警告后系统将启动该文件或命令。
  • 打开 OLE 包对象之前的警告仅来自 Windowspackager.exe),而不是来自 OpenOffice。 因此,这可能是旧 Windows 系统上的一个重大安全问题。 例如,在 Windows 2000 SP4 上,根本没有警告。
  • 此外,2006 年在 Windows XP2003 [MS06-065] 中发现了一个漏洞,可以诱骗用户启动命令行。 只需在命令行的末尾添加斜杠和文件名,OLE 包对象就会显示为无害的文本文件。 这是一个例子:
	cmd.exe /c [...malicious commands...] /joke.txt

4.5 脚本

  • 可以使用 JavascriptVBscript 语言在文档中嵌入 HTML 脚本。 这些不是由 OpenOffice 直接运行的。 但是,如果文档保存为 HTML,则它们可能由浏览器启动,并且可以触发漏洞利用。 脚本存储在 content.xml 中的 <text:script> 标记中,例如:
	<text:script script:language=”JavaScript”>
alert(&quot;test script&quot;);
</text:script>
  • 脚本的源代码可以直接包含在标记中,也可以放在外部脚本文件中,由 “xlink:href” 属性引用。

4.6 Java 小程序

  • 也可以在文档中存储 Java 小程序。 这与用 Java 语言编写的宏不同。 这些编译的 appletOpenOffice 内部的 Java 沙箱中运行。 由于沙盒,恶意 applet 无法做有害的事情。 但是,如果存在漏洞,有时可以避开沙箱,就像 OpenOffice 2.0.2 中的情况一样。

4.7 URL 链接

  • 文档可以包含 URL 链接。 当用户单击它们时,如果是外部 URLOpenOffice 将使用提供的地址打开浏览器。 希望似乎不可能以这种方式启动 javascriptvbscript URL,因为以 “javascript:...”“vbscript:...” 开头的 URL 被过滤掉了。
  • 但是,如果浏览器已在敏感 Web 应用程序中进行了身份验证,则仍可能将用户定向到恶意网站,或启动 XSRF 攻击(跨站点请求伪造,[XSRF])。
  • 此外,最近在 OpenOffice v2.1 中发现的漏洞使得在 LinuxSolaris 上执行本地命令成为可能,方法是在 URL [OOoURL] 中插入 shell 的转义字符。

4.8 隐藏数据 - 信息泄露

  • 就像 MS Office 一样,OpenDocument 文件可能会向用户隐藏敏感数据:元数据,隐藏文本,注释,修订标记等…当文档在 Internet 上发布或发送到公司网络外时,这可能会成为一个问题。
  • 为解决此问题,OpenOffice 提供了一些有趣的功能,可在签名,导出为 PDF 或保存时警告隐藏信息。 但是,这在所有情况下都不够,因为这不包括可能隐藏在 OLE 对象中的数据。

    (翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)

4.9关于 OpenDocument / OpenOffice 安全性的结论

  • 有许多方法可以将活动内容包含到 OpenDocument 文件中,并可能启动恶意代码。 即使有一些保护可以避免这种情况,但它们都不是绝对安全的。 此外,现在在 OpenOffice [CVEOOo] 中经常发现漏洞,这需要保持警惕并经常更新软件。
  • 即使 OpenDocument 是一种开放格式,文件有时也可能包含封闭格式的部分,例如 Microsoft OLE 对象。 总之,可以说 OpenOffice 并不比 Microsoft Office 更安全或更不安全。 我们已经看到,我们可以在恶意软件或隐藏数据中发现类似的安全问题。 当然有一些差异,某些功能在一种产品中比另一种更安全。
  • 但是,分析和过滤 OpenDocument 格式的活动内容或隐藏数据要比通常的专有办公格式简单得多。

5 Open XML 和 Microsoft Office 2007

  • Open XML 是主要 MS Office 2007 应用程序的新默认文件格式:WordExcelPowerPointOpen XML 文件有新的扩展:
	– Word: .docx, .docm, .dotx, .dotm
– Excel: .xlsx, .xlsm, .xltx, .xltm, .xlsb, .xlam
– PowerPoint: .pptx, .pptm, .ppsx, .ppsm
– Access: .accdb (new binary format, not Open XML)
  • 由于 “兼容模式”,以前的 Office 版本(OLE2)中的旧二进制格式仍然可以读取和写入。 转换器包也可以免费从 MS Office 2000XP2003 读取和写入 Open XML 文档。如果安装了转换器包,下面描述的大多数问题都与这些版本有关。

5.1 打开 XML 结构

  • 基本上,Open XML 文档是一个 ZIP 压缩存档,其 XML 文件就像 OpenDocument 一样。 但是,结构稍微复杂一些。 它遵循新的 Microsoft Open Packaging Conventions,或 OPC(参见 [OXSPEC]2 部分),由其他格式共享,如 XPS [XPS]XPS 是一种类似于 PDF 的新 Microsoft 格式)。
  • OPC 存档中,每个数据文件称为一个部件。 每个部分的类型在归档的根目录下的文件 “[Content_Types] .xml” 中描述。 还有 “.rels” 文件存储零件之间的间接关系。 与 OpenDocument 不同,没有直接的关系。
  • Open XML 文档中,数据存储在多个 XML 文件中,这些文件对于每个应用程序都是不同的。 以下是 Word 文档的示例:
	 -  word/document.xml:文档正文
- word/styles.xml:样式数据
- word/settings.xml:文档的设置
- docProps/app.xml 和 core.xml:元数据(作者,标题,...)
  • 可能还有可选的二进制文件:
	 - 图片和其他媒体:JPEG,PNG,GIF,TIFF,WMF,......
- OLE对象,VBA宏,打印机设置,......

5.2 VBA宏

  • 至于 OpenDocument,主要的安全问题是 Open XML 文档可能包含宏,这些宏提供了足够的功能来编写有效的恶意代码。 这些是 VBA 宏,就像以前的 MS Office 格式一样。
  • 一个很大的变化是 MS Office 2007 将 “正常” 与 “启用宏” 的文档区分开来。 普通文档以 “X” 结尾(例如 DOCXXLSXPPTX),不能包含宏。 要在文档中存储宏,必须以 “宏启用” 格式保存,该格式以 “M” 结尾(例如 DOCMXLSMPPTM)。
  • 如果 DOCM 文件重命名为 DOCX,则 Office 2007 将拒绝该文件为“已损坏”。
  • 安全级别:Office 2007 宏安全性也发生了很大变化。
  • 在以前的 Office 版本中,默认情况下,用户只能启动已签名或可信任的宏,因为默认情况下 “高安全性” 模式处于启用状态。
  • Office 2007 中,没有更多中等或高安全级别。 新的默认级别称为 “禁用带通知的所有宏”。 新的信任中心还提供了新的其他级别,这是设置所有安全参数的中心位置。

    (翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)
  • 每当用户打开包含宏的文档时,都会显示内容,禁用宏,并在“功能区”下显示警告消息。

    (翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)
  • 通过单击此消息,用户可以获得一个窗口,允许他启用已签名的宏。

    (翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)
  • 然后,新的默认安全级别允许用户在没有仔细阅读所有警告消息的情况下,通过 3 次单击启动未签名的宏。此外,在决定启用宏之前,可以阅读文档,这提供了一些社会工程可能性。
  • 宏存储:VBA 宏存储在名为 vbaProject.bin 的文件中,存档中的路径取决于应用程序:
	– Word: word/vbaProject.bin
– Excel: xl/vbaProject.bin
– PowerPoint: ppt/vbaProject.bin
  • 这是一个使用 Microsoft OLE2 格式(结构化存储)的二进制文件,这在当前的 Open XML 规范[OXSPEC] 中没有描述。
  • 如果宏具有特定名称,例如 Word“Document_Open”,则可能在打开文档时自动触发。

5.3 OLE对象

  • OpenDocument 和以前的 Office 版本一样,可以在具有相同安全性问题的 Open XML 文档中存储 OLE 对象。
  • 这些对象通常根据应用程序以其原始格式存储在存档中的各个位置:例如 Word“word/embeddings”。 使用二进制 OLE2 格式存储 OLE 包对象。
  • 与宏一样,当前的 Open XML 规范中没有描述 OLE 对象存储。
  • 有些情况会导致奇怪的结果。 例如,可以将带有宏(.xlsm)的 Excel 工作簿作为对象存储在没有宏(.docx)的普通 Word 文档中。 打开 Word 文档时没有警告。 但是,只要用户激活 Excel 对象,就会出现一个弹出窗口,询问是否应该启用宏。 即使安全级别是 “禁用所有没有通知的宏”,情况总是如此…

5.4 Excel 2007 二进制工作簿

  • Excel 2007 可以将工作簿保存为混合的 Open XML 格式,称为“二进制工作簿”,扩展名为 “.xlsb”。 这种格式非常接近 Open XML,除了部分数据存储在二进制文件而不是 XML 中。 这种未记录的格式看起来像以前的 Excel 版本使用的 BIFF8。二进制工作簿可能包含宏。

5.5 隐藏数据 - 信息泄露

  • Office 2007 提供了一个名为 “文档检查器” 的新工具,用于检测和删除文档中的多种类型的隐藏数据。 它是 RHDTool 的改进版本,可以与 Office 2003 一起安装。
  • 这当然是一个非常有趣的功能。 就像 OpenOffice 一样,OLE 对象不会被检测为潜在的隐藏数据,因此结果并不总是完全准确。

    (翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)

5.6 关于 Open XML 和 MS Office 2007 安全性的结论

  • 根据此分析,新的 Open XML 格式与以前的 Office 二进制格式具有相同的恶意代码和隐藏数据安全问题。 对于某些方面(如宏),默认安全设置甚至可能比以前更加宽松。
  • 即使 Open XML 基于开放规范,Microsoft Office 2007 生成的文档也可能包含一些专有的非文档格式(例如 MS OLE2BIFF),这些部分通常对安全问题很重要。 此外,一些主要功能(如宏)不是 Open XML 规范的一部分,因此从安全角度来看,实际格式不能被视为100%开放。
  • OpenDocument 一样,Open XML 比封闭格式更容易分析和过滤; 然而,它的内部结构更复杂,需要更复杂的处理。

6 如何防范这些安全问题

  • 有两种主要的互补技术解决方案可以保护系统免受因办公文档导致的恶意内容和信息泄漏:
	 - 加强办公套件的安全设置
- 过滤网关或可移动设备上的文档
  • 我们没有提到组织解决方案,例如可以通过文档更好地告知用户恶意内容和信息泄漏。

6.1 OpenOffice 和 MS Office 2007 的安全设置

  • 以下是根据需要改进两个办公套件的安全设置的一些通用原则
	 - 当然,如果可能的话,首先应用安全更新。
- 根据用户的实际需要,将宏和 ActiveX 安全级别加强到最高位置。
- 如果需要宏,请使用带有公司 PKI 的数字签名。 如果不可能,请仔细设置使用受信任的目录。(避免使用自签名证书,个人使用除外)
- 如果未使用,则禁用所有受信任的目录。 至少禁用用户具有写访问权限的那些。
- 防止很少使用的OLE包对象:禁止使用文件权限执行 “C:\Windows\System32\Packager.exe”。

MS Office 2007的特定设置:

	 - 禁用通知消息,以避免使用未签名的宏。
- 或者,通过设置此注册表项,甚至可以禁用 VBA 引擎,但功能有所损失:HKLM\SOFTWARE\Microsoft\Office\12.0\Common\VBAOff = 1
- 在网络上部署安全设置以改进管理任务,例如使用 GPO。在 Microsoft 网站上查找 “2007 Office System 管理模板” 以获取模板。
- 如果无法做到这一点,例如在独立工作站上,请使用 HKLM 注册表项或文件/注册表权限保护安全设置,以便用户无法修改它们。可以在上述模板中找到 Office 2007 的 HKLM 和 HKCU 注册表项。与以前的 Office 版本不同,似乎并非所有安全设置都可以使用 HKLM 密钥进行保护。例如,用户可以在 HKCU 中修改宏安全级别,除非设置注册表权限以避免它。
- 有关详细信息,Microsoft 提供了一些文档,其中包含以下建议:http://go.microsoft.com/fwlink/ LinkID=85671
  • OpenOffice 的特定设置:对于 OpenOffice,宏安全级别等安全设置位于 XML 文件(.xcu)和其他设置中。 首先从应用程序目录(Program Files)中的 XCU 文件中读取全局设置,然后从用户配置文件(Documents and Settings)中读取用户特定的设置。 还可以将一些设置存储在 LDAP 目录中,以便在网络上轻松部署它们。
  • 默认情况下,用户可以覆盖其个人资料中的任何设置。 但是,可以通过向 XCU 文件中的 XML 标记添加 “finalized”“mandatory” 属性来保护所选设置免受用户错误的影响。
  • 例如,可以通过将以下行添加到文件 Common.xcu(在 Program Files\OpenOffice.org 2.2\share\registry\data\org\openoffice\Office\ 中)来禁用对所有用户的宏支持。 这还将隐藏应用程序中的宏安全设置。
	<node oor:name="Security">
<node oor:name="Scripting">
<prop oor:name="MacroSecurityLevel" oor:type="xs:int" oor:finalized="true" oor:mandatory="true">
<value>3</value>
</prop>
<prop oor:name="DisableMacrosExecution" oor:type="xs:boolean"oor:finalized="true" oor:mandatory="true"
<value>true</value>
</prop>
</node>
</node>
  • 请注意,这并不意味着在高度敏感的系统上获得完全受信任的 OpenOffice 配置,因为高级用户通常能够从备用目录运行应用程序或通过编辑某些文件来覆盖设置。 但是,此保护始终优于默认设置。
  • 目前,没有已知的工具,也没有全面的文档来帮助管理员设置安全设置。 发现可用设置的最佳方法是查看位于 Program Files\OpenOffice.org 2.2\share\registry\schema\org\openoffice\ 中的 XCS 文件,尤其是 Common.xcs。 标签 <group oor:name =“Security”> 包含大多数安全设置以及有关其效果的注释。 以下是为 OpenOffice 宏选择安全设置的决策树示例:

    (翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)

6.2 过滤文件 - 内容分析和防病毒

  • 可以在网关(用于电子邮件,Web,文件传输…)或可移动设备上过滤文档。 它可以包括通常的防病毒分析或更复杂的过滤过程。 此类过程的一个示例是从文档(宏,脚本,OLE 对象,…)或隐藏数据中删除所有活动内容。
  • 由于 OpenDocumentOpen XML 都使用 ZIPXML 等标准技术,因此可以假设使用常用工具和库可以轻松分析和过滤这些格式。 实际上,可以很容易地找到所有活动元素,例如宏和对象。
  • OpenDocument 的示例过滤器:要删除所有活动内容:
	 - 宏:删除 Basic 和 Scripts 目录中的任何文件。
- OLE 对象:删除名称以 “Object” 开头的任何文件。
- 在 content.xml 中:
•删除 OLE 对象:<draw:object-ole>
•删除脚本:<text:script>
•删除小程序:<draw:applet>
•更新链接到宏的任何标记,例如:<office:event-listeners>
  • Open XML的示例过滤器:要删除所有活动内容:
	 - 宏:删除任何文件 “vbaProject.bin” 和 “vbaData.xml”
- OLE 对象:删除任何文件 “* .bin”
  • 用于 OpenDocumentOpen XML 的非常简单的过滤器:这是 Python 中一个非常简单的过滤器,它只删除文档中潜在的活动文件。

    (翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)

6.3 绕过防病毒和过滤器

  • 正如我们所看到的,使用常见的 ZIP 工具和库或 XML 文件中基于文本的搜索,使用简单的技术分析或过滤这些开放格式是非常诱人的。
  • 但是,攻击者可能会以多种方式模糊恶意内容以绕过过滤网关或防病毒软件。 为此,只需使用办公套件,XMLZIP 格式的本机功能。 以下是一些潜在的混淆技巧:
  • 使用宏重命名 Open XML 文档: 首先,仅使用文件扩展名来过滤掉带有宏的 Open XML 文档是不可靠的。 即使 “.docx” 文件永远不能包含宏,如果在网关上阻止 “.docm”,也始终可以将 “.docm” 文档重命名为 “.doc”
  • 重命名 OpenDocument 宏: 可以在 OpenDocument 存档中重命名包含宏的文件,以将 .xml.bsh.js.py 替换为任何其他扩展名。 为此,只需编辑 manifest.xmlcontent.xml 即可更改指向宏文件的链接。 总之,文件扩展名不是检测 OpenDocument 中的宏的好标准。 希望目录 “Basic”“Scripts” 在当前实现中具有固定名称,并且它们仅包含与宏相关的文件,因此这是一种检测或删除宏的安全方法。
  • 在 Open XML 中重命名 VBA 宏: 由于 Open XML(OPC)的模块化结构,可以重命名包含任何名称的宏的文件 “vbaProject.bin”。 例如,在 Word 文档中:
	 - 将 “vbaProject.bin” 重命名为 “no_macros_here.txt”
- 更新 “word/_rels/document.xml.rels” 中的关系
- 在 n “[Content_Types].xml” 中,将 “bin” 替换为 “txt”
  • 这种简单的操作允许绕过上面显示的 Python 过滤器,保持宏活动。 因此,不可能依赖文件名来检测 Open XML 中的宏。 更安全的解决方案是使用真正的 XML 解析器来检测 [Content_Types] .xml(或 OLE 对象的 “oleObject”)中的 “vbaProject”“vbaData” 部分。 另一种解决方案是分析每个文件内容,寻找具有潜在误报的二进制 OLE2 标头。
  • Open XML - US-ASCII 编码和 “混淆位”:Internet Explorer(参见 [IEASCII])一样,Office 2007 处理 “USASCII” 编码相当奇怪:所有 ASCII 码大于 127 的字符在 XML 之前只删除了它们的第 8 位内容被解析。 因此,此行为允许对过滤器/防病毒进行非常简单的混淆,而不会检查它。 以下是 <HIDDENTAG> 标记被混淆的示例:
	<?xml version="1.0" encoding="us-ascii" standalone="yes"?>
1/4HIDDENTAG3/4 malware[...] 1/4/HIDDENTAG3/4
  • 注意:在此示例中,“1/4”“3/4” 分别表示 ASCII188190 的字符。
  • Open XML - UTF-7 编码:遵循相同的原则,可以使用 UTF-7 编码和替代字符表示来隐藏 XML 标记。 现在禁止使用 UTF 编码,但 Office 2007 允许它(就像 Internet Explorer 一样)。 这是一个例子:
	<?xml version="1.0" encoding="UTF-7" standalone="yes"?>
+ADw-HIDDENTAG+AD4- malware[...] +ADw-/HIDDENTAG+AD4-
  • 但是,Open XML 规范 [OXSPEC] 明确指出 XML 文件中只允许使用 UTF-8UTF-16。 可以注意到,OpenOffice XML 解析器不允许这些混淆。
  • 格式错误的 ZIP 存档 - 重复文件名: 在标准 ZIP 存档中,文件名在 2 个位置,存档末尾的*目录和每个文件内容之前的标题中重复。 文件大小和其他信息也是如此。 通过仅修改其中一个文件名,可以创建格式错误的 ZIP 存档。 许多应用程序不检查这些名称的一致性,有些仅依赖于一个位置或另一个位置。 以下是此类格式错误的 ZIP 存档的示例:

    (翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)
  • OpenOffice 仅依赖于中心目录。 如果过滤器或防病毒软件只读取文件头,则可以使用此技术欺骗它。
  • MS Office 2007 检查 2 个文件名之间的一致性。 但是,如果它检测到任何问题,它会询问用户是否应该修复该文件。 奇怪的是,文件总是被修复,以便无论头部或中心目录是否已更改,宏都可以保持可执行! 然后,可以使用此技术绕过任何仅依赖于其中一个文件名的过滤器/防病毒软件。
  • Zip64 压缩: ZIP 格式在过去几年中得到了改进,以增加档案的最大大小和压缩率。 Open XML 规范明确允许使用新的 Zip64 格式; 因此,如果某些过滤器/防病毒软件无法正确处理此格式,则可以绕过这些过滤器/防病毒软件。
  • 强大的过滤器或防病毒软件的建议:OpenDocumentOpen XML 分析不能被视为一项简单的任务,即使这些是基于 ZIPXML 的开放格式。 以下是检查安全分析的一些重要事实:
	 - 使用强大的 ZIP 库,能够检测格式错误的档案。
- 在 ZIP 存档中,拒绝*目录和文件头之间的任何不一致。
- 使用不区分大小写的函数来处理 ZIP 存档中的文件名和路径。
- 拒绝库不支持其格式的任何 ZIP 存档,或者规范不允许的任何 ZIP 存档:Zip64,新压缩算法,加密,......
- 始终使用完整而强大的 XML 解析器。 切勿对 XML 文件使用简单的文本搜索或正则表达式。
•Open XML 解析尤其复杂,因为它需要遵循 OPC 原则(Open Packaging Conventions,参见 [OXSPEC]第 2 部分)对 XML 数据进行更深入的分析。
- 检查 XML 文件编码:拒绝规范不允许的任何编码,并使用严格解码模式拒绝任何异常字符。
- 如果可能,请利用具有开放规范的供应商提供的 XML 模式。
- 拒绝文档的内部结构和文件名之间的任何不一致。(例如,Open XML 文档永远不应该命名为 “.doc”)

7 结论

  • 新的办公格式 OpenDocumentOpen XML 都非常有前途,从安全的角度来看,它们的开放规范非常有用。 活动内容和隐藏数据过滤比以前容易得多。
  • 然而,他们仍然遭受与以前的专有格式相同的安全问题,并且没有真正的理由感到更安全。 这些格式或办公套件的一些新功能甚至可能会增加安全性问题,例如 XMLZIP 混淆技术
  • 可以猜测,在所有防病毒和内容分析软件能够安全地处理 OpenDocumentOpen XML 之前需要一些时间。 本文提出了一些改进这些格式分析的想法。

参考

[ESAT1] 使用 OpenOffice.org 文档深入分析病毒威胁,DeDrézigué,Fizaine,Hansma(ESAT),计算机病毒学杂志,2006 年 http://www.springerlink.com/content/17729904/?k=openoffice

[ESAT2] Le risque virus sous OpenOffice 2.0.x,Filiol,Fizaine(ESAT),MISC magazinen˚27,09/ 2006。

[FSECURE] OpenOffice 安全,S. Rautiainen(F-Secure),VB2003 会议,http//www.fsecure.com/weblog/archives/openoffice_security.pdf

[PACSEC06] OpenOffice / OpenDocument 和 MS Open XML 安全,P. Lagadec ,PacSec 2006 大会,http://pacsec.jp/psj06archive.html

[SSTIC07] Sécuritédes 格式 OpenDocument et Open XML,P。Lagadec,http ://actes.sstic.org/SSTIC07/Securite_OpenDocument_OpenXML/

[ECMA] Ecma International,国家机构对 ISO / IEC DIS 29500(ECMA-376)“办公室开放 XML 文件格式 ”快速通道选票的 30 天评论的评论,Ecma / TC45 / 2007/006,http://www.ecmainternational.org/news/TC45_current_work/Ecma%20responses.pdf

[SSTIC03] Formats de fichiers et code malveillant,P。Lagadec,SSTIC03,http://actes.sstic.org/SSTIC03/Formats_de_fichiers/

[CVEMSO] 常见漏洞和曝光,关键词 “Microsoft Office”,http://cve.mitre.org/cgibin/cvekey.cgi keyword=microsoft+office

[CVEOOo] 常见漏洞与披露,关键词 “OpenOffice”,http://cve.mitre.org/cgi-bin/cvekey.cgi keyword=openoffice

[ESAT3] 分析 du risque virus sous OpenOffice.org 2.0.x,E。Filiol(ESAT),臀部会议 SSTIC06,http ://actes.sstic.org/SSTIC06/Rump_sessions/SSTIC06-rump-Filiol Risque_viral_sous_OpenOffice.pdf

[OOoURL] OpenOffice.org URL 处理安全漏洞(Linux / Solaris),http://www.openoffice.org/security/CVE-2007-0239.html

[XSRF] 跨站请求伪造,*,http://en.wikipedia.org/wiki/XSRF

[OSSIR03] La fuite d’informations dans lesdocumentspropriétaires,P。Chambet(EdelWeb),Eric Filiol(ESAT),E。Detoisien,OSSIR 6/10/2003,http ://www.ossir.org/windows/supports/2003/2003-10-06/OSSIR Fuite%20infos.pdf

[ODSPEC10] Office应用程序的开放文档格式(OpenDocument)v1.0,OASIS 标准,2005 年 5 月 1 日,http://docs.oasisopen.org/office/v1.0/OpenDocument-v1.0-os.pdf

[ODSPEC11] Office 应用程序的开放文档格式(OpenDocument)v1.1,OASIS标准,2007年2月1日,http://docs.oasisopen.org/office/v1.1/OpenDocument-v1.1.pdf

[OXSPEC] Office Open XML文件格式 - 标准 ECMA-376,http://www.ecma international.org/publications/standards/Ecma376.htm

[OSFP] OOo 脚本框架和 Python,http://udk.openoffice.org/python/scriptingframework/index.html

[OOoPy] OOoPy,用于编辑 OpenDocument 的 Python 模块,http://ooopy.sourceforge.net

[MS06-065] Secunia MS06-065 咨询,http://secunia.com/advisories/20717

[XPS] Microsoft XML Paper Specification - XPS,http://www.microsoft.com/whdc/xps/default.mspx

[IEASCII] http://www.securityfocus.com/archive/1/437948