菠菜类DAPP已成黑客提款机?元凶竟然是它!
区块链,一直以透明、开源而闻名,也因此成为近两年最受人关注的技术。有数据显示,从2009年比特币的源代码公开后,平均每年有8600多个区块链项目加入GitHub,开发者们的DAPP代码开始大批量涌入。
被誉为明星项目的EOS,自从主网上线以来,就一直致力于DAPP生态建设,虽然在DappRadar上,EOS的DAPP数量远不如以太坊的链上DAPP数量,但它的高扩展性被开发者们所认可,DAPP的数量和日活也在逐渐增加。
但天下无不bug的程序,开源让项目更透明,也给了技术高超的黑客以可乘之机。
就在昨天,知名DAPP EOSDice被黑,造成了4633个EOS的损失。而仅在6天前,EOSDice就已经被黑掉过2545个EOS。
这已经是EOS DAPP本月第三次遭到黑客攻击了。这一次的攻击者是之前攻击FFGame DAPP的黑客,攻击手法也是由于使用了可控的随机数种子。
上一次EOS合约竞猜类游戏FFGame被攻击之后,慢雾安全团队经过技术复盘推测了整个攻击过程:
攻击者是通过部署攻击智能合约,并且在合约中使用与FFGame相同算法计算随机数,产生随机数后立即在inline_action中使用随机数攻击合约,导致中奖结果被“预测”到,从而达到超高中奖率。
根据攻击复盘,慢雾预警了该攻击手法,并告诫开发者:不要引入可控或可预测随机数种子,任何侥幸都不应该存在。
果不其然,这一次黑客使用了相同的攻击手法,再次尝到了甜头,也给了开发者们警醒的一击。
那么,这个“可控的随机数种子”究竟是个啥?
我们都知道,随机数是区块链上运行智能合约的一个关键数值。用程序员的思维来看,只要你告诉我初始状态,我可以根据你每次给的输入,预测出它的输出。
这里我们不用了解太多技术层,我们只需要知道,假如想让随机数是不可预测的,那就必须保证随机种子是不可预测的。
那么这个随机数种子就需要从外界输入。简单打个比方,它可以是某个商品的销量,也可以是计算机的系统时间。
但这些数据太过于简单,非常容易被黑客预测到并加以使用,从而大幅提升自己在菠菜游戏里的中奖率,拿走奖金池里的奖金。
因此找到一个优良的、不易被控制的随机数种子,是现在所有菠菜类DAPP面临的难题。
据DappRadar数据显示,EOS上有118个DAPP,其中菠菜游戏类有60多个,几乎占比了一半!一位资深DAPP开发者表示:“目前来看,区块链第一应用就是赌博,其他应用,暂时还火不起来。”
因此对于菠菜游戏来说,智能合约是命脉,是灵魂,任何漏洞都有可能让资金池中的资金被席卷一空。
目前菠菜类游戏的智能合约所参考的随机数比较局限,可作为随机种子使用的公开数据仍然比较少,且大部分都有可能被猜出来,因此暂时无法实现真正的随机。
曾经有人提出用“EOS RAM的交易数据”或者“某活跃DAPP的公开数据”作为随机数,但是被社区中的开发者给否定掉了。原因是这些变化无穷的公开数据依然存在着很大问题,并不能直接被使用——
1、过于依赖其他方数据,必须保证智能合约跟着别人的数据格式同步更新;
2、变化频次时高时低,无法保证不间断的不可预测性。
从近半年的新闻中可以得知,EOS DAPP的安全事件频发。目前被报道的已经有FFGame、DEOSBET、EOS Happy Slot、FairDice、EOSDice,以及损失最为惨重的EOSBet。
我们会发现,EOS DAPP遭受攻击的概率比以太坊DAPP高得多。这不外乎是以太坊DAPP开发模式已经趋向于成熟,内部安全性较为完整,复杂逻辑较少,因此漏洞范围更低。
还有一个原因是,目前EOS的开发人员并不多,成熟的开发者就更少了。很多情况下,一个DAPP可能背后只有1-2个程序员,甚至连完整的测试人员都不存在。在这种情况下,漏洞出现的可能性就非常大,也更可能被攻击。
多次的黑客攻击和大额损失都证明了,EOS DAPP现在还是个宝宝,不足以说是一个具有完善保护机制的成熟应用链。
当然,这也是EOS DAPP发展壮大必须经历的过程。提升其内部安全性,任重而道远。