火星链 火星链
Ctrl+D收藏火星链
首页 > SAND > 正文

ACK:慢雾:破解造成 BetDice 项目恐慌的交易回滚攻击手法

作者:

时间:1900/1/1 0:00:00

2018年12月19日,众多游戏类DApp遭遇交易回滚攻击,其中包括BetDice,EOSMax,ToBet等。按当时18元人民币的价格计算,损失超过500万人民币。期间BetDice通过链金术平台发出多次公告,一度造成恐慌。

与此同时,慢雾安全团队对交易所和中心化钱包给出了暂时性的方案。此刻,攻击手法依旧是一个谜团。那么,攻击手段究竟是怎样的呢?在进行攻击回顾之前,需要先了解一点技术背景。

技术背景

1、我们知道EOS采用的共识算法是DPOS算法,采用的是21个超级节点轮流出块的方式。除了21个超级节点外的其他全节点,并没有出块的权限。起到的作用是将收到的交易广播出去,然后超级节点将其进行打包。

说到这里,很容易看出,如果一笔交易是发给除了超级节点外的其他全节点,这笔交易会经历两个过程。首先,这笔交易先被全节点接收,然后交易再被节点广播出去进行打包。而一笔交易是需要超级节点中超过2/31的节点进行确认之后才是不可回滚的,也就是不可逆的。

这个过程大概需要3分钟左右,也就是说,交易发到除了超级节点外的全节点的时候,由于全节点没有打包的权利,此时此刻交易仍然处于可逆状态。这是一个核心关键点。

慢雾:区块链因黑客攻击损失总金额已超300亿美元:金色财经报道,据慢雾统计数据显示,自2012年1月以来,区块链黑客造成的损失总金额约为30,011,604,576.24美元;黑客事件总数达到1101起。

其中Exchange、ETH Ecosystem、Bridge是在黑客攻击中损失最大的类别,损失金额分别为10,953,323,803.39美元、3,123,297,416.28美元,2,005,030,543.30美元。另外合约漏洞、Rug Pull、闪电贷攻击是最常见的攻击方式,分别发生黑客事件137起,106起,87起。[2023/7/7 22:24:09]

2、每一个bp,都可以在自己的节点的config.ini文件内进行黑名单的配置,在黑名单中的帐号是不能进行交易的,也就是说无论怎样,黑名单的交易都会被回滚。

黑名单配置路径:

MacOS:

~/Library/ApplicationSupport/eosio/nodeos/config/config.ini

Linux:

慢雾:LendHub疑似被攻击损失近600万美金,1100枚ETH已转移到Tornado Cash:金色财经报道,据慢雾区情报,HECO生态跨链借贷平台LendHub疑似被攻击,主要黑客获利地址为0x9d01..ab03。黑客于1月12日从Tornado.Cash接收100ETH后,将部分资金跨链到Heco链展开攻击后获利,后使用多个平台(如TransitSwap、Multichain、Uniswap、Curve和OptimismBridge)跨链或兑换被盗资金。截至目前,黑客已分11笔共转1,100ETH到Tornado.Cash。被攻击的具体原因尚待分析,慢雾安全团队将持续跟进此事件。[2023/1/13 11:10:43]

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

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

了解了以上的知识点之后,我们就可以进行整个攻击事件的回顾了。

慢雾:疑似Gemini相关地址在过去5小时内共转出逾20万枚ETH:金色财经消息,慢雾监测显示,疑似加密交易所Gemini相关地址(0xea3ec2a08fee18ff4798c2d4725ded433d94151d)已在过去5小时内归集并转出逾20万枚ETH(超3亿美元)。[2022/7/19 2:22:08]

攻击回顾

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

同时,我们可以通过复盘这个帐号的所有交易记录发现,这个帐号只有开奖记录,而没有下注记录,看起来就好像项目方故意给这个帐号进行开奖一样。然而事实上并非如此。那为什么会出现这样的情况呢?这就需要上面的技术背景的知识了。以下是详细的攻击手法:

1、首先:攻击者调用非黑名单合约的transfer函数,函数内部有一个inlineaction进行下注,from填写的是攻击者控制的非黑名单合约帐号,to填写的是游戏合约帐号。这时,攻击者发送交易是发向游戏合约自己的全节点服务器。使用的是黑名单帐号进行。

2、游戏节点读取到了这笔交易,立刻进行开奖,如果中奖,将对攻击者控制的非黑名单帐号发送EOS。

慢雾:攻击者系通过“supply()”函数重入Lendf.Me合约 实现重入攻击:慢雾安全团队发文跟进“DeFi平台Lendf.Me被黑”一事的具体原因及防御建议。文章分析称,通过将交易放在bloxy.info上查看完整交易流程,可发现攻击者对Lendf.Me进行了两次“supply()”函数的调用,但是这两次调用都是独立的,并不是在前一笔“supply()”函数中再次调用“supply()”函数。紧接着,在第二次“supply()”函数的调用过程中,攻击者在他自己的合约中对Lendf.Me的“withdraw()”函数发起调用,最终提现。慢雾安全团队表示,不难分析出,攻击者的“withdraw()”调用是发生在transferFrom函数中,也就是在Lendf.Me通过transferFrom调用用户的“tokensToSend()”钩子函数的时候调用的。很明显,攻击者通过“supply()”函数重入了Lendf.Me合约,造成了重入攻击。[2020/4/19]

3、在经历了一个1,2两个操作之后。理论上攻击者控制的非黑名单帐号是进行了余额扣除。然后进行正常的开奖逻辑。到这里之前,一切都是正常的。也许有读者会问,为什么配置了黑名单,交易还能正常发起?原因是这个黑名单生效范围是在bp内,普通的全节点的config.ini内是没有黑名单的配置的。所以攻击者依然可以发起交易。

动态 | 慢雾: 警惕利用EOS及EOS上Token的提币功能恶意挖矿:近期由于EIDOS空投导致EOS主网CPU资源十分紧张,有攻击者开始利用交易所/DApp提币功能恶意挖矿,请交易所/DApp在处理EOS及EOS上Token的提币时,注意检查用户提币地址是否是合约账号,建议暂时先禁止提币到合约账号,避免被攻击导致平台提币钱包的CPU资源被恶意消耗。同时,需要注意部分交易所的EOS充值钱包地址也是合约账号,需要设置白名单避免影响正常用户的提币操作。[2019/11/6]

4、到此为止,攻击正式开始,也到了最关键的地方,由于项目方节点在收到下注交易的时候已经立马完成了开奖逻辑,而且采用的是线下开奖的模式,即下注交易和开奖交易是两笔不同的交易。但是,这两笔交易仅仅是在项目方的节点内完成,仍然是可逆的。当项目方节点向bp广播这两笔交易的时候,由于第一笔下注交易的发起者在bp节点的黑名单内,这一笔交易将被回滚,也就是打包失败,而开奖交易的发起者是项目方,不在黑名单之内,会被正常打包。因此两笔交易中的第一笔下注交易一定会被回滚,而开奖交易依旧会被打包,这也就解释了为什么只有开奖记录,而没有下注记录。因为下注记录都被回滚了。

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

攻击复现

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

1、环境准备

本地准备两个节点,一个出块节点,一个同步节点,出块节点用于模拟真实bp,而同步节点则用于模拟项目方,其中出块节点需要开启history插件,方便后续的debug,并且把attacker加入节点黑名单。方便后续的debug。打包节点则需要开启自动开奖插件,自动开奖插件配置详见:

https://github.com/superoneio/security

本次复现用到的代码:

https://github.com/superoneio/security

本地多节点配置方法官方参考:

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

三个测试帐号,分别是tobetioadmin,tobetiologs1,attackproxy1,分别为项目方帐号,项目方log帐号,和攻击代理帐号,其中tobetioadmin部署tobet游戏合约,tobetiologs1部署logs合约,attackproxy1部署attack合约。注意除了攻击代理帐号外的其他两个帐号不要改为其他帐号,如果改为其他帐号需要对自动开奖插件进行修改,自动开奖插件是拦截tobetioadmin这个帐号的。

附上我的双节点的配置:

其中nodeos_main为出块节点,nodeos_second为同步节点。

2、启动节点

看到以上信息则代表dice_plugin配置成功

3、首先对正常的逻辑进行测试。

使用attackproxy1对tobetioadmin帐号进行正常的转账交易

可以看到,攻击代理合约进行了正常的转账。

4、开始攻击,使用黑名单帐号调用攻击代理合约,向项目方合约发起攻击。查询初始余额

为保证攻击成功,连续向项目方发起4起攻击

再次查询余额

查询attacker帐号记录

可见,并没有attacker对attackproxy1的调用记录,最后两条记录是我测试直接使用黑名单向tobetadmin发起攻击的时候留下的记录。与本次测试无关。但是通过查询发现,本地记录和链上记录是相吻合的,即无下注记录。

查询attackproxy1的帐号记录

可以看到的是,这个也与链上记录吻合,只有开奖记录,就像tobetadmio故意给attackproxy1开奖一般。

通过以上的复现及和链上记录的对比,我们可以证明上文说的攻击手法,就是黑客本次进行攻击的手法,采用的就是使用黑名单进行回滚的操作。

防御建议

1、针对DApp的防御建议

节点开启readonly模式,防止节点服务器上出现未确认的块建立开奖依赖,如订单依赖,开奖的时候判断订单是否存在,就算在节点服务器上开奖成功,由于在bp上下注订单被回滚,所以相应的开奖记录也会被回滚。

2、针对交易所和中心化钱包的防御建议

慢雾安全团队建议EOS交易所及中心化钱包在通过RPC接口get_actions查询热钱包充值记录时,应检查充值transaction所在的block_num是否小于last_irreversible_block,如果block_num大于last_irreversible_block则表示该区块仍然是可逆的,存在「假充值」风险。

本文来源于非小号媒体平台:

慢雾科技

现已在非小号资讯平台发布1篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/3627097.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

再提Mt.Gox,糟糕的「里程碑事件」正提升区块链世界的安全意识

下一篇:

复盘数十万EOS被盗过程,背后是其架构设计缺陷?

标签:EOSACKBETATTeos币最新利好消息Blackmoon CryptoBETX.FUNATTN币

SAND热门资讯
DCR:TokenInsight:Grin矿机投资可行性分析报告 | 火星号精选

2019年1月Grin主网上线后,芯动科技、Obelisk、Vidtoo三家矿机厂商陆续宣布将推出GrinASIC矿机.

1900/1/1 0:00:00
以太坊:200万gas一笔隐私交易 V神提案你接受吗?

金色财经比特币5月24日讯以太坊区块链网络创始人“V神”VitalikButerin表示:“我们需要向更隐私的方向迈出第一步.

1900/1/1 0:00:00
EWS:部点名虚假项目“金砖数字货币” 小心披着区块链的

5月20日,部20日公布第二批61个民族资产解冻类虚假项目和组织。在名单中,第42个项目“金砖数字货币项目”看起来“币圈范儿”十足.

1900/1/1 0:00:00
NBC:摩根溪CEO:未来十年比特币的表现将跑赢标普500投资基金

5月22日,摩根溪资本公司首席执行官MarkYusko在接受CNBC采访时表示,比特币应该出现在每个投资者的投资组合中。Yusko认为在未来十年,比特币的投资表现将远远好于标普500投资基金.

1900/1/1 0:00:00
LBA:公示:「PHV期权补偿基金」活动首日亏损补偿数据

为了庆祝LBank期权交易火热上线,并拓展PHV的交易场景。我们启动了预算共10BTC的「PHV期权补偿基金」激励补偿活动.

1900/1/1 0:00:00
OIN:韩国政府宣布:被检查的 21 家加密货币交易所中有 11 家已实施安全措施

暴走时评:韩国政府日前宣布了对21家加密货币交易所的检查结果,虽然许多交易所已完成了短期管理措施和钱包管理措施的实施,但大多数交易所仍然存在许多安全漏洞.

1900/1/1 0:00:00