SharkTeam:MIM_SPELL 被攻击事件原理分析
SharkTeam
2024-02-01 10:30
订阅此专栏
收藏此文章

2024 年 1 月 30 日,MIM_SPELL 遭受闪电贷攻击,因为精度计算漏洞,项目方损失 650 万美元。

SharkTeam 对此事件第一时间进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。

一、攻击交易分析

攻击者地址:

0x87F585809Ce79aE39A5fa0C7C96d0d159eb678C9

攻击合约:

0xe1091d17473b049cccd65c54f71677da85b77a45

0x13AF445F81B0DEcA5dCb2Be6A4C691F545c95912

0xe59b54a9e37ab69f6e9312a9b3f72539ee184e5a

被攻击合约:

0x7259e152103756e1616A77Ae982353c3751A6a90

攻击交易:

0x26a83db7e28838dd9fee6fb7314ae58dcc6aee9a20bf224c386ff5e80f7e4cf2

0xdb4616b89ad82062787a4e924d520639791302476484b9a6eca5126f79b6d877

攻击流程:

1. 攻击者(0x87F58580)通过闪电贷借取 300000 枚 MIM 代币。

2. 随后向被攻击合约(0x7259e1520)发送了 240000 枚的 MIM 代币,用于下一步偿还用户的借款。

3. 攻击者(0x87F58580)随后调用 repayForAll 函数偿还其他用户的借款,后续又依次调用 repay 函数偿还其他用户借款,目的是将 elastic 变量减小为 0.

4. elastic 变量减小为 0 后,攻击者(0x87F58580)创建新的攻击合约(0xe59b54a9)并不断的进行 borrow 和 repay 函数的调用,直到将 elastic =0,base = 120080183810681886665215049728 时结束。

5. 随后攻击者(0x87F58580)调用 borrow 函数和 DegenBox 合约的 withdraw 函数借出了 5000047 枚 MIM 代币。

6. 攻击者(0x87F58580)归还闪电贷函数,并将 4400000 枚 MIM 代币兑换为 1807 枚 ETH,本交易获利约 450W。

二、漏洞分析

攻击的本质是在进行借贷变量计算时精度出现了问题,使得关键变量 elastic 和 base 值被操纵后比例失衡,导致计算抵押物和借贷数量时出现问题,最终超额借出 MIM 代币。

被攻击合约(0x7259e1520)中 borrow 函数和 repay 函数在对 elastic 和 base 两个变量进行计算时,都采用了向上取整的方式。

攻击者(0x87F58580)首先通过偿还其他用户借款的方式,将 elastic 变量和 base 变量分别设置为了 0 和 97。

随后不断的调用 borrow 函数和 repay 函数并且参数 amount 都为 1,在第一次调用 borrow 函数时,由于 elastic=0,会执行上述 if 逻辑并回到 add 函数中。这样会导致 elastic = 1,base = 98。

攻击者(0x87F58580)再调用 borrow 函数并传入 1,由于 elastic=1,会执行 else 逻辑,计算出的返回值为 98,这样在回到 add 函数中时,elastic=2,base 变量为 196.

但此时攻击者(0x87F58580)调用 repay 函数并传入 1,由于 elastic=2,会执行 else 逻辑,计算出的 elastic 变量本来为 1*2/98 =0,但由于下面存在向上取整的步骤,导致计算出的返回值 1,这样在回到 sub 函数中时,elastic 变量又变回 1,而 base 变量为 195。

可以看到在经历一次 borrow-repay 循环后,elastic 变量不变而 base 变量近乎翻倍,利用这一漏洞,黑客频繁进行 borrow-repay 函数循环,最后再调用一次 repay,最终使得 elastic=0 base = 120080183810681886665215049728。

当 elastic 和 Base 变量之间的比例严重失衡后,攻击者(0x87F58580)添加了一点抵押物后即可通过 solvent 修饰符中的限制条件,从而借出大量 MIM 代币。

三、安全建议

针对本次攻击事件,我们在开发过程中应遵循以下注意事项:

1. 开发精度计算相关逻辑时,慎重考虑精度和取整情况。

2. 项目上线前,需要通过专业的第三方审计团队进行智能合约审计。

About Us

SharkTeam 的愿景是保护 Web3 世界的安全。团队由来自世界各地的经验丰富的安全专业人士和高级研究人员组成,精通区块链和智能合约底层理论。提供包括链上大数据分析、链上风险预警、KYT/AML、智能合约审计、加密资产追讨等服务,并打造了链上智能风险识别平台 ChainAegis,平台支持无限层级的深度图分析,能有效对抗 Web3 世界的高级持续性威胁 (Advanced Persistent Threat,APT)。已与 Web3 生态各领域的关键参与者,如 Polkadot、Moonbeam、polygon、Sui、OKX、imToken、Collab.Land 等建立长期合作关系。

官网:https://www.sharkteam.org

Twitter:https://twitter.com/sharkteamorg

Discord:https://discord.gg/jGH9xXCjDZ

Telegram:https://t.me/sharkteamorg

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

SharkTeam
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开