DeFi惊天漏洞:30万美元瞬间蒸发,EIP-1153成黑客“提款机”?

2025-04-02 11:59:55 去中心化金融 author

SIR.trading 遭攻击事件:一场精心策划的瞬态存储漏洞利用

慢雾安全团队的“亡羊补牢”式分析:真的有效吗?

2025年3月30日,又一起DeFi安全事件刺痛了圈内人的神经。Ethereum链上的杠杆交易项目SIR.trading,这个名字可能对很多人来说还很陌生,却以一种惨痛的方式进入了大众视野——价值超过30万美元的资产被盗。慢雾安全团队照例发布了安全分析报告,试图亡羊补牢,但说实话,看完之后,我却感到一丝挥之不去的疑虑:这种事后诸葛亮式的分析,真的能有效避免类似事件再次发生吗?还是仅仅为了给项目方和社区一个交代?

![/uploads/images/20250401/KOMU9IoRp6AeEi4Fx5drdCAtLSgfZphYtWaZb3WP.png]

慢雾的报告不可谓不详细,从攻击者地址、漏洞合约地址到攻击交易,事无巨细地罗列了出来。然而,这种技术细节的堆砌,对于普通投资者来说,无疑是天书。他们更关心的是:我的钱还能拿回来吗?类似的风险如何避免?而这些问题,慢雾的报告并没有给出令人信服的答案。

更让人感到讽刺的是,攻击事件的发生,恰恰暴露了DeFi领域长期存在的一个顽疾:过度依赖技术,忽视安全意识。EIP-1153瞬态存储的引入,本意是为了降低gas成本,提高效率,却被黑客利用,成为了攻击的突破口。这难道不是一种本末倒置吗?

DeFi的安全问题,绝不仅仅是技术问题,更是人的问题。项目方在追求创新和效率的同时,是否真正将安全放在了首位?社区在追逐高收益的同时,是否具备足够的风险意识?这些问题不解决,再多的安全分析报告,也只能是隔靴搔痒,治标不治本。

漏洞回顾:短暂的“瞬态”成了永久的噩梦

EIP-1153 瞬态存储:理想很丰满,现实很骨感?

Solidity 0.8.24版本引入的瞬态存储,无疑是开发者们期待已久的新特性。它承诺提供一种低成本、交易期间有效的临时存储方式,试图解决传统存储操作gas费用高昂的问题。然而,SIR.trading的遭遇,却给这项看似美好的技术泼了一盆冷水。

瞬态存储的核心特点是“短暂性”,数据仅在当前交易执行期间有效,交易结束后自动清除。理想情况下,这可以避免数据污染,减少维护成本。但问题在于,这种“短暂性”在某些特定场景下,却成为了漏洞的温床。

TSTORE和TLOAD指令的引入,确实降低了gas成本,但这并不意味着开发者可以随意使用,而不考虑潜在的安全风险。SIR.trading事件证明,在复杂的合约逻辑中,瞬态存储的“短暂性”很容易被利用,导致权限验证失效,最终酿成安全事故。

与其说瞬态存储本身存在缺陷,不如说开发者对这项新技术的理解和应用还不够成熟。在没有充分的安全评估和测试的情况下,盲目追求效率,只会适得其反。

根本原因剖析:权限验证的形同虚设

本次攻击事件的根本原因,在于uniswapV3SwapCallback函数中的权限验证机制形同虚设。攻击者巧妙地利用了瞬态存储的特性,篡改了存储在指定键1对应内存中的值,使得恶意合约能够绕过验证,冒充UniswapV3池子进行操作。

![/uploads/images/20250401/XrTCzb0dcqprIhpvRGehqkJ2vqwR9SSyV4QU1ufo.png]

这种攻击手法,本质上是一种“中间人攻击”,攻击者通过控制瞬态存储中的数据,截获并篡改了正常的交易流程。更令人担忧的是,这种攻击手法并非不可复制。只要合约中存在类似的瞬态存储使用不当的情况,黑客就可以利用相同的手段进行攻击。

这再次提醒我们,权限验证是智能合约安全的关键环节,任何疏忽都可能导致灾难性的后果。开发者在设计合约时,必须对权限验证机制进行充分的考虑和测试,确保只有授权的实体才能执行敏感操作。仅仅依赖瞬态存储的“短暂性”来保证安全,显然是不够的。

攻击步骤复盘:步步为营的教科书式入侵

这次SIR.trading的攻击,堪称一次教科书级别的漏洞利用,攻击者展现了极高的技术水平和周密的计划。他们并非一蹴而就,而是通过一系列精心设计的步骤,最终实现了盗取资产的目的。

恶意代币与流动性:构建虚假繁荣的温床

攻击的第一步,是创建两个恶意的代币A和B,并在UniswapV3上为这两个代币创建池子并注入流动性。

![/uploads/images/20250401/UxDYHStzrNJwliDqQ2VGWJgr7bDnmZO3M48nJCa1.png]

这一步看似简单,实则至关重要。通过创建虚假的交易对和流动性,攻击者为后续的攻击奠定了基础。他们可以控制代币的价格和流动性,从而影响Vault合约的计算结果,为后续的权限绕过创造条件。

更令人细思极恐的是,这种恶意代币的创建和流动性的注入,几乎没有任何成本。任何人都可以轻易地在UniswapV3上创建代币,并提供少量的流动性,从而发起类似的攻击。

Vault 合约的“糖衣炮弹”:初始化、铸造与瞬态存储的陷阱

接下来,攻击者调用Vault合约的initialize函数,以A代币为抵押品代币,B代币为债务代币创建一个杠杆交易市场APE-21。

![/uploads/images/20250401/b1ESAYap1M56vKesoWWYSB53ix96c4UCymL2XHJi.png]

然后,攻击者调用Vault合约的mint函数,存入债务代币B铸造杠杆代币APE。

![/uploads/images/20250401/xnkrnvyJZK0EVtOCvfXrz9RiIyWyuHwxNrgHF6lz.png]

mint函数中,当需要存入债务代币B去铸造杠杆代币时,需要传入的collateralToDepositMin参数的值不能等于0,之后会通过UniswapV3先将B代币兑换成抵押品代币A并转入Vault中,其中会将攻击者先前创建的UniswapV3池子的地址进行第一次瞬态存储。

![/uploads/images/20250401/NWYZ103QsZWN1fLeU2IZu1he63BdL9ypnCRpD419.png]

这里,瞬态存储开始发挥“关键作用”。攻击者通过控制UniswapV3池子的地址,为后续的权限绕过埋下了伏笔。

Keyless CREATE2 Factory:恶意合约的“完美伪装”

为了进一步迷惑Vault合约,攻击者利用Keyless CREATE2 Factory合约的safeCreate2函数来创建一个恶意的合约,其合约地址0x00000000001271551295307acc16ba1e7e0d4281,与第二次瞬态存储的值相同。

![/uploads/images/20250401/QcFvKkH1Q2TOO3wUaSuTXWwDCTz7lTINpcJjxBAt.png]

这个恶意合约,就像一个“完美伪装”的间谍,可以绕过Vault合约的身份验证,执行恶意操作。

uniswapV3SwapCallback 函数:漏洞利用的核心战场

攻击的核心,在于对uniswapV3SwapCallback函数的利用。当UniswapV3池子进行兑换操作时,会回调Vault合约的uniswapV3SwapCallback函数。

![/uploads/images/20250401/6bbru47Md9vI0YGQyEFM3IY7TWip27yk7Am1gHyb.png]

![/uploads/images/20250401/EyVcJ33O2S36vL2k02NqEWXHeb7c8tLGvTt4G4uc.png]

该函数首先会用tload从先前瞬态存储的指定键1对应的内存中取出值,来验证调用者是否是UniswapV3池子。由于瞬态存储中的值在mint函数调用后并没有进行清空,而是被攻击者控制,恶意合约得以成功冒充UniswapV3池子。

最终收割:从 WBTC、WETH 到 USDC 的“胜利大逃亡”

通过精心构造的参数和瞬态存储的利用,攻击者成功地绕过了Vault合约的权限验证,最终通过攻击合约(A代币)去调用Vault合约的uniswapV3SwapCallback函数,将Vault合约中的其他代币(WBTC、WETH)转出获利。

![/uploads/images/20250401/R5BePU5GlLCc7nICPdoIjnG5dXbaWBUYN2vxtEfD.png]

然后,攻击者又将部分资产兑换为USDC,完成了最终的“胜利大逃亡”。

整个攻击过程,环环相扣,步步为营,展现了攻击者高超的技术水平和周密的计划。而瞬态存储的滥用,无疑是这场攻击的关键所在。

MistTrack追踪:30万美元的“黑钱”流向何方?

洗钱路径分析:Railgun 的“隐身术”

攻击得手后,如何将赃款安全地转移出去,避免被追踪,是每个黑客必须面对的问题。这次SIR.trading的攻击者,选择了Railgun作为洗钱的工具。

据MistTrack 的分析,攻击者 (0x27defcfa6498f957918f407ed8a58eba2884768c) 盗取了约 30 万美元的资产,包括 17,814.8626 USDC, 1.4085 WBTC 和 119.871 WETH。

![/uploads/images/20250401/dYUS2J1vCWrrthoUGDDxZkEbXO1UcMiMROMYh8Tb.png]

其中WBTC被兑换为63.5596 WETH,USDC被兑换为9.7122 WETH:

![/uploads/images/20250401/N1L6rRNVvzRNomtvuWmlItx3cT9nUt74NmoDXwBy.png]

![/uploads/images/20250401/EnOiTLJqnFFhc9eD2FcY3QlULnyFfb5fh3pJntzY.png]

接着,共193.1428 WETH 被转入 Railgun:

![/uploads/images/20250401/ZVIVJTAj31DDbVrpRqekNk2zNvh23413OsJ7MbAa.png]

Railgun是一种隐私协议,旨在保护用户的交易隐私。通过Railgun,攻击者可以将赃款与其他用户的交易混淆在一起,从而掩盖资金的来源和去向。

当然,Railgun并非绝对安全。MistTrack等链上分析工具,仍然可以通过一定的技术手段,追踪到部分资金的流向。但不可否认的是,Railgun确实增加了追踪的难度,为黑客的洗钱行为提供了便利。

初始资金溯源:Railgun 的“慷慨馈赠”

更令人玩味的是,攻击者的初始资金,也来自于Railgun转入的0.3 ETH:

![/uploads/images/20250401/89qhJVznZb5gnncKU2rAwGgxfVTDLr7aBFu0VT4Q.png]

这说明,攻击者很可能早就准备好了充足的“弹药”,并利用Railgun作为资金的“中转站”,为攻击做好了充分的准备。

这再次提醒我们,DeFi安全不仅仅是合约安全,还包括链上资金的安全。黑客可以利用各种隐私协议,掩盖资金的来源和去向,从而逃避追踪。对于项目方和监管机构来说,如何有效地监管这些隐私协议,是一个亟待解决的问题。

安全建议:亡羊补牢,为时未晚?

瞬态存储的“及时清理”:真的能解决问题吗?

慢雾安全团队在报告中建议,项目方应该根据相应的业务逻辑在函数调用结束后立即使用tstore(key, 0)将瞬态存储中的值进行清除。

这看似是一个简单有效的解决方案,但仔细思考,却发现存在不少问题。

首先,这种“及时清理”的方式,需要开发者对合约逻辑有深刻的理解,并时刻保持警惕,避免遗漏任何需要清理的瞬态存储。在复杂的合约中,这无疑是一项艰巨的任务,稍有疏忽,就可能导致漏洞的出现。

其次,即使开发者能够做到“及时清理”,也无法完全杜绝攻击的风险。黑客仍然可以通过其他方式,利用瞬态存储的特性进行攻击,例如,通过精心构造交易的顺序,或者利用其他合约的漏洞,来篡改瞬态存储中的值。

因此,仅仅依赖“及时清理”的方式来保证安全,是远远不够的。更重要的是,开发者需要从根本上改变安全观念,将安全放在首位,而不是仅仅将其视为一种事后的补救措施。

代码审计与安全测试:谁来为安全负责?

慢雾安全团队还建议,应当对项目的合约代码加强审计与安全测试,从而避免类似情况的发生。

这无疑是一个正确的建议,但问题在于,谁来为安全负责?

目前,DeFi领域的安全审计市场鱼龙混杂,一些审计机构缺乏足够的专业知识和经验,难以发现潜在的漏洞。即使项目方进行了审计,也难以保证合约的绝对安全。

此外,安全测试也存在类似的问题。传统的安全测试方法,往往难以覆盖智能合约的复杂逻辑,难以发现潜在的漏洞。更重要的是,安全测试需要持续进行,而不是仅仅在项目上线前进行一次。

因此,要真正加强DeFi项目的安全,需要建立一套完善的安全体系,包括专业的审计机构、严格的安全测试流程和持续的安全监控。更重要的是,需要提高整个行业的安全意识,让每个参与者都意识到安全的重要性,并为此承担责任。

发表评论:

最近发表