【流量劫持】躲避 HSTS 的 HTTPS 劫持
前言
HSTS 的出現(xiàn),對 HTTPS 劫持帶來莫大的挑戰(zhàn)。
不過,HSTS 也不是萬能的,它只能解決 SSLStrip 這類劫持方式。但仔細(xì)想想,SSLStrip 這種算劫持嗎?
劫持 vs 釣魚
從本質(zhì)上講,SSLStrip 這類工具的技術(shù)含量是很低的。它既沒破解什么算法,也沒找到協(xié)議漏洞,只是修改和代理了明文的封包而已。
如果說劫持,要保持源站點(diǎn)不變才算的話,那 SSLStrip 并沒做到。根據(jù)同源的定義,<協(xié)議, 主機(jī)名, 端口> 三者必須相同。顯然它修改了協(xié)議,因此并非在源站點(diǎn)上劫持,而是進(jìn)入了另個(gè)不同的站點(diǎn)。
既然站點(diǎn)都不同,那就屬于釣魚網(wǎng)站了。
但這種釣魚之所以會如此隱蔽,和大家的常理有關(guān):對大部分用戶來說,只要主機(jī)名正確那就對了,至于協(xié)議和端口,很少有人去關(guān)心。
而 SSLStrip 正好利用了人們的認(rèn)知弱點(diǎn),確實(shí)沒有修改網(wǎng)站主機(jī)名,從而欺騙了大部分用戶。
因此更確切的說,這就是一種高級釣魚。
進(jìn)一步釣魚
由于 HSTS 這種反釣魚的機(jī)制出現(xiàn),即使蒙的了用戶,但也騙不過瀏覽器。
HSTS 正是以主機(jī)名為單位的。在新的版本里,甚至還支持所有子域名(includeSubDomains)。
如果還抱有僥幸心理,期望能過濾首次的 HSTS 頭,那么 Preloading HSTS 能讓瀏覽器天生就記住某些網(wǎng)站。徹底打消 SSLStrip 的念頭。。。
不過,剛剛也說了,SSLStrip 本質(zhì)就是網(wǎng)站釣魚。既然都釣魚了,何必這樣鬼鬼祟祟的反倒被發(fā)現(xiàn),為何不正大光明的釣?
反正釣魚考的就是用戶眼力,不如再進(jìn)一步,干脆把主機(jī)名也改了吧!眼力不好的人,可能還是看不出破綻。
例如,將原本 https://www.alipay.com 的鏈接,跳轉(zhuǎn)到 http://www.alipay.cn 這個(gè)釣魚網(wǎng)站,仍會有不少用戶覺察不到。
而 www.alipay.cn 這個(gè)虛假的主機(jī)名,顯然不會在 HSTS 白名單中,因此又可以無限劫持了!
在流量劫持的環(huán)境里,任何明文數(shù)據(jù)都是可控的。即使訪問 www.alipay.cn 這種不存在的域名,中間人也可模擬 DNS 應(yīng)答,從而可偽造出各種看起來相似的釣魚站點(diǎn)。
在之前那篇 《SSLStrip 的未來 —— HTTPS 前端劫持》 中,我們是在 URL 的 Query 中進(jìn)行偽裝的:
雖然修改了 URL,但主機(jī)名沒變,因此仍躲不過 HSTS。
所以,我們需要將 symbol 標(biāo)記轉(zhuǎn)移到域名里:
將頁面中出現(xiàn)的 HTTPS 域名稍作修改,就是完全不同的一個(gè)站點(diǎn)了,因此即可徹底擺脫 HSTS 的白名單。
例如把域名都替換成 .cn 的,原本 www.alipay.com 就變成 www.alipay.cn 了,這樣即使用戶瀏覽器里存在 HSTS 記憶,那也是之前的,這個(gè)臨時(shí)偽造出來的釣魚站點(diǎn),自然不會有的。
盡管站點(diǎn)完全不同,但表面上看起來仍是相似,因此用戶仍然不易察覺。
同時(shí),中間人能夠識別出域名中的這個(gè)被修改過的特征,在轉(zhuǎn)發(fā)時(shí)還原回先前的域名,進(jìn)行正常代理。
保留綠色證書
對于大部分用戶來說,地址欄里醒目的 HTTPS 綠色證書,是一只強(qiáng)心劑。而 SSLStrip 剝離了協(xié)議,顯然是不可能出現(xiàn)了。
但如今通過修改主機(jī)名,能否要回這個(gè)圖標(biāo)?
如果想有,顯然得申請一個(gè)合法的證書。但要將所有的 .cn 域名都配上數(shù)字證書,肯定是不現(xiàn)實(shí)的。
不過既然是釣魚網(wǎng)站,主機(jī)名也可以隨意改,何必困死在頂級域名上?
我們可以申請一個(gè)泛域名證書,例如 *.xx.com。這樣,將目標(biāo)站點(diǎn)都套在該二級域名下,即可以 HTTPS 協(xié)議進(jìn)行釣魚了。
(這里以自簽署的證書演示)
雖然域名相比之前差別較大,但有醒目的綠色證書,反而更容易被蒙蔽了。
HSTS 的意義
由于釣魚的方式可以千變?nèi)f化,因此 HSTS 也很難從根本上進(jìn)行防御。
當(dāng)然,這并不意味 HSTS 沒有實(shí)際作用。事實(shí)上 HSTS 還是能夠避免很大部分的風(fēng)險(xiǎn)。其中最典型的,就是用戶在地址欄里敲入網(wǎng)址的情況。
在過去,未提供的協(xié)議的網(wǎng)址,都是以默認(rèn)的 HTTP 方式請求,因此在這個(gè)入口就有極大的風(fēng)險(xiǎn)。而 HSTS 的出現(xiàn),很大程度的解決了這個(gè)隱患。
如今,像百度這樣的大型導(dǎo)流網(wǎng)站,都在逐步支持 HTTPS 升級,從而在入口源頭上堵住這個(gè)安全隱患。
防御方案
盡管是釣魚,但也不是完全沒有防御方案。
從攻擊者的角度來看,如果要為各種站點(diǎn)制作一個(gè)釣魚網(wǎng)站,成本是極大的。而且更新起來也不容易,數(shù)據(jù)也難以保持實(shí)時(shí)。
因此,通常是直接代理線上的站點(diǎn)內(nèi)容。既然這樣,不妨在網(wǎng)頁中悄悄加入些監(jiān)控腳本,統(tǒng)計(jì)當(dāng)前頁面究竟在哪些域名里出現(xiàn)過,就能快速找出一些釣魚網(wǎng)站了。
當(dāng)然,攻擊者也可以過濾掉這段監(jiān)控腳本,這就是后期對抗的事了。
總結(jié)
以上是生活随笔為你收集整理的【流量劫持】躲避 HSTS 的 HTTPS 劫持的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几种排序算法的认识
- 下一篇: Converting slapd.con