1
本文作者: 李勤 | 2017-06-15 18:50 |
本文作者:雷鋒網(wǎng)宅客頻道專欄作者,李勤
瀏覽器的地址欄,是通往神秘賽博世界的一道門(mén)。
打開(kāi)門(mén),也許是你早已心儀已久的一家購(gòu)物網(wǎng)站,也可能是一些你無(wú)法預(yù)料的場(chǎng)景:
或是閃著紅色小燈的發(fā)廊線上版
或是各色骰子在飛舞旋轉(zhuǎn),向你招手
或是一個(gè)簡(jiǎn)單的拒絕:404
你恍若闖入了一個(gè)神奇的大觀園,不知道接下來(lái)的是一個(gè)人,還是一條狗,或者兩者都是。
這絕不是一次你想要的驚險(xiǎn)刺激的冒險(xiǎn),你以為這是小朋友突然翻了一次墻么?
賽博世界,我想要知道我在哪,我去哪。
騰訊玄武實(shí)驗(yàn)室技術(shù)專家徐少培說(shuō):“Google曾公開(kāi)表示在現(xiàn)代瀏覽器中,地址欄是唯一可靠的指示器?!?/p>
這句話應(yīng)該如何理解?通俗的來(lái)說(shuō)就是,如果地址欄上出現(xiàn)了安全問(wèn)題,后續(xù)所訪問(wèn)的Web頁(yè)面,可信任的體系將全部崩塌。
雷鋒網(wǎng)決定,先上個(gè)數(shù)據(jù)震撼一下你。
上周,Chrome 發(fā)布了最新的版本,在安全漏洞當(dāng)中,其中有16個(gè)漏洞由外部人員提交。在這16個(gè)漏洞當(dāng)中,中高危漏洞占了12個(gè),獲得了谷歌的漏洞獎(jiǎng)勵(lì)。在這 12 個(gè)漏洞當(dāng)中,有 3 個(gè)漏洞是地址欄上的漏洞,也就是說(shuō),Chrome瀏覽器作為目前業(yè)界公認(rèn)的最安全的瀏覽器,其中地址欄上的安全漏洞占比四分之一。
對(duì)瀏覽器廠商而言,不僅要消除軟件中的緩沖區(qū)溢出,最大的安全挑戰(zhàn)之一是如何幫助用戶在上網(wǎng)時(shí)做出正確和安全的決策。
因此,瀏覽器廠商絞盡腦汁。
很久以前,瀏覽器廠商搞出了一個(gè)安全指示符,就像是一枚路標(biāo),告訴你前方是一片坦途還是沼澤叢林。
安全指示符琳瑯滿目。你可能在地址欄看到的是一把綠色的小鎖,也可能是把灰色的大鎖,或是一個(gè)“地球”。
HTTP 和 HTTPS 又不同,一邊是白色符號(hào),而另外一邊可能是綠色符號(hào)。不同的符號(hào)究竟代表什么?這些符號(hào)背后有何深意?
2015年,谷歌曾就此采訪過(guò)1329人,尷尬的是,大部分人對(duì)于HTTPS這個(gè)指示符略有了解,看到有一個(gè)鎖,就知道可能是加密或者是安全的問(wèn)題。對(duì)于HTTP這個(gè)標(biāo)識(shí)符,一些專家可能都不太明白是什么意思。
看到這里你應(yīng)該高興,看,你又比專家多懂了一點(diǎn)點(diǎn)。
當(dāng)你點(diǎn)開(kāi)這些各種各樣的小符號(hào),其實(shí)又打開(kāi)了一片新天地:
內(nèi)有更多對(duì)當(dāng)前頁(yè)面權(quán)限的設(shè)置,以及這個(gè)網(wǎng)站是否安全等選項(xiàng)。
我們已經(jīng)了解到在地址欄中安全指示符如何來(lái)標(biāo)識(shí)當(dāng)前網(wǎng)站的安全狀態(tài),它是一枚路標(biāo),而統(tǒng)一資源定位符(URL)才是地址欄中的真正主角,它告訴你在哪和你要去哪,相當(dāng)于一張有定位的地圖。
基本URL包含模式(或稱協(xié)議)、服務(wù)器名稱(或IP地址)、路徑和文件名,如“協(xié)議://授權(quán)/路徑?查詢”。完整的、帶有授權(quán)部分的普通統(tǒng)一資源標(biāo)志符語(yǔ)法如下:協(xié)議://用戶名:密碼@子域名.域名.頂級(jí)域名:端口號(hào)/目錄/文件名.文件后綴?參數(shù)=值#標(biāo)志。
所謂協(xié)議,是有很多的:
http——超文本傳輸協(xié)議資源
https——用安全套接字層傳送的超文本傳輸協(xié)議
ftp——文件傳輸協(xié)議
mailto——電子郵件地址
ldap——輕型目錄訪問(wèn)協(xié)議搜索
file——當(dāng)?shù)仉娔X或網(wǎng)上分享的文件
news——Usenet新聞組
gopher——Gopher協(xié)議
telnet——Telnet協(xié)議
那么,這個(gè)URL 有哪些層面可以被黑客改造,導(dǎo)致你去了一個(gè)意想不到的地方?也許,我們可以反推一下,不至于著了道。
作為一個(gè)連續(xù)三次挖掘了chrome 瀏覽器地址欄漏洞的老司機(jī),徐少培對(duì)攻擊者可能偽造URL 的手段了如指掌:
1.這些協(xié)議在瀏覽器處理的時(shí)候都有可能出現(xiàn)問(wèn)題。
2.多級(jí)域名時(shí),瀏覽器地址可視空間很小,有可能把主機(jī)覆蓋掉,而顯示前面?zhèn)窝b的多級(jí)域名主機(jī)。
3.對(duì)于端口,目前默認(rèn)的端口是空,或者是無(wú)符號(hào)16位。如果超過(guò)65535,比如說(shuō)是10000的瀏覽器端口,如果是非數(shù)字ABCD端口會(huì)怎么處理呢?
4.Pathname,就是后面的目錄,有可能會(huì)偽造成主機(jī)。
5.#號(hào)后,瀏覽器格式在字符串時(shí)可能會(huì)出現(xiàn)問(wèn)題,
6.用戶名和密碼部分有可能會(huì)偽造成主機(jī)。
在了解完URL的各個(gè)參數(shù)后,徐少培給出了URL Spoof漏洞的詳細(xì)的定義和說(shuō)明。地址欄欺騙漏洞,偽造了Web最基本的安全邊界,起源(orgin)。
“URL中的任何一個(gè)部分,都有可能成為觸發(fā)地址欄欺騙(URL Spoof)漏洞的攻擊向量?!?/p>
徐少培說(shuō)。
比如,上述URL由一個(gè)四級(jí)域名構(gòu)成,Pathname的路徑偽造成了一個(gè)類域名的字符串。
在正確的地址欄中顯示,不管 URL 有多長(zhǎng),地址欄可視空間有多少,都要把正確的源顯示出來(lái),這個(gè) URL 中正確的源是evil.com。在前5個(gè)顯示中,不管怎么變化,都顯示了正確的源。
如果地址欄的顯示邏輯是,只顯示URL最左邊或最右邊,那么就會(huì)出現(xiàn)圖中最后所示的這種地址欄欺騙情況。
第一個(gè)是顯示了URL的最左邊,只顯示了多級(jí)域名的一部分;第二個(gè)的策略是,只顯示了URL的最右邊,顯示的是URL的pathname部分。
這兩種顯示方式,都沒(méi)有把真正的源顯示出來(lái)evil.com,用戶會(huì)認(rèn)為當(dāng)前訪問(wèn)的網(wǎng)站是的是login.your-bank.com。
事不過(guò)三,但是連續(xù) 2016年6月、8月、10月 三個(gè)最新版本的 Chrome 地址欄漏洞被徐少培找到,Chrome 不僅要面帶笑容,還要給獎(jiǎng)勵(lì)。
就喜歡看到“看不慣我又干不掉我”的情節(jié)。
從獎(jiǎng)金規(guī)格可以看出,這是一個(gè)比較“完美”的漏洞,所謂的完美就是,哎喲,兩個(gè)悟空一模一樣,根本分不出來(lái)誰(shuí)是誰(shuí)。
“漏洞呈現(xiàn)的最后攻擊效果就是這樣的,當(dāng)用戶點(diǎn)擊了一個(gè)鏈接,到達(dá)了Gmail,但是這個(gè) Gmail 的URL是由攻擊者偽裝的,頁(yè)面也是由攻擊者偽裝的。
當(dāng)你登錄 Gmail ,輸入用戶名和密碼時(shí),你的信息就被攻擊者獲取到了?!?/p>
徐少培說(shuō)。
輕而易舉,不帶一絲一毫的防備。
這個(gè)漏洞的原理如何實(shí)現(xiàn)?
當(dāng)用戶點(diǎn)擊按鈕時(shí),打開(kāi)了一個(gè)窗口頁(yè)面,然后寫(xiě)下”key payload”,把這段關(guān)鍵代碼單獨(dú)拿出來(lái),如圖中用灰色來(lái)標(biāo)識(shí)的關(guān)鍵代碼。
這個(gè)代碼在當(dāng)前頁(yè)面又打開(kāi)了一個(gè)窗口,導(dǎo)航到一個(gè)地址,圖中黃色標(biāo)識(shí)的 URL 就是導(dǎo)航地址。但是,大家可以看到這是一個(gè)畸形的URL,最后有兩個(gè)冒號(hào),瀏覽器默認(rèn)是無(wú)法去解析的,于是漏洞就觸發(fā)了。
黃色的畸形URL有什么威力?使瀏覽器發(fā)生了什么?
瀏覽器的導(dǎo)航機(jī)制是這樣的:先判斷是否允許跳轉(zhuǎn)到一個(gè)頁(yè)面,在這個(gè)漏洞中Chrome判斷這個(gè)畸形的URL(https://gmail.com::)時(shí),允許加載它。
這是錯(cuò)誤的開(kāi)始,加載了一個(gè)無(wú)效地址,并未對(duì)無(wú)效地址做任何處理。
于是瀏覽器開(kāi)始加載這個(gè)畸形URL,因加載的是一個(gè)無(wú)效的地址,于是地址欄處于一個(gè)掛起的狀態(tài)(pendingentry)。
當(dāng)內(nèi)容開(kāi)始返回時(shí),調(diào)用‘a(chǎn)bout:blank’,但此時(shí)chrome還處于一個(gè)掛起狀態(tài) (‘https://gmail.com::’) ,并且把‘https://gmail.com::’ 作為了最終的提交地址。
頁(yè)面加載完成。最后停留在了偽造的頁(yè)面中。而且,兩個(gè)冒號(hào)會(huì)被完全隱藏掉。一個(gè)完美的地址欄欺騙漏洞就這樣產(chǎn)生了。
這就是犯罪后還順便清理了犯罪現(xiàn)場(chǎng),造成什么都沒(méi)發(fā)生的假象!
“在這個(gè)漏洞發(fā)現(xiàn)后兩個(gè)月,我又連續(xù)尋找新的漏洞。在被我找到漏洞的53版本修復(fù)成54版本上,我在fuzzingURL協(xié)議時(shí)發(fā)現(xiàn),針對(duì)不同的協(xié)議,瀏覽器地址欄有不同的處理方式?!?/p>
徐少培說(shuō)。
這一切發(fā)生在BLOB (binary large object)協(xié)議上,是一個(gè)可以存儲(chǔ)二進(jìn)制文件的容器?!癰lob URLs”方案允許從Web應(yīng)用程序中安全的訪問(wèn)二進(jìn)制數(shù)據(jù),也就是從“內(nèi)存”中對(duì)Blob的引用。一個(gè)“blob URLs”包括主機(jī)源和一個(gè)由UUID表示的路徑。
按照安全同源策略,你不可能直接打開(kāi)一個(gè)你不能控制域的 blob 的URL,通過(guò)這個(gè)頁(yè)面,從視覺(jué)感官上我們成功打開(kāi)了谷歌域的blob的URL,但這其實(shí)是偽造的。
如何做到的?
當(dāng)你點(diǎn)擊這個(gè)按鈕之后,其實(shí)首先打開(kāi)了一個(gè)攻擊者可控制域的 Blob 的URL,就是圖片中黃色關(guān)鍵核心代碼。
500毫秒后,在這個(gè)頁(yè)面上寫(xiě)入偽造內(nèi)容。黃色的關(guān)鍵代碼中,@后面的域才是攻擊者的域,就是可以控制的,而前面那些都是偽造的。
首先,偽造了一個(gè)谷歌域名字符串,之后加上大量的空白字符。瀏覽器遇到這樣的URL。Chrome會(huì)怎么處理?
Chrome其實(shí)犯了一個(gè)非常嚴(yán)重的邏輯錯(cuò)誤,一直對(duì)主流協(xié)議如HTTPS、HTTP做了很多安全上限制,反而可能對(duì)邊緣化的協(xié)議沒(méi)有太注意。
其實(shí),這個(gè)漏洞渲染了用戶名和密碼的部分,就是@符號(hào)前面的部分,邏輯上不應(yīng)該去渲染。瀏覽器底層可以去解析這部分內(nèi)容,但是在 前端UI上應(yīng)該顯示出來(lái)。
因?yàn)橐粋€(gè)URL的用戶名和密碼一旦被渲染,極有可能被用戶認(rèn)為是這個(gè)URL的主機(jī)。
比如,列舉的這個(gè)鏈接,如果直接全被渲染,@前面的字符串就有可能被認(rèn)為是URL的主機(jī),也就是偽造了這個(gè)域名。
在主機(jī)前面加入了偽造字符串后,又加入了大量的空白符號(hào),在現(xiàn)代瀏覽器中已經(jīng)不允許這么做了,大量的空白符被解析會(huì)把真正的主機(jī)覆蓋。
人們?cè)趯?dǎo)航到一個(gè)新的網(wǎng)站時(shí),可能都用左鍵去點(diǎn)擊。但你有沒(méi)有想過(guò),比如點(diǎn)擊右鍵,再點(diǎn)擊從新窗口打開(kāi)這種方式?
真是出其不意的鬼畜!
最后,欺騙的效果就是偽造了谷歌的域,頁(yè)面內(nèi)容同樣可以被改寫(xiě),這個(gè)漏洞因?yàn)橛|發(fā)起來(lái)可能需要用戶的一個(gè)小交互(右鍵點(diǎn)擊),所以當(dāng)時(shí)只給了500美元的獎(jiǎng)勵(lì)。
徐少培解釋完最后一個(gè)漏洞,說(shuō)起500美元,一副輕描淡寫(xiě)的樣子。
剩下三次被“擊中”的谷歌chrome哭暈在廁所。
一本武林秘籍中,前面的幾招幾式可以模仿并不讓人驚奇。最重要的是,如何領(lǐng)悟武學(xué)大師的最高奧義。
徐少培通過(guò)之前發(fā)現(xiàn)的幾十個(gè)地址欄上的漏洞,提出了“地址欄之困”也是挖掘URL Spoof漏洞的核心奧義。
你在哪?你要去哪?瀏覽器地址欄其實(shí)是個(gè)矛盾體,在兩個(gè)相互競(jìng)爭(zhēng)的角色中掙扎。
在左右手互博之中,只有唯一的一條出路。
理解了這一層奧義,才能熟稔萬(wàn)千招式,我自巋然不動(dòng)。
徐少培站在山頂,微笑不語(yǔ)。
雷鋒網(wǎng)注:本文部分資料來(lái)源于騰訊玄武實(shí)驗(yàn)室徐少培在中國(guó)網(wǎng)絡(luò)安全大會(huì)(NSC2017)“大師講堂”上的演講,本屆中國(guó)網(wǎng)絡(luò)安全大會(huì)由賽可達(dá)實(shí)驗(yàn)室、國(guó)家計(jì)算機(jī)病毒應(yīng)急處理中心、國(guó)家網(wǎng)絡(luò)與信息系統(tǒng)安全產(chǎn)品質(zhì)量監(jiān)督檢驗(yàn)中心、首都創(chuàng)新大聯(lián)盟共同舉辦。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。