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