最近MIT發瞭一篇文章(English PDF),講瞭他們通過給Tor網絡回路做指紋特征的辦法企圖識別洋蔥路由Tor的匿名服務,結合網頁指紋的辦法最終可以跟蹤到用戶。這篇文章引起很多討論,是否成功攻破Tor這個話題又被討論起來。由這篇文章啟發,受小編邀請,我就來把最近這幾年攻擊Tor匿名服務的一些方法和嘗試做個簡單的綜述。以下內容都不是我原創,我盡量保持淺顯地做瞭這篇文章整理綜述的工作,文章結尾有一些深入閱讀材料供進一步參考。這篇文章字比較多又沒什麼圖和代碼,所以給個TL;DR(太長不讀): 攻破Tor的匿名服務是很難的事,下面這些方法和嘗試都是一些啟發性的工作(heuristic analysis)。0x00 聽風就是雨:簡單介紹一下TorTor(The Onion Router,洋蔥路由器)的主要目的是為瞭防范通過流量過濾和嗅探來窺探用戶的通信隱私,多數中國人民熟悉它倒不是因為它的加密而是因為它的多層節點能跨越長城。它的基本原理是,Tor用戶在本地架設一個洋蔥代理服務器,這個服務器定期和其他Tor用戶交流從而形成一個拓撲結構的回路(circuit)。Tor把用戶要傳輸的信息在應用層加密,每對路由之間都通過點對點的對稱加密通信,每對路由相當於洋蔥的一層皮,這樣的多層拓撲結構相當於把客戶端溫暖地包在洋蔥的心裡,這就是Tor保護信息來源的方式。信息從客戶端發出,通過網絡隨機化尋找路徑,通過一層一層的加密代理節點,從出口節點以明文的方式發出去,所以對目的節點來說它隻能看到明文消息從出口節點發出並不知道消息源客戶端的位置。如果知道Tor部分節點的IP,攻擊者可以反向查詢整個信息的流向從而找出客戶端的源頭,所以對於每個Tor的代理服務器來說,千萬不能告訴外界自己的IP地址。引用自wikipedia link值得註意的是,攻擊Tor匿名服務主要目標並不在於獲取傳輸的信息而在於找出哪些節點是Tor的中間節點、哪些用戶用Tor、用的是哪些Tor服務等等,因為在出口節點出來的信息都是明文的隻要抓出口節點就可以獲取傳輸的信息,比如當年wikileaks泄漏的文件有一部分是從出口節點獲取的。0x01 人生的經驗:攻擊方法的理論概要Tor是個復雜的系統,復雜系統的復雜性導致瞭它設計上有很多可以被攻擊的本質特征,它的實現和服務器配置上也不是完美無缺的,它同時還有一些“豬隊友”的問題可供攻擊使用。這些方面是攻擊Tor匿名性和隱私的套路攻擊點。基於Tor本身信息特性的攻擊基本上使用的是tor的對稱加密以及網絡的復雜性,一般方法是偵聽網絡數據的模式,因為鏈接是通過多層節點加密的,所以Tor在確定鏈接的時間上以及網絡數據的一些特殊模式上和普通的網絡數據傳輸有所不同,通過偵聽網絡節點的數據傳輸模式可以基本猜測出來這個節點是否為Tor節點。傳播的信息因為有自己的固定特征(比如擊鍵頻率的模式等),這些特征從Tor的源頭傳到目的的時候引起的加密流量也會因此含有一些可以被識別的特征,如果攻擊者設計一些特別的實驗,信息傳播的序列可以被用來探測Tor的節點位置。多數攻擊Tor匿名性的研究工作多集中在這個方向,包括上面MIT的這篇文章通過給節點回路做指紋的方式也是這類方法。這些方法一般都是很巧妙的構造方法,有很多大的研究機構(包括一些國傢機構)都在積極研究這個方向。基於攻擊Tor的實現/配置等其他“豬隊友”的方法並不常見於各大研究機構的科研項目裡,但它和社會工程學在黑客攻擊裡的地位一樣,在一切特定情況下可能成為唐門暗器一招斃命(洋氣一點叫做 Achilles’ heel)。攻擊Tor實現的方法一般是欺騙,比如設置由攻擊者控制的的Tor節點吸引其他的Tor節點來鏈接。攻擊Tor的實現和服務器配置的辦法多是在於,如果一個tor服務器沒有合理配置,它的tor之外的服務可能會被攻破從而導致tor服務的地址泄漏。比如說有一種“豬隊友”就是,一個Tor的代理服務器節點同時也是其他服務的節點,比如上面跑瞭個web程序(即使是一個世界上最好的語言PHP寫的web程序但是這個PHP版本很低有若幹漏洞),攻擊者可以通過web服務的漏洞侵入系統,隻要攻擊者得到shell就可以掃描整個機器看看有沒有跑Tor就可以判斷瞭。最近比較熱門的豬隊友是bitcoin比特幣,有相關的研究利用比特幣的交易可以探測到Tor網絡裡一些節點的IP地址,可以在這裡深入閱讀:文章地址,在這裡這些方法就不贅述。0x02 問我支持不支持:長城的一些工作Tor可以用在跨越長城上,因為Tor會自動監測相關的代理節點是否可達,如果不可達就自動更換節點直到可以連接到長城之外,所以長城比較討厭Tor是可以理解的。更讓長城討厭的是,因為最終目標服務器隻能看到Tor的出口節點,所以一個境外服務器可以用Tor偽裝自己是中國境內服務器提供反向跨越長城的服務。長城的研究主要目的並不是想找到信息的源頭,它的主要目的是為瞭封殺Tor代理節點和阻斷連接,這樣可以封殺跨越長城的用戶。長城的工作沒有具體文獻可以參考,但是從一些觀測結果上看,長城的基本方法就是:封殺一些已知IP節點和橋接節點:長城會封殺部分已知節點並對其餘部分進行監控。監控的目的可能是為瞭收集節點之間的數據傳輸,可以用作機器學習時對信息流的特征提取。設置一些由長城控制的Tor節點吸引別的Tor節點進行鏈接並封殺。針對非SSL加密Tor節點收集信息流作特征分析:長城可以識別出來一些Tor信息流的特征,並通過機器學習+人工規則的方法判斷該節點是否是Tor。如果是,就重置鏈接並封殺。長城的優勢在於可以看到別人看不到的真實流量數據,這決定瞭他們的方法是通過真實流量裡面收集特征和正負樣例進行機器學習的分析,Tor的各種加密和網絡結構的變化,長城都能很快觀測到。長城也可以做很多被動的數據收集工作,保證瞭他們對Tor的攻擊保持低調。基於長城工作的目的性是在於阻斷鏈接而不是尋找信息源頭,它摧毀的差不多隻有一小部分Tor的節點,而新的節點在不斷產生它本身對Tor網絡的隱私和匿名性並不會造成巨大傷害。至於它有沒有更深入和進一步的工作,由於缺少參考文獻我們暫時不可知,而且這一段純學術討論我連圖都不敢配啊。0x03 你們很熟悉西方的那一套以美帝國主義為首的研究機構們對Tor的研究比較深入,主要目的是攻破Tor的隱私和匿名,常見於大學和研究機構的論文,以及美國國安局(NSA)的一些公開和非公開但是不小心泄漏的文稿。0x04 MIT的工作本文開頭提到的MIT的工作主要方法是對一個信息流在Tor裡的傳輸回路做指紋特征,它的直接目標不是尋找Tor的節點或者查找用戶信息,而是先判斷網絡中是否存在Tor隱藏服務,當攻擊者判斷網絡中存在Tor隱藏服務,可以設計一個網頁指紋來攻擊Tor節點的客戶端或服務器的位置(關於網頁指紋的深入閱讀可以參考Cai et al “Touching from a Distance: Website Fingerprinting Attacks and Defenses”,基本方法就是攻擊者在Tor網絡裡自己設個客戶端去訪問某個網站,跟蹤自己發出的信息的流向,把路過的節點的一些特征比如包的大小間隔序列等,然後用機器學習的辦法建個分類器)。它判定網絡中是否存在Tor隱藏服務的方法比較簡單,就是設立一個由攻擊者控制的Tor節點(友情提醒,攻擊者設置瞭Tor節點也對攔截信息沒有什麼用,因為點對點之間是對稱加密的),當有別的Tor節點和用戶鏈接進來,經過一段時間的信息相互傳輸,攻擊者可以統計出數據傳輸量和發送接收包的數量,以及構建回路的序列,通過運行一個簡單的機器學習模型,攻擊者就能預測出發送信息的用戶所使用的Tor服務(比如OpenWeb等等)。這個方法厲害之處在於它是被動收集數據而不是主動發送數據包,也就是說,在最終揭露Tor節點信息之前攻擊者可以完全不被發現。這是一個很有意義的工作,全文的闡述也很詳細,對學習攻擊Tor初學者也是個不錯的閱讀教材,但是至於他是否是宣稱的那樣攻破瞭Tor的隱私和匿名,在這個reddit討論裡,大傢都覺得和所謂攻破差的有些遠,還有很長一段路。0x05 IIIT的工作印度小哥Chakravarty的組利用瞭Cisco的NetFlow網關監測工具設計瞭一個巧妙的攝動實驗檢測服務器端和客戶端信息的相關性。Cisco的很多路由器都有一個這個默認工具NetFlow,有網絡流的各種統計信息比如package的數量byte數之類的,用來給管理員判斷網絡信息的模式以確定網絡阻塞等網絡問題的原因。Chakravarty的組設計瞭這麼個實驗,它在服務器端流量的模式裡加入瞭一個特殊的攝動(Perturbation)導致在網關上的網絡流有一定統計特征,然後按照這個攝動的特征持續發送一定的信息。這個攝動在流過Tor的整個網絡的時候,在客戶端上觀測到的攝動特征和服務器端發送的特征可以觀測到有統計上的關聯,而這些統計上的關聯可以推測出發送消息的源。小哥的組也對這個方法提出瞭防護意見:在節點把這些可以引起泄密攝動特征進行混淆,比如一些數據包延遲發送,隱藏這些特征就行。他們的實驗比MIT更NB的地方在於,他們的實驗可以在公共Tor網絡上重復,他們隻要監測一小部分的因特網網關,利用類似netflow這樣的網關監測工具就能基本上觀測到足夠多的Tor流量信息。這種方法是主動探測Tor網絡的方法,這一點和MIT的被動收集數據方法有所區別。相關深入閱讀請參考這篇blog以及這篇。從原理上看,長城也可以使用類似方法觀測,隻是不知道他們的工作進展如何。順道說一句,之前戳戳給我看的Freebuf上介紹的那篇《麻省理工大學(MIT)研究出識別Tor匿名服務的方法,準確率高達88%》,實際內容並不是MIT的工作而是印度小哥的這個關聯性實驗設計的工作。請觀眾朋友們不要把這兩個工作混淆瞭。0x06 NSA的工作美國國安局(NSA)的工作就有相對廣泛的多,基本上哪些節點是Tor的中間節點、哪些用戶用Tor、用的是哪些Tor服務等等這些方向都有涉及。邪惡美帝國主義NSA的主要目的是為瞭跟蹤Tor的用戶。不過NSA也承認他們距離完全攻破Tor的隱私和匿名服務有很大距離,他們隻能攻擊到極少部分的特定用戶(這些被成功攻下的用戶一般是用緩存泄密Cookie Leakge的辦法,也有一些用戶就是自己很笨不會用Tor然後隨意下個套裝連接到一個假冒服務器就給抓瞭)。以下信息均沒有NSA主動提供的參考文獻。引用自 http://yalasu.com/an-open-letter-to-asu-president-michael-crow/豬隊友系列方法NSA主要利用的豬隊友就是瀏覽器(主要用Firefox),以及喜聞樂見的Flash,外加一些網頁腳本。多數用戶並不真正理解Tor的工作原理和方法,他們多半會選擇一個一鍵安裝Tor瀏覽器套裝之類的,裡面包含瞭什麼東西其實他們並不知道,比如有漏洞的Firefox瀏覽器,渾身是漏洞的Flash播放器等等,其實裡面裝個百度全傢用戶也不一定知道。而FBI NSA之類的機構就利用瞭安裝瞭這些套裝的用戶,通過攻擊他們瀏覽器和Flash的漏洞攻擊Tor用戶的隱私和匿名性。不過這個方法也從側面說明瞭,NSA等機構其實沒有什麼直接有效攻擊Tor的辦法,要不然這些豬隊友不會成為主要目標。0x07 FoxAcid 服務器系列NSA有種神秘的服務器代碼名叫FoxAcid,也就是NSA控制的Tor服務器。它有多種用法,比如說NSA想跟蹤某個用戶的Tor,他們用一些特殊的方法把該用戶的Tor回路連接到NSA的某個FoxAcid服務器上,並且為瞭保證長時間連接,NSA做瞭一些進一步的攻擊工作(包括給用戶植入一些木馬)保證該用戶在較長一段時間都可以連接到FoxAcid服務器上。這些FoxAcid服務器據說都是Windows Server 2003,並且用戶重啟瞭這些木馬還是能照常連上FoxAcid。神奇的好隊友和網頁指紋除瞭利用豬隊友,NSA有一些神奇的好隊友:各大通訊運營商。NSA可以要求美國的通訊運營商提供特定的用戶的數據,而運營商們比如AT&T也都毫不猶豫的配合。NSA在網頁裡植入特定的指紋信息,如果用戶通過Tor訪問瞭這個網頁,NSA可以通過運營商數據跟蹤到這個用戶訪問這個網頁的數據流向,從而跟蹤到特定的用戶。其實我覺得理論上長城也可以做類似的工作,但是長城的主要目標並不是跟蹤用戶,所以可能他們會直接讓運營商把某個架瞭Tor的IP封掉就好。這部分相關閱讀參見 http://www.networkcomputing.com/networking/nsa-battles-tor-9-facts/d/d-id/1111857?0x08 談笑風生:小結感謝觀眾朋友們看完這麼長一篇綜述。攻擊Tor匿名和隱私是個很熱門的話題,無論是在學術界還是工業界,都有很多不同角度的攻擊方法。攻擊方法多是兩類,一是針對Tor網絡的復雜加密特性造成的數據流模式和普通流量不同,二是利用架設Tor服務的節點的其他相關服務的弱點。每個機構針對Tor的攻擊方法也由於目的不同而不同。長城的主要目標是為瞭阻斷鏈接,所以他們主要目標是為瞭找出Tor節點的位置並封殺,所以他們的方法多在偵測網絡流量模式;NSA的主要目標是為瞭跟蹤用戶,所以他們的主要目標是用戶經過的Tor鏈路以及用戶本身,他們就用瞭各種千奇百怪的方法跟蹤用戶。MIT的工作比較有意思,論文本身也是對回路指紋這個攻擊方法的一個詳細描述,可以自己閱讀。IIIT的印度小哥的工作是主動探測Tor的辦法,這個工作也很有啟發性。原創文章,作者:Drops,轉載自:http://www.mottoin.com/tech/127960.html
本文出自快速备案,转载时请注明出处及相应链接。