区块链公链审计过程中遇到的Merkle Tree底层实现问题

区块链公链审计过程中遇到的Merkle Tree底层实现问题

前言

区块链项目态势汹涌,156在经历了比特币、6991以太坊时代之后,3780大量拥有着不同特点与优势的公链项目如雨后春笋般层出不穷,吸引着人们的眼球。

这些项目既拥有区块链1.0、2.0时代中,数字货币交易、去中心化、支持智能合约的特征,也通过更加巧妙的共识机制、更复杂的技术和金融模型,来解决现有的种种问题,助区块链技术步入我们的生活。

在此期间,区块链安全组也在关注着诸多公链项目,为这些公链项目的发展与上线保驾护航。在此前一项公链审计的项目过程中,我们发现了一个有意思的关于 Merkle Tree 底层实现漏洞。下面将分享发现该漏洞的前期技术积累,以及发现过程。

公链项目审计

回顾2018年,对于区块链安全从业人员而言,大部分人印象颇深的可能都是以太坊的诸多合约漏洞,EOS 公链上层出不穷的合约问题,以及少数公链漏洞信息。使用搜索引擎查找和区块链相关的审计类文章,也大多为智能合约的 checklist、智能合约的审计分析等,针对公链审计类的技术分享并无很多。这里推荐大家一份由编写的国内首发的《区块链安全生存指南》,其中介绍了当下区块链行业环境,以及近年来区块链业内的一些著名事件等。同时分享日前发布的《公链审计checklist》,以供公链项目开发者参考。

审计区块链公链项目,与通常的软件代码审计略有不同。通常的代码审计,我们会考虑语言特性以及该语言的 0day 或 1day 漏洞,结合常见业务场景,分析代码的实现。区块链公链项目,其本身代码量较多,在项目背后,还有严谨的金融货币模型以及共识模型,且无较为实用的审计工具,需要更多以来人工审计,审计的定制化程度高,难度及工作量大。依我理解,我们主要从以下方向入手:

语言特性及其已知漏洞

底层实现【密码学、序列化、大数运算等】

区块链基本元素的实现【区块、交易、链】

区块链行为的逻辑【生成一个区块、交易进入 tx_pool 等】

区块链的其他组件【p2p、rpc、钱包等】

共识算法合理性

金融模型合理性

历史公链漏洞

漏洞发现过程

我们在审计过程中发现的漏洞利用方式,源于该公链项目在实现 Merkle Tree 逻辑时,与常规实现方式有些许不同。在整理之前比特币区块链、以太坊区块链,出现过的漏洞时,发现了可能利用的漏洞点,经过确认发现可以影响不同节点间达成共识,进而造成分叉。

在发现问题后,立刻汇报给公链项目方,公链开发者响应迅速,非常重视此次安全问题,即刻完成了修复。

什么是 Merkle Tree

Merkle Tree,一般也称为 Merkle Hash Tree。是数据结构中我们所了解的树,其各个节点均包含 Hash 值。

Merkle Tree 具有以下的特点:

它是一棵树,具有数据结构中,树结构的所有特点。【在讲解中我们默认其为二叉树】

Merkle Tree 的叶子节点中存放数据。非叶子节点的 value,是由其左右两子节点,经过组合和 Hash 运算获得。

你可能感兴趣的:(区块链公链审计过程中遇到的Merkle Tree底层实现问题)