游戏skr而止,漏洞周而复始——游戏合约漏洞全面汇总

image

区块链游戏江山如画,算法

安全防御未规划,安全

一片残阳西挂。服务器

区块链行业突飞猛进,发展迅猛,各个公链及项目方奇思妙想层出不穷。俗话说,玩是人的天性,将数字货币与游戏结合,运用游戏的机制吸引投资者参与到互动中来的想法以标新立异、推陈出新的姿态引领了最近的潮流。各类区块链游戏汇集大量的虚拟货币,价值动辄上千万,承诺下的丰厚回抱吸引了愈来愈多的目光,投资者们跃跃欲试,人人都想充当“头号玩家”。 分布式

可是,缺乏一套完整的、通过验证的SDK库是当下区块链游戏的一个痛点。各游戏方大都自食其力,独立开发游戏智能合约。比代币合约更加复杂的开发过程使得安全隐患不可避免的出现,这些漏洞一旦被攻击者或者项目方自己利用,受害的总会是玩家,可谓是,兴,百姓苦,亡,百姓苦。 成都链安科技对目前已经爆发的区块链游戏合约事件进行了概括整理,分析目前游戏存在如下两个方面的问题:函数

1

代码层面的安全问题

目前代码层面的安全问题在游戏中的表现几乎与以前的代币合约一模一样,可是包裹了鲜亮外衣以后,内部的代码结构严谨度依然差强人意,加上游戏机制的部分功能,有些合约代码甚至更加混乱。比如建造一栋楼房,基本结构没有搭建好,上梁不正下梁歪,增长更多的楼层与附属结构反而使得楼房的轰然倒塌更加迅速。 区块链

image

**漏洞归类与修复建议 **测试

一、以溢出为表明的代码安全漏洞优化

数学运算溢出在智能合约中是个比较大的安全隐患。不管是以太坊仍是EOS,一个整型变量只能有必定范围的数字表示。例如,一个 uint8 ,只能存储在范围[0,255] 的数字。试图存储 256 到一个 uint8 将变成0。不加注意的话,只要没有检查用户输入又执行计算,致使数字超出存储它们的数据类型容许的范围,就会产生溢出,并能够被用来组织攻击。 此部分的具体原理在咱们以前第一期,溢出漏洞全面分析中已经重点介绍过,没看过的请戳下面的连接:一晚上回到解放前?溢出漏洞类型全面分析 | 链安团队漏洞分析连载第一期 —— 溢出漏洞网站

下面咱们来看游戏合约案例:表明游戏:狼人游戏平台:EOSui

image

从游戏网站上,能够很明显的看到,该合约执行发生了溢出,致使奖金池总额变为一个极大的负值,而且因为项目方应对措施不当,致使奖池奖金被盗取,普通玩家血本无归[1]。 修复建议 该游戏有三个问题须要你们引发注意:

  • 代码开源问题,狼人游戏项目方并未公布合约源代码,玩家在参与游戏以前没法对  项目安全性进行评估,本身的资产没法获得保障;

  • 狼人游戏项目方要求用户提供的过大的权限,致使其有能力在用户未提供私钥的状况下,在后台修改权限,并转出用户的EOS;

  • 对安全事件的应急响应,狼人游戏项目方未冻结攻击者帐户,致使攻击者在升级后的版本中提出了6万多EOS。

在此处,成都链安科技建议广大游戏项目方应在游戏合约的设计中引入安全控制机制,包括恶意帐户冻结、暂停交易等,为游戏安全创建最后一道防线。

二、以owner权限盗取为表明的函数调用权限问题

此类漏洞的造成缘由为构造函数失配或者修改owner的函数未添加调用者检查。智能合约的构造函数通常担负着合约初始化以及owner地址绑定的功能,若是构造函数声明方式不正确,那么,其会变成一个普通函数,任何人均可以调用他,并将本身设置为合约管理者。修改owner的函数用于将新地址设置为owner,此类函数须要检查调用者地址,若是确少该检查,那么任何人都可以将本身变为合约的管理者。这与咱们在开始连载以前的owner权限漏洞分析中的构造函数问题一模一样,须要了解请由如下连接传送:注意!3份合约又存在Owner权限被盗问题——低级错误不容忽视

直接进入案例分析:表明游戏:Ether Cartel平台:以太坊

image

游戏的构造函数(DrugDealer)和合约名(EtherCartel)不一致,存在构造函数失配漏洞,致使DrugDealer变成一个普通的函数,任何人都可以调用该函数变成合约的ceoAddress,而且,根据后面的代码逻辑,他能够收取本来应该打入合约部署者的ETH2

image

修复建议 为了不此类漏洞,开发者在开发游戏合约时须要足够谨慎,并进行详尽的测试。构造函数仅在合约部署时执行一次,当出现合约部署后owner仍为0地址,而且用户能够调用实现构造函数功能的函数,那么,合约就存在构造函数失配的漏洞,开发者须要检查并修复构造函数实现。

**三、“随机数生成”等区块链平台短板 **

截止至目前,以太坊和EOS官方均未提供随机数接口,这对游戏开发确实是一个不利的影响,好比抽奖模块的开发。为了实现相似的功能,游戏开发者每每须要本身编写随机数生成函数,这些函数每每利用区块信息做为参数,而后进行一系列运算,得到一个“随机数”。可是,因为使用区块信息做为参数,这将致使在同一个区块上,使用相同算法的随机数函数将会获得相同的值,攻击者能够利用这点,部署中间合约,而后不停的尝试生成随机数,当生成满意的随机数时,再利用中间合约参与游戏,得到较大优点。此外,区块链做为一个全球分布式的计算机,其资源目前是比较有限的,链的开发者为了保障链平台的稳定性,对链上的智能合约的运作出了限制,防止死循环等消耗资源的操做,好比,运行gas限制(以太坊)、CPU/内存资源限制(EOS),这使得链上游戏开发者须要比传统的中心化服务器游戏付出更大的努力,对游戏的逻辑进行优化,确保逻辑正确的合约不会由于资源限制问题而没法运行。

随机数问题咱们在以前的快讯 智能合约随机数算法漏洞影响游戏公平性 已经说起过,此次咱们根据案例进行一下具体分析。

表明游戏:FoMo3D long平台:以太坊

image

该合约空投函数的随机数生成使用的区块参数依次为block.timestamp(当前区块时间戳)、block.difficulty (当前区块难度)、 block.coinbase(挖出当前区块的矿工地址)、block.gaslimit(当前区块 gas 限额)、block.number (当前区块号),结合msg.sender (玩家地址),计算出玩家是否得到空投奖励,攻击者能够部署中间合约,预先计算出在当前块进入游戏是否可以得到空投,而后在结果为true的时候参与游戏,就必然可以得到空投,并以此牟利。

修复建议

针对随机数问题,目前有几点建议:

  • 能够尝试官方推荐的随机数生成方式,好比以太坊的Solidity官方文档推荐用户使用链外的Oraclize库生成随机数;

  • 杜绝中间合约参与游戏,以太坊开发者须要注意,使用以太坊平台提供的    extcodesize函数并不能彻底判断某个地址是否为合约,由于合约在部署的时候,其extcodesize为0,可是能够在构造函数与其余合约进行交互,从而参与游戏,可使用tx.origin==msg.sender的方式判断。

4.  利用竞态条件机制发起的攻击

目前有些相似博彩的游戏合约彷佛更加受到欢迎,此类游戏合约有一个共同的特色——时间依赖。它们都是在必定时间段内与用户进行互动,时间截止以后宣布获奖者名单。这样取决于时间点的游戏留下的隐患是:攻击者能够将整个区块“塞满”交易,使得特定的交易没法进行。 攻击者会使用高昂的gas使其成为整个区块中惟一一个交易进行者。

案例分析:表明游戏:Exitscam/FoMo3D平台:以太坊

image

以太坊版的FoMo3D规则相似于透明“金字塔骗局

  • 每一局持续固定的时间

  • 若是你是最后一个向奖池中投注的人,你拿走头奖(奖池总奖金的90%)

  • 若是有人在你以后投注,你会得到必定的分成。目前,分成金额低于投入ETH的1%

  • 每0.005 ETH会给结算时间增长30秒,也就是2个区块,但每次增长上限为24小时

利用竞态条件的概念,赢得此游戏,得到头奖的策略很简单:当倒计时即将结束,趋近于0时,向奖池投注ETH,“买“下以后的每个区块直至倒计时结束,保证没有人可以在你以后投注。若是这个操做实现,你将得到头奖[3]。 这个游戏的机制漏洞几乎与以前提到的交易顺序依赖(TOD)殊途同归,竞态条件咱们在第三期连载分析中也有描述,连接以下(http://v1.8btc.com/lianan-series-03):弯道超车老司机戏耍智能合约 | 成都链安漏洞分析连载第三期 —— 竞态条件漏洞。 

修复建议

游戏开发者须要熟悉重入和交易顺序依赖两种类型的竞态条件漏洞,相似的游戏机制如若能够利用类似的概念被投机取巧,应当改变设计思路,兼顾设计初衷与安全保障。 

2

游戏自己可信度问题

虽然区块链上全部的交易都是公开透明的,但这不表明游戏项目方在合约开发的过程当中不能留有后门。尤为是还没有公布源码的游戏合约,其中能够暗藏一个函数,开发者只要调用这个函数就能卷走全部的货币。而目前还没有出现一款可靠的反编译器,对字节码进行反编译后,使其源码真正公开透明。若是还拿建造楼房作比喻的话,能够理解成在建造的时候就设计成歪的,一直住在其中的用户却并无察觉。 

image

**事件回顾 **

表明游戏名称:Power of Bubble 平台:以太坊

image

从4月7日到4月8日早上10点,游戏项目方在Discord各频道开始了疯狂的宣传,利用精美的外形设计和丰厚的奖励承诺紧紧吸引了大批的粉丝翘首以盼。8日早上10点开服后10分钟内,合约内资产已超过200ETH,可是随着时间的推移,玩家们开始发现讨论群消失了,游戏内的出售以及提取操做也没法完成。最后,奖金池中227个以太在众目睽睽之下被合约建立者转走4

image

区块链游戏每每须要各类虚拟货币做为游戏资产,整个游戏中全部涉及到虚拟货币持有、分配的合约都应当开源,供玩家和审计方审核,确保没有潜在后门。同时玩家也应该提升警戒,在将本身资产投入一份源码未知,未经审计的区块链游戏时,要作到理性投资。

路漫漫其修远兮

将区块链技术应用到游戏上,其发展时长其实并不比区块链货币交易短不少。区块链游戏到目前为止已经能够划分为3个时代,从1.0时代的《加密猫》,到2.0时代的《以太水浒》,都属于收集玩法为主的区块链游戏时代。目前的3.0时代是链上加链下多种玩法结合的时代,可是在众多RPG区块链游戏兴起的同时,庞氏骗局型区块链游戏也开始兴风做浪,这类游戏的交易属性较重,并且每每缺少长期的游戏属性。

展望4.0时代,区块链游戏应当更加注重于其游戏性,也就是说在玩法上更加接近传统游戏。可是与传统游戏相比,区块链游戏在三个方面有较大优点5

  • 帐号安全:玩家的登陆信息加密事后被储存在钱包内,安全性相较于传统登陆模式有较大提高。

  • 服务器:服务器安置在区块链上,即便游戏运营方中止其官方服务器,玩家也能继续享受游戏。

  • 公平性:因为游戏内信息公开透明,而且可追溯,滥发,更改道具的行为将更容易被识别,进而大幅降低。

然而,基于以太坊开发与传统游戏机制相同的仍然存在许多劣势:

  • 以太坊的吞吐量限制了游戏玩家的数量和增加速度

  • 鉴于目前以太坊交易速度的限制,不少游戏没有办法像传统游戏同样作到低延迟和实时互动

  • 每笔交易须要手续费对游戏内的交易增长了负担

目前,更多公链和资本介入区块链游戏的开发,目的是为其研发新的模式技术奠基更坚实的基础,或许再过不久,会有专门为游戏而生的公链出现,给区块链游戏一个专属的舞台。同时,开发者们已经把重心转移到多玩法的方向,试图弱化交易属性、减小庞氏骗局类型游戏,将区块链的技术优点附加到已经很成熟的传统游戏市场,为游戏产业带来一个新的纪元。但不管是以交易属性为主仍是以游戏性为主的区块链游戏,都离不开智能合约的编写和审计。

因此重中之重仍是要在发展的同时,保证合约安全属性的验证,对于上述问题游戏合约,对照以前的漏洞分析不难发现,不少项目方依然在重蹈覆辙,对于异常明显的常规漏洞没有采起补救或者防御的措施,带给玩家巨大的经济损失,也给区块链游戏的天空平添一抹阴霾。 保证合约的质量,让区块链游戏快速走出混沌期,每个项目方和开发者义不容辞。 

参考连接汇总:

[1]:EOS版Fomo3D因漏洞终结 资金盘游戏背后现多重风险

[3]: The Buy-A-Block Attack

内容来源 : 区块链大本营(blockchain_camp)

做者:成都链安科技

Blockathon|48小时极客竞赛,区块链马拉松等你挑战(成都)

本期Blockathon主题不限,游戏项目很是欢迎哦~

时间:2018年9月14-16日

地点:成都高新区天府五街200号菁蓉国际广场2号楼A座12楼中韩互联网+新技术孵化器

  • 招募50名开发者(识别下图二维码或点击“阅读原文”便可报名)

  • 报名费100元为参赛押金,参赛者我的缘由不能到场参加活动概不退款;参赛者全程参与活动,待活动结束后现场退还。9月14日18:00开始第一次签到,9月15日和16日天天早上都要记得签到哦。

  • 主办方免费提供2天的食物、饮料,并为每一位参会者准备一件文化衫

image

相关文章
相关标签/搜索