区块链系统在去中心化的环境下,通过链上节点共同维护数据一致性来实现不可篡改性。但其不可篡改性同时也导致了智能合约漏洞造成的经济损失难以追回的问题,这就对智能合约的漏洞检测提出了较高的要求。当前智能合约审计通常采用交付专业审计机构和自动化审计两种方式。但前者存在过程繁琐、耗时长的问题,后者存在审计时间长、误报率高、只能发现已记录在库bug的局限。

为了解决现有合约审计机制的这些局限,在本发明中提出了一种基于侧链的合约审计平台(A Decentralized Smart Contract Auditing Platform Based on Sidechain,DCAPS),其适用于区块链生态,能够激励广大公链用户共同参与到合约审计。DCAPS提出一个激励模型,通过引入信用分与保证金等机制,在激励用户积极参与有效测试的同时,限制多方合谋篡改区块数据与消极测试等情况的发生。DCAPS通过双向锚定的侧链技术实现与主链耦合,使审计平台与主链间的数据资产可进行交互,在侧链上部署合约进行审计。审计流程高效透明,同时由于有多方角色参与,能更为全面地发现合约漏洞,并有效预防漏洞发现者隐瞒漏洞牟利与消极测试的问题。DCAPS在以太坊基础上实现了一个简单的去中心化合约审计模型,并测试其功能与额外性能开销。测试结果表明,DCAPS可抵御链上角色多方合谋等安全威胁,同时它为以太坊系统带来的额外开销不超过10%。

该成果“Sidechain Testing System for Improving Security and Stability of Smart Contract”已获得美国专利授权,授权号US 11,301,361 B2, 授权时间2022年4月12日。

背景和动机

区块链是一种去中心化技术,矿工节点通过密码学的方式将链上用户的交易信息打包块。块根据其产生的时间顺序串联成一条可回溯的链,从而达到链上信息可追溯的效果。所有参与区块链生态的节点都维护一份区块链数据,恶意节点如果篡改区块数据就会因为与其他节点的数据不一致,而在交互时遭到孤立被驱逐出链生态。这种特性结合加密算法共同造就了区块链的不可篡改性,使得区块链技术被广泛应用于金融、防伪、溯源等领域。但不可篡改性也导致了区块链漏洞造成的经济损失难以被追回的问题,相关报导层出不穷,其中又以合约漏洞造成的损失最为严重。智能合约是运行在区块链上的计算机程序,作为传统合约的数字化版本,其会在满足链上源码特点条件下自动执行,且合约不可篡改。据Beosin统计,2018年全球区块链领域发生的安全事件近百起,造成的损失超过20亿美元,其中由合约漏洞引发的安全事件是重灾区。

区块链安全事件类型分布图

安全公司Hosho报告显示,经过其审计的智能合约项目筹集资金达到10亿美元,其中25%被发现有严重漏洞,约60%至少存在一个安全问题。各种关于合约漏洞造成财产损失的报道随处可见,其中最出名的应该是The DAO事件。攻击发生在2016年6月17日,当时TheDAO是区块链业界最大的众筹项目,拥有1亿美金左右资产。黑客利用其中存在的重入漏洞,不断将DAO资金池中的资产转移到其他账户中。其造成5000万美元的损失,以太坊只能在1760000的区块高度分叉来挽回损失,也导致以太坊从此分成ETH和ETC两条链。2017年11月6日,以太坊多重签名钱包parity中的initWallet被设置为public函数,而被攻击者调用将之前合约钱包所有者覆盖,造成超过1.5亿的以太币被冻结。2017年7月19日,由于以太坊钱包Parity的漏洞,黑客从Satoshi Pie撤回约32.4%的基金,价值约700万美元。

系统设计与实现

针对合约漏洞审计,我们设计了一种基于侧链的合约审计平台。该系统在假设不考虑受到黑客等外部用户的攻击,而仅仅考虑内部角色的合谋,且不考虑官方分叉合约存在漏洞的情况。系统中,合约发布者通过发布激励金的形式,向公链用户与矿工提供激励金来吸引其参与到合约测试,并由矿工节点维护一份部署了新合约的侧链,侧链用户在侧链上进行合约审计,当发现漏洞时,进行举报,由其余用户对漏洞有效性进行验证,各方角色依据在本次测试所作贡献瓜分激励金。通过此种方式,可以做到调度广大用户共同参与到合约测试中,实现一个去中心化、自治的合约审计平台,由于在以太坊这种大型区块链系统中,挖矿竞争极大,掌握算力不高的普通矿工大多只能通过加入矿池的方式来共同收获微薄激励金。所以只要系统设置合适的矿工激励金,就必然能够吸引矿工加入竞争相对平缓的侧链,谋求侧链激励金与侧链上交易调用产生的区块打包费。

系统流程图

安全威胁和激励模型

针对系统设计,我们建立了一个可以有效应对其威胁模型的激励模型,通过分析系统各个时段所作工作,在主要考虑采用合谋或篡改信息的方式的前提下,探讨每个时段可能发生的攻击。系统时段图如图所示:

系统时段示意图

我们分析得到,系统受到的威胁可能来自以下几个方面:

威胁1:有用户单纯为了瓜分激励金而来,而不进行有效测试。即每次投票时都投漏洞无效票,最后合约被判断无漏洞上主链时,瓜分激励金。总体来看,账户几乎只需要花费一些时间成本就可以稳定收获激励金。

威胁2:侧链测试开始、测试结果已经逐渐明朗时,用户临时调度大量资源加入侧链左右合约测试结果或者在不做出有效贡献的情况下瓜分激励金,此时将在主链上的资源临时抽调至侧链显然投资回报比是极高的。

威胁3:用户之间进行合谋左右投票结果。此外,当有用户举报漏洞后,其余用户可能进行bug拦截与再次举报并联合其余用户与矿工来窃取测试成果。

威胁4:矿工节点合谋篡改区块数据,如果合谋的算力超过界限,如在以POW为共识的区块链网络中掌握超过50%的算力,其就拥有随意更改侧链上的相关信息的能力,进而进行谋夺侧链用户资产与改变投票结果谋夺激励金等操作。在大型区块链网络中自然难以达到,但是在矿工数量有限的侧链上,却有做到的可能性。

威胁5:合约发布者作为激励金的提供者,在进行最终投票时理所当然拥有较高的话语权,但也必须预防其通过此特性并引入小号在最后回收激励金。

合谋攻击示意图

针对以上的威胁模型,激励模型采取多重方式使所有激励金都能切实有效地被用于激励合约审计,构建一个安全的DCAPS网络运行环境环境,并针对恶意矿工与用户的付出与收入,构建概率模型,主要采用了以下几种手段,相关设计的变量如下图所示。

激励模型设计变量

1)激励金分层

针对性地将激励金分为报名激励金、用户激励金和矿工激励金三个部分。

2)定长的报名时段

将报名阶段设置为固定时段,报名阶段结束后审计阶段开始,不允许继续报名。

3)引入保证金机制

测试用户必须进行投票才能拿回激励金,防止测试用户单纯为了报名激励金而不进行有效测试,使得投票权空置。解决威胁1。

合约发起者由于在投票系统中占据较大份额权重,其不做确认的话投票比重很难达到认可阈值Tnote。而发起者本身在付出激励金已固定的情况下自然更倾向于让用户为合约做更多测试,故可能出现发现漏洞有效却故意不确认的情形。以保证金的形式套牢其资金,合约发起者必须对漏洞进行确认才能拿回保证金,督促其在漏洞出现时尽快确认。

在官方分叉合约中实现记录要参与测试侧链的矿工ip、mac地址。矿工的保证金机制,在发现矿工存在作恶的情况下,保证金会被扣除给发起者,协助解决威胁4。

4)引入信用分机制

每次用户的正确投票会增加其信用分,反之则会减少。信用分越高的用户在投票系统中拥有越高的权重。同时,最终用户激励金的瓜分也是基于权重而非按用户均分。通过此种方法赋予无实用价值的地址以累加的经济价值,增加用户作恶成本,用以解决威胁3。当信用分低于阈值Tcre,将不被允许继续参与测试。

矿工节点的ip等信息将被记录在官方分叉合约中,如作恶被发现,信用分被持续扣除到低于阈值Tmcre,将不被允许加入侧链,协助解决威胁4。

5)漏洞上报采取Submarine Commitments

采取Submarine Commitments,先将加密的漏洞描述存储在区块上。当其他用户收到密钥获得漏洞描述明文时,矿工已在描述区块之后挖掘了许多新区块,想要继续bug拦截的话,需要掌握足够算力回溯整个侧链生态来篡改记录,有极大的操作成本,难以达成。用以解决威胁3同时协助解决威胁4。

6)引入最终评估模块

调用结果评估函数,比对在有无合约发起者参与情况下投票结果之间的差异是否超过阈值Tgap,判断是否存在合约发起者利用大权重回收激励金的情况,若存在,作废本次投票发起者投票权,用以解决威胁5。

7)合约发起者可提前结束审计

合约发布者能提前结束测试,此时仅测试用户能够瓜分报名激励金。因为此举同时还能节省链上节点的时间与资源,所以允许其回收部分激励金。同时,其还能用于解决威胁4 ,合约发起者安排自己的矿工参与审计,当发起者发现矿工节点已经合谋控制审计链时可以进行此操作来提前结束测试挽回部分激励金。

专利信息:

Sidechain Testing System for Improving Security and Stability of Smart Contract,美国专利授权号US 11,301,361 B2, 授权时间2022年4月12日, Weiqi Dai, Hai Jin, Deqing Zou,Bingcheng Zhao.(赵炳铖、代炜琦

声明:本文来自穿过丛林,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。