手把手教你挖掘浏览器地址栏漏洞

导读:

你恍若闯入了一个神奇的大观园,不知道接下来的是一个人,还是一条狗,或者两者都是。

浏览器的地址栏,是通往神秘赛博世界的一道门。

打开门,也许是你早已心仪已久的一家购物网站,也可能是一些你无法预料的场景:

  1. 或是闪着红色小灯的发廊线上版
  2. 或是各色骰子在飞舞旋转,向你招手
  3. 或是一个简单的拒绝:404

你恍若闯入了一个神奇的大观园,不知道接下来的是一个人,还是一条狗,或者两者都是。

手把手教你挖掘浏览器地址栏漏洞

这绝不是一次你想要的惊险刺激的冒险,你以为这是小朋友突然翻了一次墙么?

赛博世界,我想要知道我在哪,我去哪。

腾讯玄武实验室技术专家徐少培说:“Google曾公开表示在现代浏览器中,地址栏是唯一可靠的指示器。”

这句话应该如何理解?通俗的来说就是,如果地址栏上出现了安全问题,后续所访问的Web页面,可信任的体系将全部崩塌。

雷锋网决定,先上个数据震撼一下你。

上周,Chrome 发布了最新的版本,在安全漏洞当中,其中有16个漏洞由外部人员提交。在这16个漏洞当中,中高危漏洞占了12个,获得了谷歌的漏洞奖励。在这 12 个漏洞当中,有 3 个漏洞是地址栏上的漏洞,也就是说,Chrome浏览器作为目前业界公认的最安全的浏览器,其中地址栏上的安全漏洞占比四分之一。

对浏览器厂商而言,不仅要消除软件中的缓冲区溢出,最大的安全挑战之一是如何帮助用户在上网时做出正确和安全的决策。

因此,浏览器厂商绞尽脑汁。

第一个指示灯:安全指示符

很久以前,浏览器厂商搞出了一个安全指示符,就像是一枚路标,告诉你前方是一片坦途还是沼泽丛林。

安全指示符琳琅满目。你可能在地址栏看到的是一把绿色的小锁,也可能是把灰色的大锁,或是一个“地球”。

手把手教你挖掘浏览器地址栏漏洞

HTTP 和 HTTPS 又不同,一边是白色符号,而另外一边可能是绿色符号。不同的符号究竟代表什么?这些符号背后有何深意?

2015年,谷歌曾就此采访过1329人,尴尬的是,大部分人对于HTTPS这个指示符略有了解,看到有一个锁,就知道可能是加密或者是安全的问题。对于HTTP这个标识符,一些专家可能都不太明白是什么意思。

看到这里你应该高兴,看,你又比专家多懂了一点点。手把手教你挖掘浏览器地址栏漏洞

当你点开这些各种各样的小符号,其实又打开了一片新天地:

手把手教你挖掘浏览器地址栏漏洞

内有更多对当前页面权限的设置,以及这个网站是否安全等选项。

第二个指示灯:URL

我们已经了解到在地址栏中安全指示符如何来标识当前网站的安全状态,它是一枚路标,而统一资源定位符(URL)才是地址栏中的真正主角,它告诉你在哪和你要去哪,相当于一张有定位的地图。

手把手教你挖掘浏览器地址栏漏洞

基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名,如“协议://授权/路径?查询”。完整的、带有授权部分的普通统一资源标志符语法如下:协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志。

所谓协议,是有很多的:

http——超文本传输协议资源

https——用安全套接字层传送的超文本传输协议

ftp——文件传输协议

mailto——电子邮件地址

ldap——轻型目录访问协议搜索

file——当地电脑或网上分享的文件

news——Usenet新闻组

gopher——Gopher协议

telnet——Telnet协议

那么,这个URL 有哪些层面可以被黑客改造,导致你去了一个意想不到的地方?也许,我们可以反推一下,不至于着了道。

作为一个连续三次挖掘了chrome 浏览器地址栏漏洞的老司机,徐少培对攻击者可能伪造URL 的手段了如指掌:

1.这些协议在浏览器处理的时候都有可能出现问题。

2.多级域名时,浏览器地址可视空间很小,有可能把主机覆盖掉,而显示前面伪装的多级域名主机。

3.对于端口,目前默认的端口是空,或者是无符号16位。如果超过65535,比如说是10000的浏览器端口,如果是非数字ABCD端口会怎么处理呢?

4.Pathname,就是后面的目录,有可能会伪造成主机。

5.#号后,浏览器格式在字符串时可能会出现问题,

6.用户名和密码部分有可能会伪造成主机。

在了解完URL的各个参数后,徐少培给出了URL Spoof漏洞的详细的定义和说明。地址栏欺骗漏洞,伪造了Web最基本的安全边界,起源(orgin)。

手把手教你挖掘浏览器地址栏漏洞

“URL中的任何一个部分,都有可能成为触发地址栏欺骗(URL Spoof)漏洞的攻击向量。”

徐少培说。

手把手教你挖掘浏览器地址栏漏洞

比如,上述URL由一个四级域名构成,Pathname的路径伪造成了一个类域名的字符串。

在正确的地址栏中显示,不管 URL 有多长,地址栏可视空间有多少,都要把正确的源显示出来,这个 URL 中正确的源是evil.com。在前5个显示中,不管怎么变化,都显示了正确的源。

如果地址栏的显示逻辑是,只显示URL最左边或最右边,那么就会出现图中最后所示的这种地址栏欺骗情况。

第一个是显示了URL的最左边,只显示了多级域名的一部分;第二个的策略是,只显示了URL的最右边,显示的是URL的pathname部分。

这两种显示方式,都没有把真正的源显示出来evil.com,用户会认为当前访问的网站是的是login.your-bank.com。

老司机的三次连胜:Chrome 地址栏之困

事不过三,但是连续 2016年6月、8月、10月 三个最新版本的 Chrome 地址栏漏洞被徐少培找到,Chrome 不仅要面带笑容,还要给奖励。

就喜欢看到“看不惯我又干不掉我”的情节。

第一个漏洞:3000美元奖金

从奖金规格可以看出,这是一个比较“完美”的漏洞,所谓的完美就是,哎哟,两个悟空一模一样,根本分不出来谁是谁。

手把手教你挖掘浏览器地址栏漏洞

“漏洞呈现的最后攻击效果就是这样的,当用户点击了一个链接,到达了Gmail,但是这个 Gmail 的URL是由攻击者伪装的,页面也是由攻击者伪装的。

当你登录 Gmail ,输入用户名和密码时,你的信息就被攻击者获取到了。”

徐少培说。

轻而易举,不带一丝一毫的防备。

这个漏洞的原理如何实现?

手把手教你挖掘浏览器地址栏漏洞

当用户点击按钮时,打开了一个窗口页面,然后写下”key payload”,把这段关键代码单独拿出来,如图中用灰色来标识的关键代码。

这个代码在当前页面又打开了一个窗口,导航到一个地址,图中黄色标识的 URL 就是导航地址。但是,大家可以看到这是一个畸形的URL,最后有两个冒号,浏览器默认是无法去解析的,于是漏洞就触发了。

黄色的畸形URL有什么威力?使浏览器发生了什么?

手把手教你挖掘浏览器地址栏漏洞

浏览器的导航机制是这样的:先判断是否允许跳转到一个页面,在这个漏洞中Chrome判断这个畸形的URL(https://gmail.com::)时,允许加载它。

这是错误的开始,加载了一个无效地址,并未对无效地址做任何处理。

于是浏览器开始加载这个畸形URL,因加载的是一个无效的地址,于是地址栏处于一个挂起的状态(pendingentry)。

当内容开始返回时,调用‘about:blank’,但此时chrome还处于一个挂起状态 (‘https://gmail.com::’) ,并且把‘https://gmail.com::’ 作为了最终的提交地址。

页面加载完成。最后停留在了伪造的页面中。而且,两个冒号会被完全隐藏掉。一个完美的地址栏欺骗漏洞就这样产生了。

这就是犯罪后还顺便清理了犯罪现场,造成什么都没发生的假象!

第二个漏洞:谷歌忽视了边缘协议

“在这个漏洞发现后两个月,我又连续寻找新的漏洞。在被我找到漏洞的53版本修复成54版本上,我在fuzzingURL协议时发现,针对不同的协议,浏览器地址栏有不同的处理方式。”

徐少培说。

这一切发生在BLOB (binary large object)协议上,是一个可以存储二进制文件的容器。“blob URLs”方案允许从Web应用程序中安全的访问二进制数据,也就是从“内存”中对Blob的引用。一个“blob URLs”包括主机源和一个由UUID表示的路径。

按照安全同源策略,你不可能直接打开一个你不能控制域的 blob 的URL,通过这个页面,从视觉感官上我们成功打开了谷歌域的blob的URL,但这其实是伪造的。

手把手教你挖掘浏览器地址栏漏洞

如何做到的?

当你点击这个按钮之后,其实首先打开了一个攻击者可控制域的 Blob 的URL,就是图片中黄色关键核心代码。

手把手教你挖掘浏览器地址栏漏洞

500毫秒后,在这个页面上写入伪造内容。黄色的关键代码中,@后面的域才是攻击者的域,就是可以控制的,而前面那些都是伪造的。

手把手教你挖掘浏览器地址栏漏洞

首先,伪造了一个谷歌域名字符串,之后加上大量的空白字符。浏览器遇到这样的URL。Chrome会怎么处理?

Chrome其实犯了一个非常严重的逻辑错误,一直对主流协议如HTTPS、HTTP做了很多安全上限制,反而可能对边缘化的协议没有太注意。

其实,这个漏洞渲染了用户名和密码的部分,就是@符号前面的部分,逻辑上不应该去渲染。浏览器底层可以去解析这部分内容,但是在 前端UI上应该显示出来。

因为一个URL的用户名和密码一旦被渲染,极有可能被用户认为是这个URL的主机。

比如,列举的这个链接,如果直接全被渲染,@前面的字符串就有可能被认为是URL的主机,也就是伪造了这个域名。

在主机前面加入了伪造字符串后,又加入了大量的空白符号,在现代浏览器中已经不允许这么做了,大量的空白符被解析会把真正的主机覆盖。

第三个漏洞:反常规点击,用另一只手吃饭试试?

人们在导航到一个新的网站时,可能都用左键去点击。但你有没有想过,比如点击右键,再点击从新窗口打开这种方式?

真是出其不意的鬼畜!

手把手教你挖掘浏览器地址栏漏洞

手把手教你挖掘浏览器地址栏漏洞

手把手教你挖掘浏览器地址栏漏洞

最后,欺骗的效果就是伪造了谷歌的域,页面内容同样可以被改写,这个漏洞因为触发起来可能需要用户的一个小交互(右键点击),所以当时只给了500美元的奖励。

徐少培解释完最后一个漏洞,说起500美元,一副轻描淡写的样子。

剩下三次被“击中”的谷歌chrome哭晕在厕所。手把手教你挖掘浏览器地址栏漏洞

大神的挖洞秘籍

一本武林秘籍中,前面的几招几式可以模仿并不让人惊奇。最重要的是,如何领悟武学大师的最高奥义。

徐少培通过之前发现的几十个地址栏上的漏洞,提出了“地址栏之困”也是挖掘URL Spoof漏洞的核心奥义。

你在哪?你要去哪?浏览器地址栏其实是个矛盾体,在两个相互竞争的角色中挣扎。

在左右手互博之中,只有唯一的一条出路。

理解了这一层奥义,才能熟稔万千招式,我自岿然不动。

徐少培站在山顶,微笑不语。

手把手教你挖掘浏览器地址栏漏洞

雷锋网注:本文部分资料来源于腾讯玄武实验室徐少培在中国网络安全大会(NSC2017)“大师讲堂”上的演讲,本届中国网络安全大会由赛可达实验室、国家计算机病毒应急处理中心、国家网络与信息系统安全产品质量监督检验中心、首都创新大联盟共同举办。

  • 版权声明:本文源自雷锋网。于1个月前由整理发表。共 4180字。
  • 转载要求:转载须在正文中标注并保留原文标题、原文链接、译文链接和译者等信息。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: