通過偽造Tor隱藏服務(wù)實(shí)現(xiàn)網(wǎng)絡(luò)釣魚的技術(shù)分析
一、寫在前面的話
SMS Privacy(一個(gè)使用比特幣購買匿名手機(jī)號(hào)的服務(wù))現(xiàn)在已經(jīng)成為了一種Tor隱藏服務(wù),但現(xiàn)在大約只有不到10%的用戶會(huì)以這種隱藏服務(wù)的方式來使用它。在這篇文章中,我將跟大家分析一下攻擊者如何使用Tor隱藏服務(wù)來創(chuàng)建一個(gè)釣魚網(wǎng)站。
二、概述
今天故事的主人公是Charlie,當(dāng)時(shí)他用Google搜索了“site:*.onion.to smsprivacy”的相關(guān)信息,并且得到了意想不到的結(jié)果。
smspriv6fynj23u6.onion是一個(gè)合法的隱藏服務(wù)名稱,但是在搜索結(jié)果中卻出現(xiàn)了另一個(gè)看起來非常相似的網(wǎng)站:smsprivyevs6xn6z.onion。
經(jīng)過簡單的分析調(diào)查之后,他發(fā)現(xiàn)該網(wǎng)站只是一個(gè)簡單的代理:頁面請求首先會(huì)發(fā)送給一個(gè)釣魚網(wǎng)站,然后最終被轉(zhuǎn)發(fā)到真正的隱藏服務(wù),最終返回響應(yīng)數(shù)據(jù)。但是,這里還存在一些奇怪的地方。
1. 缺少Content-Length 頭
Content-Length 頭可以告訴HTTP客戶端需要接收多少個(gè)字節(jié)的內(nèi)容。對于一個(gè)配置不當(dāng)?shù)拇矸?wù)器,如果傳遞的內(nèi)容沒有改變的話,那么Content-Length 頭就不會(huì)發(fā)生變化。因?yàn)樗纼?nèi)容不變的話數(shù)據(jù)的長度肯定不會(huì)變。
這也就意味著,如果代理服務(wù)器認(rèn)為內(nèi)容的長度可能會(huì)發(fā)生變化的話,那么就說明在某些情況下,服務(wù)器已經(jīng)準(zhǔn)備好去修改數(shù)據(jù)包的內(nèi)容了。
但是為什么不可以根據(jù)修改版的數(shù)據(jù)包內(nèi)容來寫入相應(yīng)的Content-Length呢?
原因很可能是為了降低頁面的加載時(shí)間:如果代理不需要事先知道數(shù)據(jù)包的長度,那么它就可以在修改完數(shù)據(jù)包的內(nèi)容之后直接將內(nèi)容發(fā)送給客戶端了。如果它還要讀取所有的內(nèi)容,然后進(jìn)行修改,最后再將所有數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā)的話,這樣就會(huì)增加頁面的加載時(shí)間并引起不必要的懷疑。
2. Connection 頭錯(cuò)誤
下面給出的是合法網(wǎng)站與釣魚網(wǎng)站響應(yīng)頭之間的對比:
合法網(wǎng)站:
- $ torsocks curl -Ihttp://smspriv6fynj23u6.onion/
- HTTP/1.1 200 OK
- Server: nginx/1.10.2
- Date: Fri, 13 Oct 2017 05:37:49 GMT
- Content-Type: text/html;charset=UTF-8
- Content-Length: 7387
- Connection: keep-alive
- Set-Cookie: [...]
- X-Frame-Options: DENY
釣魚網(wǎng)站:
- $ torsocks curl -Ihttp://smsprivyevs6xn6z.onion/
- HTTP/1.1 200 OK
- Server: nginx/1.10.2
- Date: Fri, 13 Oct 2017 05:37:57 GMT
- Content-Type: text/html;charset=UTF-8
- Connection: [object Object]
- Set-Cookie: [...]
- X-Frame-Options: DENY
Connection 頭會(huì)從keep-alive被重寫成[objectObject]。當(dāng)你將一個(gè)對象(如果這個(gè)對象沒有實(shí)現(xiàn)toString()方法)轉(zhuǎn)換成字符串的時(shí)候,你將會(huì)在JavaScript中看到這種轉(zhuǎn)換的發(fā)生,這對于我們分析代理服務(wù)器運(yùn)行的是哪一種軟件提供了非常有幫助的線索。
經(jīng)過分析之后,我認(rèn)為它很有可能使用的是NodeJS。我在node-http-proxy或Harmon(用于修改響應(yīng)信息的中間件)中都沒有發(fā)現(xiàn)任何可以觸發(fā)該漏洞的地方,所以這很有可能是攻擊者自己實(shí)現(xiàn)的。如果你知道有哪一款軟件中的漏洞可以允許將Connection頭修改為[object Object]的話,請一定要告訴我。
除此之外,我還添加了一些Javascript腳本來對這個(gè)釣魚網(wǎng)站進(jìn)行了進(jìn)一步的分析,并且發(fā)現(xiàn)該網(wǎng)站采用了一種額外的緩存機(jī)制,其目的應(yīng)該還是為了降低頁面的加載時(shí)間。
3. 隱藏服務(wù)的地址發(fā)生了改變
代理似乎會(huì)將smspriv6fynj23u6.onion的所有實(shí)例全部重寫到smsprivyevs6xn6z.onion,但有意思的是大小寫會(huì)發(fā)生變化。
4. 比特幣地址發(fā)生了改變
比特幣是這個(gè)釣魚網(wǎng)站真正的目的,一般來說,釣魚網(wǎng)站的目標(biāo)是為了竊取用戶的帳號(hào)憑證,但是這個(gè)網(wǎng)站的目的似乎更加直接,它就是要騙用戶的比特幣。(注:其中的一個(gè)比特幣地址:
1GM6Awv28kSfzak2Y7Pj1NRdWiXshMwdGW)
當(dāng)用戶首次訪問支付頁面的時(shí)候,頁面的加載會(huì)有一定的延遲,這很可能是后臺(tái)正在生成新的比特幣地址。所有新生成的比特幣地址會(huì)以文本形式顯示出來,但支付頁面上的二維碼卻沒有發(fā)生變化,掃描之后出來的仍然是原本合法的地址。
三、網(wǎng)站如何分發(fā)給用戶
我在分析的過程中還發(fā)現(xiàn)了另外兩個(gè)隱藏服務(wù):
- 7cbqhjnpcgixggts.onion:”The onion crate”:這是一個(gè)Tor隱藏服務(wù)列表,類似于以前的“Web目錄”,但這是針對Tor的。其中的釣魚版本會(huì)被專門標(biāo)記為“釣魚鏈接”。
- hss3uro2hsxfogfq.onion:”not Evil”:這是一個(gè)針對Tor隱藏服務(wù)的搜索引擎。搜索“sms privacy”后,返回的第一條結(jié)果是合法網(wǎng)站,而第二條結(jié)果就是釣魚網(wǎng)站。我點(diǎn)擊了釣魚網(wǎng)站下面的“report abuse”按鈕,但是現(xiàn)在這個(gè)網(wǎng)站還是沒有被移除。
這跟我想的完全不一樣,我一開始以為攻擊者可能會(huì)在Twitter、博客或者其他諸如此類的地方放置一條釣魚鏈接的,而不是直接通過搜索引擎顯示給用戶。如果我想讓用戶去訪問我的釣魚網(wǎng)站,我肯定不會(huì)將其標(biāo)記為“釣魚鏈接”。我不認(rèn)為“The onion crate”的管理人員與此事件有關(guān),我感覺“not Evil”搜索引擎的運(yùn)營者會(huì)是此次事件背后的始作俑者,不過我現(xiàn)在也無法確定。因?yàn)槿绻乙_發(fā)一個(gè)專門給用戶發(fā)送釣魚鏈接的搜索引擎,那我根本不會(huì)給用戶返回非釣魚網(wǎng)站的鏈接,尤其是第一個(gè)結(jié)果就是合法網(wǎng)站。
還有一種可能,就是這一網(wǎng)絡(luò)釣魚活動(dòng)并沒有正式開始,但“The onion crate”在2017年5月17日就將其標(biāo)記為了釣魚鏈接,說明它的存在已經(jīng)有一定的時(shí)間了。
四、用戶如何保護(hù)自己
SMS Privacy的用戶首先要確保自己在瀏覽smsprivacy.org時(shí)使用的是HTTPS,或者說如果用戶使用的是Tor,那么smspriv6fynj23u6.onion是唯一的合法隱藏服務(wù)地址,其他所有類似的地址都是釣魚網(wǎng)站。
進(jìn)一步研究
我猜測,運(yùn)行這個(gè)代理的軟件同時(shí)還代理了很多其他的隱藏服務(wù)。當(dāng)你想自己編寫一些代碼來代理一個(gè)隱藏服務(wù)時(shí),你只需要重寫域名和比特幣地址,基本上就可以搞定了。
接下來,我又進(jìn)行了一些深入研究。我查看了“The onion crate”并尋找其他的釣魚鏈接,然后我找到了一個(gè)在響應(yīng)頭中給出了Connection: [object Object]并將網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)發(fā)給偽造的SMS Privacy隱藏服務(wù)地址的釣魚網(wǎng)站。分析后發(fā)現(xiàn),這個(gè)隱藏服務(wù)與SMS Privacy合法服務(wù)毫不相關(guān),但它能夠給用戶提供偽造的SMS Privacy內(nèi)容!這也就意味著,這兩個(gè)釣魚網(wǎng)站很可能是跟同一個(gè)黑客或黑客組織有關(guān)的。HTTP數(shù)據(jù)如下所示:
- $ torsocks curl -I -H 'Host:smsprivyevs6xn6z.onion' http://cboc66yz75virnj7.onion
- HTTP/1.1 200 OK
- Server: nginx/1.10.2
- Date: Fri, 13 Oct 2017 16:26:10 GMT
- Content-Type: text/html;charset=UTF-8
- Connection: [object Object]
- Set-Cookie: mojolicious=eyJsYW5kaW5nX3VybCI6Ii8iLCJhYnRlc3RzIjp7ImxhbmRpbmdfdXJsIjoiLyIsInNpZ251cGxpbmsiOiJvcmlnaW5hbCIsInJlZmVyX3NyYyI6Im5vbmUiLCJoaWRkZW5fc2VydmljZSI6ImhpZGRlbiJ9LCJleHBpcmVzIjoxNTA3OTE1NzE1LCJjc3JmX3Rva2VuIjoiZmQzNjc4NzcyMjRiNDZkZWZhYjNhM2ViZDIwMDY0ZmRmMDliZmQ0NCIsImFidGVzdHNfc2Vzc2lvbmlkIjoiOGM4NWQxMTZjMmE1MTBkOSJ9--785fbe83dce1217e74543ed831eb4c18c1cd6105;expires=Fri, 13 Oct 2017 17:28:35 GMT; path=/; HttpOnly
- X-Frame-Options: DENY
五、總結(jié)
實(shí)際上,攻擊者可以輕而易舉地利用這項(xiàng)技術(shù)來發(fā)動(dòng)大規(guī)模攻擊,因?yàn)橹恍枰粋€(gè)周末的時(shí)間就可以開發(fā)出一個(gè)可以正常使用的版本。而且我相信在不久的將來,會(huì)有更多的攻擊者使用其他的Tor隱藏服務(wù)來制作釣魚網(wǎng)站。