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