还记得此前攻击 TronBank Pro 获利 2,673 万个 TRX 的黑客「wojak」吗?最近他又出来搞事情了!

原文标题:《Fomo3D 式套利模式再现:「聪明」玩家狠狠地薅了一把羊毛!》
作者: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 点之前,多个玩家尝试参与游戏,但因为游戏时间还没有开始,交易都被回滚了 :

卷走千万 TRX 的黑客 wojak 重现江湖,技术详解操作手法图示 1:游戏开始前的交易

当游戏时间到达后,有多笔交易都被打包进了 11315294 区块(即游戏开始的区块)。在这个区块中与该游戏合约有交互的前两笔交易分别为「wojak」发起的 Tx1 合约交易,以及由普通玩家发起的 Tx2 交易。

下图 2 为普通玩家发起的交易,图 3 为「wojak」发起的合约交易:

卷走千万 TRX 的黑客 wojak 重现江湖,技术详解操作手法图示 2:普通玩家交易

卷走千万 TRX 的黑客 wojak 重现江湖,技术详解操作手法图示 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」的合约调用流程:

卷走千万 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、游戏玩家在参与游戏时,应时刻注意项目官方或者安全公司发出的预警消息,对于已经遭受攻击尚未停止运营的游戏,应避免再次参与,以免遭受更大的数字资产损失。

来源链接:mp.weixin.qq.com