袁 梁
(无锡城市职业技术学院 师范学院,江苏 无锡 214063)
Web浏览器跨协议通信安全性研究
袁 梁
(无锡城市职业技术学院 师范学院,江苏 无锡 214063)
阐述了浏览器跨协议通信的安全性问题,这类通信是通过将一个目标协议封装进一个载体协议中来完成的.研究表明, 在满足协议有足够的容错度和有方法将目标协议封装进载体协议两个前提下,完全独立的两个协议是可以互操作的,潜在的两个不同的协议能够进行命令和数据的通信.因此跨协议通信为攻击者利用载体协议实现对目标协议的攻击提供了新的可能性,主要安全问题诸如跨协议跨站脚本、跨协议特征探测、暴力攻击.
浏览器;跨协议通信;HTTP;IMAP;跨协议跨站脚本
在Web浏览器安全性研究方面,随着跨站脚本和浏览器漏洞的深入研究,浏览器的安全性得到了很大的提高.近几年主流浏览器厂商Mircosoft、Google、Mozilla不断推出浏览器新版本,这大大提高了终端用户的安全性.但是浏览器仍然是用户面临的巨大威胁,在针对浏览器的安全测试中,没有一个浏览器是可以经受摧毁性攻击[1].跨协议通信 为进一步探索Web浏览器安全提供了更广阔的空间.
Web浏览器为跨协议通信提供了一个理想的平台.对于大多数网络,尤其是内网,Web浏览器是与外网进行通信的重要媒介.Web浏览器对外网上的Web服务器发出请求,Web服务器响应浏览器的请求并向浏览器返回信息,浏览器对返回信息做出相应的动作.但是在响应过程中,Web服务器放弃了对浏览器的控制权,Web服务器不能保证到达浏览器的响应是否含有恶意脚本,不能保证响应是否来自一个不信任的站点或者来自一个受干扰的路由.而特定的恶意脚本有能力让Web浏览器执行跨协议通信.
本文将重点讨论基于Web浏览器的跨协议通信以及这种通信中存在的安全问题.
1.1前提条件
跨协议通信是指两个相互独立的协议间的通信,它采用封装的方式指将一个目标协议封装进一个载体协议中,以方便两个采取不同通讯格式协议间的命令和数据的通信.实现跨协议通信,需要满足两个前提条件:第一,协议需要有足够的容错度;第二,有方法将目标协议封装进载体协议中.
跨协议通信中的两个协议分别被称为载体协议和目标协议.目标协议是接受方能够解释的协议;载体协议是用来封装和发送目标协议的协议.
协议间通信主要要考虑的是目标协议的分割.不同的协议采用不同的方法来分割数据段,有些情况下分号(;)被用来分割数据,有些情况下包被用来分割数据[2].例如:imap使用包来分割数据,在通信中,需要载体协议能够精确封装每个包.
成功实现协议间通信需要两个基本的条件:
容错度:目标协议需要有充分的容错度,在跨协议连接的时候,有可能存在一定比例的无效通信,并且可能出现错误.一些协议在中止连接前允许一定数量的错误,例如4.5版本的Exim在中止客户端连接之前最多允许4个错误[3].在与目标协议通讯前,如果载体协议造成的错误超过允许的最大值,那么跨协议通讯将失败.
封装:需要有一个方法或者是一种机制可以将目标协议封装进载体协议中.就二进制协议和基于文本的协议而言,基于文本的协议更容易实现跨协议通信,因为二进制协议相互混合交织,筛选的难度更大,也更容易出错[4].
1.2 HTTP和IMAP协议应用举列
本文我们以基于文本的协议为例,将http协议作为载体协议,imap邮件协议作为目标协议,来举例说明实现跨协议通信的可能性.将imap协议封装进一个Web请求中,这样一个有效的imap命令就可以被传送到imap邮件服务器上.
1.2.1 TCP连接
在开始跨协议通信时(从Web浏览器初始化开始),http协议请求一个imap服务器的时候将执行一个正常的4层握手协议.整个过程是这样:首先浏览器向网络上的目标主机发送一个SYN请求,目标主机响应客户端的请求,并返回一个SYN ACK应答.这个过程将完成连接的建立.在这个过程中,不允许错误的发生,否则连接将终端,并且客户端也没有开始发送数据.
1.2.2 容错度
在tcp连接建立完成后,客户端浏览器将开始发送HTTP协议数据包,这时,两个协议间很有可能出现错误,并断开连接.为了使跨协议通信能够成功, imap执行需要有一定的容错度:imap服务器要能够忽略那些http协议(载体协议)发送过来的不符合imap协议规格的数据包,而且一个完全没有错误的协议传输是不可能的.
在通信期间,大量的http头将出错,而imap目标协议却不能将他们解释成一个有效的输入.如果http头的错误数量超过imap允许的最大容错度,那么跨协议通信将不能成功.
POST /localhost HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
http请求数据包片段
POST /localhost HTTP/1.0
POST BAD Command unrecognized/login please: /LOCALHOST
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
Accept: BAD Command unrecognized/login please: IMAGE/GIF,
imap应答数据包
1.2.3 封装
为了使跨协议通信成功,http协议必须能够封装imap协议.这样,imap可执行命令或者数据才能到达imap服务器.imap协议使用单线程命令行,当载体协议返回时,线程就会中止[5].任何成功的封装必须能够将多个命令发送到imap服务器.因此为了实现这个功能,Web浏览器要能够同时执行http多重请求(multipart post)[6]和javascript脚本.
因此本文采取这种方式实现基于Web浏览器的封装:通过一个多重表单将多个命令封装在一起,并利用http多重post请求将这个封装提交到imap服务器.
在tcp连接建立完成后,并且http头错误已经被过滤,imap服务器将开始处理多重post请求的数据包.如果这些数据包都由imap命令组成,那么他们将在服务器上执行.目标协议将被imap服务器解释成有效的imap命令,跨协议通信成功.整个过程向我们展示了从Web服务器到imap服务器的跨协议通信是可以实现的.
7d6195410340
Content-Disposition: form-data; name="ta"
a002 logout
http请求数据包片段—发送注销命令
7d6195410340
7d6195410340 BAD Missing command
Content-Disposition: form-data; name="ta"
Content-Disposition: BAD Command unrecognized/login please: FORM-DATA;
* BAD Null command
a002 logout
* BYE debian IMAP4rev1 server terminating connection
a002 OK LOGOUT completed
imap应答数据包片段—解析注销命令
跨协议通信可以是单向通信也可以是双向通信的.而双向跨协议通信中,通信发起者能够通过载体协议应答数据包,实现与目标协议的交互目的.因此在某些情况下,跨协议通信为攻击者利用载体协议实现对目标协议的攻击提供了新的可能性,以上述的http协议和imap协议为例,主要安全问题有以下几个方面.
2.1跨协议跨站脚本
跨站脚本是一种在Web应用程序中发现的脆弱性,攻击者利用http协议通过一些方法将恶意脚本注入到受害者的客户端中[7].而跨协议跨站脚本是指使用一个非http协议服务器将恶意脚本注入到Web浏览器中,而不是Web应用程序.
Web浏览器将解释从服务器返回的任意协议,这些协议满足各种先决条件,这些条件随浏览器的不同而不同,这里我们不做具体讨论.当Web请求到达服务器时,这个请求由于出错可能返回给浏览器一个错误的响应信息.这个响应可能包含详细的错误信息,这些错误信息提供了协议通信中发生的错误细节.正是这些翔实的错误信息,有可能被注入脚本,并能够被浏览器执行.
正如上述所述,一个多重post请求提供了对请求的有效控制:它能够封装任意的imap命令,这些与imap服务器提供的详细错误信息结合,为脚本注入提供了一种办法:当imap服务器收到一个未知的命令时,它的响应是输出这个命令并显示错误信息“指出这是一个未知的命令”,如果一个http请求imap服务器,并且这个请求包含跨站脚本,而imap服务器又不能执行这些跨站脚本,那么这些脚本将被客户端浏览器解释并执行,跨站脚本发生了.例如通过尝试去执行恶意错误命令“