本会动态

文章详情页
ETH、EOS上所有的漏洞 波场都可能重现 ,本文详解如何破解
发布时间:2019-09-02 12:04:36来源:英雄联盟竞猜-英雄联盟竞猜app-英雄联盟竞猜平台点击:59

  4 月 10 日晚上,黑客向波场竞猜类游戏 TronWow 发起随机数破解攻击,共计获利 216 万个 TRX。4 月 11 日凌晨,黑客向波场资金盘游戏 TronBank 发起假币攻击,1 小时内被盗走约 1.7 亿枚 BTT(价值约 85 万元人民币)。

  一位资深开发者告诉区块律动 BlockBeats,EOS 主网上线以来生态内一些事件,比如博彩 DAPP 的崛起、资金盘喊单、挖矿搬砖盛行、羊毛党薅羊毛,甚至连黑客攻击,都在波场上复现了。就拿近期的 TRON 生态事件来说,连 DAPP 出现的 bug 类型也是一致的。

  关于最近 TRON 生态接连面临假币攻击、随机数破解等 EOS 早期频繁出现的问题,安全团队 PeckShield 创始人蒋旭宪告诉区块律动 BlockBeats,此前 TRON 生态还发生过代币无限增发问题(例如 TronCrush, Iseri Project 和 RockstarToken 上面的 TransferMint 漏洞),今后不排除其他相关攻击方式 (比如合约溢出、交易阻塞等) 在 TRON 生态陆续出现的可能。

  以太坊、EOS 的安全漏洞很可能在波场重现

  蒋旭宪表示,由于波场在实现上结合了以太坊和 EOS 的设计,在智能合约上同样使用了 Solidity 编程语言,原先以太坊上出现的合约缺陷(包括溢出漏洞,资产被锁,和合约被劫持等问题)同样有可能在波场复演。

  也就是说,在漏洞层面,2018 年 PeckShield 发现的 BEC 和 SMT 的安全漏洞 batchOverflow(CVE-2018-20199)完全可能在波场会重现,差别可能就是合约代币本身的价值不同。

  另外,波场也参考了 EOS 的共识机制和支持竞猜类 DApp,2018 年 PeckShield 报道过的多个竞猜类 DAPP 上的安全问题,蒋旭宪也认为有很大机率重演。这次 BTTBank 和 TronWow 的攻击很可能只是个开始。

  

  PeckShield 整理了关于 EOS DAPP 攻击手段的演进时间线图表。在上图中,红色方块内的攻击方式都是有可能将在波场上复现,红色方块外的攻击方式是 EOS 公链特有的,在波场上复现的可能性不大。

  蒋旭宪此前曾分析,波场公链的 DAPP 市场高度繁荣但一直未曾遭到过 EOS 公链级别的高强度攻击,攻击者目前主要是将其他公链上已成熟的攻击方式迁移到波场并进行大范围攻击测试,寻找安全防护较为薄弱的合约,此阶段后,攻击者可能更进一步深度挖掘波场本身可能被利用的机制,进行更高强度和威胁的攻击。

  除了上述提到的,由于波场在实现上结合了以太坊和 EOS 的设计,各自出现的安全问题都有可能在波场上以某种方式出现。特别是波场合约部署后不可更改(类似以太坊),再加上类似 EOS 的共识机制,会直接影响未来可能的攻击方式,包括攻击合约的部署,以及可能的交易回滚或阻塞。

  但考虑到每一条公链都有其特殊性,公链能够上线并稳定运行也是有其必然性,黑客攻击的角度也是可能从多方面进行,包括但不限于公链上的创新设计,底层架构,P2P 协议层等。

  开发者的错并不代表波场协议完全安全可靠

  关于最近的波场 DAPP 安全问题,主要是开发者的问题。波场官方也表示,该合约安全问题出现在波场 DAPP 上,与协议本身没有任何关系,波场协议完全安全可靠。

  蒋旭宪认为,最近的这几次攻击的确是开发者的问题,但也不能因此说明波场协议完全安全可靠,更大可能反而是新的共链层面的安全问题还有待曝出。在众多的 DAPP 安全事件里面,公链团队可以做的也是多及时关注已知的 DAPP 安全问题,并同时积极思考公链层面可以增强和改善的环节。

  也有开发者认为,由于公链都是开源社区,开发者水平参差不齐,DAPP 质量也参差不齐,EOS 开发者犯的漏洞错误,波场开发者一样会犯。而且不少 DAPP 是没有准入审查的,门槛非常的低,不排除有 DAPP 在开发之初就有恶意埋雷。

  蒋旭宪提醒,对于用户来说,应该尽量参与那些靠谱的 DAPP 应用。在安全研究人员的眼里,很可能是所有 DAPP 都有或多或少安全方面的问题或隐患。所以用户最好是多了解 DAPP 本身是否有考虑相应的安全模块和响应机制,DAPP 合约是否有第三方的独立审计,同时注意关注 DAPP 对应的社区或 IM 沟通群,及时获取相应资讯和安全动态。在有安全事情发生的时候,可以及时止损。

  Dapp只有在可玩性、安全性等方面取得长足进步,才能走进大众主流人群。

  安全问题频发 dapp成黑客提款机

  

  金色财经不完全统计EOS安全事件

  目前安全形势最集中爆发于EOS上,从上图可以发现,几乎每天都会爆发安全攻击,甚至每天爆发多起安全事件,被戏称为”黑客提款机”。

  目前被黑客攻击的Dapp大多以竞猜类和游戏类为主,攻击的对象主要是EOS.WIN、EOSBet、EOSDice等几个头部项目,攻击手法主要是随机数破解、智能合约漏洞以及使用可控的随机数种子等。

  360首席科学家、PeckShield创始人蒋旭宪认为,以太坊之前也有过类似的合约漏洞和随机数问题,EOS从目前来看也不例外。EOS Dapp智能合约出现诸多安全问题,是EOS行业发展中必不可少的一步。

  正向看,菠菜游戏背后的逻辑、规则、玩法最适合在区块链上用智能合约运行;逆向看,菠菜开发简单、周期短、回本快。比如菠菜游戏开发只需要两周,其他游戏至少需要六个月。因此先开发出来的肯定都是菠菜游戏。但随着时间演化发展,肯定会io、卡牌、策略类等其他Dapp。

  

  在复杂美开源的Chain33区块链底层架构中,有一个共识模块叫作SPOS(safe pos),它通过Ticket实现POS的挖矿逻辑。

  在这篇文章中,我将详细讲解SPOS模块的实现原理,以及其解决随机数漏洞的方式。

  在Chain33的公链案例比特元中,用户使用钱包账户中BTY余额购票(挖矿权,目前10000个BTY可购买一票),一票对应一个唯一的TicketID,同时拥有一份挖矿权;一个区块只能由一票挖出,实际的挖矿几率各票均分(如全网有N张票,则一张票挖到矿的几率为1/N)。

  Ticket挖矿流程如下所示:

  钱包:定期检查账户中的BTY余额来购买票, 当满足购票条件后构造一条买票交易发往区块链。

  共识:它会一直尝试使用本地持有的票去打包区块,一旦打包成功,是表示对应的Ticket持有人挖矿成功,并获得对应的区块奖励。

  智能合约:智能合约会把地址对应的票信息写入到区块链数据库,每一张Ticket都对应有一个唯一的TicketID,也会有一条数据记录在数据库。

  在区块链上为了体现公平性(针对游戏等应用场景),就需要一个不能被预测的随机数。

  目前的区块链大体有如下实现方案:

  1. 合约中调用外部中心化的随机数发生器获取随机数;

  2. 使用区块hash中的某些值作为随机数。

  但是这两种方案都有非常明显的弊端,原因在于:

  1. 区块链多节点之间智能合约执行结果是要求强一致的,如果合约从外部读取数据,是很有可能获取到不同结果的(比如网络原因导致有的节点读取正常,有的返回错误)进而导致分叉。

  2. 区块的哈希可以被控制,导致随机数被控制。比如EOS,没有提供很好的随机数算法,所以很多Dapp开发者会自己封装自认为完美的随机数算法导致随机数被预知。

  例如以下两个例子:

  Eosbet第一次随机数攻击:这个游戏在开奖时使用了EOS中一个名为ref_block_num的随机数因子,但是在游戏开奖时合约中还是读取了老区块中的值,导致随机数被预知,进而被攻击。

  Eosbet第二次随机数攻击:在修改了上一次的问题后,开发者再引入了一个新的参数:用户余额作为随机数因子。然而攻击者利用这一点,模拟完全一样的DApp代码,然后不停修改余额去尝试开奖逻辑,直到碰撞出开奖结果,进而又遭到攻击。

  还有其它很多EOS上的游戏遭受了类似手段的攻击,造成大量的损失。

  下面,我们就来着重讲讲如何实现在随机数上的优化。

  首先,用户使用钱包账户中的BTY购买票(Ticket),10000BTY对应一票。钱包同时生成一个randNum,哈希过后再结合钱包挖矿地址的私钥,票对应的index(一次可以买多张票)等元素再做两次哈希,得到一个公开哈希参数(pubHash):

  pubHash=

  hash(hash(privateKey:index:hash(randNum)))

  然后,新购买的票中包含这个pubHash以及randNum并存入区块链,这张票有12小时的成熟期,过了12小时才可以参与挖矿。

  接着共识算法从区块链中找到已经成熟的票(Ticket)开始打包,由于共识打包区块操作只在节点本地执行,所以它可以读取本地存储的私钥,算出一个私密哈希(privHash)并将这个参数放入到挖矿交易中:

  privHash=

  hash(privateKey:index:hash(randNum))

  最后,智能合约收到挖矿交易,对比hash(privHash)和pubHash的值,两者一致挖矿交易成功,对应的节点获得挖矿奖励。否则挖矿交易执行失败。

  最后总结一下,SPOS共识的实现结合了随机数,由于一般情况下是无法预测其它节点的共识信息,所以也无法获取到它的共识随机数。

  并且系统设定私密哈希(privHash)不能提前泄露,就算有恶意矿工自己提前暴露,它对应的票也会被作废,同时本金会被冻结较长时间(2天以上)。

  再加上系统设定票需要经过12小时的成熟期后才可以参与挖矿。这些条件组合起来,系统的随机数几乎是无法被操控的。这样当开发者实现的DApp中需要保证公平随机时,就可以直接使用系统提供的这个安全的随机数了。

  复杂美区块链(www.33.cn)成立于2008年,累计申请200多项区块链发明专利,全球排名前10。拥有自主研发的区块链底层架构Chain33,从2018年11月开源至今,其首创的平行链架构被百度、阿里、360等机构认可与研究,并登录微软azure市场。