近几个月,连续发生多起安全事件与合约开发过程中的价格精度计算漏洞有关,损失金额已超千万美元,MIM_SPELL 650 万美元、RadiantCapital 450 万美元、Onyx Protocol 210 万美元等,均是因为计算时精度出现了问题导致关键变量计算错误从而被攻击。
SharkTeam 将这类安全事件进行了总结,并给出行之有效的安全建议,希望后续协议可以引以为戒,保护用户加密资产安全。
1. MIM_SPELL 攻击事件
发生时间:2024 年 1 月 30 日,
损失金额:约 650 万美元,
漏洞原因:合约存在两个借贷变量 elastic 和 base,在进行两者的精度计算时,都采用了向上取整的方式。这样操作会使本身计算结果应为 0 的参数最后计算得到为 1,使两个参数之间的比例失衡,最终能够超额借出 MIM 代币。
详细分析:https://bit.ly/3ScR7TK
2. RadiantCapital 攻击事件
发生时间:2024 年 1 月 2 日,
损失金额:约 450 万美元,
漏洞原因:黑客利用了合约中对于新市场尚未进行初始化的漏洞,流动性指数并未初始化,使得黑客可以通过闪电贷函数来操纵其大小,当指数变大后,黑客利用 rayDiv 函数中的四舍五入精度问题,由于指数变大,通过四舍五入造成的精度损失上限同样变大,黑客重复进行存取操作获利。
3. Onyx Protocol 攻击事件
发生时间:2023 年 11 月 11 日,
损失金额:约 210 万美元,
漏洞原因:与 RadiantCapital 攻击事件类似,也利用了新市场尚未初始化流动性的漏洞,并且在 divUint 函数中存在四舍五入的漏洞造成精度损失。
详细分析:https://bit.ly/47cKeI6
4. WiseLending 攻击事件
发生时间:2024 年 1 月 12 日,
损失金额:约 46.5 万美元,
漏洞原因:合约在计算借贷份额时使用向上取整,攻击者利用这一点进行重复的存取操作来提高份额价格,份额价格提升后用自己的份额借走了大量的 ETH。
5. HopeLend 攻击事件
发生时间:2023 年 10 月 18 日,
损失金额:约 85 万美元
漏洞原因:黑客最初利用目标资产对应的池中的流动性失衡,操纵与目标资产关联的 hToken 的流动性指数,扭曲其价值。随后,黑客利用极少量 hToken 的抵押品,借入了所有其他标的资产。此后,黑客同样利用合约分割操作中的 rayDiv 函数中存在的四舍五入漏洞,反复存入和提现,耗尽了在 Hopelend 攻击中投入的标的资产。
漏洞总结与安全建议
精度问题大体是分为两类:
1.一类是错误的向上取整,可能导致本应为 0 的参数取到了 1,使后续计算出现严重漏洞;
2.第二类是四舍五入问题,其中尤为严重的是错误使用了 rayDiv 函数的项目。
安全建议:
1.针对第一类来说,如果项目逻辑需要向上取整操作,在取整变量为 1 或 0 等条件下进行多次多样的重复测试,
2.针对第二类可以采用先乘后除统一精度的方式,譬如使用 10**18 为后缀作为小数点后的数值。
3.无论是哪一种情况,对计算逻辑进行全方面测试,尽可能地考虑到每一种情况,尤其是在不同计算结果有不同的处理逻辑的时候,更需要慎重测试。理论上的逻辑设计与实际的代码实现相结合,全方位无死角的对合约函数进行测试。若测试用例可以覆盖各种变化情况,必然可以避免因为精度计算带来的安全性问题。
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
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。