作者:Julien Urraca, Fabian Jahr, 0xb10c, CedArctic
來源:https://bitcoinmagazine.com/print/the-core-issue-your-node-vs-the-digital-wilderness

五十年前,互聯網的第一條消息發送成功;然而,點對點網絡一直是稀罕物種。比特幣提供開放貨幣系統的能力, 建立在它的點對點網絡架構之上;同時,這個聯網層 —— 對等節點發現以及彼此連接 —— 也正是它的受攻擊面上最為脆弱的部分。出現問題的主要位置有兩個:比特幣自身的對等節點協議,以及位於比特幣協議之下的互聯網協議。從這個角度看,Bitcoin Core 承擔雙重使命:既要防範可能被對等節點濫用的 “拒絕服務式攻擊(DoS)” ,又要讓節點們能在廣闊的敵意環境(也就是互聯網)中安全地溝通。
P2P
政府很善於砍掉那些中心化控制的網絡(比如 Napster),但純粹的 P2P 網絡(比如 Gnutella 和 Tor)似乎還能自行其是。
—— 中本聰,2008 年 11 月 7 日 1
比特幣的 P2P 協議規定的是節點們交換關於交易、區塊以及其它對等節點的信息的方式。 這種信息交換,是任何交易能夠傳播、共識能夠驗證的前提,因此是重中之重。
在這些年間,這個領域也出現過多個 bug 。舉個例子,2017 就修復並且披露了一個惡意的 SOCKS 服務端漏洞 2。2020,有人報告了一個高危漏洞:一個遠端的對等節點可以讓本地節點禁止跟一些 IP 地址的連接,並讓這個禁止清單平方級增長,因此是對節點的一種 DoS 3;這個漏洞在當年就被修復,但一直到 2024 年才披露。這個 bug 被合情合理地標記為 “高危”,是一這我這種攻擊很容易實施,而它的結果是受害者節點喪失功能,而且成功攻擊所需要的前提很少。這就是那種會讓 Bitcoin Core 開發者通宵工作的 bug ,也是為什麼我們非常建議你將軟件升級成還在維護的版本(過於老舊的 Bitcoin Core 版本不會再得到積極的 維護/升級)。
這個我們稱為 “比特幣” 的分佈式網絡,還算比較小:它的清網(clearnet)節點數量還在 20k 上下徘徊,甚至,即使我們假設有 100k 個 Tor 節點,這個網絡依然是一個比較小的、容易被監控的網絡。最近,Daniela Brozzoni 和 naiyoma 證明了:如果一個節點同時運行了清網端口和 Tor 端口,那很容易就能把它的 IPv4 網絡地址與 Tor 網絡地址關聯起來 4。情報機構和區塊鏈分析公司很可能已經在這樣做了。節點們的網絡地址都搞清楚之後,就很容易注意到哪些節點最先發布了哪一筆交易,也就是各交易的出發點 IP,然後憑藉 IP 找出交易者的地理位置。雖然這並不算一個 bug ,因為節點不會崩潰,也不會偏離軌道,但可以認為是一種漏洞,因為它形成了一種方法,可以將一個 IP 地址與一筆交易關聯起來。
如何防範這種方法,到目前還是一個開放問題。
萬維網沙漠
我們打造計算機就像建立城市。一磚一石,漫無計劃,不捨廢墟。
—— Ellen Ullman 5
比特幣運行在互聯網(Internet)上,它保持一個分佈式去中心化系統的能力也取決於互聯網自身的屬性。不幸的是,互聯網的架構,如我們所知,直到今天依然是非常不安全的,各種已知的攻擊還在輪番上演。絕大部分這些攻擊都不為人知,直到造成真實損害,就更不用說如今互聯網上無處不在的監視了。
需要擔心的最著名也最實用的攻擊手法,叫做 “日蝕攻擊(eclipse attack)”,就是一群惡意節點完全包圍一個受害者節點、向它提供網絡和區塊鏈的一種特性視角。 這種攻擊根生於分佈式系統,只要你控制了一個節點的所有對等節點,你就控制了它對網絡的理解。Ethan Heilman 和協作者們在 USENIX 2015 上就演示了最早的實用型日蝕攻擊之一 6;在 2018 年,Erebus 攻擊論文描述了通過一個惡意的自治系統(AS)發起的一種 “隱秘的” 日蝕攻擊 7。
這些攻擊,很大程度上是利用了組成互聯網的網絡們彼此溝通的方式中的弱點,比如自治系統路由拓撲,或是通過一種叫做 “邊界網關協議(BGP)” 的協議。雖然有一些開發中的保護 BGP 協議的項目 —— BGPsec、RPKI —— 它們都有眾所周知的侷限性,因此互聯網的管理者們還在渴望更強大的解決方案。在那之前,互聯網仍將是狂野的大西部。
最近,來自 Chaincode Labs 的 cedarctic 的一項分析發現,比特幣的節點只分布在 4551 個自治系統中,只是組成互聯網的單元網絡中的很小一部分。他們介紹了一組攻擊,可以通過爆破這些節點所在的上游自治系統來發動日蝕攻擊 8。這些節點在匿名系統中的稀疏分佈,以及這些匿名系統的具體關係,產生了一種獨特的攻擊界面。雖然存在補救措施,尚不清楚這些攻擊界面會被比特幣人還是敵手先理解。
任何需要攻破一個乃至多個自治系統的攻擊,都需要資源、協作和技巧。雖然還沒有人報告對比特幣節點的這種攻擊成功案例,這樣的攻擊在礦工 9、錢包軟件 10、互換平臺 11 和橋接合約 12 上都成功過。 雖然我們沒法修復互聯網,但我們可以給節點提供在這樣的敵意環境中生存的工具。
網絡武備
以下是 Bitcoin Core 已經開發出、或者已經集成了支持的一些特性和功能,可以保護用戶應對網絡層面的攻擊:
TOR(洋蔥路由)是最早集成到 Bitcoin Core 的隱私保護性覆蓋層網絡。它在對等節點的網絡中創造出隨機的跳躍來混淆流量。
v2transport 13 加密對等節點之間的連接,向監視者和審查者隱藏流量的內容。 它的目的是阻止被動的網絡觀察者窺探你跟其它節點之間通信的內容。
I2P(不可見的互聯網) 14 是 Bitcoin Core 的一個可選的特性,它會給連接啟用一個額外的、隱私的、加密的層。它是一種類似於 Tor 的匿名網絡網絡,依賴於對等節點來混淆客戶端與服務端之間的流量。
ASmap 15 是 Bitcoin Core 的另一個可選特性,實現了對 Erebus 攻擊的一種緩解措施(已被作者概述在論文中,並且適用所有基於自治系統的攻擊)。通過讓比特幣的對等節點機制意識到其對等節點所在的自治系統並保證對等節點的多樣性,日蝕攻擊將變得困難許多,因為攻擊的將需要攻破多個自治系統,這是很難(甚至不可能)不被發現的。從 20.0 版本開始, Bitcoin Core 支持取得一個從 IP 網絡到其自治系統的映射(一個 AS 映射),而 Kartograf 項目讓任何用戶都能輕鬆生成這樣的 AS 映射。
互聯網可能會還會有許多弱點,我們可以做的事情之一是觀察我們的對等節點的動作、嘗試偵測惡意動作。這就是 0xb10c 16 發起的 “對等節點觀察者項目” 的初衷。它提供了一套完整的基於 eBPF 觀察點的日誌系統(從而觀察運行在一個操作系統上的一個程序的最細微動作),以觀察一個節點的活動,也包括對等節點的行為。它也提供了定製你自己的日誌系統所需的一切。
比特幣必須堅強
保護連接到對等節點和交換消息的能力,是讓比特幣得以運轉的拱頂石。
比特幣生活在一個多維度的敵意環境中,許多威脅是由互聯網架構自身的侷限性帶來的。比特幣要生存和發展,其開發者和用戶就必須學著乘風破浪。
開放網絡的代價就是不能放鬆警惕。
腳註
1. https://web.mit.edu/gtmarx/www/connect.html ↩
2. https://satoshi.nakamotoinstitute.org/emails/cryptography/4/ ↩
3. https://bitcoincore.org/en/2019/11/08/CVE-2017-18350/ ↩
4. https://bitcoincore.org/en/2024/07/03/disclose-unbounded-banlist/ ↩
5. https://delvingbitcoin.org/t/fingerprinting-nodes-via-addr-requests/1786/ ↩
6. https://en.wikiquote.org/wiki/Ellen_Ullman ↩
7. https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-heilman.pdf ↩
8. https://ihchoi12.github.io/assets/tran2020stealthier.pdf ↩
9. https://delvingbitcoin.org/t/eclipsing-bitcoin-nodes-with-bgp-interception-attacks/1965 ↩
10. https://www.theregister.com/2014/08/07/bgp_bitcoin_mining_heist/ ↩
11. https://www.theverge.com/2018/4/24/17275982/myetherwallet-hack-bgp-dns-hijacking-stolen-ethereum ↩
12. https://medium.com/s2wblog/post-mortem-of-klayswap-incident-through-bgp-hijacking-en-3ed7e33de600 ↩
13. www.coinbase.com/blog/celer-bridge-incident-analysis ↩
14. https://bitcoinops.org/en/topics/v2-p2p-transport/ ↩
16. https://asmap.org ↩

