匿名網路概述(Darknet)
原文地址 匿名網路概述(Darknet) - FindHao
1. Introduction
本文先簡單介紹了surface web,deep web 和dark web的信息(主要系翻譯),接著說明了onion的內容(來源於wiki)n本文詳細介紹了onion路由技術(主要翻譯自論文Dingledine R, Mathewson N, Syverson P. Tor: The second-generation onion router[R]. Naval Research Lab Washington DC, 2004 )。最後新技術的說明來源於Building a new Tor that can resist next-generation state surveillance
2. 淺網,深網,暗網
淺網surface web深網deep web暗網dark web可以通過搜索引擎(谷歌,百度等)找到的信息不能通過前面的那些搜索引擎搜索到的信息深網的一部分,只能通過tor瀏覽器訪問的信息
大多數人可能會把暗網(darkweb darknet)和深網混淆,深網是指互聯網上普通搜索引擎搜索不到的所有信息。專家認為深網是淺網的幾百倍。n事實上,深網的大多數內容沒什麼神秘的,也和「邪惡」無關。它包含不對外公開的大型資料庫、圖書館和只允許會員查看的網站,而且,絕大多數內容是科研相關的內容。比如學校的圖書館,擁有自己的搜索引擎,這就屬於暗網的內容。很多深網索引項目都失敗或者消失了。常見的深網搜索引擎有: Ahmia.fi, Deep Web Technologies, TorSearch, and Freenet.n暗網則是深網很小的一部分。它是匿名網路,訪問者和發布者都是完全匿名的。同時,政府部門也可以追蹤到一些人,但是需要耗費大量人力物力,而且並非總能成功。而暗網的訪問,一般是通過洋蔥網路。
3. 洋蔥路由(onion routing)
被稱作洋蔥路由的原因在於消息一層一層的加密包裝成被稱作洋蔥數據包的數據結構,層數取決於到目的地中間會經過的節點數,每經過一個節點層會將數據包的最外層解密,因此任一個節點都無法同時知曉這個消息最初與最終的目的地,使發送者達到匿名的效果。
3.1 數據結構
數據包的創建與發送n為了發送洋蔥數據包,發送消息者會從「目錄節點」(directory node)提供的列表中選取一些節點,並以這些規划出一條被稱作「鏈」(chain)或「線路」(circuit)的發送路徑,這條路徑將為傳輸數據包所用。為了確保發送者的匿名性,任一節點都無法知道在鏈中自己的前一個節點是發送者還是鏈上的另一節點;同理,任一節點也無法知道在鏈中自己的下一節點是目的地還是鏈上另一節點。只有鏈上的最後一個節點知道自己是鏈上最終節點,該節點被稱作「出口節點」(exit node)。n洋蔥路由網路使用非對稱加密,發送者從目錄節點獲得一把公開密鑰,用之將要發送的消息加密並發送給鏈上的第一個節點,該節點又被稱作入口節點(entry node);其後與之創建連接和共享密鑰。創建連接後發送者就可以通過這條連接發送加密過的消息至鏈上的第二個節點,該消息將只有第二個節點可以解密;當第二個節點收到此消息後,便會與前一個節點也就是入口節點同樣的創建連接,使發送者的加密連接延伸到它,但第二個節點並不曉得前一個節點在鏈中的身份。之後按照同樣原理,發送者通過入口節點和第二個節點的這條加密連接將只有第三個節點能解密的消息發送給第三個節點,第三節點同樣的與第二個節點創建連接;藉由重複相同的步驟,發送者能產生一條越來越長的連接,但在性能上仍有限制。n當鏈上的連接都創建後,發送者就可以通過其發送數據並保持匿名性。當目的地回送數據時,鏈上的節點會通過同一條連接將數據回傳,且一樣對數據層層加密,但加密的順序與發送者完全相反;原發送者收到目的地回傳的數據時,將僅剩最內一層加密,此時對其解密就可拿到目的地回送的消息。
3.2 弱點
3.2.1 計時分析
另見:流量分析n傳統互聯網不被認為具有匿名性的一個理由為互聯網服務供應商具有紀錄和追蹤各電腦間的連接能力;例如當有人訪問一個特定網站時,往來的信息內容如密碼等,雖然能通過像是HTTPS等加密連接方式保護讓其他人無法得知內容,但是連接本身卻仍會有紀錄,包含何時創建連接,多少數據量被發送等。洋蔥路由雖然能創建並隱藏兩電腦之間的連接,使兩者之間並無一個可分辨的直接連接,但仍會有上述的連接紀錄問題。流量分析可藉由搜索連接紀錄的連接時間和數據傳輸量來試圖判別潛在的一對發送者與接收者;例如當有人發送51KB的數據到一個未知的電腦,三秒後另一未知的電腦發送51KB的數據給一個特定的網站,則可以推斷此人可能與該網站曾創建連接。此外還有一些原因可以讓流量分析更加有效,包含節點的損壞或離開網路,以及當鏈已經因為定期重建而改變,但有些鏈上節點卻仍在追蹤此前創建的會話等。n大蒜路由是洋蔥路由的一種變體,其結合了I2P網路並將多份消息加密打包在一起,使其更難被攻擊者以流量分析的方式破解。
3.2.2出口節點漏洞
雖然消息在洋蔥路由網路中被層層加密,但是在出口節點時,該節點會把最後一層解密並將原始消息傳給接收者;因此若出口節點遭到攻擊或是受控制,則原始的消息將會被截取。瑞典研究員丹?伊格史塔德(瑞典語:Dan Egersta)曾用此方式獲得了超過100封寄給外國大使館的電子郵件密碼。出口節點漏洞的原理與未加密無線網路很類似,後者為用戶將未加密的數據在無線網路上傳送時可能中途被其他人截走;這兩種問題都可以通過端對端加密連接如SSL、HTTPS等方式解決。
4. Tor(The Onion Router,洋蔥路由器)
Tor是實現匿名通信的自由軟體。Tor是第二代洋蔥路由的一種實現,用戶通過Tor可以在網際網路上進行匿名交流。Tor用於防範互聯網上廣泛存在的流量過濾、嗅探分析。Tor在由「洋蔥路由」組成的表層網(overlay network)上進行通信,可以實現匿名對外連接、匿名隱藏服務。
4.1 Tor瀏覽器
前身為Tor Browser Bundle(TBB),是Tor項目的旗艦產品,操作容易,對電腦沒有多少知識的人也能使用。由Mozilla Firefox ESR瀏覽器修改而成,並由Tor Project開發人員做了許多安全性和隱私保護的調校,預載TorButton、TorLauncher、NoScript和HTTPS Everywhere等擴展與Tor代理。其為開源軟體、自由軟體、綠色軟體,可在多種操作系統上運行,包括Windows、Mac OS X、Linux、Unix、BSD、以及Android手機。nTor瀏覽器在後台啟動Tor進程並透過其連接網路。一旦程序斷開連接,Tor瀏覽器便會自動刪除隱私敏感數據,如cookie和瀏覽歷史記錄。nTor瀏覽器目前提供16種語言的介面,包括簡體中文(但尚無繁體中文)。nTor瀏覽器本身提供SOCKS代理服務,一些應用程序已可藉此使用Tor網路。若結合代理伺服器軟體 Privoxy,可以讓所有走HTTP/HTTPS協議的連網應用程序、以及所有能夠設置HTTP/HTTPS代理的應用程序都通過Tor網路來上網。
4.2 移動平台
Android平台上的Tor伺服器名為Orbot,並搭配Orfox瀏覽器來打開網頁。Orbot本身可以當作VPN和Proxy使用,讓用戶指定同一設備上的任何程序通過Tor網路來匿名上網。
4.3 Tor的工作原理
翻譯自tor官網n
tor網路中的數據包使用了隨機的路徑來掩蓋足跡,這樣在某個點的觀察者並不知道數據真正從哪裡來,真正的目的地是哪裡。n用戶的tor軟體或者客戶端在tor網路中增量地建立一條加密線路。這條線路每次只擴展一跳,而且每次擴展的中繼點只知道數據來自哪個中繼點,數據將要被發送到哪個中繼點去。沒有任何一個中繼點知道整條線路。客戶端與每一跳都協商了一組獨立的密鑰來保證每一跳不能追蹤走過的中繼點。n
一旦一條線路建立了,就可以用來進行交互數據了。
為了提高效率,十分鐘以內的鏈接,將採用同一條路徑。之後的請求將建立新的路徑。
4.4 相關工作
基於中繼的匿名系統設計主要分歧在兩個方向上。像Babel,Mixmaster,Mixminion這樣的系統通過設置相對較大和可變的延遲來最大化匿名性,這樣,這些高延遲的系統就擁有了高防禦性。但是像網頁瀏覽、即時通訊或者ssh連接則無法忍受這樣的高延遲。ntor屬於第二種:低延遲的設計,允許匿名的互動式流量。這些系統提供了更明確的及時的信息分發,導致很難阻止可以監聽通訊終點時序和流量的攻擊者。n最簡單的低延遲設計是單跳代理,比如:Anonymizer:在轉發數據之前會剝去數據的源信息。將流量集中到此單點增加了匿名集,但是如果竊聽者可以觀察到所有進入和離開這個代理的流量,則此方式很容易被攻擊。n更複雜的設計是通過分散可信點、基於路徑的匿名系統。(用戶可以建立一個或多個雙向的點到點路徑,,,,?這裡原文沒太懂)nPipeNet是和onion routing同期提出來的低延遲設計。有很強的匿名性,但是允許用戶切斷網路(?)n類似P2P設計的系統有Tarzan和MorphMix等,所有的用戶既產生流量,也轉播流量,它們意在隱藏當前節點是流量的發起者還是轉播者。Tarzan一類在每層都進行了加密,而Corwds則簡單地假設監聽者無法觀察流量發起者,所以沒有使用任何公鑰加密,線路上的任何節點都可以讀取用戶的流量。nHordes基於Crowds,但是使用了多播響應來隱藏流量發起者。
4.5 Tor的設計原理
Tor網路是一種覆蓋網路,每個洋蔥路由器(onion router, OR)作為一個沒有任何特權的用戶層正常程序運行,與其他所有節點維持一個TLS鏈接。每個用戶運行自己的洋蔥代理程序:獲取目錄,建立路徑,處理連接。這些代理接受TCP數據流,並且在同一條線路上復用他們(?)。n每個洋蔥路由器維護一個長期的驗證密鑰和短期的洋蔥密鑰。驗證密鑰來簽署TLS的證書,簽署OR的描述符(包含了當前節點的keys,地址,帶寬,退出策略等等),還被目錄伺服器用來簽署目錄。洋蔥密鑰則用來解碼用戶發送來的請求,以便建立一條通路同時協商臨時的密鑰。TLS協議還在通訊的OR之間使用了短期的連接密鑰,周期性獨立變化,來減少密鑰泄漏的影響。
4.5.1 傳輸單元Cells
流量在網路中以固定大小的單元進行傳輸,每個單元是包含頭和有效載荷的12位元組數據。頭包括一個線路標識符(這個單元使用哪條線路)和一個指令(指明將要對這個單元的數據做什麼)。指令包括:
- padding,目前主要用來keepalive,也用來進行鏈接填充
- create or created(用來建立新的路線)
- destory,棄用線路
中繼單元在有效載荷數據之前有額外的頭(中繼頭),包含了一個streamID,一個端到端的校驗和,中繼負載的長度和一個中繼命令。整個中繼單元的信息在線路上流動時,使用128位的AES進行加解密。中繼命令包括:
- relay data,數據順著stream向下流
- relay begin,打開一個stream
- relay end,關閉一個stream
- relay teardown,關閉一個斷開的stream
- relay connected,提示洋蔥代理 relay begin成功了。
- relay extend and relay extended,延長線路一跳,加ed的表示返回確認
- relay truncate and relay truncated,截斷線路的一部分
- relay sendme,用於擁塞控制
- relay drop,用於實現遠程虛擬
4.5.2 線路和流(Circuits and streams)
洋蔥路由最初位每個TCP流都建立一條線路。而由於建立一條線路可能會耗費0.1秒(因為公鑰加密和網路延遲),這種設計導致像網頁瀏覽器這樣會打開很多TCP流的應用消耗線路成本過高。n在Tor里,一條線路可以被很多TCP流共享。
4.5.2.1 建立一條線路
用戶的代理程序增量地構建一條線路,同線路上的每個OR(洋蔥路由器)協商一個對稱密鑰,一次一跳(一個節點)。n假設洋蔥代理Alice想要建立一條線路,她會發送一個create cell(攜帶create指令的單元)給她選擇的線路上的第一個節點Bob。她會選擇一個的連接中沒有用過的新的cricID CAB。create cell包含了 the Diffie-Hellman handshake(gx)(迪菲-赫爾曼密鑰交換是一種安全協議。它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道創建起一個密鑰。這個密鑰可以在後續的通訊中作為對稱密鑰來加密通訊內容)的前半部分,加密了給Bob的洋蔥密鑰。Bob回復一個created cell 包含了gy和一個K(K = g xy)。n一旦他們兩個的連接建立了,Alice和Bob將發送其他使用協商的密鑰加密的中繼單元。n要擴展這條線路時,Alice會發送一個relay extend cell給Bob,其中已經指定了下一個OR(Carol)和用來加密的gx2。Bob轉發內含的半次握手數據到一個create cell給Carol。Bob選擇了一個他和Alice的連接中沒有用過的新circID CBC,Alice永遠不會知道Bob和Carol之間的circID。當Carol返回了created cell,Bob包裝這個cell成relay extended cell給Alice。這樣,線路就擴展到了Carol,Alice和Carol共享一個密鑰 K2 = gx2y2 。n如果要繼續擴展,則依此類推,執行以上步驟。n線路級的握手協議實現了單方面的實體認證(Alice知道她和OR握手了,但是OR不關心誰建立了線路)和單方面的密鑰驗證(Alice和OR共享了一個密鑰,但是Alice只知道OR知道這件事(?))。更正式一點,這個協議如下:nAlice->Bob: EpkBob(gx)nBob->Alice: gy,H(K|」handshake」)
EpkBob(?)是使用Bob的公鑰進行加密,H是一個安全的哈希函數,|表示級聯。
4.5.2.2 中繼單元
OR在收到Alice的中繼單元數據以後,用相應的密鑰解密中繼單元頭和負載。如果這個中繼單元是由Alice向目的地發出的,則檢查是否有有效摘要(作為優化,前兩個位元組作為完整性檢查,看是否是0,大多數情況下,這樣可以避免計算hash值)。如果有效,他們將按照下面說的進行處理。否則的話,n洋蔥代理處理進來的中繼單元很簡單:他們用和每個OR的公鑰迭代地解出中繼頭和負載。(在任何節點發現解出的摘要失效)???nAlice對每個節點都針對性的賦值了摘要,並進行了加密,因為摘要已經在每步都加密成了不同的值,只有在特定的目標OR才有意義。這種leaky pip circuit 拓撲允許Alice發送的流在線路上的不同OR處退出。Alice也可以根據自己的退出策略選擇不同的節點退出,或者讓OR無法得知流是否來自於同一個人。n如果要截斷路徑,Alice發送一個destroy 控制單元。線路上每個接受到destroy的OR,關閉這條線路上的所有stream,並且傳遞這個destroy到下一個節點,這個過程也是增量的,同樣執行destroy完畢的OR也發送relay truncate cell 確認。通過這種方式,Alice就不用通知中間節點她更換了線路。這樣「截斷節點查看線路是否斷開」的攻擊破壞性就不大了。
4.5.3 打開和關閉steams
當Alice的應用想要TCP連接時,OP(洋蔥代理)選擇(或者建立)一條新的線路,選擇一個合適的節點作為退出點。OP發送一個relay begin單元給退出節點來打開新的stream,生成新的streamID。一旦退出節點連接上了目標主機(想要訪問的網站等),它響應一個relay connected 單元。OP則通過sockes代理通知應用程序線路已經建立。接下來,OP接收應用的TCP流數據,封裝成relay data單元沿著線路發送給退出節點。n這裡還需要一個注意的地方,一些應用給Tor客戶端發送的是字母數字的主機名,有些給的是解析好了的ip地址。如果應用先做dns解析,那Alice要訪問的地址就透漏給DNS伺服器了,而不是通過tor網路發送hostsname最後才解析。Mozilla和SSH之類的有這樣的漏洞。nMozilla中這個問題很好解決。Privoxy(一個HTTP代理)可以給tor客戶端hostname,而不是在本地就進行了dns解析。而更廣泛適用的解決方案仍是急需的(這是04年的論文,不確定現在)。替換本機的nameserver可以達到目的,但是不方便而且不可移植。強迫解析庫使用TCP而非UDP也是困難的不可移植的。動態攔截系統解析看起來是個正確的方向。我們也提供了一個tor網路上的解析工具dig。但是目前,我們仍然建議使用Privoxy這樣的代理。n關閉一個Tor stream和關閉一個TCP stream類似:正常情況下使用兩步握手,出錯時一步。
5. Tor的安全性討論
這兩位來自美國東北大學的兩位科學家在Tor洋蔥網路進行了一項實驗,此項實驗用到1500蜜罐伺服器已發現出至少110台「流氓伺服器」。本此實驗(2016年2月12日–2016年4月24日)旨在測試Tor同胞伺服器的可信因素和HSDirs(隱藏服務目錄),尤其是HSDirs,它是指一個Tor伺服器用於承載一個.onion(深網)網站的複雜項目。
5.2 對一些伺服器嘗試SQL注入和XSS攻擊
大多數數據查詢表現出惡意行為,如訪問伺服器的根目錄的路徑,description.json伺服器文件,以及Apache狀態頁面數據。Guevara Noubir教授補充道:
「我們檢測到其它攻擊手段,如SQL注入(針對INFORMATION_SCHEMA.TABLES),Drupal用戶名枚舉,跨站點腳本(XSS),路徑遍歷(尋找boot.ini文件和/ etc / passwd文件),瞄準Ruby on Rails框架(導軌/信息/屬性),和PHP復活節彩蛋(= PHP? – – – – *)。 」n這110台行為不端的HSDirs中,有70%是運作在專業雲計算基礎架構上。這就說明,這些「流氓伺服器」不是建立自己的家用台式機作為節點伺服器。
5.3 有些惡意伺服器是Tor的出口節點
Tor網路的攻擊都為Tor項目,探討這些項目的大多是民族國家行為者,犯罪偵查機構,學術研究人員和網路犯罪分子。研究中,25%的HSDirs充當Tor流量的出口節點,也就是說這類人群可能會利用這些伺服器來開展中間人攻擊(MitM)攻擊的徵兆,並窺探Tor流量,隱患重重。
5.4 問題總結
目前為止(2016.8.31),全球大概有7000個中繼節點,2000個入口節點和1000個出口節點。攻擊者只需要有一個蜜罐入口和出口,就可以分析出你的流量去向,獲得你的真實身份,(1/2000*1/1000)的機率,恰好你使用了這個入口和出口節點,考慮到在用Tor時,你一個HTTPServer的訪問就可能建立很多條線路,這個機率將大大提升,如果你長期使用Tor,那麼被蜜罐節點收集到信息的可能性更大。nTor在低延遲和高匿名性之間做了一個取捨(trade off),因為tor的最廣泛應用是瀏覽器,為了維持訪問的流暢性,犧牲了部分匿名性。
6 大蒜路由(Garlic routing)
是洋蔥路由的一個變體,它將傳輸的原始數據拆散為加密數據包通過多條隧道交叉疏散傳遞,令攻擊者的流量分析難上加難。在洋蔥路由中一條或多條數據流的上傳與下載共用一條隧道,而這種路由方式的上傳與下載隧道相互獨立而且兩個方向上的隧道數量都可能>1,所以被稱為大蒜路由。n與洋蔥路由的電路交換(Circuit Switching)相比,大蒜路由也稱為封包交換(Packet Switching)方式。大蒜路由是I2P與Tor及其他隱私/加密網路的主要區別之一。n
6.1 典型應用 I2P
很難被封殺n在抗封殺方面,I2P 比 TOR 要堅挺。
先說說 TOR 為啥被天朝封殺:nTOR 每次啟動時,需要先連接到某個 TOR 的目錄伺服器,獲取網路上可用節點的信息。由於目錄伺服器數量有限,GFW 就把互聯網上所有的 TOR 目錄伺服器的 IP 地址都列入黑名單。後來,TOR 官網提供網橋中繼,幫助網友接入 TOR 網路。但是,TOR 的網橋中繼,數量依然不太多。據說 GFW 專門有人在盯著 TOR 官網更新的網橋中繼地址——每次有新的中繼地址貼出來,就列入黑名單。經過 GFW 的不懈努力,大部分 TOR 的網橋都被封殺。所以,TOR 在天朝內不太好使。
再看看 I2P 為啥封殺不了:nI2P使用 Kad 演算法(用過電驢或電騾的網友,應該聽說過)來獲取網路節點的信息。這麼做有幾個好處:n1. 不需要目錄伺服器n2. Kad演算法拿到的節點信息只是整個 I2P 網路的一小部分n3. 每一台運行 I2P 的主機都可以成為中繼,幫別人轉發數據(類似於 P2P 下載)n由於上述好處,GFW 很難把所有 I2P 節點都列入黑名單。
7 下一代匿名通信系統
Tor仍有很大優勢,在短時間內不會消失。最可能的情況是Tor繼續作為一種優良但不完美的通用匿名系統,同時也會有新的特定用途匿名性更強的系統,比如匿名通信,匿名文件分享,匿名微博和匿名網路語音系統等等。
7.1 Herd:沒有元數據的信號
Aqua/Herd項目看起來是最可能在現實中部署的。Aqua(Anonymous Quanta)是一套匿名文件分享網路。Herd,基於Aqua,利用了類似的匿名性設計了匿名網路語音系統。(論文ACM SiGCOMM 2015 CCF-A,相關資料)。接受了美國NSF的50萬美元資助後,設計者正努力在2017年上線這個系統。n這兩個系統都是通過用噪音數據填充用戶的流量,使其通信不可輕易識別。
7.2 Vuvuzela/Alpenhorn
Vuvuzela』s approach to anonymous chat is to encrypt the metadata that it can, add noise to the metadata that it can』t, and use differential privacy to analyse how much anonymity this noise provides.
7.3 Dissent
基於Dining cryptographers problem,結合了一個可驗證的隨機演算法,現在DIssent正處於研究進程中。該項目的更適用於一對多的廣播,不需要實時交互,比如博客,微博甚至IRC。n(然而,github上的代碼已經兩年沒有更新了。)
7.4 Riffle
跟Aqua類似,Riffle的主要應用場景也是匿名文件分享。更多的是對Tor的補充。因為Tor是不支持P2P的,p2p是點對點下載文件,在這個過程中,使用tor會暴露自己的ip地址,也就失去了tor的意義。
7.5 Riposte:匿名的Twitter
類似Dissent,尚未部署,實驗階段。繼續平衡高匿名性和低延遲之間的取捨。
7.6 新技術的現狀
上面提到的新技術,很少有能完整可用地部署到現實中的,一個原因是研究人員通常不傾向於做出產品級的項目,沒有足夠的熱情。n另一個是技術實現上有很多障礙,理論研究和實際開發仍有距離。n個人認為,SDN+Tor(之類)
8. Reference
A Beginner』s Guide to Exploring the Darknet wiki 洋蔥路由 Tor Tor: Overview Dingledine R, Mathewson N, Syverson P. Tor: The second-generation onion router[R]. Naval Research Lab Washington DC, 2004. Building a new Tor that can resist next-generation state surveillance Overlay network Transport Layer Security, TLS Diffie–Hellman key exchange 揭秘暗網中的Tor網路連接 歷時72天,TOR網路中釣出110多台「流氓伺服器」 【技術分享】幾張圖讓你理解:Tor是如何工作的 Dining cryptographers problem TOR: Is There a Viable Alternative? 「如何翻牆」系列:關於 TOR 的常見問題解答 kad演算法介紹 什麼是洋蔥路由 P2P技術原理及應用 SDN是什麼
推薦閱讀:
※世界上最恐怖的所在——暗網,只有你想不到的黑暗...
※如何看待中美兩國網路防禦技術對比?
※深網和暗網究竟是怎麼樣的存在?有沒有類似這些東西的埋藏在社會底層的存在?