■姚華
追蹤隱藏在暗網(wǎng)深處的匿名者
■姚華
縱觀暗網(wǎng)的發(fā)展史,總有人嘗試各種方法挖出匿名用戶的真實身份。姑且可以把攻擊手段分為兩類:對客戶端的攻擊(瀏覽器),和對網(wǎng)絡(luò)流量的攻擊。
從泄露出來的NSA文檔中可以看到,由于Tor瀏覽器是基于Firefox開發(fā)的,所以,情報機構(gòu)可以利用Firefox中的漏洞進(jìn)行攻擊。然而,正如NSA報告中提到的那樣,利用漏洞工具并不能長期的監(jiān)控暗網(wǎng)居民。漏洞通常只有很短的生命周期,瀏覽器的版本也一直在升級,所以只有很小的一部分人在使用有漏洞的瀏覽器,這就導(dǎo)致相關(guān)部門只能監(jiān)控小范圍內(nèi)的用戶。
除了這些非官方發(fā)布的文檔,Tor社區(qū)也發(fā)現(xiàn)了針對客戶端的有趣的攻擊。例如,來自MIT的研究人員已經(jīng)發(fā)現(xiàn)了Flash會創(chuàng)建一條專用通道連到攻擊者的專用服務(wù)器,這條通道包含了客戶端的真實IP地址從而識別出受害者的身份。然而,Tor瀏覽器的開發(fā)人員通過在瀏覽器中禁用Flash傳輸通道,已經(jīng)迅速解決了這個問題。
另一個針對瀏覽器進(jìn)行攻擊的方法就是使用WebRTC DLL。和上面提到的Flash通道一樣,這個動態(tài)鏈接庫是用來支持HTML5中視頻流量傳輸?shù)?,而且它也可以記錄受害者的真實IP。WebRTC的請求,使用STUN協(xié)議,并用文本傳輸,因此可以繞過Tor網(wǎng)絡(luò),引發(fā)嚴(yán)重后果。但Tro瀏覽器開發(fā)人員通過默認(rèn)禁用WebRTC功能,也已經(jīng)迅速修復(fù)了這個小缺陷。
和瀏覽器攻擊不同,針對Tor客戶端和服務(wù)器之間的網(wǎng)絡(luò)流量進(jìn)行攻擊看起來有些牽強。到目前為止,提出來的大多數(shù)理論也大都是在實驗室環(huán)境中實現(xiàn)的。針對真實Tor網(wǎng)絡(luò)通信的攻擊還未有人發(fā)表相關(guān)的文章。
在這些理論研究中,達(dá)成的一個基本的共識就是使用NetFlow協(xié)議來分析網(wǎng)絡(luò)流量。這篇文章的作者堅信,攻擊者對直連的Tor節(jié)點或是在節(jié)點附近的路由器的網(wǎng)絡(luò)流量進(jìn)行分析,可以從網(wǎng)絡(luò)流量中得到如下信息:
網(wǎng)絡(luò)協(xié)議號;
記錄編號;
出入的網(wǎng)絡(luò)接口;
數(shù)據(jù)流的首尾的時間戳;
數(shù)據(jù)流中的數(shù)據(jù)包大小和個數(shù);
源地址和目的地址;
源端口和目的端口;
IP協(xié)議號;
服務(wù)類型值;
TCP連接的標(biāo)志位;
源地址和目的地址的子網(wǎng)掩碼。
這種基于流量分析的方案,如果攻擊者想要在任意時間段內(nèi)識別Tor用戶,那么他需要Tor網(wǎng)絡(luò)中大量的數(shù)據(jù)采集點。正是由于沒有充足的計算資源,獨立的研究員很難將上述研究應(yīng)用到實際環(huán)境中去。所以,我們應(yīng)該換個思路,考慮一些更容易方法,去分析Tor用戶的活動。
任意的網(wǎng)絡(luò)用戶都可以共享計算機資源來建立一個節(jié)點服務(wù)器。節(jié)點服務(wù)器是Tor網(wǎng)絡(luò)中對客戶端數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā)的一個中間人的角色。由于退出節(jié)點需要對流量進(jìn)行解密操作,所以它們很可能成為信息泄密的來源。
這就有可能讓我們從解密的數(shù)據(jù)流量中收集相關(guān)的信息,例如,onion資源地址可以從HTTP頭中提取。但由于HTTP數(shù)據(jù)包中可能包含一些關(guān)于不活躍的onion站點的干擾信息,所以可能會避開內(nèi)部搜索引擎和站點分類。
然而,由于研究人員暫時只能分析在實驗室中自己生成的網(wǎng)絡(luò)流量,所以,被動監(jiān)控還不能在實際的網(wǎng)絡(luò)中識別出用戶的真實身份。
為了找出更多的暗網(wǎng)居民,我們需要誘導(dǎo)他們,從而獲取更多系統(tǒng)環(huán)境中的數(shù)據(jù)。也就是說,我們需要一個主動的數(shù)據(jù)獲取系統(tǒng)。
一個來自Leviathan Security的專家發(fā)現(xiàn)大量的退出節(jié)點,并在真實的環(huán)境中部署了一個主動監(jiān)控系統(tǒng)。這些節(jié)點和普通的退出節(jié)點不同,因為他們可以向二進(jìn)制文件中注入惡意代碼。當(dāng)客戶端采用Tor技術(shù)來隱藏自己,并從網(wǎng)上下載文件,這些惡意退出節(jié)點就會進(jìn)行中間人攻擊,將惡意代碼插入正在下載的文件中。
上述事件是主動監(jiān)控系統(tǒng)概念的一個很好的例證。然而,它也從另一方面證實了,退出節(jié)點上的任何行為,都會很快且很容易地被自動化工具識別,從而將這些節(jié)點快速地加到Tor社區(qū)的黑名單中。
HTML5不僅實現(xiàn)了WebRTC,而且?guī)砹擞腥さ摹碑嫴肌睒?biāo)簽,一個通過JavaScript腳本,創(chuàng)建位圖的功能。這個標(biāo)簽有個特性就是可以用來渲染圖片,而且根據(jù)不同的因素,每個瀏覽器渲染出來的圖片也不同。其中的因素有:
不同的顯卡驅(qū)動和安裝在客戶端的硬件設(shè)備;
操作系統(tǒng)中軟件的不同設(shè)置和軟件環(huán)境的不同配置。
這些渲染參數(shù)可以唯一地識別出瀏覽器和它的軟硬件環(huán)境?;谶@種特性,一個所謂的指紋就產(chǎn)生了。這并不是一個新的技術(shù),它已經(jīng)被在線的廣告代理商用來追蹤用戶感興趣的事物。然而,并不是所有的識別技術(shù)都可以在Tor瀏覽器中使用。舉例來說,supercookies就不能在Tor瀏覽器中使用,F(xiàn)lash和Java是被默認(rèn)禁用的,字體的使用也受到限制。其他的一些方法,也向用戶發(fā)出警報。
因此,我們的初步嘗試使用的,通過getImageData()函數(shù)提取圖片數(shù)據(jù)的“畫布指紋”,已經(jīng)被Tor瀏覽器禁用了。然而,我們目前仍然可以找到其他漏洞,作為Tor中的指紋識別,并且不會向用戶發(fā)出警報。
Tor瀏覽器可以通過畫布中測量被渲染文本寬度的measureTest()函數(shù)進(jìn)行識別。
用measureTest()獲取對操作系統(tǒng)具有唯一性的字體大小屬性。如果得到字體寬度具有唯一性(有時是浮點數(shù)),那么我們就可以去識別不同的瀏覽器,當(dāng)然也包括Tor瀏覽器。在某些情況下,生成的字體寬度值對不同的用戶可能相同。
我們應(yīng)該意識到,獲取唯一值并不是只有這一個函數(shù)。另一個類似的函數(shù),getBoundingClientRect()也可以獲取文本框的高度和寬度
當(dāng)用戶指紋問題被社區(qū)所知曉(也影響到了Tor瀏覽器用戶),一個合理的的安全需求就被提出來了。然而,Tor瀏覽器的開發(fā)人員并不急于在配置中修復(fù)這個問題,這也說明了,僅僅將這些函數(shù)放入黑名單是無效的。
這個方法是”KOLANICH”提出的。利用measureTest()和getBoundingClientRect()這兩個函數(shù),他寫了個腳本,用來測本地的不同瀏覽器,并獲取唯一的標(biāo)識。
用同樣的方法,我們也布置了一個測試床,用來獲取不同軟硬件環(huán)境下的Tor瀏覽器的指紋信息。
為了達(dá)到目的,我們向用戶訪問的網(wǎng)頁中,嵌入了包含measureText()和getBoundingClientRect()兩個用來測量字體渲染函數(shù)的JavaScript腳本。這個腳本,會將獲取的數(shù)據(jù)通過POST請求,發(fā)送給web服務(wù)器,服務(wù)器將該請求日志記錄下來。
此時,我們正在收集script獲取到的數(shù)據(jù)。到目前為止,所有的返回值都是唯一的。在適當(dāng)?shù)臅r候,我們會將這個實驗的結(jié)果公布于眾。
上述的方法如何在現(xiàn)實的環(huán)境中識別Tor瀏覽器用戶如上所述的JavaScript代碼可以在暗網(wǎng)的不同環(huán)節(jié)進(jìn)行部署:
退出節(jié)點??梢圆捎弥虚g人攻擊,當(dāng)暗網(wǎng)居民訪問外部網(wǎng)絡(luò)時,將JavaScript代碼注入到被訪問的網(wǎng)頁中。
內(nèi)部的onion資源和外部的網(wǎng)站由攻擊者所控制。舉個例子,攻擊者為瀏覽信息的用戶精心構(gòu)造了一個插入JavaScript代碼的網(wǎng)頁或是網(wǎng)站導(dǎo)航,收集所有訪問者的指紋信息。
內(nèi)部和外部的網(wǎng)站一般都存在跨站腳本攻擊(XSS)漏洞(最好是存儲型XSS,但不是必須的)。
最后一項研究尤其有趣,我們已經(jīng)搜索了大約100個具有web漏洞的onion資源并且排除了誤報的情況。我們發(fā)現(xiàn)被分析的暗網(wǎng)資源中大約有30%都具有跨站腳本攻擊漏洞。
這就意味著,在退出節(jié)點進(jìn)行攻擊并不是攻擊者識別一個用戶的唯一手段。攻擊者還可以通過有漏洞的網(wǎng)站插入JavaScript腳本,來收集唯一的指紋信息。
攻擊者并不受限于將JavaScript腳本插入到合法的網(wǎng)站。由于可用來注入目標(biāo)的數(shù)量在增加,包括那些暗網(wǎng)中的網(wǎng)站,所以JavaScript腳本的注入目標(biāo)可以有更多的選擇。
通過這個方法,攻擊者可以在理論上發(fā)現(xiàn)例如指紋信息為‘c2c91d5b3c4fecd9109afe0e’的用戶對網(wǎng)站的哪些主題感興趣,并查看這個用戶訪問了哪些網(wǎng)站。所以,攻擊者可以對用戶對哪些網(wǎng)絡(luò)資源感興趣有個大概的了解,并且可以查看該用戶的上網(wǎng)記錄。
在Tor項目的官網(wǎng)上,開發(fā)人員對“為啥Tor瀏覽器支持JavaScript腳本”做了解答。
從這個答案的可以看出,我們并不指望開發(fā)人員在Tor瀏覽器中禁用JavaScript代碼。
關(guān)于Tor退出結(jié)點研究,都是純理論的,我們并沒有在真實的服務(wù)器上做研究。而且,所有的測試都是在和Internet隔絕的虛擬的暗網(wǎng)中完成。