http://www.7klian.com

慢雾:破解造成 BetDice 项目惊愕的生意业务回滚进攻手法

设置要领: 将 config.ini 文件内的 actor-blacklist 填入黑名单帐号,如下图中,将 attacker 这个帐号作为黑名单帐号。

进攻回首

跟踪进攻者的个中一个进攻帐号,发明帐号合约内只有一个 transfer 函数

(2)三个测试帐号,别离是 tobetioadmin,tobetiologs1,attackproxy1,别离为项目方帐号,项目方 log 帐号,和进攻署理帐号,个中 tobetioadmin 陈设 tobet 游戏合约,tobetiologs1 陈设 logs 合约,attackproxy1 陈设 attack 合约。留意除了进攻署理帐号外的其他两个帐号不要改为其他帐号,假如改为其他帐号需要对自动开奖插件举办修改,自动开奖插件是拦截 tobetioadmin 这个帐号的。

可见,并没有 attacker 对 attackproxy1 的挪用记录,最后两笔记录是我测试直接利用黑名单向 tobetadmin 提倡进攻的时候留下的记录。与本次测试无关。可是通过查询发明,当地记录和链上记录是相吻合的,即无下注记录。

https://developers.eos.io/eosio-nodeos/docs/local-multi-node-testnet

技能配景

1、我们知道 EOS 回收的共鸣算法是 DPOS 算法,回收的是 21 个超等节点轮番出块的方法。除了 21 个超等节点外的其他全节点,并没有出块的权限。起到的浸染是将收到的生意业务广播出去,然后超等节点将其举办打包。

(1)查询初始余额

2、针对生意业务所和中心化钱包的防止发起

~/Library/Application Support/eosio/nodeos/config/config.ini

慢雾安详团队发起 EOS 生意业务所及中心化钱包在通过 RPC 接口 get_actions 查询热钱包充值记录时,应查抄充值 transaction 地址的 block_num 是否小于 last_irreversible_block (最新不行逆区块),假如 block_num 大于 last_irreversible_block 则暗示该区块仍然是可逆的,存在「假冒值」风险。

(5)查询 attackproxy1 的帐号记录

黑名单设置路径:

这个进程或许需要 3 分钟阁下,也就是说,生意业务发到除了超等节点外的全节点的时候,由于全节点没有打包的权利,此时而今生意业务仍然处于可逆状态(这里假定节点数据库的读取模式为默认的 speculative,有关阅读模式的参考:https://developers.eos.io/eosio-nodeos/docs/read-modes)。这是一个焦点要害点。

2018 年 12 月 19 日,浩瀚游戏类 DApp 遭遇生意业务回滚进攻,个中包罗 BetDice,EOSMax,ToBet 等。按其时 18 元人民币的价值计较,损失高出 500 万人民币。期间 BetDice 通过链金术平台发出多次通告 , 一度造成惊愕

通过以上的复现及和链上记录的比拟,我们可以证明上文说的进攻手法,就是黑客本次举办进攻的手法,回收的就是利用黑名单举办回滚的操纵。

4、开始进攻,利用黑名单帐号挪用进攻署理合约,向项目方合约提倡进攻。

1、情况筹备

相识了以上的常识点之后,我们就可以举办整个进攻事件的回首了。

看到以上信息则代表 dice_plugin 设置乐成

3、在经验了一个 1,2 两个操纵之后。理论上进攻者节制的非黑名单帐号是举办了余额扣除。然后举办正常的开奖逻辑。到这里之前,一切都是正常的。也许有读者会问,为什么设置了黑名单,生意业务还能正常提倡?原因是这个黑名单生效范畴是在 bp 内,普通的全节点的 config.ini 内是没有黑名单的设置的。所以进攻者依然可以提倡生意业务。

进攻复现

本次进攻复现参考 EOS LIVE 钱包团队的文章:https://eos.live/detail/19255

https://github.com/superoneio/security

~/.local/share/eosio/nodeos/config/config.ini

整个进程可以参考下面的图:

同时,我们可以通过复盘这个帐号的所有生意业务记录发明,这个帐号只有开奖记录,而没有下注记录,看起来就仿佛项目方存心给这个帐号举办开奖一样。然而事实上并非如此。那为什么会呈现这样的环境呢?这就需要上面的技能配景的常识了。以下是具体的进攻手法:

(3)附上我的双节点的设置:

(4)查询 attacker 帐号记录

(1)节点开启 read only 模式,防备节点处事器上呈现未确认的块

与此同时,慢雾安详团队对生意业务所和中心化钱包给出了临时性的方案。而今,进攻手法依旧是一个谜团。那么,进攻手段毕竟是奈何的呢?在举办进攻回首之前,需要先相识一点技能配景。

说到这里,很容易看出,假如一笔生意业务是发给除了超等节点外的其他全节点,这笔生意业务会经验两个进程。首先,这笔生意业务先被全节点吸收,然后生意业务再被节点广播出去举办打包。而一笔生意业务是需要超等节点中高出 2/3+1 的节点举办确认之后才是不行回滚的,也就是不行逆的。

利用 attackproxy1 对 tobetioadmin 帐号举办正常的转账生意业务

Linux:

Mac OS:

https://github.com/superoneio/security

4、到此为止,进攻正式开始,也到了最要害的处所,由于项目方节点在收到下注生意业务的时候已经立马完成了开奖逻辑,并且回收的是线下开奖的模式,即下注生意业务和开奖生意业务是两笔差异的生意业务。可是,这两笔生意业务仅仅是在项目方的节点内完成,仍然是可逆的。当项目方节点向 bp 广播这两笔生意业务的时候,由于第一笔下注生意业务的提倡者在 bp 节点的黑名单内,这一笔生意业务将被回滚,也就是打包失败,而开奖生意业务的提倡者是项目方,不在黑名单之内,会被正常打包。因此两笔生意业务中的第一笔下注生意业务必然会被回滚,,而开奖生意业务依旧会被打包,这也就表明白为什么只有开奖记录,而没有下注记录。因为下注记录都被回滚了。

2、游戏节点读取到了这笔生意业务,立即举办开奖,假如中奖,将对进攻者节制的非黑名单帐号发送 EOS。

2、每一个 bp (超等节点),都可以在本身的节点的 config.ini 文件内举办黑名单的设置,在黑名单中的帐号是不能举办生意业务的,也就是说无论奈何,黑名单的生意业务城市被回滚。

本次复现用到的代码:

当地多节点设置要领官方参考:

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!

相关文章阅读