复盘Blast链9700万美元争夺战,某国黑客生疏了?

Odaily星球日报Published on 2024-03-31Last updated on 2024-03-31

Abstract

Blast主网上线不到一个月,就发生了两起攻击事件,导致损失近亿美元。起因竟是曾经用过“朝鲜黑客”?CertiK 通过对事件时间线的还原对本次攻击进行了分析推断。详情可见本文。

复盘Blast链9700万美元争夺战,某国黑客生疏了?

背景

Blast 是由 Blur 的创始人 Pacman(Tieshun Roquerre、aka.铁顺)推出的 Ethereum Layer 2 网络,在 2 月 29 日启动主网,目前约有 19500 ETH 和 640000 stETH 质押在 Blast 主网。

被攻击的项目 Munchables 是 Blast 举办的 Bigbang 竞赛胜出的优质项目。

Blast 官方对质押 ETH 在 Blast 主网的用户会发放普通积分:

复盘Blast链9700万美元争夺战,某国黑客生疏了?

为了鼓励用户参与 Blast 生态上的 DeFi 项目,Blast 官方会挑选出优质项目进行推荐,并鼓励用户将 ETH 二次质押到 DeFi 里,可以获得更快的积分增加速度以及黄金积分,因此有相当多的用户将质押在 Blast 主网的 ETH 质押到了新创建的 DeFi 项目。

而这些 DeFi 项目的成熟度、安全性还有待考察,这些合约是否具有足够的安全考虑来保管用户的数千万、甚至上亿美元。

复盘Blast链9700万美元争夺战,某国黑客生疏了?

事件概述

Blast 主网上线不到一个月,在 2024 年 3 月 21 日就发生了针对 SSS Token(Super Sushi Samurai)的攻击,Token 合约中存在一个转账逻辑错误,导致攻击者可以凭空增加指定账户的 SSS Token 余额,最终项目损失了超过 1310 ETH(约 460 万美元)。

而在 SSS Token 攻击事件过去不到一周的时间,Blast 上又发生了一起更大的攻击事件,Munchables 项目被攻击者一把卷走了 17413.96 ETH,共约 6250 万美元。

在这笔攻击交易发生的半小时后,项目方合约里的 73.49 WETH 也被黑客盗取到的另外一个地址。

此时项目方的合约地址上,还存着 7276 个 WETH、 7758267 个 USDB、 4 个 ETH,随时会落入黑客手里,而黑客拥有拿走整个项目的所有资金的权限,共计约 9700 万美元暴露于风险之中。

在事件后发生的第一时间,X(Twitter)的知名链上侦探 zachXBT 指出本次攻击的根本原因是由于雇佣了某国黑客所致。

让我们深入看看,“某国黑客”是如何完成一次接近一亿美元的攻击。

复盘Blast链9700万美元争夺战,某国黑客生疏了?

现场还原

受害者发声

[UTC+ 0 ] 2024 年 3 月 26 日 21 点 37 分(攻击发生 5 分钟后),Munchables 官方在 X(Twitter)发文表示遭到攻击。

复盘Blast链9700万美元争夺战,某国黑客生疏了?

按链上侦探 ZachXBT 的调查,是因为他们有一位开发者是“某国黑客”,aavegotchi 的创始人 coderdannn 也在 X(Twitter)上表示:“Aavegotchi 的开发团队 Pixelcraft Studios 在 2022 时曾短期雇用过 Munchables 攻击者来进行一些游戏开发工作,他技术很糙,感觉确实像一名某国黑客,我们在一个月内解雇了他。他还试图让我们雇用他的一位朋友,那个人很可能也是一名黑客。”

由于这次攻击让社区的用户损失巨大,我们立即启动了链上调查,让我们深入看看这个“某国黑客”的攻击细节。

第一现场

[UTC+ 0 ] 2024 年 3 月 26 日 21 点 32 分,涉及 17413.96 ETH 的攻击发生了。

通过 Blastscan 我们可以看到这笔攻击交易:https://blastscan.io/tx/0x9a7e4d16ed15b0367b8ad677eaf1db6a2a54663610696d69e1b4aa1a08f55c95

复盘Blast链9700万美元争夺战,某国黑客生疏了?

受损合约(0x 29..1 F)是一个代理合约,存放了用户质押的资金,我们可以看到,攻击者调用了质押合约的 unlock 函数,并通过了所有的权限校验,转走了合约中所有的 ETH 到攻击者地址 1 (0x 6 E..c 5)。

复盘Blast链9700万美元争夺战,某国黑客生疏了?

看上去攻击者调用了一个类似 withdraw 行为的 unlock 函数,取走了受损合约(0x 29..1 F)上大部分 ETH。

是项目方的金库忘了上锁吗?

受损合约(0x 29..1 F)中的 unlock 存在两个相关校验,我们一个一个来看。

首先,我们发现在校验权限的流程中,调用了合约(0x 16..A 0)的 isRegistered 方法来查看当前的 msg.sender,也即是黑客地址 1 (0x 6 E..c 5)是否已经被注册过:

复盘Blast链9700万美元争夺战,某国黑客生疏了?

复盘Blast链9700万美元争夺战,某国黑客生疏了?

答案是:通过了验证。

复盘Blast链9700万美元争夺战,某国黑客生疏了?

这里涉及到了合约(0x 16..A 0)以及其对应的最新的逻辑合约(0x e 7..f 1)

[UTC+ 0 ] 2024 年 3 月 24 日 08 点 39 分(攻击发生的 2 天前),合约(0x 16..A 0)对应的逻辑合约被升级了。

复盘Blast链9700万美元争夺战,某国黑客生疏了?

逻辑合约升级交易:

https://blastscan.io/tx/0x9c431e09a80d2942319853ccfdaae24c5de23cedfcef0022815fdae42a7e2ab6

逻辑合约被更新至0x e 7..f 1 。

最初的逻辑合约地址在这里能看到,为0x 9 e..CD。

https://blastscan.io/tx/0x7ad050d84c89833aa1398fb8e5d179ddfae6d48e8ce964f6d5b71484cc06d003

复盘Blast链9700万美元争夺战,某国黑客生疏了?此时,我们怀疑黑客是更新代理合约的逻辑实现合约,将为0x 9 e..CD 变成恶意的0x e 7..f 1 ,完成了验证权限的绕过。

真的是这样吗?

在Web3.0 从来不需要猜测和听信别人,你只需要掌握技术就能自己得到答案。

我们通过对比两份合约(未开源合约),最初的0x 9 e..CD 合约与更新后0x e 7..f 1 存在一些明显的区别:

0x e 7..f 1 的 initialize 函数部分实现如下:

复盘Blast链9700万美元争夺战,某国黑客生疏了?

0x 9 e..CD 的 initialize 函数部分实现如下:

复盘Blast链9700万美元争夺战,某国黑客生疏了?

可以看到,攻击者在最初的逻辑合约(0x 9 e..CD)中,将攻击者地址(0x 6 e..c 5)设置为 register,同时还有其他两个攻击者地址0x c 5..0 d、0x bf..87 也被 register 了,并且它们的 field 0 被设置为初始化时的区块时间,field 0 后面会解释用处。

实际上,和我们猜测的恰好相反,真正的藏有后门的逻辑合约,反而是最初就存在,而后面更新的反而是正常的!

等等,这个更新出现在[UTC+ 0 ] 2024 年 3 月 24 日 08 点 39 分(攻击发生的 2 天前),也就是在这个事件之前,逻辑合约已经变成没有后门的合约了,为什么后面攻击者还可以完成攻击?

这是因为 delegatecall 的原因,所以实际的状态存储更新是在合约(0x 16..A 0)中,这也就导致了即使之后逻辑合约被更新至没有后门的逻辑合约0x e 7..f 1 ,合约(0x 16..A 0)中被更改的 slot 依然不会恢复。

我们来验证一下:

复盘Blast链9700万美元争夺战,某国黑客生疏了?

可以看到,合约(0x 16.....A 0)中对应的 slot 是有数值的。

这使得攻击者能够通过 isRegistered 方法的校验:

复盘Blast链9700万美元争夺战,某国黑客生疏了?

攻击者之后再将后门合约更换为正常合约掩人耳目,其实此时后门早已种下。

另外,在 unlock 的流程中,还涉及到第二个校验:

对于 lock 时间的检查,这一部分是保证锁定的资产不会在未到期就被转走。

复盘Blast链9700万美元争夺战,某国黑客生疏了?

攻击者需要保证当 unlock 被调用时的区块时间大于要求的锁定过期时间(field 3)。

这一部分校验就涉及到受损合约(0x 29..1 F)以及对应的逻辑合约0x f 5..cd。

在[UTC+ 0 ] 2024 年 3 月 21 日 11 点 54 分(攻击发生的 5 天前)的交易中,

https://blastscan.io/tx/0x3d08f2fcfe51cf5758f4e9ba057c51543b0ff386ba53e0b4f267850871b88170

复盘Blast链9700万美元争夺战,某国黑客生疏了?

我们可以看到受损合约(0x 29..1 F)合约最初的逻辑合约是0x 91..11 ,而在仅仅四分钟后,就在

https://blastscan.io/tx/0xea1d9c0d8de4280b538b6fe6dbc3636602075184651dfeb837cb03f8a19ffc4f

复盘Blast链9700万美元争夺战,某国黑客生疏了?

被升级为了0x f 5..cd。

我们同样来对比两份合约,可以发现攻击者和之前一样,也在 initialize 函数做了手脚,

0x f 5..cd 的 initialize 函数部分实现:

复盘Blast链9700万美元争夺战,某国黑客生疏了?

0x 91..11 的 initialize 函数部分实现:

复盘Blast链9700万美元争夺战,某国黑客生疏了?

可以看到,很明显的,又是运用了同样的手法,将自己持有的 ETH 数量&解锁时间都进行了篡改,之后再替换回正常合约掩人耳目,当项目方和安全研究人员在 Debug 的时候,看到的逻辑合约全是正常的,而且由于合约均为未开源合约,更难以看清问题的核心。

至此,我们了解了这笔涉及 17413 ETH 的交易,攻击者是如何做到的,但是这个事件背后的信息,只有这么多吗?

我们上面的分析中,其实看到黑客在合约内部内置了 3 个地址:

0x 6 e..c 5 (攻击者地址 1)

0x c 5..0 d(攻击者地址 2)

0x bf..87 (攻击者地址 3)

而我们上面发现的攻击交易中只看到0x 6 e..c 5 ,其他两个地址都做了什么?而且里面的 address( 0)、_dodoApproveAddress、_uniswapV3Factorty到底还隐藏着什么秘密?

第二现场

我们先来看看攻击者地址 3 (0x bf..87),通过同样的手法盗取了 73.49 WETH:

https://blastscan.io/tx/0xfc7bfbc38662b659bf6af032bf20ef224de0ef20a4fd8418db87f78f9370f233

并且攻击 gas 的来源地址(0x 97..de),同时给0x c 5..0 d(攻击者地址 2)和0x bf..87 (攻击者地址 3)都提供了手续费。

复盘Blast链9700万美元争夺战,某国黑客生疏了?

而攻击 gas 来源地址(0x 97..de)的 0.1 ETH 的资金源头来自 owlto.finance(跨链桥)。

0x c 5..0 d(攻击者地址 2)收到手续费后,并未进行任何攻击,但它其实肩负了一个隐藏的计划,我们继续看下去。

实际上,根据官方的事后救援交易,原来受损合约(0x 29..1 F)地址上并不止 73.49 枚 weth,直到攻击结束,也仍有 7276.5 WETH & 7758267 USDB。

救援交易:

https://blastscan.io/tx/0x1969f10af9d0d8f80ee3e3c88d358a6f668a7bf4da6e598e5be7a3407dc6d5bb

复盘Blast链9700万美元争夺战,某国黑客生疏了?

原本攻击者是打算盗取这些资产的,可以看到0x c 5..0 d(攻击者地址 2)这个地址原本是用来偷取 USDB 的。

复盘Blast链9700万美元争夺战,某国黑客生疏了?

这里的_dodoApproveAddress 为0x0000000000000000000000004300000000000000000000000000000000000003

复盘Blast链9700万美元争夺战,某国黑客生疏了?

为 usdb 的 address

复盘Blast链9700万美元争夺战,某国黑客生疏了?

0x bf..87 (攻击者地址 3)这个地址是用来偷取 weth 的:

复盘Blast链9700万美元争夺战,某国黑客生疏了?

这里的_uniswap V3 Factory 为0x0000000000000000000000004300000000000000000000000000000000000004

复盘Blast链9700万美元争夺战,某国黑客生疏了?

为 weth 的 address

复盘Blast链9700万美元争夺战,某国黑客生疏了?

而0x 6 e..c 5 (攻击者地址 1)负责盗取的是 address( 0),即是原生资产 ETH。

攻击者通过设置 field 0 ,即可通过如下逻辑对对应资产进行盗取:

复盘Blast链9700万美元争夺战,某国黑客生疏了?

复盘Blast链9700万美元争夺战,某国黑客生疏了?

问题

为什么攻击者没有盗走所有资产?

理论上他可以盗取所有的资产,即剩下的 WETH 和 USDB。

0x bf..87 (攻击者地址 3)只盗取了 73.49 WETH,0x bf..87 (攻击者地址 3)其实完全可以把所有的 7350 WETH 拿走,也可以借助0x c 5..0 d(攻击者地址 2)把 7758267 USDB 全部拿走,为什么只拿了一点点 WETH 就停下来了,我们不得而知,可能需要知名链上侦探深入内部的调查了。

https://blastscan.io/tx/0xfc7bfbc38662b659bf6af032bf20ef224de0ef20a4fd8418db87f78f9370f233

复盘Blast链9700万美元争夺战,某国黑客生疏了?

为什么攻击者没有把 17413 ETH 转到 Ethereum 主网?

众所周知,Blast 主网是有可能通过中心化的方式拦截这些 ETH,让它永久停留在这里,从而不会造成实质上的用户损失,但是一旦这些 ETH 进入 Ethereum 主网,就没有办法拦截了。

我们评估了当前 Blast 的跨链桥,官方跨链桥没有限制数量,但是需要 14 天的退出时间,因此足以让 Blast 官方来准备拦截的计划。

而第三方的跨链桥是可以接近实时到账的,就像攻击者的手续费来源一样,很快完成跨链,为什么攻击者没有第一时间进行跨链?

实际上攻击者在第一时间(攻击的 2 分钟内)进行了跨链:

https://blastscan.io/tx/0x10cf2f2b884549979a3a1dd912287256229458ef40d56df61738d6ea7d9d198f

复盘Blast链9700万美元争夺战,某国黑客生疏了?

而且资金花了 20 秒就在 Ethereum 主网到账了,理论上攻击者可以持续不断进行跨链,可以在跨链桥人工干预之前,将大量 ETH 跨链转走。

复盘Blast链9700万美元争夺战,某国黑客生疏了?

至于为什么只能每次 3 ETH,原因是跨链桥的流动性限制,从 Blast 上跨到 ETH 上:

复盘Blast链9700万美元争夺战,某国黑客生疏了?

另一家支持 Blast 的跨链桥则支持的更少:

复盘Blast链9700万美元争夺战,某国黑客生疏了?

而在这一笔跨链交易后,攻击者没有继续其他的跨链操作,原因我们不得而知,看上去“某国黑客”似乎是没有为资金退出 Blast 进行充足的准备。

攻击后的事件发展

根据社区用户 Nearisbuilding 的反馈,他找到了攻击者的更多身份信息,并且想办法促使攻击者归还资金。

https://twitter.com/Nearisbuilding/status/1772812190673756548

复盘Blast链9700万美元争夺战,某国黑客生疏了?复盘Blast链9700万美元争夺战,某国黑客生疏了?

最终,在加密社区的关注和努力下,“某国黑客”也许因为害怕暴露身份,向项目方提供了以上 3 个攻击者地址的私钥,并归还了所有资金,项目方也进行了救援交易,把受损合约的资金全部转到多签合约进行保管。

Trending Cryptos

Related Reads

The Final Piece of Franklin Templeton's Crypto Ambition

Franklin Templeton Completes Crypto Ambition with Acquisition of 250 Digital On June 22, Franklin Templeton announced the acquisition of 250 Digital and established Franklin Crypto, a new division focused on actively managed cryptocurrency strategies for institutional investors. The unit is led by Christopher Perkins and Seth Ginns. This acquisition marks a key piece in Franklin Templeton's multi-year crypto strategy, which began in 2018 with a digital assets team. The firm's crypto product suite now spans three layers: tokenized funds like the blockchain-based money market fund BENJI (~$831M AUM); a series of passive ETFs including Bitcoin (EZBC, ~$368M), Ethereum (EZET), XRP (XRPZ, ~$252M), Solana (SOEZ), and a multi-crypto index fund (EZPZ); and the newly added active management strategies from Franklin Crypto. The company has also expanded its crypto ecosystem through investments in projects like Ethena and Crossmint, and collaborations with blockchains such as Aptos and Sui. With approximately $18B in digital asset AUM and a total firm AUM of ~$1.78T, Franklin Templeton is positioning itself as a comprehensive crypto asset manager for pensions and sovereign wealth funds. In contrast, competitor Fidelity Investments has taken a different path, focusing early on building its own custody and trading infrastructure. Fidelity's Bitcoin ETF (FBTC) holds over $11B, significantly larger than Franklin Templeton's equivalent offering. Both giants' moves underscore the deepening trend of traditional finance entering the crypto space.

Foresight News16m ago

The Final Piece of Franklin Templeton's Crypto Ambition

Foresight News16m ago

Black Tuesday in Japanese and Korean Stock Markets: South Korea Triggers Circuit Breaker, Nikkei Plummets, AI Boom Undergoes Phased Adjustment

"Black Tuesday" for Asian Markets: Korean Stocks Halted by Circuit Breaker, Nikkei Plunges as AI Rally Undergoes Correction Asian stock markets experienced severe turbulence on Tuesday, with South Korea's benchmark KOSPI index plummeting nearly 10% after triggering a market-wide trading halt when its losses exceeded 8%. Japan's Nikkei 225 index also fell sharply by approximately 3.5%, ending an eight-day winning streak. The sell-off was heavily concentrated in the technology and semiconductor sectors, with giants like Samsung Electronics and SK Hynix leading the declines. The plunge reflected a rapid reversal from recent highs, with the KOSPI having retreated over 12% from its mid-June peak. Analysts attribute the sharp correction to multiple converging factors. The direct trigger was weakness in U.S. tech stocks, which fueled profit-taking in overbought Asian markets. Furthermore, stronger-than-expected U.S. jobs data has reinforced expectations that the Federal Reserve will maintain or even raise interest rates, putting pressure on rate-sensitive growth stocks. Structural vulnerabilities also played a role, particularly in South Korea, where the market is highly concentrated in a few semiconductor heavyweights, making it susceptible to shifts in global AI demand and foreign capital outflows. Despite the short-term volatility, the long-term narrative for AI and semiconductors remains intact. Industry forecasts still point to massive growth in global AI capital expenditure over the coming years. South Korean firms like SK Hynix maintain a dominant position in critical segments like High Bandwidth Memory (HBM), with long-term orders secured well into 2027. While near-term fluctuations are expected to continue, driven by U.S. monetary policy signals and upcoming corporate earnings, the current correction may present a buying opportunity for quality assets tied to the enduring AI infrastructure build-out.

marsbit32m ago

Black Tuesday in Japanese and Korean Stock Markets: South Korea Triggers Circuit Breaker, Nikkei Plummets, AI Boom Undergoes Phased Adjustment

marsbit32m ago

Trading

Spot
Futures

Hot Articles

Discussions

Welcome to the HTX Community. Here, you can stay informed about the latest platform developments and gain access to professional market insights. Users' opinions on the price of ETH (ETH) are presented below.

活动图片