標籤:

如何通過偽造Tor隱藏服務進行釣魚?

經過調查,作為Tor隱藏服務的一種,10%的Tor用戶使用了其中的SMS隱私服務。不過就是這麼一個服務卻被黑客鑽了空子,本文就給你詳細介紹一下黑客是如何通過偽造Tor隱藏服務來進行釣魚的。

案例回顧

有一天我在谷歌搜索」site:*.onion.to smsprivacy」時,卻出現了一個意想不到的結果。正常情況下,搜索出的合法的隱藏服務名稱應該是smspriv6fynj23u6.onion,但奇怪的是當天的搜索結果卻為smsprivyevs6xn6z.onion。

通過簡單的分析,我發現smsprivyevs6xn6z.onion僅是一個簡單的代理站點,因為發送到釣魚網站的頁面請求被轉發給了真正的隱藏服務,而且除了一些特殊的性能之外,這些響應還被轉發了。

Content-Length標頭丟失

Content-Length標頭會告訴HTTP客戶端需要多少位元組的內容,不過對於代理伺服器來說它只會通過固定的位元組內容來進行內容傳遞或者是保持Content-Length標頭不變進行傳遞。因為它知道,如果內容不改變標頭長度也不會改變。這很可能是代理伺服器在某些情況下會對內容長度進行的修改,不過我就奇怪了,為什麼在內容修改時,它不直接編寫與修改內容對應的內容長度呢?

我猜測有兩個原因:

1.一個可能是為了減少頁面載入時間,如果代理站點不需要提前對內容長度作出預判,那它就可以直接向客戶端傳輸內容,並按照它的方式進行修改。假如它必須讀取所有的內容,才會執行修改,那麼隨後發送的所有內容就會增加頁面載入時間,從而暴露自己。2.另一個可能是,惡意開發者要將所有內容存儲成不可接收的內存負載(load memory)。如果同一個伺服器代理數十到數百個其他隱藏的服務,那這種可能性猜測就是合理的。

Connection標頭錯誤

以下是合法站點和釣魚站點情況下的響應標頭的比較:

$ torsocks curl -I http://smspriv6fynj23u6.onion/HTTP/1.1 200 OKServer: nginx/1.10.2Date: Fri, 13 Oct 2017 05:37:49 GMTContent-Type: text/html;charset=UTF-8Content-Length: 7387Connection: keep-aliveSet-Cookie: [...]X-Frame-Options: DENY

合法站點的響應標頭

$ torsocks curl -I http://smsprivyevs6xn6z.onion/HTTP/1.1 200 OKServer: nginx/1.10.2Date: Fri, 13 Oct 2017 05:37:57 GMTContent-Type: text/html;charset=UTF-8Connection: [object Object]Set-Cookie: [...]X-Frame-Options: DENY

釣魚站點的響應標頭

Connection標頭從keep-alive重寫為[object Object]。如果對象不執行toString(),那麼當你將對象轉換為字元串時,在javascript中得到的結果就如上圖中釣魚站點的響應標頭那樣,這可能就是編寫代理伺服器運行軟體的一個思路。

很可能它使用了Node.js,Node.js 是一個基於 Chrome V8 引擎的 JavaScript 運行環境。Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。因為我無法發現任何會在node-http-proxy或Harmon(node-http-proxy的中間件修改響應)中導致此錯誤的任何內容。當然這可能是完全基於傳統習慣的猜測,如果你知道有任何能將Connection標頭設置為[object Object]的軟體漏洞,請@我。

有一些意想不到的javascript文件緩存(可能還有其他緩存)

我添加了一些Javascript來檢測頁面是否運行在一個流氓域中,如果是這樣的話,請將document.referrer發送給我,以便稍後再閱讀。我發現在使用合法站點時,我的腳本在瀏覽器中被修改了,但是在使用釣魚站點時卻使用了一個過時的版本,所以我相信釣魚站點正在進行一些額外的緩存。這可能是為了減少頁面載入時間。

在寫這篇文章的時候,我試著研究了這個緩存,還別說,我還真發現了許多有趣的東西!比如,代理可以將所有的內容從我的跟蹤腳本中刪除,這樣我就不能得到更多關於它們的信息。這很容易通過重新命名腳本和稍微修改內容來修復。

隱藏的服務地址已更改

代理似乎將smspriv6fynj23u6.onion的所有實例重寫為smsprivyevs6xn6z.onion,但有趣的是,它對大寫的實例並不做同樣的處理。

比特幣地址被更改

修改比特幣地址是釣魚網站的真正目的,通常情況下,網路釣魚網站都會盜取用戶帳戶,隨後再重新利用這些數據或將其出售,但是對於smsprivyevs6xn6z.onion來說,它採用了更直接的方法簡單地將比特幣地址重寫為黑客控制的地址。

修改比特幣地址的過程是這樣的:當用戶第一次被導航到付款頁面時,在頁面載入之前會出現一個延遲,不過該延遲用戶是察覺不到的。也就是在這個時間裡,黑客會在後端生成新的比特幣地址,能在如此短的時間裡完成整個操作意味著這個新的比特幣地址是運行在一個巨大的缺少索引地址的資料庫中,或者這個新的比特幣地址是在一台運行較慢的設備上生成的,又或者這個新的比特幣地址是由慢速語言編寫的代碼生成的,如果是這樣,那麼RNG可能不安全。以文本形式顯示的所有比特幣地址都將重寫為攻擊者控制的地址,並且合法地址和釣魚地址之間似乎存在對應的映射關係。值得注意的是,QR碼仍會保持不變,繼續解碼為合法地址。

為了驗證我的猜測並方便繼續深入調查,我假裝受害者給黑客付款了,付款地址為1GM6Awv28kSfzak2Y7Pj1NRdWiXshMwdGW。由於該地址沒有出現在網站上,這更加證明了我對smsprivyevs6xn6z.onion是一個愚蠢代理的猜測。不過這筆錢我是還沒有真正的花出去,但如果真的付款了,看看它的真正去向可能會很有趣。

網站如何分配給用戶?

我從Javascript中看到了一些不同的結果,在未被識別的域中,將引用者發送到伺服器上。大多數情況下,人們主要是通過網路代理(例如,onion.link)查看隱藏的服務,而且我也確實發現了2個隱藏的服務,分別是7cbqhjnpcgixggts.onion和hss3uro2hsxfogfq.onion。

7cbqhjnpcgixggts.onion又名」The onion crate」,這是Tor隱藏的服務列表,就像olden day的」 web directory」,但對Tor來說,實施釣魚的版本也被標記為」Phishing link」。

hss3uro2hsxfogfq.onion又名」not Evil」,這是Tor隱藏服務的搜索引擎。搜索」sms privacy」會在網站頂部和釣魚網站上找到合法的網站。雖然我在釣魚站點旁邊的」report abuse」進行了確認操作,但它還沒有被刪除。

然而,我還是沒有找到真正的原因。我希望能找到一個含有釣魚鏈接,而不是真實鏈接的推特或博文。」The onion crate」背後的人不太可能對實施釣魚的攻擊者負責。如果我想讓人們使用我的釣魚網站,我才不會把它標記為」釣魚鏈接」。所以我猜測,操作」not Evil」的搜索引擎的人可能就是幕後的攻擊者。如果我打算讓人們去登錄我的釣魚鏈接,我壓根就不會在搜索的結果中將它暴露出來。

我猜測,之所以能出現這麼明顯的攻擊漏洞,很可能是真正的網路釣魚活動還沒有開始。不過」The onion crate」將釣魚鏈接標記為2017-05-17,這意味著該釣魚已經存在了一段時間。

請注意/u/vghetto在reddit社交新聞上的回復,他表示這個」The onion crate」 的實例本身也是一個釣魚的鏈接。

尋找真正的幕後操作者

最有可能的情況是,這僅僅是一個普通的網路犯罪分子寫的一個代理,然後用他自己的地址替換了比特幣地址,從而為各種隱藏的服務生成看似合理的隱藏服務地址,進而獲利。

起初,我認為這可能是政府的某個情報部門進行的監控活動,他們通過簡訊隱私來監控用戶。但根據分析這種情況不太可能,因為如果要進行秘密監控的話,他們是不會改變比特幣地址的,因為這樣會讓站點不再有效。所以我認為更有可能是普通的網路犯罪者為了監控某個特定的用戶群而開發的一個釣魚網站。

與傳統的網路釣魚網站相比,釣魚隱藏服務要容易實現的多,因為沒有簡單的方法來定位隱藏的伺服器,沒有集中的命名系統,這意味著即使合法的網站在地址中也有隨機字元。獲得看似合理的地址比較容易,但要做到讓你的釣魚網站被發現後,還沒有人有能力撤銷你的域名或關閉你的主機就比較難了。雖然這種犯罪方式比較完美,但還是有個缺點,就是這種攻擊所針對的用戶群往往都精通電腦技術,相對於普通人群來說,他們受騙的幾率很小。

緩解措施

SMS隱私客戶應確保他們使用HTTPS瀏覽smsprivacy.org,或者如果使用Tor,則smspriv6fynj23u6.onion是唯一合法的隱藏服務,其他的鏈接都是有害的。

目前有人被攻擊嗎?

截止發稿,還沒有人聯繫我,說他遭遇了此類攻擊。不過這並不代表,沒有人被攻擊,有可能用戶是在無意中瀏覽了該釣魚網站,但他並不知道,這代表目前還沒有大規模的攻擊後果發生。

進一步的調查

我猜運行這個代理的軟體也代理許多其他隱藏的服務,按照正常的邏輯,如果開發者為一個隱藏的服務編寫了一些代理代碼,而且這個代碼可以不斷地重複使用,那誰不想多賺點錢,把儘可能多的比特幣地址重寫為自己的地址。

$ torsocks curl -I -H Host: smsprivyevs6xn6z.onion http://cboc66yz75virnj7.onionHTTP/1.1 200 OKServer: nginx/1.10.2Date: Fri, 13 Oct 2017 16:26:10 GMTContent-Type: text/html;charset=UTF-8Connection: [object Object]Set-Cookie: mojolicious=eyJsYW5kaW5nX3VybCI6Ii8iLCJhYnRlc3RzIjp7ImxhbmRpbmdfdXJsIjoiLyIsInNpZ251cGxpbmsiOiJvcmlnaW5hbCIsInJlZmVyX3NyYyI6Im5vbmUiLCJoaWRkZW5fc2VydmljZSI6ImhpZGRlbiJ9LCJleHBpcmVzIjoxNTA3OTE1NzE1LCJjc3JmX3Rva2VuIjoiZmQzNjc4NzcyMjRiNDZkZWZhYjNhM2ViZDIwMDY0ZmRmMDliZmQ0NCIsImFidGVzdHNfc2Vzc2lvbmlkIjoiOGM4NWQxMTZjMmE1MTBkOSJ9--785fbe83dce1217e74543ed831eb4c18c1cd6105; expires=Fri, 13 Oct 2017 17:28:35 GMT; path=/; HttpOnlyX-Frame-Options: DENY

事實上,如果能找到其他Tor隱藏服務的網路釣魚網站進行對比可能更有趣,這樣就能看看它們是否共享某種相同的特性,比如Connection: [object Object], Content-Length的丟失,重寫隱藏在小寫的服務地址,當比特幣地址首次顯示時發生延遲,為未知主機名提供500響應。

於是我嘗試著探測漏洞,看看是否能找到被代理的隱藏服務的完整列表。有可能在代理代碼中就完成了主機名的選擇,這意味著請求不同網路釣魚站點的主機名可能會返回其他釣魚站點的內容!這將是一個非常明顯的攻擊指標。

本文翻譯自:incoherency.co.uk/blog/ ,如若轉載,請註明原文地址: 4hou.com/web/8057.html 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

HEVD內核攻擊:驅動程序的編譯、安裝、載入及調試(一)
11月安卓系統漏洞小結:31個不得不修復的漏洞
問題不斷!加密貨幣兌換商以德(EtherDelta?)遭遇DNS攻擊
通過DNS控制主機以及執行命令
微軟office漏洞再次被惡意利用,傳播惡意軟體

TAG:信息安全 |