當前位置:
首頁 > 新聞 > 利用HSTS嗅探瀏覽器歷史紀錄的三個漏洞

利用HSTS嗅探瀏覽器歷史紀錄的三個漏洞


*本文原創作者:tocttou,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載



HSTS是讓瀏覽器強制使用HTTPS訪問網站的一項安全策略。HSTS的設計初衷是緩解中間人攻擊帶來的風險。本文主要介紹HSTS及其他Web功能帶來的一些隱私問題,比如如何利用它們來探測瀏覽器的用戶歷史紀錄。


作者 | tocttou





一、背景:什麼是HSTS




HSTS的英文全稱是HTTP Strict Transport Security,中文譯作HTTP嚴格傳輸安全。2012年11月IETF發布RFC 6797,在這篇文檔中正式定義了HSTS。HSTS的開啟方式是在HTTP響應頭中加入Strict-Transport-Security欄位。如:Strict-Transport-Security: max-age=31536000 。




這意味著在接下來的31536000秒內(1年),當瀏覽器需要訪問同一個域名時,必須使用HTTPS,並且用戶不可以忽略證書錯誤警告。使用HSTS避免了一系列的中間人攻擊問題,比如HTTPS剝離攻擊 [1]、HTTPS Cookie注入攻擊 [2]等。




設置HTTP響應頭的方法雖然可以規避大量的中間人攻擊,但是用戶的第一次訪問仍然是不受HSTS保護的。於是誕生了瀏覽器預置HSTS列表。網站站長可以主動向Chrome團隊提交自己的域名。批准後,各主流瀏覽器廠商(不只是Chrome)會在編譯新版瀏覽器時將你的域名硬編碼進內置HSTS列表中。




現在已經有越來越多的網站開啟了HSTS,比如Google、百度、支付寶等。根據trustworthyinternet.org 發布的SSL Pulse報告顯示,截至2017年5月,有11.8%的網站支持HSTS [3]。最新版的主流瀏覽器也都支持HSTS,比如Chrome、Edge、IE 11、Firefox、Opera、Safari等。





二、漏洞一:利用埠號和標籤探測歷史紀錄




上一節所述的都是HSTS好的一方面,下面來說HSTS導致的問題。第一個漏洞是我和Vlad Tsyrklevich在2014年獨立發現的 [4][5]。簡單來說,如果www.example.com開啟了HSTS,如果用戶沒有訪問過它,那麼 http://www.example.com:443/favicon.ico 一定會訪問失敗。

如果訪問過,那麼HSTS會使瀏覽器請求https://www.example.com:443/favicon.ico,這樣就會成功(如果不存在favicon.ico這個圖片的話,就任選一個這個域名下其他圖片地址)。所以我們用,如果onerror被調用就說明沒有訪問過www.example.com,如果onload被調用就說明訪問過。



這個方法有一定的限制,比如被測試的域名必須要使用HSTS,並且不能在HSTS預置列表中。而且只能判斷一個域名是否訪問過,而無法測試整個URL是否被訪問過。




這個漏洞我報給了Chromium團隊,報告和完整PoC可參見 [4]。我的建議是禁止http協議使用443埠。但是由於這樣會給WebSocket造成兼容性問題,並且這個漏洞影響小,所以他們最終決定不修復這個漏洞。




網站可以把自己的域名提交到HSTS預置列表來規避這個漏洞。用戶可以通過清空歷史紀錄避免這個漏洞,因為清空歷史記錄會同時清空動態設定的HSTS記錄。





三、漏洞二:Sniffly — 利用HSTS和CSP探測歷史紀錄




這個漏洞是由雅虎的安全工程師Yan Zhu於2015年發現的。她在Toorcon 2015會議上講述了這個漏洞(演講視頻參見[6],幻燈片參見[7]),並把這個漏洞命名為Sniffly。Freebuf之前也有一篇文章《Sniffly: 利用HSTS和CSP嗅探瀏覽器歷史記錄》[8],就是寫這個漏洞的。




這個漏洞利用CSP(內容安全策略)來阻止https協議的圖片,而同時允許http協議。這個CSP是這樣設置的:Content-Security-Policy: img-src http://*。這樣如果有一個http到https的重定向,那麼這個CSP將在這個重定向發生之後,阻止https請求,並調用onerror handler。



攻擊者可以使用JavaScript來測從http請求發出到https被阻止之間的時間間隔,這個時間間隔就是重定向所需時間。如果這個時間很短(小於10毫秒),那麼我們可以認為瀏覽器沒有向伺服器發送任何請求,也就是說這個重定向來源於HSTS或者是緩存的301重定向。這樣我們就知道用戶曾經訪問過這個域名。




這個漏洞很快地在Chrome中修復了,漏洞編號是CVE-2016-1617。修復方法是:如果CSP中指定了http://*,則它同時允許http和https協議。這樣就沒法用這個方法屏蔽http到https的重定向。Yan Zhu給Chrome提交的漏洞報告和PoC可參見 [9]。





四、漏洞三:利用HSTS、CSP和埠號探測歷史記錄



這個漏洞是我在2016年,看完漏洞二的細節後想出來的繞過方法。首先我們看Google對漏洞二的修復代碼 [10]:




補丁在WebKit/Source/core/frame/csp/CSPSource.cpp文件中的CSPSource::schemeMatches函數中加入了下面4行代碼:



這個代碼的意思就是當CSP中的協議是http時,url的協議是http或https都能成功匹配。ws是WebSocket協議,同樣CSP中指定的ws協議可以同時匹配ws和wss。


很顯然這個修復只考慮了URL中的協議部分,所以我想到利用漏洞一中的技巧,我們在CSP中顯式指定埠號,就繞過了修復。



比如,我們設置這個CSP策略:

i

mg-src http://example.com:80。漏洞二修復之後,這個CSP會允許http://example.com:80和https://example.com:80,但是後一個URL並沒有意義,因為https不用80埠,而真正的https://example.com依然被阻止,因為https的埠號不匹配」:80」。有了這個思路之後,剩下的利用方法就和漏洞二一樣了,也是測http到https的重定向時間。




這個漏洞同時存在於Chrome、Firefox、WebKit。但Edge、IE不存在這個漏洞。Edge是在https請求返回之後才調用

onerror

,所以Edge中無法計算重定向時間。


給Chrome的報告和PoC在[11],給Mozilla的報告在[12],給WebKit的報告在[13]。他們都早已修復完畢。漏洞編號是CVE-2016-5137(Chrome)和CVE-2016-9017(Firefox)。Google還給了我1000美元獎金。





五、總結




這篇文章主要介紹了什麼是HSTS以及和HSTS相關的三個漏洞。這三個漏洞影響都不大,但是我寫出來主要為了分享,如何靈活運用埠號這個技巧來繞過相關限制。HSTS其實還能當Cookie用,也是HSTS帶來的隱私問題,鑒於和本文關係不大,就不涉及了,想了解的話可參見[14]。





六、參考文獻




[

1]https://blackhat.com/presentations/bh-dc-09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf


[2]https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-zheng-updated.pdf


[3]https://www.trustworthyinternet.org/ssl-pulse/


[4]https://bugs.chromium.org/p/chromium/issues/detail?id=436451


[5]https://bugzilla.mozilla.org/show_bug.cgi?id=1090433


[6]https://www.youtube.com/watch?v=kk2GkZv6Wjs


[7]https://zyan.scripts.mit.edu/presentations/toorcon2015.pdf


[8]http://www.freebuf.com/articles/87641.html


[9]https://bugs.chromium.org/p/chromium/issues/detail?id=544765


[10]https://chromium.googlesource.com/chromium/src.git/+/ab830edb26a1f56f660b06459d70e1d48a707975


[11]https://bugs.chromium.org/p/chromium/issues/detail?id=625945


[12]https://bugzilla.mozilla.org/show_bug.cgi?id=1285003


[13]https://bugs.webkit.org/show_bug.cgi?id=159520 (尚未公開)


[14]https://nakedsecurity.sophos.com/2015/02/02/anatomy-of-a-browser-dilemma-how-hsts-supercookies-make-you-choose-between-privacy-or-security/


*本文原創作者:tocttou,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

看我如何偽裝成APT28進行假冒攻擊
WannaCry勒索病毒中的愚蠢Bug,贖金打水漂可能正是該漏洞所致
10款中小企業必備的開源免費安全工具

TAG:FreeBuf |

您可能感興趣

今日數據趣談:水花+KD一紀錄歷史僅遜Run TMC
游知有味:PC GAMER向你講述FPS遊戲的歷史(一)
BEYOND歷史之四子精彩圖集
歷史RTS《祖先:遺產》發行日公布 登陸XB1/PC
NCPSSD文摘︱羅志田:歷史能否截取而研究?
小米或以港股+CDR方式上市 BAT歷史或將被改寫
GTA發行商Take-Two的「黑歷史」(下):一群專門締造神作的人
是類雲計算、ARVR、3D列印的歷史性技術進步
ios抓包歷史版本APP
BEYOND歷史之三人行
魅族新專利開歷史倒車?圓形HOME鍵像極了iPhone8
創·紀錄,HTC營收額歷史新低
遊戲《龍珠:超宇宙2》新DLC《無限歷史》PV公開
震驚丨美軍歷史上最丟臉的事之一:GAY BOMB!
AMD、Intel CPU價格處於歷史低位,正是入手好時機
S系列成為歷史?傳三星將改用「Galaxy X」的名稱
Android OS歷史版本
小米MIX2頂配再降價 魅藍Note6歷史新低
7秒吼姆視頻公開!本周BOSS打法歷史推送匯總
「PW早報」Google Play下載量創歷史紀錄