區塊鏈公鏈審計過程中遇到的Merkle Tree底
區塊鏈公鏈審計過程中遇到的merkle tree底層實現問題
前言
區塊鏈項目態勢洶涌,156在經歷了比特幣、6991以太坊時代之后,3780大量擁有著不同特點與優勢的公鏈項目如雨后春筍般層出不窮,吸引著人們的眼球。
這些項目既擁有區塊鏈1.0、2.0時代中,數字貨幣交易、去中心化、支持智能合約的特征,也通過更加巧妙的共識機制、更復雜的技術和金融模型,來解決現有的種種問題,助區塊鏈技術步入我們的生活。
在此期間,長亭科技區塊鏈安全組也在關注著諸多公鏈項目,為這些公鏈項目的發展與上線保駕護航。在此前一項公鏈審計的項目過程中,我們發現了一個有意思的關于 merkle tree 底層實現漏洞。下面將分享發現該漏洞的前期技術積累,以及發現過程。
公鏈項目審計
回顧2018年,對于區塊鏈安全從業人員而言,大部分人印象頗深的可能都是以太坊的諸多合約漏洞,eos 公鏈上層出不窮的合約問題,以及少數公鏈漏洞信息。使用搜索引擎查找和區塊鏈相關的審計類文章,也大多為智能合約的 checklist、智能合約的審計分析等,針對公鏈審計類的技術分享并無很多。這里t薦大家一份由長亭科技編寫的國內首發的《區塊鏈安全生存指南》,其中介紹了當下區塊鏈行業環境,以及近年來區塊鏈業內的一些著名事件等。同時分享長亭科技日前發布的《公鏈審計checklist》,以供公鏈項目開發者參考。
審計區塊鏈公鏈項目,與通常的軟件代碼審計略有不同。通常的代碼審計,我們會考慮語言特性以及該語言的 0day 或 1day 漏洞,結合常見業務場景,分析代碼的實現。區塊鏈公鏈項目,其本身代碼量較多,在項目背后,還有嚴謹的金融貨幣模型以及共識模型,且無較為實用的審計工具,需要更多以來人工審計,審計的定制化程度高,難度及工作量大。依我理解,我們主要從以下方向入手:
語言特性及其已知漏洞
底層實現密碼學、序列化、大數運算等
區塊鏈基本元素的實現區塊、交易、鏈
區塊鏈行為的邏輯生成一個區塊、交易進入 tx_pool 等
區塊鏈的其他組件p2p、rpc、錢包等
共識算法合理性
金融模型合理性
歷史公鏈漏洞
漏洞發現過程
我們在審計過程中發現的漏洞利用方式,源于該公鏈項目在實現 merkle tree 邏輯時,與常規實現方式有些許不同。在整理之前比特幣區塊鏈、以太坊區塊鏈,出現過的漏洞時,發現了可能利用的漏洞點,經過確認發現可以影響不同節點間達成共識,進而造成分叉。
在發現問題后,長亭科技立刻匯報給公鏈項目方,公鏈開發者響應迅速,非常重視此次安全問題,即刻完成了修復。
什么是 merkle tree
merkle tree,一般也稱為 merkle hash tree。是數據結構中我們所了解的樹,其各個節點均包含 hash 值。
merkle tree 具有以下的特點:
它是一棵樹,具有數據結構中,樹結構的所有特點。在講解中我們默認其為二叉樹
merkle tree 的葉子節點中存放數據。非葉子節點的 value,是由其左右兩子節點,經過組合和 hash 運算獲得。