暗網(wǎng)?不,是“蜜罐”
最近發(fā)生在美國一個華人綁架事件把“暗網(wǎng)(Darknet或Dark Web)”帶入到公眾的視野,本文從技術(shù)角度分析暗網(wǎng)的工作原理和安全性。
什么是暗網(wǎng)
我們?nèi)粘J褂玫幕ヂ?lián)網(wǎng)(Internet)被稱為“明網(wǎng)”,與之對應(yīng)的借助互聯(lián)網(wǎng)而形成的“隱藏”的網(wǎng)絡(luò)被稱為“暗網(wǎng)”。所以“暗網(wǎng)”其實是還是屬于互聯(lián)網(wǎng),只不過它不為我們所知。暗網(wǎng)相對于“明網(wǎng)”最大的特點是——匿名,通過一些技術(shù)手段保證通訊雙方的匿名性。最著名的匿名技術(shù)叫“洋蔥路由(Onion routing)”,Tor是基于這種技術(shù)實現(xiàn)的一套軟件。除此之外還有一個叫“大蒜路由(Garlic routing)”的技術(shù),I2P是基于這種技術(shù)實現(xiàn)的一套軟件。Tor的用戶群更大幾乎成了暗網(wǎng)的代名詞所以我們主要關(guān)注Tor。利用Tor可以實現(xiàn)兩種匿名方式
- 作為客戶端匿名訪問某個明網(wǎng)的服務(wù)器,此時Tor保護客戶端的匿名性,明網(wǎng)的服務(wù)器是無法獲知躲在暗網(wǎng)的客戶端的IP地址。比如一些黑客在入侵的時候會利用Tor隱藏自己的身份。
- 作為服務(wù)器端在暗網(wǎng)提供服務(wù),此時Tor保護服務(wù)器端的匿名性,暗網(wǎng)的客戶端可以訪問服務(wù)器端資源但是不知道服務(wù)器端資源的IP地址。 這種服務(wù)器一般以.onion這樣的域名結(jié)尾,比如著名的WannaCry(比特幣勒索軟件)提供的付款地址就是位于暗網(wǎng)的一臺服務(wù)器(以.onion域名結(jié)尾)。
Tor鏈路原理
在講解Tor原理之前必須先要搞清楚傳輸層安全協(xié)議(Transport Layer Security,TLS)TLS的前身是安全套接層(Secure Sockets Layer,SSL)目的是為了防止數(shù)據(jù)被竊聽、篡改、冒充。TLS的工作原理非常簡單,客戶端通訊的時候會先向服務(wù)器端索要公鑰,然后通過公鑰加密要發(fā)送的數(shù)據(jù),服務(wù)器端收到數(shù)據(jù)后利用私鑰解密。
Tor有兩種主要服務(wù)器角色,中繼服務(wù)器是負責(zé)中轉(zhuǎn)數(shù)據(jù)包的,可以理解為代理;目錄服務(wù)器保存中繼服務(wù)器的列表(保存中繼服務(wù)器地址、公鑰)。當(dāng)客戶端訪問目標(biāo)服務(wù)器的時候會先通過查詢目錄服務(wù)器獲取中繼服務(wù)器列表(圖中紅色部分);客戶端從中繼服務(wù)器列表中選擇三個延時最低的作為中繼服務(wù)器并建立鏈路(Tor稱為Circuit),客戶端后續(xù)的所有請求都通過這條鏈路到達目標(biāo)服務(wù)器以達到匿名的目的。在整個通訊過程,客戶端<->目錄服務(wù)器,客戶端<->中繼服務(wù)器,中繼服務(wù)器<->中繼服務(wù)器,雖然這三次通訊是建立在TLS之上的(圖中的紅色和藍色),但是DPI(深度數(shù)據(jù)包檢測)還是能探測到TCP的包頭——目標(biāo)地址、源地址、目標(biāo)端口、源端口(TLS只會加密TCP、UDP的Data部分,畢竟路由尋址需要依靠IP頭部和TCP、UDP頭部的)。這里的源地址是用戶訪問公網(wǎng)的真實地址,一般運營商提供上網(wǎng)服務(wù)都會有備案,所以是可以通過這個IP地址追查到具體某個用戶的。所以Tor在TLS之上疊加了一層鏈路,通過這個鏈路來轉(zhuǎn)發(fā)數(shù)據(jù)已達到匿名的目標(biāo)。
匿名原理
Tor中相互通訊所采用的數(shù)據(jù)包叫Cell,它是固定長度的。
CircID是客戶端產(chǎn)生的一個隨機數(shù),用于區(qū)別不同的鏈路(Circuit),我們可以理解為一個目標(biāo)服務(wù)器代表一條鏈路;CMD是一個枚舉值表示數(shù)據(jù)包的含義(比如建立鏈路、關(guān)閉鏈路)。Tor選擇3個中繼服務(wù)器后會先嘗試和第一個服務(wù)器“握手”(OR1是指第一個中繼服務(wù)器也叫入口路由,OR2是第二個,OR3是第三個也叫出口路由)
- 客戶端會生成一對密鑰(一個公鑰client-publicKey,一個私鑰client-privateKey)構(gòu)建一個Cell,CircID=隨機數(shù)N,CMD=create,Data=加密(OR1,client-publicKey)。注意Data部分傳遞的是客戶端的的公鑰,這個數(shù)據(jù)會用目標(biāo)中繼服務(wù)器的公鑰加密。(每臺中繼服務(wù)器都會產(chǎn)生一對密鑰,公鑰發(fā)布到目錄服務(wù)器上,私鑰自己保存)
- OR1收到數(shù)據(jù)包后檢查CMD部分發(fā)現(xiàn)是create,然后用私鑰解開data部分保存client-publicKey。然后生成一對密鑰(公鑰or1-circuit-publicKey,or1-circuit-privateKey)構(gòu)建一個返回數(shù)據(jù)包,CircID=N(客戶端產(chǎn)生的),CMD=created,Data=加密(client-publicKey, or1-circuit-publicKey)。Data部分是中繼服務(wù)器為這次會話(circuit)產(chǎn)生的臨時密鑰對,通過client的公鑰加密。
- 客戶端收到數(shù)據(jù)后檢查CMD部分是created,用私鑰解開data部分保存中繼服務(wù)器1的臨時公鑰。接下來客戶端要和OR2建立連接,這次連接是通過OR1建立的所以數(shù)據(jù)包還是發(fā)送給OR1的。
- 客戶端構(gòu)建“擴展數(shù)據(jù)包”,CircID=N,CMD=relay,Data部分是OR2的地址信息、公鑰信息。當(dāng)然Data部分用or1-circuit-publicKey加密。
- OR1收到數(shù)據(jù)包,發(fā)現(xiàn)是relay,用私鑰解開data部分拿到OR2的地址信息和公鑰,利用上面的握手過程(和客戶端到OR1一樣)完成OR1和OR2之間的握手。
- 同樣的道理OR2也和OR3完成握手
整個握手過程就是鏈路建立過程,首先是客戶端和OR1建立鏈路然后通過“擴展”指令讓OR1<->OR2、OR2<->OR3之間建立鏈路。鏈路建立成功后客戶端會發(fā)送CMD=data的數(shù)據(jù)包,其中DATA部分是經(jīng)過三層公鑰加密的or1-circuit-publicKey(or2-circuit-publicKey(or3-circuit-publicKey(data))),OR1收到數(shù)據(jù)包后會解密第一層然后交給OR2,解密第二層以此類推。就像剝洋蔥一樣,剝了一層又一層,這就是“洋蔥路由”名稱的來歷。通訊過程中看似OR1是知道客戶端的公網(wǎng)IP的,其實不然。有兩種方法保證了匿名性:1. OR服務(wù)器來源于互聯(lián)網(wǎng)用戶自己提供的,客戶端使用的時候是隨機選擇的,所以隨機性很大。2. OR1服務(wù)器并不知道自己是“入口路由”,它僅僅知道有一個請求需要建立鏈路,因為客戶端的建鏈過程和OR1到OR2的建鏈過程是一樣的。每個OR服務(wù)器僅僅知道建立鏈路而沒有辦法判斷請求者是實際用戶還是其他OR服務(wù)器。
Tor安全嗎
首先我們要搞清楚Tor的目標(biāo)不是提供代理服務(wù)器而是實現(xiàn)匿名,所以它的設(shè)計其實是很脆弱的。攻擊它的方式有兩種:
- 釜底抽薪,Tor屬于集中式設(shè)計,它正常工作完全依賴于目錄服務(wù)器。為了防止目錄服務(wù)器被冒充所有的目錄服務(wù)器IP地址都被硬編碼在客戶端一共9個主用的,151個備用的。禁用這些IP地址或者直接干掉這些服務(wù)器那么Tor網(wǎng)絡(luò)就徹底癱瘓了,所謂的“暗網(wǎng)”就永遠從世界上消失了(^_^,厲害的我都害怕了)。
- 破除匿名,釜底抽薪的方式最徹底但是對于技術(shù)流是沒有挑戰(zhàn)性的,“暗網(wǎng)”是一個魚龍混雜的地方美帝的FBI、五角大樓之類的機構(gòu)還指望從上面收集信息呢,如果直接把網(wǎng)絡(luò)干掉了屬于“同歸于盡”的做法。破除Tor匿名的唯一辦法是加入到Tor之中——成為一臺OR服務(wù)器,因為Tor會選擇延時比較低的OR作為服務(wù)器所以對于“美帝”來說他們可以利用網(wǎng)絡(luò)優(yōu)勢讓服務(wù)器更容易被選中。
成為OR之后就可以收集數(shù)據(jù)里,記錄每條鏈路建立的時間,前驅(qū)后繼,然后再通過在明網(wǎng)收集到客戶端訪問目錄服務(wù)器(目錄服務(wù)器是固定的)的證據(jù)就可以“基于時間”判斷出他訪問了暗網(wǎng)從而破除匿名。更牛逼的是通過“強制”解開數(shù)據(jù)包還有更大的驚喜——如果解包成功說明這臺OR服務(wù)器承擔(dān)了“出口”的角色,出口到目標(biāo)服務(wù)器數(shù)據(jù)是不經(jīng)過加密的,據(jù)說維基解密的很多資料都是通過這種方式獲取的。
總結(jié)
Tor的Cell是over在TCP、UDP之上的(作為TCP、UDP的data部分)而TCP、UDP鏈路是經(jīng)過TLS保護的所以DPI是識別不了Tor Cell,也就沒有辦法判斷用戶是否在訪問暗網(wǎng)。通過握手機制建立起來的鏈路保護了用戶訪問時的匿名性,即便是中間參與轉(zhuǎn)發(fā)數(shù)據(jù)的代理服務(wù)器也沒有辦法判斷誰訪問了暗網(wǎng)。當(dāng)然再狡猾的狐貍也斗不過獵手,Tor的安全性其實沒有想想的那么高反而很容易就被攻擊。更加要命的是可以輕而易舉的徹底摧毀Tor網(wǎng)絡(luò),而美帝之所以不這么做是想通過暗網(wǎng)獲取更多信息,監(jiān)控更多的人(好比一個天然的大“蜜罐”系統(tǒng))。
【本文是51CTO專欄作者“邢森”的原創(chuàng)文章,轉(zhuǎn)載請聯(lián)系作者本人獲取授權(quán)】