导读:还记得此前攻击 TronBank Pro 获利2,673万个 TRX 的黑客“wojak”吗?最近,他又出来搞事情了!
PeckShield 预警“玩家”高回报异常获利
7月27日凌晨3点至上午10点,PeckShield 安全盾风控平台 DAppShield 监测到 THeRTT 开头的地址在参与 MULTI.TODAY 合约游戏时,持续获得高回报异常获利,短短数小时内便获利102,652个TRX。
PeckShield 安全人员分析发现,该“玩家”采用了一种针对游戏机制的“卡位”回滚投注方式,通过部署脚本合约来参与游戏,利用游戏本身存在的运营机制“不平等”(比如先入场的玩家获利大)特性,成功实施“卡位”进而获取最大的投资回报率。
这类似于互联网上利用脚本程序恶意刷单,把原本属于普通玩家的收益权限给侵占了。这让人想起,去年 Fomo3D 火爆时,黑客利用以太坊公链因 gas 费用机制存在的交易拥堵问题,成功制造阻塞,拿走10,469个 ETH 奖金的攻击事件。
这个“聪明”的玩家,采用了类似 Fomo3D 式的“特殊方式”,狠狠地薅了 MULTI.TODAY 游戏一把羊毛。
“wojak”重现江湖
这个“聪明”的玩家究竟是何方神圣呢?
PeckShield 安全人员进一步分析发现,THeRTT 开头的地址就是此前大名鼎鼎的“wojak”,他曾经攻击过 TronBank Pro,并因此获利 2,673万个 TRX。
当时 TronBank Pro 遭攻击的原因是,其合约代码中留有“后门”,而“wojak”则成功地命中了后门,并将合约余额全部取走了。尽管这件事情本身扑朔迷离,是巧合还是背后有阴谋,到现在都没人说得清楚,然而,这倒让“wojak”这一代号名扬四方了。不禁要问,此次“wojak”重现江湖,又会掀起怎样的风浪呢?
MULTI.TODAY 游戏玩法说明
要理清这个问题,我们得先系统了解下 MULTI.TODAY 游戏。按照官方说明,所有参与投资的玩家会组成一个队列,每次排名队列首位的玩家会获得投资额的11%—41%作为回报,之后该玩家会被移除队列。
只要不断有玩家参与投资,那么先参与游戏的玩家都将获得丰厚回报,同时,为了避免最后一位玩家吃亏,游戏还规定如果持续30分钟没有后续玩家投资,那么最后一位玩家将获得奖池的5%作为回报。
“wojak”的卡位回滚操作技术原理
MULTI.TODAY 于每天的 22:00 GMT+3(北京时间凌晨3点)开启新的一轮游戏,只有当游戏正式开始后,玩家的投资才会被认可。由于游戏规则的设定,所有玩家都争抢着第一个参与。
通过 PeckShield TRON 大数据分析平台,可以看到在北京时间07月27号凌晨3点之前,多个玩家尝试参与游戏,但因为游戏时间还没有开始,交易都被回滚了:
(图示1:游戏开始前的交易)
当游戏时间到达后,有多笔交易都被打包进了 11315294 区块(即游戏开始的区块)。在这个区块中与该游戏合约有交互的前两笔交易分别为“wojak”发起的 Tx1 合约交易,以及由普通玩家发起的 Tx2 交易。
下图2为普通玩家发起的交易,图3为“wojak”发起的合约交易:
(图示2:普通玩家交易)
(图示3:“wojak”发起的合约交易)
“wojak”首先调用 TK5HmY 地址开头的合约,再由 TK5HmY 地址开头的合约调用游戏合约完成投资。PeckShield 安全人员分析后发现,区别于普通玩家,“wojak”发起的交易可不简单,存在多层调用。
TK5HmY 地址开头的合约首先调用 MULTI.TODAY 智能合约中的 startTime(),prizeAmount() 等静态方法,以此来判断游戏是否开始,是否已有玩家投资;当确认游戏开始,且尚未有玩家投资后,再多次调用游戏合约的 deposit()方法进行投资。虽然游戏合约设置在返利后移除排名队列首位的玩家,但因为该玩家是通过合约来进行多次投资的,可以保证被移除后仍然保持榜首。“wojak”获利的关键是得让这笔合约交易率先被 SR 节点打包。
在以太坊中,攻击者可以通过提高 gasPrice 来恶意竞争,让交易被矿工先打包处理,而波场没有类似 gasPrice 的概念,所有交易是通过 SR 节点打包产生的。“wojak”事先准备好自动化脚本,在时间到达前通过自动化脚本不断调用合约来完成交易,这会比普通玩家的手速要准确的多。同时,智能合约中的交易都是原子操作的,只要上链,合约可以保证交易中的所有操作按顺序进行,这就大大提高了合约交易率先被 SR 节点处理的概率。
从链上数据分析看,“wojak”通过合约投资32次,单笔交易就获利近10万个 TRX。他确实是一位极度聪明的玩家,当其他玩家还在拼手速时,他已经通过部署合约的方式,制造了不平等特殊权限,获取了丰厚回报。
下图为“wojak”的合约调用流程:
(图示4:“wojak”调用合约流程图)
“wojak”除了在 MULTI.TODAY 每轮游戏开始时争当头名玩家外,PeckShield 安全人员还发现,针对游戏第二种类似 Fomo3D 式的玩法,“wojak”也一直在“守株待兔”。
例如 TKjcLB 地址开头的账户于07月27号 09:13:57发起了一笔投资,在此之后的30分钟内没有玩家参与,直至09:43:57,“wojak”发起了另一笔交易,在最后时刻成功阻拦 TKjcLB 地址开头的账户获得大奖。跟之前分析类似,“wojak”的这笔交易也是调用游戏合约的 stage(),getCurrentCandidateForPrize()等静态方法,获取游戏当前回合数和投资资金,以此判断30分钟内是否有玩家参与。
事件后续
PeckShield 安全人员在发现该问题后,第一时间和游戏项目方取得了联系,项目方也及时升级了合约。
需要说明的是,“wojak”并没有攻击 MULTI.TODAY 合约,MULTI.TODAY 游戏本身也不存在相关智能合约的漏洞,“wojak”只是聪明地利用了合约的设定规则,达到了“薅羊毛”获利的目的,不能称其为一次黑客攻击行为。
不过,透过事件本身我们看出,上次 TronBank Pro 事件并非偶然,“wojak”确实是一位不折不扣的“技术牛人”。
写在最后
虽然此次事件并非因漏洞诱发的黑客攻击行为,仅是聪明“玩家”合理利用游戏机制实施的高智商薅羊毛行为,但其暴露的问题却值得我们深思:
1、游戏运营机制设计的缺陷同样会威胁到游戏的参与体验,透支并伤害大部分普通用户对游戏本身的信任;
2、合约玩家对如今 DApp 生态而言是把双刃剑,合约会帮助黑客以最低的成本,扫荡全网大量 DApp,且总能找到疏漏之处,进而下手;
3、游戏项目方应完善自身的风控应急响应机制,一旦监测到异常获利或攻击行为,应立即对游戏实施一键暂停,终止正在进行的攻击行为,必要时可寻求第三方安全公司帮助,进而减少或避免数字资产损失;
4、游戏玩家在参与游戏时,应时刻注意项目官方或者安全公司发出的预警消息,对于已经遭受攻击尚未停止运营的游戏,应避免再次参与,以免遭受更大的数字资产损失。
推荐阅读: