APP下载

基于HTTP协议Host头二义性问题带来的一种漏洞挖掘新思路

2017-03-10李文皓李斌勇

网络空间安全 2017年1期
关键词:通信协议网络安全

李文皓++李斌勇

【 摘 要 】 针对HTTP协议Host头二义性的相关安全问题,深入分析了近期互联网络上与HTTP协议有关的已知与潜在漏洞。围绕这些漏洞,分析并发现了其本质是因RFC的制定与具体实施之间的差异所致。利用所造成上述差异的问题本质,在此基础上创新性地提出了一种重新组合与利用的漏洞挖掘新思路。论文所提出的这种漏洞挖掘新思路,对网络安全研究人员发现与挖掘新的安全漏洞,具有可行的参考意义。

【 关键词 】 通信协议;二义性;网络安全;漏洞挖掘

【 中图分类号 】 TP393

【 文献标识码 】 A

A Novel Method of Vulnerability Detection Based on Multiple Host Ambiguities in HTTP

Li Wen-hao Li Bin-yong

(Chengdu University of Information Technology,College of Information Security Engineering SichuanChengdu 610225)

【 Abstract 】 Aiming at understanding the security issues related to multiple host ambiguities in HTTP, an in-depth analysis is carried out on the recent vulnerabilities caused by the flaws of HTTP protocol which are revealed and potentially exist on the Internet. According to the research, the differences between specifications and implementations of RFC essentially contribute to the problem. A novel method of vulnerability detection by reforming and exploiting the flaws is creatively put forward. The method mentioned in this paper carries some practical significance for security researchers to find the new potential vulnerabilities in cyberspace.

【 Keywords 】 communication protocol; ambiguity; network security;vulnerability detection

1 引言

HTTP(Hyper Text Transfer Protocol,超文本传输协议)位于应用层,是用于WWW服务器传输到用户本地浏览器的无状态传送协议。服务器、浏览器以及相关Web应用的通信无不依赖于HTTP协议[1]。RFC(Request For Comments)是一系列以编号排定的文件,基本的互联网通信协议在RFC中均有详细的说明描述。而在RFC2616中定义了目前Web世界中最广泛使用的HTTP/1.1。

最近,清華大学、Berkeley大学以及华为安全人员研究发现[2]:在HTTP协议具体实施中,因没有严格去遵循RFC中相关定义,HTTP协议中的Host头具有二义性,从而造成了一系列安全问题。针对该问题,研究人员向相关网络安全机构报告了该问题。

本文旨在从Web安全人员的角度来分析上述文献中所提到的问题以及其所带来的一种新的漏洞挖掘思路。尤其是从网络安全渗透测试的角度来分析该安全问题的具体威胁与利用场景,以便引起业界对该安全问题的关注。

2 Host头的二义性

为了深入剖析Host头,首先需要明确HTTP的报文结构及其各结构要素的意义。通常HTTP的报文都有一条来自客户端的请求或者一条来自服务端的响应。而这两者分别由起始行、首部、主体三部分构成。起始行的作用是对报文的一个描述,而首部则包含了一些属性,主体则是包含着所要传递的数据信息。这里需要着重关注请求报文的首部,因Host头就在请求首部中。就请求首部中的Host头而言,其主要用于描述接收请求的服务器及其相应端口(若无端口信息,对于HTTP URL来说便是80端口)。其实,根据RFC2616协议的“5.2”请求资源的识别[3],更准确的来说确定所请求的服务器以及相应的端口不是由Host头唯一确定,还需要决定于Request-URL。若Request-URL是绝对地址,那么即使Host存在值,也依然会被忽略掉。反之,若Request-URL是一个相对地址,且请求头中包含有Host,那么请求的资源位置就会由Host来确定。

由此分析可见Host头在请求中扮演着相当重要的角色。除此而外,Host头也是很多安全检测的关键切入点,接下来会详细讨论该问题。

在分析Host基础上,还需了解Host的二义性。由语言学对于二义性的定义,可较为容易地理解二义性的概念。例如,一句话在同一情景下可能存在两种(或以上)的含义,就称这句话是具有二义性的,或者说这句话是存在歧义的。

本质上而言,Host的二义性是因为HTTP协议在具体媒介中实施的时候并未完全遵循RFC标准,在两个媒介处理同一个HTTP的请求时,对同一个Host头存在不同的两种分析处理或解释行为,从而导致了Host头可能存在二义性,利用这种差异的不同组合便为一些潜在安全漏洞利用提供了可乘之机。

如图1所示为攻击者利用Host头二义性绕过CDN防护。攻击者构造了一个含有两个Host头,且第二个Host头前存在一个空格的请求数据包。对于CDN来说接受了第一个Host,而服务器接收到了前面有空格的第二个Host头,从而绕过了CDN。同样的思路,CDN这里还可以是防火墙等。

来自清华大学、Berkeley大学以及华为安全研究人员在论文中给出了阐述:其通过实验发现有33个流行应用的HTTP实施对于Host头的解释有显著不同的行为,从而导致了三种利用的方法:(1)多个Host头的利用方法;(2)包含空格的Host头利用方法;(3)含有绝对路径请求的利用方法。

针对上述三种利用方法,给出具体阐述。

多个Host头的利用方法:事实上在RFC2616和RFC7230[4]中都或间接或直接的说明了不允许有多个Host头,而安全人员实验发现:测试的33个样本中其中有25个都不遵循RFC的规定,没有拒绝这种具有多个Host的请求。那么就可能存在这种情况:对于A,会接受第一个Host,对于B,会去接受第二个Host。因此,就可以利用这样一些问题去绕过一些安全限制,就如在上文中所提到的一样。

包含空格的Host头利用方法:这种类型具体而言会有三种构造的方式。尽管在RFC2616和RFC7230中也几乎有相应对策,但是测试人员发现具体的实施之中,33个样本中只有5个遵循RFC2616,2个遵循RFC7230。

含有绝对路径请求的利用方法:在前文介绍Host之时,可知根据RFC2616请求的资源位置,在Request-URL含有绝对路径之时,Host头将会被忽视。而在RFC7230中则更进一步说明了,即使Request-URL中存在绝对路径,请求中仍然应该具有明确的Host。这里研究者们又发现一些非常有趣的事情了:就是不论在RFC2616或是RFC7230中,都没有明确的指出Request-URL中绝对路径中允许存在的协议类型。发现在具体的实施中:有些是支持多种类型的协议,有些是仅仅支持HTTP或者HTTPS其中之一的。在所做的测试之中,同样发现遵循RFCs协议的非常少。

3 基于HTTP协议Host头二义性的漏洞挖掘新思路

在详细阐述HTTP协议Host头的二义性问题,以及举例说明利用这种二义性可在某些特定环境下进行绕过CDN和防火墙等进行攻击的基础上,本文将论述该问题对于漏洞挖掘所提供的一种新的研究思路。

除了已经提到的Host头,事实上Cookie头也会存在这样的问题。若出现两个同名的Cookie头,那么不同Server语言在处理过程中将会出现差异。如图2、图3所示分别给出了PHP和Python对于两个同名Cookie头的渗透处理过程及结果。

显然,可以注意到PHP解析后是接收第一个Cookie而Python接收了后者。其实,这与HTTP协议Host头二义性的问题在本质上是一致的。协议的说明指定与实际实施之间存在的差异,导致了上述测试差异的出现。

对于使用了Google Analytics的Python Django也存在CSRF绕过问题。首先,通过Google Analytics进行Cookie注入(由于Cookie中存在一个Path参数,而该参数又直接来源于Referer中,未过滤)。由于Web Server以及浏览器对于Cookie的解析过程存在不符合RFC标准的问题,因而最终导致成功的注入。从而可以实现删除已有Cookie或者覆盖已存在的Cookie。由此不难发现,很大程度上导致该问题也是因协议在具体指定和实施之间所存在的差异所致。

Internet Explorer/Edge存在的一个“结合 host 头注入和 host的不严谨解析,提供恶意数据服务”[5]问题,并且利用这个问题可以成功在Github上面实施了OAuth token的窃取以及对Heroku和Fastly路由混淆[5][6]。

利用这种解析差异,我们甚至还能构造出XSS漏洞等。由此可见,所探索上述问题无疑为漏洞研究提供了一条新的思路,并且说明了对于这类漏洞的研究在工业领域也具有实际运用意义。Browser在Web生态中扮演着重要的角色,且其与Web Server休戚相关。而有意思的是,在实际的实施、解析之中往往都没有去遵循RFC协议规定,往往这之间所造成的差异也各具不同。运用这样的思路,就可以利用实现的不同,从而造成具有现实意义的攻击。

互联网世界里还存在更多的协定,但是实际应用中很可能大量都并没有去遵循这样的协定。对于整个Web互联网世界而言,单独个体对于协议的不遵循(如浏览器和Web Server,Web Server与Web Server等)于自身而言就是漏洞,对这些漏洞点加以组合利用,便最终构成了多种潜在的网络安全攻击。为此,寻找协议的制定与实施之间的差異,并在此基础上加以组合利用,便成为了一种新的漏洞挖掘思路。

4 结束语

本文主要分析了一种由于HTTP协议Host头具有二义性所造成的安全问题,阐述了具体攻击场景和利用方式,并且进一步分析了由HTTP协议Host头二义性所带来的一种漏洞挖掘研究的新思路,并辅以网络上具体存在的漏洞案例进行论述。事实上,很可能找到诸多不遵循RFC或其他标准的实施,而研究的难点和关键在于:如何将这一系列的网络安全漏洞与缺陷进行有效地联系或组合起来,从而构造出合适的网络攻击场景并发掘更为深层次的潜在安全危害。这是需要进一步思考与研究的问题;同时通过本文,希望能有更多的安全研究人员能够关注协议与实现之间存在的差异等,以及与之相关的安全漏洞利用问题。

参考文献

[1] Gourley D, Totty B. HTTP: the definitive guide[M]. “O'Reilly Media, Inc.”,2002.

[2] Chen J, Jiang J, Duan H, et al. Host of Troubles: Multiple Host Ambiguities in HTTP Implementations[C]//Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. ACM,2016: 1516-1527.

[3] Fielding R, Gettys J, Mogul J, et al. Hypertext transfer protocol-HTTP/1.1, 1999[J]. RFC2616, 2006.

[4] Fielding R, Reschke J. RFC 7230: Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing[J]. 2014.

[5] Labsdetectify:Combining host header injection and lax host parsing serving maliciousData.https://labs.detectify.com/2016/10/24/combining-host-header-injection-and-lax-host-parsing-serving-malicious-data/.

[6] XSS Jigsaw:Internet Explorer has a URL problem.http://blog.innerht.ml/internet-expl-orer-has-a-url-problem/.

基金项目:

成都信息工程大学科研基金资助项目(KYTZ201618)。

作者简介:

李文皓(1996-),男,四川成都人,大学本科;主要研究方向和关注领域:信息安全。

李斌勇(1983-),男,四川江油人,博士,讲师;主要研究方向和关注领域:信息安全、云服务技术。

猜你喜欢

通信协议网络安全
际华高分子材料高科产业园能源管理系统设计
邯郸市档案馆积极开展网络安全宣传教育
全国多地联动2020年国家网络安全宣传周启动
新量子通信线路保障网络安全
全省教育行业网络安全培训班在武汉举办
保护个人信息安全,还看新法
企业能耗数据采集软件的设计与开发
奖状训练器飞行管理系统研究
中国网络安全产业联盟正式成立
基于R8C的汽车OBD通用故障诊断仪设计