日蝕攻擊是一種相對簡單的基礎攻擊,攻擊者可能會通過該攻擊方式干擾網絡上的節點。顧名思義,該攻擊能夠使對等網絡中被攻擊節點無法獲取有效信息,從而引發網絡中斷或為更復雜的攻擊做準備。
從表面上看,日蝕攻擊(Eclipse Attack)與女巫攻擊(Sybil Attack)相似。盡管它們具有某些相似之處(攻擊者通過攻擊節點擾亂網絡),但它們最終的攻擊目標是不同的。日蝕攻擊的目標是單個節點(原因將在下文中說明),而女巫攻擊的目標是整個網絡范圍,旨在篡改網絡協議的信譽體系。
2015年所發表的《在比特幣對等網絡上的日蝕攻擊》論文中,對該概念進行了詳盡的討論,其中來自波士頓大學和希伯來大學的研究人員報告了他們進行日蝕攻擊的實驗結果,以及與之對抗的防范措施。
日蝕攻擊的工作原理
比特幣礦工需要專用設備生成驗證新區塊,但是非挖礦(或完整)節點僅需要非常小的算力即可運行。通過這種方式,任何人都可以在廉價設備上運營節點,這也有助于比特幣的去中心化。軟件程序維護了與對等方同步的事務處理數據庫,以便與網絡保持同步。
對大量節點連接的限制因素是帶寬。因此,盡管有大量設備可以運行該程序,但比特幣網絡中設置了連接數量限制(最多只能連接125個),普通設備無法直接與其他設備進行互連。
在日蝕攻擊中,攻擊者會確保目標的所有連接都建立在攻擊者所控制的節點上。攻擊者將首先從自己的IP地址向目標地址發送泛洪,受害者可能會在程序重啟時連接到攻擊者的IP地址。可以強制重啟(即對目標進行DDoS攻擊),或者僅等待程序自動重啟。
如果發生這種情況,毫無戒心的受害者就會聽從惡意節點的擺布,攻擊者向它們提供了錯誤數據,他們無法從真實網絡中獲取到數據。
日蝕攻擊造成的后果
如果攻擊者通過消耗網絡節點的資源,能夠使其從網絡中分離,那么他們就有動機實施此類攻擊。如果節點被隔離了,攻擊者就可以實施幾次連續攻擊。
無需確認的“雙花”
如果獨立節點接受了未經確認的交易,那么就會發生“雙花”風險。如果發生的交易在進入區塊之前(提交至區塊鏈),可能已經進行廣播了,那么發送方就可以在其他地方輕松得進行一次新的交易,花費掉與此前交易相同的金額。如果新產生的交易手續費較高,這個時候礦工們會優先處理該筆交易,并認為這筆交易是最先發生的,從而造成最先發生的交易無效。
某些商戶和個人接受這些0確認交易。假設某個商人Bob,他銷售高端汽車。他不知道Alice已將將他的節點進行了日蝕攻擊,再看到她的豪華跑車訂單后,也沒有產生任何懷疑。Alice創建了交易,香港服務器,Bob隨即將其廣播到網絡。在看到付款消息即將被確認后,感到非常滿意,他將車鑰匙交給了Alice,Alice開車加速離開。
而實際上,交易并沒有被廣播到網絡中,Bob只是將交易傳遞到了Alice的惡意節點中,而Alice所控制的惡意節點也不會將交易傳遞到真實節點中。因此,該筆交易會被認為無效,這個時候Alice在(真實)網絡上又支付了同樣的金額,可以是轉給她自己也可以是轉給其他人。即使最后在真實網絡中看到了最初和Bob之間的初始交易,但由于Alice賬戶中的資金已經使用掉,該筆交易也無法被驗證。
需N次確認的“雙花”
需N次確認的“雙花”與無需確認的“雙花”相類似,只是涉及更多的準備工作。許多商戶都希望付款被標記為有效之前能夠先等待一定數量的確認。為了解決該問題,攻擊者必須使礦工和商戶節點都進行日蝕攻擊。如果攻擊者與商戶建立了訂單,他們就會向(遭受日蝕攻擊)的礦工廣播交易。商戶可以在區塊鏈網絡中看到交易被確認,但由于礦工和商戶所在的網絡都被隔離了,因此該區塊鏈并不是大多數真實節點所能夠見證的。
攻擊者將該虛假的區塊鏈網絡信息發送給商戶,商戶在看到交易已經被確認后,就進行了商品的交接。而當這些遭受日蝕攻擊的節點重新加入真實網絡后,真實的區塊鏈網絡會認為這部分節點是無效的,從而將這部分節點進行孤立(這與51%攻擊相類似)。
削弱礦工之間的競爭
遭受日蝕攻擊的節點會繼續運行,不會受到被網絡隔離的影響。礦工將繼續在協議規定的規則范圍內對區塊進行驗證,但是添加的區塊將會在和真實網絡節點進行通過的過程中進行丟棄。