來源:一本區(qū)塊鏈(ID:yibenqkl)
禍不單行。比特幣擊穿 6000 美元底線后,以太坊又爆隱患。
今天凌晨,區(qū)塊鏈安全公司 PeckShield 披露了一個安全漏洞:通過發(fā)送一個惡意報文,攻擊者能向以太坊發(fā)動攻擊。一旦成功,以太坊2/3 的節(jié)點將停擺,導致一場地震。
在區(qū)塊鏈安全的世界里,安穩(wěn)難求,步步驚心。
01 “致命報文”
這個漏洞,被命名為:“致命報文”。
它出現(xiàn)在以太坊官方客戶端 geth 上。后者對于以太坊至關(guān)重要:有大約 70% 的節(jié)點運行在 geth 之上,包括交易所和礦池這些關(guān)鍵節(jié)點。
通過這個漏洞,攻擊者可以直接讓以太坊癱瘓。一旦成功,以太坊市場將面臨巨震。
PeckShield 向一本區(qū)塊鏈揭示了“致命報文”的漏洞細節(jié):
以太坊的核心,在于所有的客戶端都必須遵守同樣的協(xié)議,以保持共識。
這些協(xié)議由 RLPx、DΞVp2p 和其他子協(xié)議組成,后者包括以太坊線路協(xié)議、輕量級以太坊協(xié)議等。
為了支持輕量級的客戶端,輕量級以太坊子協(xié)議(LES)允許以太坊節(jié)點在同步獲取區(qū)塊時,僅下載區(qū)塊的頭部,在需要時再獲取區(qū)塊的其他部分。為了實現(xiàn)這一功能,還需要一個全節(jié)點(或 archive 節(jié)點)作為 LES 服務(wù)器,為輕量級節(jié)點提供服務(wù)。
執(zhí)行以下命令,可以啟動一個支持 LES 服務(wù)的 geth 全節(jié)點:
geth --lightserv 20
在向 LES 服務(wù)器請求區(qū)塊頭部時,LES 客戶端會發(fā)起類型為 GetBlockHeaders 的消息,而 LES 服務(wù)器的消息處理器負責相應(yīng)的解析工作。GetBlockHeaders 的信息處理器的代碼片段如下:
由 LES 客戶端發(fā)送的查詢請求遵循如下格式:
從第 17 行開始,LES 服務(wù)器處理 not reverse 分支。在第 19 行,LES 服務(wù)器會檢測在忽略了 query.Skip 區(qū)塊之后,是否還有可用的區(qū)塊頭部。
如果檢測通過,GetBlockHashesFromHash()方法就會被調(diào)用(即第 20 行),并返回一個區(qū)塊頭部數(shù)組。
然而,對作為輸入的請求,LES 服務(wù)器并未驗證其有效性。攻擊者可以構(gòu)造形如 query.Skip = -1 (0xFFF...F)這樣的惡意請求。
當 query.Skip+1 被作為待分配數(shù)組的最大長度參數(shù),傳遞至 GetBlockHashesFromHash()方法時,長度為 0 的數(shù)組即被分配并返回。
隨后,通過索引 query.Skip = 0xFFF…F訪問該長度為 0 的數(shù)組時,LES 服務(wù)器就會徹底崩潰。
“在發(fā)現(xiàn)漏洞后的第一時間,我們就向以太坊基金會提交了漏洞報告。目前,以太坊 geth 客戶端的開發(fā)團隊,已發(fā)布了相應(yīng)的補丁。”PeckShield 告訴一本區(qū)塊鏈。
因此,雖然這次漏洞危害面廣,危險性大,但并沒有對以太坊造成實際損失。
PeckShield 工作人員向一本區(qū)塊鏈展示了以太坊官方的回復郵件。
“這只是一系列漏洞中的一個,我們會隨時公布其他漏洞。”PeckShield 公司表示。
02 以太坊黑歷史
這不是以太坊第一次爆出安全漏洞,也不是最后一次。
在歷史上,以太坊曾出現(xiàn)過兩次重大漏洞事件。
最著名的一次,是 2016 年 6 月的“The DAO 大劫案”。它直接導致了以太坊的硬分叉。
The DAO 是部署在以太坊網(wǎng)絡(luò)上的最大眾籌項目。黑客發(fā)現(xiàn)了其安全漏洞:其智能合約第 666 行代碼的首字母“t”,被誤寫成了“T”。
區(qū)塊鏈歷史上最嚴重的攻擊事件,就此發(fā)生。
6 個小時里,黑客竊取了 The DAO 30% 的以太幣——1200 萬個。它們當時價值約 6000 萬美元。
這次的攻擊還引發(fā)了區(qū)塊鏈誕生至今最具爭議的事情之一。
為將損失降到最小,以太坊團隊決定修改以太坊軟件的代碼,強行把 The DAO 的所有資金,轉(zhuǎn)到一個特定的退款合約地址,以奪回黑客手中的資產(chǎn)。
因為對此事看法迥異,以太坊分裂成了兩條鏈,一條是以太坊(ETH),一條是以太坊經(jīng)典(ETC)。它們各自代表不同的社區(qū)共識和價值觀。
以太坊的另一次重大安全事故,發(fā)生在以太坊錢包 Parity 身上。
2017 年 7 月,Parity 被爆出現(xiàn)重大安全漏洞:其多重簽名合約 wallet.sol 存在 bug。
官方確認,因為此事,150000ETH(約價值 3000 萬美元)被盜。但通過對比以太坊上的智能合約,一群計算機專家得出結(jié)論:這次攻擊至少造成了 1.54 億美元的損失。這一金額,是 The DAO 事件損失的 3 倍多。
教訓慘痛至極。
在區(qū)塊鏈世界中,“代碼即法律”。但那些存在漏洞的代碼,正在成為黑客薅羊毛的得力工具。
03 賣水好生意
目前,全世界的數(shù)字貨幣已經(jīng)超過 2000 種,市值超過 3300 億美元,這是一個廣闊的市場。
人人淘金時,賣水就有市場。安全漏洞頻現(xiàn)時,堵漏就成了好生意。
越來越多專注于區(qū)塊鏈安全的團隊,正在如春后雨筍般出現(xiàn)。知道創(chuàng)宇、慢霧科技、白帽匯、Haloblock.io、PeckShield 等公司,都重兵投入?yún)^(qū)塊鏈安全領(lǐng)域。
“在區(qū)塊鏈產(chǎn)業(yè)發(fā)展初期,安全事件已經(jīng)頻繁暴露在各個環(huán)節(jié),包括:交易所、礦池、錢包、智能合約……因此,區(qū)塊鏈安全公司在早期區(qū)塊鏈生態(tài)建設(shè)上,起著關(guān)鍵作用。” PeckShield 公司工作人員表示。
目前,市場上的區(qū)塊鏈安全公司,不僅提供智能合約審計服務(wù),還要提供一整套安全防護解決方案。
可以說,區(qū)塊鏈安全服務(wù)正逐漸從上面的業(yè)務(wù)層轉(zhuǎn)向更底層,著力從代碼層面解決漏洞問題。
對于區(qū)塊鏈市場來說,這是一個健康的現(xiàn)象。
從 EOS 漏洞到以太坊“致命報文”,底層公鏈的安全問題,層出不窮。
每一個漏洞,都可能成為黑客手中的定時炸彈。
從 The DAO 到 EOS,智能合約成為了區(qū)塊鏈安全的重災區(qū)。
在區(qū)塊鏈的狂野世界里,黑客和白帽子的戰(zhàn)爭,才剛開始。
來自: 一本區(qū)塊鏈