Security

網路上的偽節點和假定的攻擊向量

  • February 15, 2015

偽節點在 Reddit 的*/r/Bitcoin上討論*

本質上,它的功能是以隨機方式中繼來自連接節點的呼叫。

這是一個關於如何輕鬆“偽造”完整節點的實驗。總結:很容易。

此處提供了概念驗證實施(和文件):

<https://github.com/basil00/PseudoNode>

對於網路來說,PseudoNode 似乎是一個普通的全節點。它像一個完整的節點一樣中繼 invs、txs、塊等。實際上,PseudoNode 是一種 p2p 代理伺服器。它只是將它無法處理的任何請求(getdata、getheaders 等)轉發到相鄰節點。有關更多資訊,請參閱上面的連結。

PseudoNode 不使用磁碟(無需下載區塊鏈),使用很少的 CPU/RAM,並且使用比普通完整節點更少的網路資源(頻寬)。PseudoNode 可以在幾秒鐘內與網路“同步”。

PseudoNode 展示了激勵全節點(包括“Bitnodes 激勵計劃”)的一些問題。很難證明一個全節點真的是一個全節點。

該實現主要具有新穎性/概念驗證價值。它不打算成為“生產”軟體。

常見問題解答

PseudoNode 會損害網路嗎?

簡短的回答:沒有。

長答案:除非 PseudoNode 的數量明顯超過正常的完整節點的數量,否則不會。否則,如果 PseudoNode 至少可以連接到一些好的節點(預設為 2),那麼 PseudoNode 將像普通節點一樣工作並貢獻網路頻寬。

PseudoNode 會導致網路分叉嗎?

不,PseudoNode 只是跟隨其他節點正在做的事情。

偽節點可以偷幣嗎?

不。

可以禁止 PseudoNode 進入網路嗎?

不容易。PseudoNode 無法直接處理的請求總是可以轉發到其他(合作的)完整節點。

在我看來,就攻擊向量而言,這似乎是非常魯莽的。顯然,需要評估利弊之間的平衡,並且由於它的價值是“新穎性”(開發人員自我描述),因此幾個缺點似乎立即顯而易見:

  1. 延遲將有效地增加區塊鏈下載時間,這樣new latency = original latency * performance decrease %
  2. 邪惡的偽節點可以將延遲限制在執行黑名單的節點的門檻值之上(即throttled latency~> cutoff latency
  3. 惡意節點的百分比增加可能會執行女巫攻擊(?)

2個相關問題:

  1. 偽節點還有哪些其他攻擊媒介(高級術語)及其影響?
  2. 協議中是否存在任何可行的意外事件來描述 PN 和節點之間的關係?例如,不同的 Bitcoincore 版本會辨識 PN(或對協議的簡單修改)嗎?

大量相互連接的偽節點使得發起頻寬耗盡攻擊變得更加容易。比特幣核心在中繼之前驗證大多數資訊,但偽節點不驗證——所以如果你可以將一些偽節點連接在一起,很容易讓它們通過相互中繼垃圾數據來浪費大量頻寬然後給他們的同齡人。

例如,如果有 101 個偽節點 (PN) 連接在一起,您可以向 PN1 發送一個看起來有效的inv數據包,宣布一個假交易(大約 61 個字節加上 TCP 數據包成本)。每個 PN 中繼inv至少 6100 個浪費的上傳字節。

但這些 PN 也連接到真實節點。假設有 500 個真實節點,所以現在浪費的 PN 上傳頻寬為 36,600 字節(加上 TCP 成本)——所有這些都是因為攻擊者創建了一個 61 字節的inv. 更糟糕的是,真實節點將使用 61 字節的getdata數據包請求交易,浪費了 30,500 字節的真實節點上傳頻寬。

如果攻擊者一整天每秒發送 1MB 的虛假數據,他將使用 86GB 自己的頻寬,但會浪費52TB的聚合 PN 上傳頻寬和可能 43TB 的真實節點上傳頻寬。

(根據 PN 的編寫方式,它們可能會浪費更多的頻寬來轉發getdata數據包。)

將此與針對單個真實節點執行攻擊的成本進行比較。對於攻擊者上傳的每個 61 字節inv數據包,真實節點通過上傳單個 61 字節的getdata. 因此,針對真實節點的頻寬耗盡攻擊需要大約 1:1 的頻寬浪費。inv真實節點在接收並驗證它所引用的事務之前不會進一步中繼,因此沒有其他節點有任何浪費的頻寬。

協議中是否存在任何可行的意外事件來描述 PN 和節點之間的關係?例如,不同的 Bitcoincore 版本會辨識 PN(或對協議的簡單修改)嗎?

該協議已經有了 DoS 禁令分數的概念,其中每個比特幣核心節點為其每個節點分配一個私有分數,以應對他們執行的任何不良行為。一旦特定對等點的 DoS 禁止分數達到門檻值(預設為 100),節點就會斷開與對等點的連接,並在一段時間內(預設為一天)拒絕來自其 IP 地址的進一步連接。不良行為包括發送無效交易和區塊。

因為 PN 不驗證數據,它們會很樂意轉發無效數據。如果它們變得普遍,想要傷害 PN 的人可以簡單地連接到任何廣告節點並向其發送一堆無效數據。如果它是一個真正的全節點,它將斷開連接(DoS 禁令)。如果它是一個 PN,它會將該數據中繼到真正的完整節點,從而導致真正的完整節點 DoS 禁止它。這將使 PN 無用,並允許 griefer 檢測哪些節點是 PN——然後 griefer 可以發布(無法驗證的)PN IP 地址數據庫。

這種方法最適用於長期 PN。為了使從大量輕量級 PN 執行短期 Sybil 攻擊變得更加困難,可以使用像 Greg Maxwell 的儲存證明這樣的東西,以使分佈式資源消耗變得昂貴

引用自:https://bitcoin.stackexchange.com/questions/36056