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





























