IPFS2020 年的一個主要焦點是隨著網絡規模的不斷擴大而改進內容路由。雖然我們已經對 DHT 上的請求速度做出了重大改進,但我們的另一個關鍵關注點是網絡的安全性。
在我們工作 go-ipfs 0.5 的發布,A-SIT 的 Bernd Prünster 和 Alexander Marsalek 和格拉茨科技大學聯系了我們,告訴我們他們在研究 Go-IPFS 0.4.23 期間發現了一種攻擊,可以讓攻擊者用最少的資源使公共分布式哈希表上的任何節點黯然失色。
在過去的 3 個 go-ipfs 小版本(0.5、0.6和0.7)中,我們一直與 Bernd 和 Alexander 密切合作,這使我們能夠發布增量改進,減輕了他們最初的攻擊,并將此類攻擊的成本和難度提高了幾個數量級。今天我們將深入探討攻擊和我們已經發布的各種緩解措施。
減輕攻擊
Eclipse 攻擊是指攻擊者將對等設備與網絡的其余部分隔離,以便目標對等設備僅與攻擊者控制的對等設備通信的能力。此攻擊的目標是污染目標對等點 DHT 路由表,以便只顯示攻擊者控制的對等點。
在 Bernd 和 Alexander 發現的攻擊中,他們使用 libp2p 和大量預生成的 Peer id 列表(總計29TB數據)創建了 Sybil 攻擊,在 libp2p 中對聲譽系統進行博弈,以接管路由表。
如果您不熟悉 Sybil 攻擊,您可以使用具有 ID 的單個對等點來顛覆信譽系統,以增加對網絡的影響力。在此攻擊的上下文中,虛假 ID 最終取代了受影響對等點的路由表中誠實對等點的位置。
為了使這次攻擊成功,暴露了 libp2p 中的一些漏洞,這最終導致這次攻擊在 go-ipfs 0.4.23 中非常有效。在此攻擊被發現時,libp2p 的一個主要問題是 DHT 不支持長壽命的對等點,而且它沒有保護其較低桶中的對等點。這個問題允許攻擊者快速地從目標的路由表中驅逐誠實的對等點,以使其支持不誠實的對等點。作為對 go-ipfs 0.5 中 DHT 的徹底修改工作的一部分,我們改變了路由表中條目的管理方式。
影響此操作的主要變化之一是,我們將不再從仍可用的路由表中逐出對等點。再加上我們對 go-ipfs 0.5 中 DHT 所做的其他改進,使得攻擊的執行難度增加了幾個數量級。您可以在 IPFS 0.5 內容路由深入介紹中了解對 DHT 的詳細更改。
除了 go-ipfs 0.5 中的變化之外,我們還解決了幾個進一步增加攻擊難度和成本的問題。這次攻擊成功的部分原因是,一個 Sybil 節點通過濫用對作為中繼的節點的評分的缺陷來欺騙有價值連接的信譽系統。該缺陷可能允許一個 Sybil 節點作為后續 Sybil 節點的中繼,這將繼續提高中繼的分數。這可以通過使用嵌套 Sybils 為單個對等點完成。
為了解決這個問題,我們對繼電器應用了一個不變的分數,這允許我們仍然重視他們,但避免他們能夠夸大他們的聲譽。通過提高內部信譽系統的完整性,我們已經降低了西比爾攻擊的效力。
為了增加這類攻擊的成本,我們所做的另一個重大改變是在路由表中引入 IP 多樣性需求。最初對 go-ipfs 0.4.23 的攻擊能夠在一臺機器上運行,而且成本相對較低,因為路由表可能只包含來自單個主機的對等點。IP 多樣性要求現在限制了來自任何給定主機的對等點的數量,這使得從單臺機器執行 eclipse 攻擊變得不可行,進一步增加了 go-ipfs 0.5 攻擊成本的兩個數量級。
驗證緩解措施
作為與 Bernd 和 Alexander 合作的一部分,我們希望確保能夠適當地測試和驗證我們的修復,我們采取了兩種方法:
現場測試。在我們的允許下,他們對公共網絡上的一個托管引導節點執行了一次受控攻擊。這使我們能夠收集實時度量和日志,從我們的可見性和它們的外部觀察觀察攻擊的有效性。在從 go-ipfs 0.5 開始的 IPFS 發行版之前,在 IPFS 的每個版本上都執行了受控攻擊,這使我們能夠在生產環境中驗證修復程序。
Testground 復制。多虧了 Testground 的開發和發布,Bernd 和 Alexander 共享了他們的攻擊代碼,我們能夠創建測試計劃來復制攻擊的各個部分。這使我們能夠在受控的測試環境中對變更進行大規模測試,以驗證攻擊是可能的,并驗證我們的緩解措施。擁有這些測試計劃的好處是,我們可以在 IPFS 和 libp2p 版本上繼續運行它們,以確保不會引入回歸。
此外,這確保了我們可以在受控的環境中更長時間地運行攻擊,從而進一步分析攻擊的效率和成本。
我們今天所處的位置
在過去的一年里,我們對 IPFS 和 libp2p 的性能和安全性都有了顯著的改進,協作是這項工作成功的重要因素。Bernd 和 Alexander 所做的研究以及他們與我們如此緊密合作的意愿對于幫助我們改善網絡的穩定性具有不可估量的價值。我們很感激有機會一起工作。
隨著今年 9 月 go-ipfs 0.7 的發布,我們將執行針對 IPFS 和 libp2p 的 eclipse 和 Sybil 攻擊的難度和成本從它的 0.4.23 增加了幾個數量級。