差點讓比特幣系統崩塌的600微秒

比特幣第四次減半已經完成,這個去中心系統已經成功運行了15年,但在2018年揭露出的比特幣核心用戶端漏洞,直接威脅到比特幣系統的穩定,堪稱比特幣最大的漏洞之一,今天跟大家介紹一下,2018年9月20日揭露的客戶端雙花漏洞,CVE-2018-17144。

什麼是比特幣核心?

比特幣核心(Bitcoin Core)由中本聰發起,被認為是”正統”的比特幣客戶端,也是目前用的最多的,該軟體可以驗證區塊鏈曾經做過的所有交易,並可以轉移資金。

CVE-2018-17144 是什麼?

在Bitcoin Core 發布的0.14 – 0.16.2版本中,存在一個極為嚴重的漏洞,將會導致程式崩潰和雙花問題,也就是說一比交易包含的輸入可以輸出多次,將會造成無限增發,破壞比特幣總量2,100萬枚的共識,造成通貨膨脹,後來被公共漏洞收錄為CVE-2018-17144。

為什麼會有這個漏洞?

這得追溯到2016年,沒錯雖然是2018年發現的漏洞,但在2016年就已經埋下了伏筆,在2016年一位開發者向Bitcoin Core提出了一個合併

希望刪除在交易檢查中重複的輸入檢查,這將節省約600微秒的時間,隨後審核者通過了此合併,此時這顆炸彈已經埋下。

在0.14.x版本中,將此漏洞正式上線客戶端程式碼中,此時如果充分利用這個漏洞,將會導致收到廣播的客戶端崩潰,並不影響鏈上數據,其他客戶端可以對發起攻擊節點的廣播丟棄掉,並且要觸發這個攻擊需要攻擊者發掘一個區塊,這個成本非常高,只能讓部分客戶端崩潰,並沒有為攻擊者帶來收益。

直到2017年9月發布的0.15版本中,開發者對UTXO資料庫的結構進行了優化,偶然的允許了客戶端在重複輸入的情況下可以繼續操作,為此漏洞打開了雙花的可能性。

該漏洞是怎麼發現的?

在0.15版本發布後,直到2018年9月17日,1年的時間內並沒有人發現這個漏洞,直到BCH開發者awemany在中午,坐在海邊的小貨車裡,在BCH代碼庫中發現這條評論

檢查 for duplicate inputs — note that this check is slow so we skip it in CheckBlock

awemany感覺到了不對,使用regtest模式測試重複輸入的事物,結果直接提示

Wham! assert(), Aborted.

他意識到了這可能會被利用,進而導致通貨膨脹和分裂鏈的危險,並在寫到

BitcoinABC does not check for duplicate inputs when processing a block, only when inserting a transaction into the mempool.

This is dangerous as blocks can be generated with duplicate transactions and then sent through eg compact block missing transactions and avoid hitting the mempool, creating money out of thin air.

/u/awemany

隨後他立刻把這個漏洞和修復修補程式上報給Bitcoin Core和Bitcoin ABC(BCH開發團隊)。

他在回顧中寫到,提交完後他鬆了口氣,他發現了一個價值數百萬美元的漏洞,這個漏洞對價值1000億美元(現在是1萬2千億美元)的貨幣可以產生了巨大影響,事實上,他可以租用算力去做空BTC,這可以讓他直接發財,但他沒有,他選擇上報了漏洞。

當天21:58,Bitcoin ABC發布了補丁,修復了這個漏洞,向廣大節點發送了此消息,督促節點升級,在大多數節點完成升級後,對此漏洞進行了完全披露。

然而影響不僅在比特幣和BCH還有各種fork比特幣核心的山寨幣都受到了此漏洞的影響,由於這個漏洞是比特幣核心的團隊合併的,大家紛紛指責比特幣核心團隊。

因為600微秒的改動,陰差陽錯的導致雙花漏洞在鏈上潛伏了1年的時間,如果這個漏洞一旦被利用,進而可能導致硬分叉,比特幣的價格還能有現在這個價格嗎?是不是也會跟以太坊當年硬分叉一樣,誕生另一個ETC。

Total
0
Shares
Related Posts