慢雾科技Keywolf:DApp大爆发下的漏洞乌云
每个公链都会有必经的一个发展过程,EOS有这么多的用户关注和DApp的繁荣,长远来看是一个好事,反观其他没有那么多关注的公链,如果没有很多的DApp,也很难让这些问题暴露出来。
1月3日晚,慢雾安全团队负责人Keywolf做客猎云财经空中课堂,本次分享Keywolf从DApp现状、安全开发以及攻防对抗三个方向全面系统地对EOS现状进行了分析,以下为分享实录(经编辑整理):
大家晚上好,我是慢雾安全团队的Keywolf,感谢猎云财经的邀请,我今天给大家带来的分享主题是DApp大爆发下的漏洞乌云。
最近EOS特别火热,自从六月份主网启动以来到最近这几个月,EOS不停地出现很多漏洞,各种游戏、DApp出现问题, 今天我给大家带来的分享主要从三个方面展开,第一块是DApp安全现状分析,第二块是EOS安全开发如何进行,以及在游戏等各种DApp的运营当中,怎么进行持续的攻防对抗。
01、EOS平台上DApp智能合约存在问题
这张图是IMEOS研究院今年11月份发布的EOS平台上DApp生态数据的分析报告,在1.3章节里,报告对DApp安全生态进行了漏洞盘点,从图中可以看出,六月份主网启动之后,七月份、八月份、九月、十月、十一月,不停地有很多DApp遭受攻击,遭受攻击之后带来的损失也是比较大的,多的话会有几万个EOS,换算一下,大概会有几百万人民币的损失。
通过这个高清的报告图片来看,这么多的EOS DApp被黑事件遭受漏洞攻击的原理基本上是各种各样不断地在发生变化,这说明 EOS平台上DApp智能合约存在一定的问题,然后被黑客利用。 并且EOS主网刚刚启动,可能在整体的安全方面,以及开发者对EOS的了解,不管是对底层还是智能合约的了解都存在一定的欠缺,这也导致攻击者有机可乘,对一些主流DApp发动攻击,给行业带来了非常多的损失。
另外一个值得关注的是,Block.one在2018年总共发放了53.45万的的漏洞赏金,从鲸快讯的统计来看,有一些能力突出的黑客,一个人就可以获得十几万的漏洞赏金。
这张图片是EOS在HackerOne上最早的记录,可以看到,有很多研究员在不断地去提交问题,这一方面也是在帮EOS底层以及节点等程序完善它的功能,另外一方面说明EOS主网也就是区块链本身还比较早期,所以就会有存在一些不稳定的因素以及缺陷,通过漏洞赏金的方式可以帮助EOS不断优化,避免地下黑客利用未知漏洞,对EOS上所有生态DApp发动持续的攻击。
02、开发者需要在对区块链特性充分了解之后再进行DApp的开发
EOS DApp发生了这么多攻击之后,作为用户或者开发者,该怎样去开发一个安全的DApp呢?
因为区块链本身是一个新兴的产业,不管是语言还是其他合约的开发,都需要开发者充分了解区块链独有的特性,在已知这些问题的情况下再进行开发。
如何开发一个相对比较安全的DApp?起步的话,我们推荐从https://developers.eos.io开发者官网上进行学习,从零开始学习基础的知识点,包括智能合约方面的内容,另外一个是C/C++:https://eosio.github.io/eosio.cdt/,这是EOS智能合约开发语言的手册,也是它的类库参考文档,里边会对底层结构体进行一个充分的介绍。
有了基本的认知之后,跟着官方的示例文档一步步开发、部署、在本地调试智能合约,然后实现一些小的功能,再不断地添加更多的功能,经过一段时间的学习之后,开发者可能会有一定的经验,有了经验可能会去尝试做比较大型或完整的游戏或应用,到达了这个阶段,可能在满足基础DApp功能之后还需要对安全有一定的了解,那我们也是总结了一份智能合约安全开发的指南。
在这份智能合约安全开发指南里,我们研究了智能合约开发的安全准则以及已知的漏洞,包括有:基础的数值溢出、权限校验,比如假币、假通知、链上随机数等,还有在12月份导致很多头部DApp被黑的回滚攻击,我们对六个已知的漏洞进行了梳理,并提供有漏洞的代码示例、防御方法以及真实案例等一些数据的分析。
EOS 智能合约最佳安全开发指南:
https://github.com/slowmist/eos-smart-contract-security-best-practices
EOS 回滚攻击手法分析之黑名单篇:
https://mp.weixin.qq.com/s/WyZ4j3O68qfN5IOvjx3MOg
EOS 回滚攻击手法分析之重放篇:
https://mp.weixin.qq.com/s/gqzkBTxKf7kwL5OgCtMgvQ
优秀社区推荐
IMEOS:https://imeos.one
EOSPark:https://eospark.com/openapi
EOS LIVE:https://eos.live
EOS智能合约开发实践:
https://github.com/itleaks/eos-contract
https://blog.csdn.net/itleaks/article/category/7700370
03、如何进行DApp的攻防对抗
开发完成之后,在持续运营当中会遇到很多的问题,需要对合约进行实时监控,关注玩家下注和平台开奖的情况。 在这个持续的运营中,有很多的攻击者会在暗处进行研究,包括部署合约来进行相应的攻击尝试。结合慢雾安全团队持续的经验来说,我们需要在DApp的运营当中不断地和未知、看不见的攻击者进行持续的对抗, 结合我们以往的这些经验,我们也有输出一款DApp防火墙产品来解决用户的这个痛点。
慢雾DApp防火墙FireWall.X:https://firewallx.io
DApp防火墙FireWall.X能够提供几个功能模。 第一,它是一个链上治理的模块,是公开透明的, FireWall.X采用预言机的技术同时会整合慢雾安全团队区块链威胁情报的数据(简称BTI数据)构建一个链上链下安全、治理一体化联合防御的体系。
第二个是灵活黑白名单的控制, FireWall.X本身提供了一个黑名单组合,第一个是已知的合约账户,从以往的攻击来看,大部分的攻击都是通过合约辅助完成的,所以合约账户可能有一定的威胁问题,第二个,可以根据已知攻击者攻击的账号,我们也有这样一个威胁账户的列表。此外的话,项目方也可以在里面灵活地进行黑名单的管理,可以管理自己的黑白名单。
通过灵活的黑白名单的管理去过滤掉攻击者以及一些恶意的用户从而保障平台的公平性以及资产本身的安全。
第三部分是项目方可以通过防火墙进行灵活启动和停止合约的功能, 在以往发生漏洞的情况下,如果我们想要快速止损可能还需要修改一下合约,然后重新部署合约,阻断掉所有用户的下注,因为即使在网站上面发布了公告,还是会有一部分用户不断地进行下注,如果有这样一个灵活的开关,那我们就不需要重新部署合约,只需要在后台轻松点一下,然后签名就可以一键暂停合约,非常方便也可以非常快速地止损。
最后一个,在防御攻击者之外,我们还提供数据统计的功能,项目方能够在控制台随时查看拦截的次数以及总共清洗的次数,能够以图表的形式去查看整体的走势。
04、DApp安全三要素:开源、审计、权限释放
前面讲了很多都是给开发者或者项目方的建议,那作为普通的持币用户或者作为DApp的玩家,怎么去评判一个DApp是不是安全,或者说安全的等级究竟有多高呢?
我觉得可以从三个方面进行评估。
首先,DApp合约的代码是否是已经开源的。 因为从开源的角度来说,它会从社区里面发现这些安全问题,或者从里面的公平性来得到认可,让用户具有安全感;
第二个,合约是否是有经过第三方安全团队的审计。 如果是有审计,就可以很大程度上保障智能合约不会遭受已知的攻击,然后也能让整个玩的过程更加顺畅,更加安全;
第三个,合约更新的权限是不是已经释放。 这个也是可以在一定程度上来辅助判断项目方的安全实力。
此外,我们也开发了一个EOS天眼平台,在这个平台上可以去查看项目方合约的更新记录以及权限的一些信息,还可以通过平台对项目方合约更新的动作进行订阅,去查看项目方是否在没有发布公告的情况下对合约进行了升级,去判断项目是否会存在一定的风险。
EOS 天眼:https://eos.slowmist.io/
在EOS天眼平台上还可以查看项目方的合约代码是否有进行开源,以及它整体的审计信息等等,我们会在区块链上进行一些信息的查询和共享,所有的用户都可以通过EOS天眼平台进行校验,校验DApp安全方面的一些实力和开发方面的实力。
以上是我的分享内容。
精彩问答:
问题一: Keywolf老师,您好,您刚才讲的内容可能还是比较偏于开发者,在DApp现状这块涉及的比较少, 可以系统分析一下DApp现状吗,目前来看EOS的漏洞主要有哪几个呢?
Keywolf: 我们来回顾一下DApp的安全现状,从六月份EOS主网启动到十二月份,EOS有出现了很多的攻击事件,这些攻击事件主要问题还是集中在已知的几个方面或者说是逐步被发现的几个漏洞。
这几个漏洞在我们的EOS智能合约最佳安全开发指南里也有进行梳理。我这边可以再跟大家用比较通俗易懂的方式介绍一下。
第一个是溢出,溢出最早是在EOS狼人游戏里出现过这样的问题。
第二个是apply校验。 EOS假币之前有出过这样的问题。因为EOS币本身是通过智能合约发出的,攻击者自己也部署了一个智能合约,然后发行的代币也叫EOS,DApp在处理转账充值通知的时候没有判断好这个来源,官方的合约账号是eosio.token,如果假EOS的话,来源不是这个账号的话就可以判断是假币。
第三个就是transfer的假通知。 项目方没有判断转账的通知收款人是不是自己,这样攻击者把转账的通知通过智能合约转发到项目方那边,然后收到通知的项目方以为收款人是DApp自己,然后再去处理和用户下注的流程,这样也会导致这个问题的出现。
另外一个是随机数的实践。 其实在很多媒体上也经常看到随机数、余额等等都会导致随机数可预知的情况,或者合约开源,能够以同样的方法进行计算。随机数严格来说,从技术层面看,它在链上是无法提供严格的随机数,主要还是通过一些不可预知的因子来进行随机数的实践,在我们的指南里也有提供相应的指导和一些推荐的做法。
最后我们整体来看一下EOS DApp的安全现状,整体来说,大部分的DApp或者主流的一些DApp多多少少都有发生过一些被攻击的事件,在经历过这些事件之后,项目方往往都会自己来填补损失,之后也会更加看重DApp合约的安全问题,找第三方安全审计机构来进行审计,并且也会花更多的心思,对这些安全问题里面的细节以及自己的合约来进行自查, 整体来说,大部分的DApp目前相对来说都是比较安全的。
慢雾安全团队也在不断地对链上发生的还没有被披露出来的漏洞,或者说是未知的漏洞进行研究,我们希望能够尽可能多的去提前捕获到被攻击的这些问题,然后同步给所有的DApp开发者和项目方,避免平台的资产被黑客攻击,然后被撸走。我们也建议所有的DApp项目方了解一下我们的防火墙FireWall.X,相应的问题都可以和我们联系。
问题二:DApp的安全问题会是EOS发展过程中面临的最棘手的问题吗?随着这些游戏等DApp的爆发,这些问题会不会暴露的更加明显?
Keywolf: DApp其实是公链本身价值或者火热程度的体现,因为很多的转账、TPS等大部分是依赖于DApp。因为EOS比较知名,有大家熟悉的一些特性TPS、手续费等等,大多数人会选择在EOS上建设自己的DApp,DApp安全问题的话, EOS目前发展过程中主要被大家感知到的就是安全问题,随着游戏DApp的发展,其实这些问题会更加清晰。
随着DApp的发展,也会有很多的已知问题在新的DApp上出现,这也说明项目方或者开发者没有去了解已经发生过的攻击的原理。因为我们已经对所有已知的安全问题、攻击手法以及有漏洞的代码都进行了讲解和说明,希望有新的DApp开发或者上线的时候能够去自查一下这些代码,看一些文档,或者联系我们去进行一个全方面的安全审计。
问题三:EOS上线以来一直是饱受争议,往往出现的很多问题会被无限放大,和其他公链相比,您觉得EOS的安全性如何?是否符合大众对最强公链的期待?
Keywolf: 我们知道EOS是在今年6月份主网才上线,到现在这个时间其实也不长,才半年多一点,因为大家对EOS的期待或者关注非常多,导致很多的问题,不管是媒体还是用户对它的关注和报道也会非常多,因此大家觉得它的漏洞非常多。 其实每个公链都是有必经的一个发展过程,EOS有这么多的用户关注和DApp的繁荣,长远来看是一个好事,反观其他没有那么多关注的公链,如果没有很多的DApp也很难让这些问题暴露出来。
EOS出现了这么多的问题,其实大部分都不是EOS底层的缺陷,很多DApp出现被黑的问题也是由于开发者对EOS智能合约,对EOS公链底层的源码不是那么熟悉,以及在开发方面没有优秀的安全经验,导致大家觉得这都是EOS本身的问题,其实有一些是DApp开发导致的智能合约漏洞,并不是底层的问题。
我们拿以太坊来对比,以太坊在发展过程中也有出现过很多的问题,其实每个公链都是在不断发展的,代码也是不断地更新迭代,不断地去增加白皮书里面有预期的一些功能,EOS也是不断在往跨链、IBC的方向来进行完善。
问题四:那您怎么看以太坊和EOS这两者的关系?未来会是怎样的发展态势?
Keywolf: E OS和以太坊的发展,我觉得在未来肯定不会出现某一个完全碾压另外一个的情况, 因为每一条公链都有自己的优势和适用场景,以太坊发展了这么多年,它的智能合约和底层虚拟机是相对稳定和安全的,所以资产特别重以及对交易时间要求不是特别高的DApp一般来说会选择以太坊,比如近期也很流行的稳定币大部分都是选择基于以太坊来发行的。那另外一个,可能资产特别重或者价值非常高的资产也会通过以太坊的智能合约来进行DApp的开发。
那EOS未来的发展也是会和它自身的优势相关,比如TPS特别高、手续费等等这样的优势,以及未来跨链的优势,也就是说,EOS和以太坊未来都会往自己设计的方向进行发展,希望它快的,类似游戏或者是转账之类的DApp可能会选择EOS,其他一些需要稳定的、对速度要求没有那么高的DApp可能会选择以太坊。 未来肯定是两条链都会往自己的方向不断地发展。
问题五:您对EOS未来的发展如何看待?对现在的大熊市又是如何看待呢?
Keywolf: EOS未来的发展这一块,目前很多的BP以及大的DApp项目方都有对EOS做出非常多的贡献,所以他们也会对EOS未来的发展做出很多帮助,从近期的发展和大家讨论的热点来看,我个人的观点是, EOS未来会在跨链方向不断地进行完善,很多的DApp可能自己会有一个侧链,然后把很多细的问题放在侧链上去进行,跟EOS资产相关的就会放到主链上来结算。
侧链技术成熟之后,我相信能够给EOS的TPS和大家的期待带来一个新的关注点。
至于大熊市的这个问题,其实也是由市场的走向决定的,或者说是由用户信心来决定的,我这边就不提预测牛市之类的,因为其实很多东西都是大家一边走一边看的。