EVOLAB Benchmark丨Cosmos项目技术尽调

CN
EVOLAB
Follow
6 years ago



一. 项目概述


Cosmos是一个跨链项目。Cosmos要解决的核心问题有两个,一是将每条区块链整合到一起;二是提供让开发者能够轻松开发一条链的工具。

 

Cosmos网络是由多个独立平行区块链组成的去中心化网络,每个独立平行区块链均采用一种被称为Tendermint 的部分同步运作的拜占庭容错共识协议。Cosmos团队正在构建基于Tendermint的Cosmos网络。

 

Cosmos网络有两种类型独立平行区块链,Hub和Zone。Hub管理着的Zone,Hub 与Zone直接通信,而Zone与Zone之间通过IBC(跨链通信协议)间接通信,并且连接不同的区块链网络。Cosmos可以实现区块链之间的互操作,代币可以在Zone之间流动,实现跨链资产的转移和交易。


二. 测试说明


我们在AWS上在全球部署了了若干个Kubernetes节点,用以模拟Cosmos网络的环境,具体测试环境如下:



三. 共识


Cosmos采用Tendermint共识算法,Tendermint协议保证安全性及活跃度,但这也导致相当的中心化。

 

Tendermint是部分同步运作的拜占庭容错共识协议,以简易型、高性能以及分叉问责制而著称。拜占庭容错股份授权证明机制(Tendermint-BFT DPoS)的共识过程分为投票阶段及提交阶段。


一个选票可以用于特定区块或Nil。将同一轮超过?的单个区块的预投票总和称为Polka,把同一轮超过?的单个区块的预提交总和称为Commit。如果同一轮针对Nil的预提交超过?,那么它们就进入下一轮。每一轮剩下的进程是完全同步的,在过程中只有验证人收到超过?的网络投票才会进入下一步。另一个约束规则,即确保最终在每个高度只提交一个区块,任何试图提交超过一个区块到指定高度的恶意行为都会被识别出来。

 


1. 每个区块的预提交必须正当,并且以Polka的形式提交。如果验证人已经在R1轮预提交了一个区块,那么我们就认为它们被锁定在了这个区块,然后用于验证R2轮新预提交动作的Polka必须进入Rpolka轮,其中R1<Rpolka<=R2。


2. 验证人必须提出并且/或者预投票它们被锁定的区块。确保验证人不会在没有充足证据证明正当性的前提下进行预提交,并且保证已经完成预提交的验证人不能再为其他东西的预提交贡献证明。


这两步合起来,不但可以保证安全,还能保证共识算法的活跃。据白皮书描述,Tendermint轻客戸端可以定期同步验证组的变动,以避免出现远距离攻击。

 

四. 安全


根据我们对Cosmos项目的调查分析,我们对COSMOS项目的特性进行了安全评估。


(一) 安全评估


在Cosmos网络中中,每条链独立运行,可以使用不同的共识机制,并设立相应的验证者保证这条链的安全性。


那么,这样可能遇到的恶意攻击模式主要是:对于Cosmos而言,每一个区域Zone的验证者都不一定是可信的。比方说,这些小红点表示一种ETM代币(Ethermint zone的原生货币)。zone A,B和C中的用户想将ETM用于这些zone内的一些应用程序,并且他们信任Ethermint zone,所以他们发送IBC消息来将ETM传递到这些zone。


现在假设Ethermint验证者共谋、发起双花交易,随意动用代币等等。这将对网络的其余部分产生影响,因为ETM代币也存在于不同的zone。不过,唯一将受此影响的是在Ethermint或其他zone内持有ETM代币的人。Ethermint中的恶意验证者不可能随意破坏除自身以外的其他zone。这是Cosmos设计的目的——确保恶意行为不会影响整个网络。

 

因为Cosmos团队来源于Tendermint,而Tendermint共识本身是一种基于BFT(拜占庭容错)的共识算法,可以允许有一定的节点作恶存在而不影响整个系统的运转,中心Hub负责保证Cosmos整体上的安全性并且负责zone之间token的平衡问题。每一份资产都有唯一的转移路径,并且需要经过Hub来完成。因此即使某一个Zone真的发生故障,也绝不会影响到整个网络中token的整体供应,更不会影响到其他zone里的账户,整体Cosmos将正常运行,直到该Zone重新上线。


 

(二)  威胁来源分析


主要威胁来源如下:


1.哨兵系统或者辅助系统的连接被占用而受到损失: 验证人系统必须保证和哨兵系统和辅助系统连接。这种信任的连接可能会被攻破,然后将验证人节点暴露出来。尤其是一旦暴露了登陆链接信息,也就是如果攻击者可以用验证人的身份登陆,那么系统将处于危险之中。


2.利用验证人系统或支持系统的利用信任链接造成的损害:对于验证人而言,哨兵节点可能暴露出系统漏洞。


3. 利用USB设备造成的损害:如果受感染的USB设备插入其中,则计算机可能会被恶意软件感染; 这在某些操作系统和桌面等系统中更为普遍,会有用户实际操作服务器。甚至对于隔离起来的服务器也有这个风险。


4.利用MitM中间人攻击造成损害:原来只是在理论攻击领域和局域网概念证明,但最近的大规模重定向攻击已经证明复杂的攻击者能够将攻击导入到网络流量中。


5.利用网络漏洞造成的损害:在现代主机上运行的各种服务 — 甚至在其正在运行的Tendermint特定服务之外 — 呈现出易受攻击的攻击面。若网络软件中出现任何漏洞,攻击者必然会利用它。


6.利用网络中的可信链接造成的损害:与其他网络漏洞一样,某些主机(如验证人节点)可能只能通过可信链接访问 — 即使有这种固有的架构保护,链路的另一端仍然可以利用该信任来攻击受保护的系统。


7.利用钓鱼网站造成的损害:网络钓鱼可能是今天最成功,也就是普遍的攻击形式。这通常涉及攻击者让目标进入攻击者控制的站点,但目标认为是合法的,并提供其凭据或其他受保护的信息。还存在更复杂的形式,开始看起来更像是MitM攻击。


8.利用钓鱼网站陷阱造成的损害:基本网络钓鱼攻击的扩展,网络钓鱼漏洞是攻击者煽动目标进入网站的地方(例如通过使用耸人听闻的标题),这可能是恶意的,随后攻击目标的浏览器或插件(特别是 Java,Flash或PDF)并获得对攻击者计算机的控制权。


9.由于赎金/勒索/贿赂导致的损害:这是内部人员滥用职权,切断(或威胁要)其他人访问资产并使用他们对资产的独家控制作为杠杆来获得他们想要的东西。


10.由于供应链造成的损害:虽然供应链可能包括受损的硬件(例如替代恶意芯片),但现在真正关注的是软件供应链。操作系统供应商,公用事业供应商,基础设施供应商和应用程序供应商都遭到黑客攻击特别是如果针对特定系统或系统,攻击者可以轻松替换木马程序包,并且可能永远不会被注意到。


11.由于Tendermint网络漏洞造成的损害:验证人节点和哨兵节点都需要运行Tendermint网络服务。任何Tendermint网络的漏洞都会被一个攻击者利用,无论是直接还是间接,无论是通过恶意交易,共识消息或是区块数据。


12.由于网络漏洞而导致变为僵尸网络的损害:机会攻击者通常会通过将其添加到僵尸网络或将其控制权转移给所有者来通过他们对计算机的控制获利。如果网络服务中存在任何已知漏洞,投机攻击者就会找到它们。


13.由于钓鱼/钓鱼漏洞而导致变为僵尸网络的损害:如上文描述的,但是通过让用户访问受攻击者控制的站点而不是直接攻击网络服务来获得对机器的控制。因为大多数服务器会使用防火墙,这是目前更为流行的方法。


14.由于备用和支持系统的漏洞造成秘钥的暴露:即使秘钥没有丢失,任何在用和支持系统中暴露的秘钥将会带来安全威胁 。


15.由于勒索而导致的损害:即使一个验证人的技术十分完美,它还是需要人来操作。任何由人控制的东西都会由于人的因素而变的脆弱。事实上,历史上大部分成功的攻击都是由于人为因素造成的:无论是钓鱼网站,集体作恶,还是 — 在极端情况下 — 敲诈勒索。有许多涉及加密货币的抢劫案件 — 有理由认为,如果有足够大的吸引力,攻击者将诉诸勒索或身体暴力威胁来实现其目标。


16.由于代币持有人的钱包遭受攻击而造成的损失:Tendermint的安全机制以来验证人的权益抵押。如果一个验证人不能保证其委托的权益的安全,发生率例如钱包被攻击等事件,那么这就会造成委托人取回其委托权益,验证人可能导致丧失验证人的身份。这样会同时造成权益的损失和运维成本的损失。


17.由于DDoS造成的网络不可用的勒索:如今,许多DDoS攻击是由攻击者进行的,他们承诺如果支付赎金就结束DDoS。 


18.权益反转攻击:这是一种在PoS网络中新增的攻击类型,假设网络中存在一个有很多权益代币的持有者。这个持有者会抵押很多代币给他的验证人。当他想要让另一个候选人成为验证人的时候,他会收回委托给一些人的权益,再重新委托给其他人。Tendermint希望通过三周的解委托时长来限制这类操作,在这段期间不能再次委托。这样会限制一般的委托操作,但是不会限制一个很有很多代币的攻击者,他可能会加倍抵押权益来达到攻击的目的。这种攻击在持有2/3网络总代币的验证人身上起到作用,可以让攻击者在短时间内控制网络。更现实的是,如果控制了系统中1/3的权益,攻击者可以破坏系统共识。即使没有其他影响,攻击者也可以通过拖垮网络来剥夺验证人和委托人的收入。


19.在验证人节点运营结束后的代价:一般而言,验证人的运行不会突然结束,让启动验证人工作的代价成为沉没成本。但是,这也不是不可能的,若不幸遭遇了死亡、破产或者其他原因,一个运行验证人节点的公司可能会倒闭。当这个不幸发生的时候,它抵押的权益将被绑定三周,这可能带来一些损失。


20.由于数据中心服务的不可用导致验证人服务的不可用:由于各种灾难,极端天气等事件,数据中心可能会不可用。例如Katrina和Sandy飓风都导致了大规模的数据中心断电,同时数据中心也可能被水淹没。极端天气的增多将增大这种不确定性。


21.由于DDoS导致不可用:验证人若不能保证上线则会导致相应的惩罚。针对验证人的DDoS攻击或者针对其sentry和支持系统的DDoS攻击将导致很大的威胁。


22.由于目标网络失效而导致的不可用:虽然DDoS攻击是将系统从互联网上隔离的最常用方式,但攻击者也可能使用更具针对性的网络中断,包括黑客流量或利用验证人网络硬件上的漏洞等手段。


23.由于敲诈勒索而导致的撤销抵押:委托人可能会经常变动他们的委托。验证人控制的权益数量也会影响委托人的行为。如果委托人的委托占比很大,那么委托人可能会威胁验证人来满足他的需要。

  


(三) 漏洞分析


2019年五月三十一日COSMOS爆出重大漏洞,该团队迅速反应,对bug(commit history)进行了修复。本部分主要是对此重大漏洞进行解析。

 

首先解释几个与漏洞相关的tendermint中的重要概念。官方文档中Validator的具体结构如下



可以看到Validator主要的status有三种:bonded/unbonding/unbonded。

 

简单地说,验证者的状态存在着由non-bonded->bonded->unbonding->unbonded 这样的转换过程。同样,委托者也存在着一定的状态转换对该状态转换的总结如下:token的持有者可以将自己的token委托给验证者进行抵押以获取收益,验证者在bonded状态下开始接受收益。之后,委托者若想要赎回委托(undelegate),Validator需要退出bonded状态并进入unbonding状态,此时委托者才能进行unbondingdelegation。


处于 unbonding 状态的验证者,当用户赎回时间 21 天(锁仓期)到期之后,将进入到 unbonded 状态,此时委托者接收到之前抵押的 Atom 及抵押期间的收益。并且,委托者可以进行redelegation操作重新进入委托状态。


为了让大家能够更加直观清晰地对状态转换以及锁仓时间有所了解,下面给出了图例。



从设计流程上进行分析,项目不存在可疑之处,但是在实际的代码中,出现的严重的逻辑错误,导致委托者可以减少锁仓期时间,提前赎回token。


下面对项目中的具体出现逻辑错误的代码进行分析。这是未修改前的Undelegate函数:



可以看到在579行开始创建unbonding delegation,这里的completionTime使用了getBeginInfo中返回的时间。

 


我们可以发现completionTime实际上是验证者unbond的开始时间。然而,Undelegate函数是委托者的操作,在604行中使用了验证者的锁仓到期时间,并添加到UBD(UnbondingDelegation)队列中。


ubd:=k.SetUnbondingDelegationEntry(ctx,delAddr,valAddr,height,completionTime, returnAmount)


这样导致的直接后果就是,委托者可以在验证者锁仓时间到期时同时赎回自己抵押的代币(验证者从bonded到unbonding的转换也需要一定时间周期一般情况下是七天左右,总体锁仓时间为21天)。

 

这个逻辑错误严重破坏了其他委托人和验证者的公平体验,同时也严重破坏了COSMOS的共识机制,因为委托人的赎回周期可以通过这个逻辑错误得到缩短。好在COSMOS团队及时对漏洞进行了响应并进行修复,上线了新版本。

 

下面对修复后的代码进行review。

 



我们可以看到,为了解决这个逻辑错误,实际上只需要保证委托人在insertUBDQueue时所使用的completionTime参数为从当前时间算起的锁仓时间结束之后,而不是从验证者unbond时间开始。


五. 技术创新


(一) IBC架构


Cosmos的目标是建立一个通用标准(即跨链通信IBC),采取了Blockstream曾经的侧链提案,允许两个链相互持有彼此的轻客户端。

 

我们举个例子:以太坊和 Tezos。以太坊在两条链上都有智能合约。在以太坊上,我们可以从 Tezos 区块链上提交块头的智能合约,然后会在以太坊上处理块头以确保它们是有效的。同样的,Tezos 将接受来自以太坊的块头。Tezos 接收块头的目标只是提供一种标准方法向另一个区块链证明它的状态。关于「状态」人们可以建立的更高级别的协议。Cosmos目前在实现代币转移或资产转移,该部分占据大部分人80%的使用情况,Cosmos可以轻松实现。


(二) 资产转移与证明


以太坊和 Tezos 之间的资产交易。先从以太坊链上拿出一个代币,用一个智能合约将其锁定,接着全网广播该代币已被锁定于以太坊,这就证明了资产转移。再从 Tezos 链获得一个新代币,这个代币已经声明对以太坊上的锁定资产的占有权,如果说 Tezos 上的代币能以一定比例兑换为以太坊上的指定资产,相当于在 Tezos 链上占有了在以太坊上相应的资产。


(三) 跨链原子互换的代币交换方式


首先原子交换不同于 Cosmos IBC。原子交换亦称非立即交换,等价值的BTC与ETH原子互换意味着:在比特币区块链上对 BTC 转移,在以太坊区块链上对 ETH 转移。两条链上资产的所有权作为原子交换的实际操作。因此 BTC 仍然在比特币区块链上,ETH 在以太坊区块链上, 即没有任何价值走出自身链。Cosmos 提议不同的交换方法:BTC可以在以太坊区块链上。原子互换无法让 BTC 离开比特币区块链,但在 Cosmos 的模式下,我们允许所有资产本身在链上转移。


六. 技术管理


我们在Github上查询Cosmos的代码提交,追踪其项目进程。

 


Cosmos项目起始于2016第一季度,随后于一年后的2017年第一季度开始撰写代码,当年的10月、12月出现代码更新的短期中断,2018年开始逐渐增加代码工作量,于2018年10月达到代码增加最高峰,峰值为代码平均增加量的10倍,初步被判断为独立开发模块编写完成后整体加入项目。2019年开始,保持平均工作量不变的情况下,于2019年4月出现代码删除和增加的峰值,增加峰值为平均水平的5倍,删除峰值为平均水平十倍,打破代码增删曲线平衡,初步判断为项目整改期。


七. 代码


我们逐行分析Cosmos代码,判断Cosmos项目实现程度。目前Cosmos技术上已基本实现。Cosmos项目通过IBC通信架构将链与链整合在一起;并为开发者提供Cosmos SDK,显著降低区块链开发难度。


Cosmos生态中区块链的核心建立在Tendermint Core之上,使用其提供的DPOS+BFT的共识机制。Cosmos Hub提供了不同区块链的之间的交互和价值转移。各个区块链应用之间通过IBC接口进行通信。

 


Tendermint以及ABCI的基础上,为了进一步方便用户进行区块链开发,Cosmos提供了Cosmos SDK,把区块链中的一些通用模块标准化,用户只需要在SDK的基础上实现Plugin模块,处理一些链特有的业务。



simapp/app.go



/client/context/context.go



/store/cachkv/store.go



/store/cachkv/store.go



/store/cachkv/mergeiterator.go



/store/cachkv/memiterator.go



/store/cachemulti/storei.go



/store/dbadapter/store.go



综合来看,整体项目中的数据结构与方法集成于/baseapp目录调用,其中/store为重要目录。具体代码内聚性较高,对应低耦合度,调用清晰,代码量分配平均。

 

八. 经济模型


Atom是Cosmos Hub的原生代币。Atom的核心效用是作为一个权益抵押机制来确保Hub在权益证明过程中起到押金作用。借用工作量证明的挖矿操作做比喻,你可以将Atom视为一种虚拟化的ASIC。每个验证人抵押的Atom将决定它被选为出块人的频率和在提交区块投票时的权重。为了激励大家都抵押持有的Atom,每个验证人可以获得相应的出块奖励、抵押获利和白名单上的手续费。

 

Cosmos Hub的委托人是Atom的持有者。他们通过委托Atom来保护Cosmos网络的安全。抵押Atom时没有最小数量的要求。具体的途径是他们通过选择委托给一个或多个验证者,验证人将获得委托人的投票权重。如果验证者行为不当(例如,在同一个区块高度签署两个不同的区块),那么有错误行为的验证者和委托者抵押的部分抵押代币都将会被罚没一部分。作为回报,委托人可以获得一定比例的交易费用和区块奖励。


九. 总结


技术创新是Cosmos最大的亮点,Cosmos技术面上已基本完成路线图的承诺。Cosmos项目通过IBC通信架构将链与链整合在一起,并为开发者提供Cosmos SDK,显著降低区块链开发难度。


Cosmos可以实现区块链之间的互操作,代币可以在Zone之间流动,实现跨链资产的转移和交易。Tendermint协议保证安全性及活跃度,但这也导致相当的中心化。



内容主编:Tao、Jar,Silas

文案支持:Zeno


 


本文版权归EVOLAB所有

欢迎转发

如需转载请联系我们


免责声明:本文章仅代表作者个人观点,不代表本平台的立场和观点。本文章仅供信息分享,不构成对任何人的任何投资建议。用户与作者之间的任何争议,与本平台无关。如网页中刊载的文章或图片涉及侵权,请提供相关的权利证明和身份证明发送邮件到support@aicoin.com,本平台相关工作人员将会进行核查。

ad
出入金首选欧易,注册立返20%
Ad
Share To
APP

X

Telegram

Facebook

Reddit

CopyLink