首页
社区
课程
招聘
[翻译]XML Schema DTD和Entity攻击(一)
2019-1-14 20:27 6049

[翻译]XML Schema DTD和Entity攻击(一)

2019-1-14 20:27
6049

XML Schema DTD和Entity攻击

——版本1.0

Timothy D. Morgan (@ecbftw) Omar Al Ibrahim (oalibrahim@vsecurity.com)

摘要

可扩展标记语言(XML)是在无数的软件项目中使用的一个非常普遍的技术。XML的核心特性是使用架构(schema)和文档类型定义(DTD)定义和验证文档结构。当使用不当时,这些文档的定义和验证功能的某些方面可能会导致使用XML的应用程序中出现安全漏洞。


本文档会提供有关这些攻击的最新参考资料, 并且列举出适用于最流行的XML解析器的所有已知技术,同时对一些新的攻击方式进行研究。


介绍

动机

XML是一种非常流行的标记语言,在20世纪90年代后期首次标准化,并被无数软件项目采用。它用于配置文件,文档格式(如OOXML,ODF,PDF,RSS,...),图像格式(SVG,EXIF hears)和网络协议(WebDAV,CalDAV,XMLRPC,SOAP,XMPP,SAML, XACML,...)。这些例子仅仅触及表面。XML已经普遍到,任何影响XML的弱点或安全漏洞,无论多么微小,都可能对全世界的计算机系统产生严重影响,因为它所使用的环境的多样性和不可预测性。


XML设计中内置的某些功能,即内联架构和文档类型定义(DTD)是潜在安全问题众所周知的来源。尽管已经公开讨论了十多年,但很大一部分使用XML的软件仍然容易受到恶意DTD的攻击。正如人们所期望的那样,任何众所周知但又常见的漏洞类型,都源于这样一个事实,即开发社区内的整体意识仍然很低,而许多XML解析器的行为默认情况下是暴露有风险的特性。本文试图通过提供各种XML架构和DTD攻击的最新参考来解决这些问题。同时,我们希望这带来的任何额外认识将有助于鼓励XML库供应商的开发人员默认禁用最危险的功能,并改进API文档以减轻任何剩余风险。


背景

标准通用标记语言(SGML)是一种用于为文档定义通用标记语言的iso标准技术。该标准(ISO 8879)于1986年推出,源自IBM的早期标记语言(GML),旨在描述文档及其元素的结构,而不考虑如何显示这些元素,因为外观特征可能根据解释器使用的输出媒体和样式首选项而变化。超文本标记语言(HTML)是基于sgml的语言的一个例子,它是用于创建web页面和其他可以在web浏览器中显示的信息的主要标记语言。


HTML用于定义格式化的文档,web浏览器可以将其呈现为可视或有声的web页面。可扩展标记语言(XML)用于定义一种标记语言,该语言为文档的编码规则设置了一种便于传输和存储数据的形式。W3C XML 1.0规范和其他免费开放标准中定义的XML可以看作是SGML的衍生品,与完整的SGML解析器相比,XML的目的是简化解析器的实现。随后,XML通过禁用许多SGML功能(例如支持嵌套子文档或未闭合的开始和结束标记)来支持参考语法的受限子集。由于其轻量级实现,XML目前不仅广泛用于表示文档,而且广泛用于表示web服务调用中的数据结构。因此,开发了许多应用程序编程接口(api)来帮助软件开发人员处理XML数据,并且存在一些模式系统来帮助定义基于XML的语言。


定义SGML系列文档(包括XML)的特殊声明之一是文档类型定义或DTD。DTD是一种声明性语法,用于指定特定类型文档的元素和引用的显示方式。还可以根据一组指定的规则使用DTD检查文档是否格式良好。此外,可以在DTD中声明实体,以定义稍后可在DTD或XML文档中使用的变量(或文本宏)。可以在XML文档中使用各种类型的实体。预定义的实体引用用于特殊字符的助记别名,根据规范,所有XML解析器都需要遵守这些助记别名。常规实体在DTD中定义,并引用在XML文档中使用简单文本替换的内部资源,而外部实体引用驻留在本地文件系统或远程主机中的外部资源。


在解析外部实体的过程中,XML解析器可以根据URL中指定的方案(协议)来查询各种网络协议和服务(DNS,FTP,HTTP,SMB等)。外部实体对于在文档中创建动态引用非常有用,这样对引用资源所做的任何更改都会在文档中自动更新。但是,在处理外部实体时,可以对应用程序发起许多攻击。这些攻击包括泄露本地系统文件,这些文件可能包含密码和私人用户数据等敏感数据,或利用各种方案的网络访问功能来操纵内部应用程序。通过将这些攻击与其他实现缺陷相结合,这些攻击的范围可以扩展到让客户端内存损坏,任意代码执行,甚至服务中断,具体取决于这些攻击的上下文。

现有技术

与某些XML特性相关的风险至少在2002年就已经公开讨论过了。一些观察结果是在xml-dev邮件列表[SABIN]上进行的,几个月后,Gregory Steuck在发给Bugtraq [Steuck]的电子邮件中对各种可能的攻击进行了总结。在此之后不久,Amit Klein就基于实体的拒绝服务攻击提供了研究结果[KLEIN]。


然而,在一段时间内,对XML攻击的其他公共研究似乎逐渐平息,在这一领域发表的漏洞相对较少。目前尚不清楚为什么会这样,但可以推测,最早的XML库已经实现了更安全的默认值,这些默认值在一段时间内保护了应用程序。然而,随着时间的推移,很明显当前最流行的XML库和API默认不再安全,这导致已发布的缺陷和攻击技术的复苏。最近的工作包意识谈话和对传统技术的一些更新,这些是由Sascha Herzog [HERZOG]和Alexander Polyakov使用针对SAP系统[SAP]的gopher URL处理程序进行的XXE攻击。Timur Yunusov和Alexey Osipov最近演示了如何使用参数实体[OOB]实现带外数据提取攻击,并发布了一个工具来帮助自动化这些攻击[XXOETA]。 Timothy Morgan总结了最新的技术,并描述了一种允许将文件上传到易受攻击系统的Java技术[TDM]。


当对更强大的XXE攻击技术的研究活跃起来的时候,发布XXE漏洞的速度似乎也在增加。最近一些值得注意的漏洞包括:Timur Yunusov和Alexey Osipov发现的ModSecurity的[CVE-2013-1915]; Alvaro Munoz发现的Spring框架中的一个漏洞[CVE-2013-4152]; 尼古拉斯·格雷瓜尔(Nicolas Gregoire)最近发现的在Apache Solr [CVE-2013-6407] [CVE-2013-6408]中的漏洞,他在自己的博客[NGB]中描述了这一场景;以及Reginaldo Silva对Facebook上一个XXE漏洞的研究,这为他赢得了一大笔bug赏金。




简述:鸽了一年的我,突然诈尸,新的一年就直接开新坑了,本篇文章是总文的序章,原文等下次的正文再发出来



[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞1
打赏
分享
最新回复 (1)
雪    币: 403
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
DWwinter 2019-1-22 14:03
2
0
手动赞
游客
登录 | 注册 方可回帖
返回