攻擊洋蔥路由(Tor)匿名服務的一些綜述
最近MIT發了一篇文章(English PDF),講了他們透過給Tor網路迴路做指紋特徵的辦法企圖識別洋蔥路由Tor的匿名服務,結合網頁指紋的辦法最終可以跟蹤到使用者。這篇文章引起很多討論,是否成功攻破Tor這個話題又被討論起來。由這篇文章啟發,受小編邀請,我就來把最近這幾年攻擊Tor匿名服務的一些方法和嘗試做個簡單的綜述。以下內容都不是我原創,我儘量保持淺顯地做了這篇文章整理綜述的工作,文章結尾有一些深入閱讀材料供進一步參考。這篇文章字比較多又沒什麼圖和程式碼,所以給個TL;DR(太長不讀): 攻破Tor的匿名服務是很難的事,下面這些方法和嘗試都是一些啟發性的工作(heuristic analysis
)。
0x00 聽風就是雨:簡單介紹一下Tor
Tor(The Onion Router
,洋蔥路由器)的主要目的是為了防範透過流量過濾和嗅探來窺探使用者的通訊隱私,多數中國人民熟悉它倒不是因為它的加密而是因為它的多層節點能跨越長城。它的基本原理是,Tor使用者在本地架設一個洋蔥代理伺服器,這個伺服器定期和其他Tor使用者交流從而形成一個拓撲結構的迴路(circuit
)。Tor把使用者要傳輸的資訊在應用層加密,每對路由之間都透過點對點的對稱加密通訊,每對路由相當於洋蔥的一層皮,這樣的多層拓撲結構相當於把客戶端溫暖地包在洋蔥的心裡,這就是Tor保護資訊來源的方式。資訊從客戶端發出,透過網路隨機化尋找路徑,透過一層一層的加密代理節點,從出口節點以明文的方式發出去,所以對目的節點來說它只能看到明文訊息從出口節點發出並不知道訊息源客戶端的位置。如果知道Tor部分節點的IP,攻擊者可以反向查詢整個資訊的流向從而找出客戶端的源頭,所以對於每個Tor的代理伺服器來說,千萬不能告訴外界自己的IP地址。
值得注意的是,攻擊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的辦法,這個工作也很有啟發性。
相關文章
- 洋蔥瀏覽器Tor Browser for Mac2020-10-21瀏覽器Mac
- 綜述論文:對抗攻擊的12種攻擊方法和15種防禦方法2018-03-05
- Dotnet洋蔥架構實踐2021-03-17架構
- 圖解Redux中middleware的洋蔥模型2018-04-24圖解Redux模型
- 洋蔥 TorBrowser 9.5 Mac 中文版2020-06-03ORBMac
- ICMP路由重定向攻擊2021-07-08路由
- 常見網路攻擊的方法與服務2020-10-07
- 用 Go 來實現 Koa 的洋蔥模型《Koa for Go》?2021-01-25Go模型
- nmap攻擊技術原理簡述2019-08-16
- 一次攻擊內網rmi服務的深思2019-03-04內網
- 舉個例子來理解一下Koa的洋蔥模型2020-09-26模型
- 深入理解洋蔥模型中介軟體機制2019-12-22模型
- 如何更好地理解中介軟體和洋蔥模型2020-11-10模型
- 服務端模板注入攻擊 (SSTI) 之淺析2020-08-19服務端
- 針對雲服務的勒索軟體攻擊的未來2021-04-29
- FlashPoint:2020年黑客DDoS攻擊服務大漲價2020-12-25黑客
- 2020年最全前端業務安全綜述2020-12-09前端
- Spring綜述2019-04-03Spring
- OnionArch 2.0 - 基於DDD的洋蔥架構改進版開源2023-02-07架構
- RouterSrv路由服務2024-10-30路由
- 什麼是拒絕服務,如何防範 DoS 攻擊?2022-07-15
- Shutterfly遭Conti勒索軟體攻擊,部分服務中斷2021-12-28
- 滲透測試服務之瀏覽器攻擊分析2021-02-10瀏覽器
- 滲透測試服務之伺服器攻擊手段2021-01-05伺服器
- 【考研數學】行列式的計算,有時候就像“剝洋蔥”2024-06-29
- KOA2 compose 串聯中介軟體實現(洋蔥模型)2018-10-10模型
- 使用Tor繞過防火牆進行遠端匿名訪問2020-08-19防火牆
- API安全綜述2021-07-07API
- Spring Bean 綜述2019-04-13SpringBean
- DDoS攻擊、CC攻擊的攻擊方式和防禦方法2019-02-27
- 匿名黑客稱蘋果iCloud將成下一個攻擊目標2019-05-13黑客蘋果Cloud
- MLsys各方向綜述2020-02-07
- GAN生成影象綜述2019-05-13
- GAN生成影像綜述2019-05-13
- 視覺SLAM綜述2019-03-09視覺SLAM
- LINUX下SYN FLOOD攻擊及LINUX下SYN攻防簡述2019-05-10Linux
- NestJS搭建前端路由服務2022-02-18JS前端路由
- transformers的近期工作成果綜述2022-10-19ORM