- 1 -
中国科技论文在线
针对 HTTPS的Web前端劫持及防御研究#
,陈勇,王新恒*
基金项目:国家自然科学基金青年基金项目(61402065)
作者简介: ,男,西安人,博士、教授,研究方向为网络测量、网络安全。
(重庆邮电大学通信学院未来网络研究中心)
5 摘要:本文论述了 HTTPS协议通信流程,详细分析了基于伪造证书与中间人会话劫持的基
本方法及原理,指出了常用劫持方法通过后端来操控最原始数据流量及其缺陷,并重点提出
了一种基于前端 XSS脚本注入的更高效、更完善的 HTTPS会话劫持方法,实现了表单提交、
动态元素、脚本弹窗、框架页面的劫持。最后,本文详细阐述了其 Web 前端劫持实现原理
与流程,并搭建原型系统进行验证,进一步分析出了 HTTPS 通信的安全隐患,根据现状对10
此提出了可行的防范措施。
关键词:HTTPS;中间人;XSS;前端劫持;动态元素
中图分类号:TP3
Research on the hijacking and Defense of Client 15
Zhao Guofeng, Chen Yong, Wang XinHen
(College of Communication, Chongqing university of Posts and Telecommunications)
Abstract: This paper discusses the HTTPS protocol communication process is analyzed in detail
based on forged certificates and man in the middle session hijacking the basic principles and
methods, it is pointed out that conventional hijacking method through the backend to manipulate 20
the original data flow and defects, and put forward a front-end scripting XSS based on injection of
more efficient, more perfect HTTPS session hijacking method, has realized the form submission,
dynamic elements, the window script, the hijacking of the page frame. At last, this paper describes
the principle and process of the Web front end hijacking, build a prototype system to verify the
security risk, and further analyze the HTTPS communications security risks, and to provide the 25
feasible preventive measures.
Key words: HTTPS;intermediate people;XSS;front end hijacking;Dynamic element
0 引言
随着网络的快速发展,互联网主流业务如社交网络、电子商务、和邮件收发等对网络安30
全敏感性极大。为了提供一个安全的网络环境,HTTPS[1][2] (Secure Hypertext Transfer Protocol)
技术提出且被广泛应用。尽管该协议能够提供数据的加密、身份的认证[2]等安全服务,但也
会有漏洞。在网络攻防中,通过中间人攻击钓鱼最为常见。
在Web刚起步的时候,网页结构简单,层次清楚都以静态为主。像SSLstrip[1] [2]、SSLsplit、
SSL Renegotiation
[9]等工具完全能够实现中间人会话劫持,然而如今的网页日益复杂,动态35
网页所占比逐渐变大,仅仅采用劫持流量的方法,不能彻底实现 HTTPS会话劫持[2][3] [4]。现
有的 Web 安全措施主要集中于中间人攻击,然而客户端的安全机制相对比较薄弱。本文主
要研究浏览器端的 Web安全威胁检测技术,重点研究了前端劫持[5][6]。频繁发生的 Web安
全事件给服务提供商、企业及个人用户带来极大困扰。因此,加强对 Web 安全威胁检测技
术的研究、提升Web服务的安全性具有重要意义,最后并提出了 HTTPS会话劫持的防范措40
施。
赵国锋
赵国锋
- 2 -
中国科技论文在线
1 HTTPS协议通信安全分析
HTTPS协议通信流程
用户通过浏览器访问支持HTTPS协议的网站时有两种不同的访问方式. 45
HTTPS静态超链接
在网页点击类似 超链接时,其通信流程如图 1 所示,首先客户端向
DNS 服务器发起 DNS 请求,通过域名获得访问服务器的 IP 地址,然后使用 443 端口与支
持 HTTPS 的服务器建立 TCP 连接,再建立 SSL 安全通道,最后传输加密数据。针对这种
情况只能采取通过基于伪造证书的中间人代理方式获取 HTTP明文数据。 50
图1 点击https静态链接通信流程
Click on HTTPS static link communication process
静态链接重定向
在导航网页点击类似 超链接时,其通信流程如图 2 所示。首先客户55
端向本地 DNS服务器发起 DNS请求,通过域名解析获得服务器的 IP地址,然后与服务器
的 80 端口建立 TCP 连接,发起明文的 HTTP 请求,服务器响应 302 重定向报文,报文的
重定向 Location字段是以 https开头的 URL,客户端重新 DNS请求、与服务器的 443端口
建立 TCP连接、建立 SSL安全通道、传输加密数据。针对超链接重定向,可以采取两种不
同劫持方式:①重定向会话劫持;②伪造数字证书劫持。 60
图 2 点击链接 HTTPS通信流程
Click link HTTPS communication process
基于中间人代理的后端劫持
伪造数字证书劫持 65
根据 节的分析,当用户直接输入以 https开头的网址时,数据通信过程全是加密的,
- 3 -
中国科技论文在线
只能通过伪造数字证书[3] [4]的方法获取明文数据。其使用的 SSL 协议握手过程如图 3所示。
根据浏览器验证证书的缺陷,我们采用如图 4所示的原理进行劫持。第一步:中间人代理服
务器监听客户端 TCP 连接请求,当收到客户端请求后中间人伪造客户端向真实服务器发起
TCP连接;第二步:中间人代理服务器监听到客户端发起的 SSL连接请求 Client_Hello时,70
记录相关信息,并转发该数据包以连接服务器,实现服务器密钥交换和鉴别;监听到服务器
SSL握手响应,记录服务器下发的证书相关信息,并根据信息伪造自签名数字证书下发给客
户端。第三步:浏览器验证证书合法性,证书不合法则弹出安全警告框,提醒用户选择关闭
或继续浏览。若用户选择继续浏览,则中间人与客户端之间的 SSL 连接成功,从而实现对
HTTPS协议通信的会话劫持。 75
图 3 SSL握手协议流程图
SSL handshake protocol flow chart
使用伪造数组证书劫持时,浏览器会弹出警告框。若用户的安全意识很高,不选择继续80
浏览,则无法完成劫持。所以,针对这种劫持方案,提高网名用户安全意识是较好的防御方
法。
图 4 伪造数字证书劫持原理图
the schematic diagram of the fake digital certificates 85
重定向会话劫持
当用户直接在浏览器输入非 https开头的 URL或者直接点击导航页面超链接接时,利用
重定向会话劫持示意图如图 5 所示。我们可以在后端截获重重定向会话劫持示意图如图 5
- 4 -
中国科技论文在线
所示。我们可以在后端截获重定向报文,将 HTTPS协议降级为 HTTP获取明文数据流量。
其原理如图 6 所示。第一步:中间人监听 80 端口,若有客户端发起 TCP 连接(目的端口90
80),然后伪造客户端与真实服务器建立 TCP连接;第二步:客户端发起明文的 GET请求,
中间人将请求转发至服务器;第三步:中间人截获服务器的重定向响应报文,并与服务器建
立 SSL安全通道,并发起同样 GET请求;第四步:中间人获得服务器响应类容,解析相应
报文内容,若发现有 https字段,则替换成 http,并添加标识符表示原来是 https安全请求 url。
例如发现<a href=>,则替换成<a href=
是添加的标志。第五步:把修改后的响应报文以 HTTP明文形式转发至客户端,实现客户端
与中间人之间的 HTTPS通信降级,最终实现会话劫持。SSLstrip是个成功案例。
图5 重定向会话劫持示意图
redirect session hijacking 100
图 6 重定向会话劫持原理图
redirect session hijacking principle diagram
后端劫持缺陷 105
在过去像 SSLStrip中间人劫持工具,其流量劫持基本都是通过后端[2]来实现。采用纯后
端的方式只能操控最原始的数据流量,像数据包分片处理、动态元素、性能消耗能否降低等
问题,后端是无法有效解决的。
1)动态元素
在 web 刚起步的时候,像 SSLstrip 工具能够解决大部分问题。那时的网页结构简单层次清110
晰,主要以静态为主,后端劫持完全能够胜任。但如今的网页日益复杂,动态元素所占比重
越来越多,如果仅从流量替换上着手,不能从根本上解决问题。即使非常简单的动态元素,
后端劫持也无法实现。
var protocol = 'https';
('<a href="'+protocol+':// 115
2)流量分片处理
- 5 -
中国科技论文在线
较大的网页数据都是分块传输的,其示意图如图7所示。由于每次收到数据的都是零散
图7 代理分片处理示意图 120
Fig. 7 Schematic diagram of the proxy
数据碎片,加上不少页面并非标准的 UTF-8 编码,这给链接匹配带来很大的麻烦。为了能
够识别流量数据,中间人通常先收集数据,知道 HTML页面块接受完成匹配替换。如图 8所
示所示。 125
图8 代理集中处理示意图
Fig. 8 schematic diagram of proxy
3)性能优化
由于 HTML的 url匹配查找需要采用各种复杂的正则表达式匹配字符,消耗极大的 CPU130
资源。我们采用在前端注入脚本进行匹配替换采用了分布式的思想,极大降低了中间人代理
服务器性能上的压力。
2 基于脚本注入的前端劫持
前端劫持优势
通过在前端注入 XSS脚本实现[5][6][7]HTTPS劫持能够缓解上述资源浪费,性能低下的状135
况。在中间人劫持的基础之上,通过把脚本插入到头部运行即可。不用遍历整个页面,只需
修改第一个 chunk即可,然后交给系统转发,其原理如图 9所示。XSS植入到前端后 HTTPS
劫持方法很多,最简单的方法就是遍历 HTTPS超链接,并替换成 HTTP版本。这个方法适
用大部分情况,但仍不够完善。由于我们不知道动态元素何时会添加,需要不断扫描整个页
面,这样导致系统性能严重下降。 140
图9 前端植入XSS脚本示意图
Fig. 9 schematic diagram of the front end of the XSS script
- 6 -
中国科技论文在线
前端劫持
超链接、表单提交和框架劫持 145
超链接发起的访问请求是由用户点击产生的。只要用户不点击就不产生流量。我们注入
JS探针程序监听超链接访问的触发事件(click),将 HTTPS协议替换成 HTTP协议。待事
件执行完所有默认行为时,浏览器读取修改后 href 属性。关键 JS代码如下:
('click', function(e) {
// ... 150
}, true);
为了能够成功欺骗用户,在修改 href 之后的下个线程周期里把它还原。在淘宝主页点
击登陆按钮进入登陆界面如图 10所示。表单提交和超链接原
var url = ; // 保存原始地址
= ('https://', "http://"); 155
setTimeout(function() {
= url; // 新页面打开后还原url
}, 0);
图10 淘宝登陆页面HTTPS降级原理图 160
Figure 10 Taobao landing page HTTPS degradation principle diagram
理一样,只需要将‘click’事件改成‘submit’,‘href’替换成‘action’。脚本弹窗只需一个简单的
钩子函数就可实现劫持:
var raw_open = ; 165
= function(url) {
arguments[0] = ('https://', 'http://');
(this, arguments);
}
框架页面劫持 170
主页面降级成功,但框架的地址仍是 HTTPS协议。协议上的冲突会导致跨域错误,页
面不能正常显示。因此,我们需要把框架替换成 HTTP版本,确保页面正常加载。由于框架
加载方式和之前的页面加载方式完全不同,采用的是自动加载的,不会产生加载事件,无法
正常监听框架何时加载。HTML5[6]的MutationEvent可实时监控页面元素,我们引入 HTML5
的 CSP(Content Security Policy)策略,它是浏览器原生支持的,框架的协议支持非常策底。175
在我们中间人代理返回 HTTP头部加上 CSP头部即可实现 HTTPS框架的成功劫持。
Content-Security-Policy: default-src * data: 'unsafe-inline' 'unsafe-eval'; frame-src http://*
- 7 -
中国科技论文在线
实验结果
采用 360、google、FireFox 等浏览器针对 、 等网站进
行浏览器 版本针对 网站进行了测试。HTTPS降级成 http,其中?zh_cn180
是我们加的标记符号。
图11 HTTPS协议降级实验 185
HTTPS protocol degradation experiment
3 HTTPS协议劫持防御措施
Web 安全[6][7]是一个系统问题,包括 Web 服务器安全、Web 应用服务器安全、Web
应用程序安全、数据传输安全和客户接收端的安全。针对 HTTPS协议通信的劫持,我们可
以从以下三个方面进行防御。 190
1)安全脚本探针
其实,无论是从后端还是前端着手,仍然有很多网站无法降级。例如 QQ邮箱登陆:
因为它在网页中植入安全探针脚本[6] [7]:匹配location的协议
if(=="http:")
{ 195
= "edition=; expires=-1; path=/; domain=.";
="";
}
类型,若是HTTP协议的就修改cookie,并把URL替换成HTTPS,这样攻击者很难成功劫持。
2)混淆明文 200
发现京东登陆页面的脚本里,URL 是以的明文形式出现,我们可以利用前后端结合的
方法,对脚本里的 https:// 文本进行替换。但如果我们的 URL是通过字符串拼接的,HTTPS
协议降级难以成功。所以在信息传输安全较高的时候,必须对重要网站的地址进行处理,中
间人就无法采用常规方式实现劫持,攻击难度极大大提升。
3) HSTS策略 205
HSTS(HTTP Strict Transport Security)
[8]是国际互联网工程组织 IETE推行一种新的Web
安全协议。使用 HSTS协议的网站。只要这个头部出现过一次,浏览器在设定时间里只会以
HTTPS 与服务器建立连接。因此,我们的网站应尽可能开启 HSTS功能。事实上流量劫持
并非都是 100% 成功,例如上述提到使用脚本跳转很容易出现遗漏。所以, HSTS 可以让
- 8 -
中国科技论文在线
之后的页面降级彻底失效了。对于像超链接这种不可避免的重定向攻击,建议服务器开启210
HSHS功能。如果用户已经用 HTTPS访问过站点 (支持 hsts功能的站点会在响应头中插入:
Strict-Transport-Security),支持 HSTS 的浏览器(比如 chrome. firefox)会将这个域名添加到
HSTS 列表,下次用户访问这个网站,浏览器只以 HTTPS 协议发起请求,(前提是用户没
有清空缓存),而不是先发送 HTTP,然后重定向到 HTTPS,成功避免 302重定向 URL被
篡改。 215
4 结束语
通过具体理论分析和实验表明,重定向会话劫持的的方法比基于伪造证书的方式实现
HTTPS劫持更隐蔽,进一步引入基于脚本注入的Web前端 HTTPS会话劫持[3]降低中间人代
理服务器 CPU 性能压力,更是降低了 HTTPS 的安全性。前端劫持方法的提出,对 HTTPS
的安全性提出了更高的挑战。但前段劫持后端劫持都不是万能的,我们可以采用安全脚本探220
针、混淆明文、HSTS等策略防御 SSL攻击[9]。
[参考文献] (References)
[1] 张恒伽. 基于中间人攻击的 HTTPS协议安全性分析[D].上海交通大学,2009.
[2] 张恒伽,施勇,薛质. 基于 SSLStrip的 HTTPS会话劫持[J]. 信息安全与通信保密,2009,10:80-82.
[3] 粱兴开. 基于脚本安全的防御技术研究[D].杭州电子科技大学,2012. 225
[4] 王立彦. HTTPS协议中间人攻击的实现与防御[D].东北大学,2011.
[5] 阳风帆,刘嘉勇,汤殿华. 基于脚本注入的 HTTPS会话劫持研究[J]. 信息网络安全,2015,03:59-63.
[6] 李冬萌. Web前端安全问题的分析与防范研究[D].北京邮电大学,2014.
[7] 王广. Web前端的安全防护漫谈[J]. 计算机安全,2013,02:63-65.
[8] 230
[9] ustin Fielding (2006-07-16). "Secure Outlook Web Access with (free) SSL: Part 1".TechRepublic.
Retrieved 2009-10-24.