1. 链一财经首页
  2. 资讯

PeckShield创始人蒋旭宪:以太坊智能合约面临的威胁与防范机制

55.jpg

6月3日,CSDN、灵钛科技联合主办,火星财经(hxcj24h)协办的“以太坊技术 及应用大会”在北京召开。PeckShield 创始人兼CEO蒋旭宪在会议上发表了主题为“以太坊智能合约面临的威胁与挑战”的演讲,主要介绍了以太坊生态现状、智能合约的安全问题和下一步的思考。

蒋旭宪指出,在2017年平均每天有10万的新用户加入以太坊生态圈,平均在以太坊上的日均交易超过100万次,全年部署上线了1090个DApps和700多个tokens。2018年,1640个虚拟货币市值超过3300亿美元,相较国民生产总值,已经在全球排名第28位。

同时,蒋旭宪表示国家政策监管对以太坊的智能合约部署起到相当大的作用,但智能合约部署发展的背后也伴随着频发的安全事件,这些安全事件包括了交易所、矿池、钱包、智能合约、DApps、基础设置等区块链的各个环节,并以transferFlaw和multiOverflow两个已公开的漏洞为例分析了漏洞的原理。

在谈到保护措施和防范机制时,蒋旭宪表示应在上线前的智能合约审计、上线后的应急响应及漏洞奖赏计划三方面采取措施。

以下是演讲原文:

感谢主办方,让我荣幸参加这个社区活动,有机会与大家分享我们团队最近做的关于以太坊智能合约面临的威胁和挑战。

第一部分,简单介绍以太坊当前生态现状。第二部分,讨论智能合约的安全问题。第三部分,下一步思考。

一、以太坊生态现状

引用上周网站做的分析报告:2017年全年部署上线了超过1000多个去中心化的应用,同时超过700多个在各个不同交易所可以交易的代币。

这个生态确实很有吸引力,平均每天有10万的新用户加入以太坊生态圈,加入的用户非常活跃,平均每天在以太坊上的日均交易超过100万次,这是个非常惊人的数据,也说明社区非常有活力。这么有活力的社区也解释了为什么现在数字加密货币的市场如此火暴。

1.png

这个贴图引用了国外自媒体网站CoinMarketCap,统计1640个虚拟货币的市场规模,超过市值3300亿美元,与国民生产总值比较的话,当前市场规模已经在全球排名第28位。这个市场规模很大的一部分原因是得益于以太坊部署,特别是以太坊独特 的应用ICO。代币发行是以太坊上非常大的应用。

二、智能合约的问题

每个发行的币会在以太坊上部署一个智能合约,智能合约管控代币的发行、相互之间的转化。

2.jpg

这里我列出从2015年8月份到最近一个月的数据,这个数据表明每个月新部署的智能合约数量,大家可以看看以太坊的火暴时间段跟这个是否吻合。蒋涛分享到它最火暴、中国开发者加入的时候是2017年的下半年,跟智能合约的部署是吻合的。智能合约部署是2017年5月份开始获得长足增长,增长的数据在2017年9月份开始下滑,但2017年10月份数据又得到长足增长,然后慢慢稳定下来,到2018年的4月份数据慢慢降落了。大家能够猜到2017年9月份发生了什么事件,国家政策监管对以太坊的智能合约部署或代币发行起到相当大的作用。

这个发展背后伴随着我们不想看到的安全事件,这些安全事件在区块链的各个环节,包括:交易所、矿池、钱包、智能合约 。关于交易所,今年年初3月份交易所被攻击的事件;关于矿池,在上个月早到了51%算力的攻击,引起了“双花现象”;关于钱包,2018年4月份全球最大基于网页的数字钱包的域名被劫持;关于智能合约 ,以太坊最明显的攻击,2018年4月份公布了关于美链智能合约 漏洞等,2018年5月份陆续报了智能合约漏洞 。

已公开的漏洞直接影响各大交易所停止了代币发行的充值或取现,目前还有不少未公开的漏洞 ,我们会联系相关的项目方和相关交易所,逐步跟他们验证相关的数据。因为这个是开发者社区,接下来我们会挑两个例子,跟大家分享一下漏洞的原理,大家以后再做项目开发时,就能够避免相关问题。

3.jpg

第一个漏洞 ,关于transferFlaw,就是大家理解的偷币漏洞 。如果用户有一个代币,背后对应的智能合约有安全漏洞,攻击者可以把这些代币从你的钱包里全部转走。这里列出了有漏洞 的transferFlaw,transferFlaw里面有三个参数,这是交易的数值,代码49-51做初步的检查,确保这个参数是有效的,但在代码53行和54行计算了转出方本身有的余额保存在fromBalance,同时统计了这次允许转出的额度,根据计算出来的变量,在代码行56行和57行,跟当前交易的数值做比较,然后计算两个条件判断,是否本次交易转出方有足够的帐户余额允许做交易,转出方是不是有足够的授权做交易。

大家要关注一下代码行58行,简单验证一下如果把这部分钱或者代币转入转入方,转入方的余额会不会造成溢出。这三个条件加起来就是代码行满足条件下授权这次交易。大家能够意识到代码行里的判断条件,特别是在56行,如果判断交易的转出方有足够余额时,后面的fromBalance不是小于等于value,应该是大于等于value,57行应该是也大于等于value,58行也不应该是大于,而应该是小于。

我放一个简单的视频,这里有两个数字钱包,左边数字钱包是一个普通者用户,他有1.2345个UET代币,是我们自己花钱去买的。右边的数字钱包是攻击者的,攻击者开始的代币余额是零,攻击发生的时候这些UET代币是怎么从用户的数字钱包转到了攻击者钱包?因为这个漏洞 的存在,即使这个用户用的是这些冷钱包,这些钱都可以被转走。大家关注一下这个余额的情况,从用户手上转到了攻击者手上。

第二个漏洞,multiOverflow。前面那笔是普通的交易,从转出方转入转入方。multiOverflow是每次交易都去做的话可能引起比较高的交易费用,这个函数的作用是把多笔的单笔交易组成一个批处理,批处理有两个参数,就是转入方和转入的数值,这里面拥有多笔交易,它做成数组,代码行227和228数值长度是一样的,才是个有效的数据,数值长度就变成当前有多少个单个交易,代码行249-251相当于把这些要转出的交易的数值做了一个加法,获取总值之后判断转出方有足够的余额去授权管理,但因为这个漏洞存在,能够感觉到这个变样有可能溢出,有可能变成零。假设这个数值有两个地址,一个1、一个2,数值等于2的225次方,2个225次方相加得到256方,造成,条件相当于转出方的余额大于等于1,后面的循环会把单笔交易的value转到转入方,同时转出方做相减,转出方加这个值等于2的255次方,造成无限生成代币漏洞 。我们发现有几家正在做的项目受到影响,我们第一时间跟他们同步,他们马上更换 了这个智能合约,把漏洞 做了修改,重新部署上线。

这是转帐的视频,两个手机和钱包都是攻击者的,开始的余额全是零。大家看看余额的变化情况,这么大的数值相当于2的255次方。

大家不要觉得漏洞很恐慌,最主要的是思考在资产上量或者发币时中间可能的安全风险。

三、下一步思考:保护措施和防范机制。

在座的资产上线时:

第一,一定要做相对完整和客观的智能合约的审计。现在很多公司都可以做这方面服务,我们公司也可以提供。

第二,上线后一定要注意应急响应。比如监控你们的智能合约有没有可能有异常交易情况,把这个放到应急响应去,第一时间就知道这个智能合约是否被攻击了。同时,开发业务项目方里有应急响应团队,可以模式做反应。

第三,希望项目方和交易所有相应的漏洞奖励计划,形成一个健康的生态。

最后感谢CSDN和灵钛科技的邀请。谢谢大家。

根据国家《关于防范代币发行融资风险的公告》,大家应警惕代币发行融资与交易的风险隐患。

本文来自LIANYI转载,不代表链一财经立场,转载请联系原作者。

发表评论

登录后才能评论

联系我们

微信:kkyves

邮件:kefu@lianyi.com

时间:7x24,节假日bu休息

QR code