SharkTeam:Exactly Protocol攻击事件原理分析
字数 1614 2025-08-10 16:34:39
Exactly Protocol 攻击事件技术分析与防范指南
一、事件概述
2023年8月18日,Exactly Protocol遭遇黑客攻击,攻击者获利约1204万美元。攻击者利用DebtManager合约中的漏洞,通过精心构造的恶意合约实施重入攻击。
二、攻击关键信息
攻击相关地址
- 攻击者地址:
- 0x3747dbbcb5c07786a4c59883e473a2e38f571af9
- 0x417179df13ba3ed138b0a58eaa0c3813430a20e0
- 0xe4f34a72d7c18b6f666d6ca53fbc3790bc9da042
- 攻击合约: 0x6dd61c69415c8ecab3fefd80d079435ead1a5b4d
- 被攻击合约: 0x675d410dcf6f343219aae8d1dde0bfab46f52106
关键攻击交易
- 0x3d6367de5c191204b44b8a5cf975f257472087a9aadc59b5d744ffdef33a520e
- 0x1526acfb7062090bd5fed1b3821d1691c87f6c4fb294f56b5b921f0edf0cfad6
- 0xe8999fb57684856d637504f1f0082b69a3f7b34dd4e7597bea376c9466813585
三、攻击流程详解
-
准备阶段:
- 攻击者(0x417179df)通过攻击合约(0x6dd61c69)创建多个恶意市场代币合约和多个uniswapPool合约
-
初始攻击:
- 调用被攻击合约(0x675d410d)的leverage函数
- 传入恶意构造的市场代币地址作为参数
-
重入攻击执行:
- leverage函数通过deposit函数到pool合约中添加USDC和恶意市场代币的流动性
- 重入到被攻击合约的crossDeleverage函数
-
资金转移:
- crossDeleverage函数使用USDC到pool合约中兑换恶意市场代币
- 攻击合约移除pool中的流动性
- 提出兑换而来的USDC代币获利
-
循环攻击:
- 多次循环上述操作
- 每次攻击更换被攻击用户地址和恶意市场代币地址
- 将获得的USDC发送给攻击者(0xe4f34a72)
四、漏洞技术分析
核心漏洞
-
参数验证不足:
- DebtManager合约中的leverage函数未校验传入market参数是否为可信的市场合约
- 导致在permit函数修饰器中可将状态变量_msgSender修改为攻击者任意的传参地址
-
资金处理缺陷:
- 在与pool进行兑换时,使用用户的exaUSDC余额来抵消付给pool合约的USDC数量
- 这一机制被攻击者利用来非法获取资金
五、安全防范建议
开发规范
-
严格地址验证:
- 所有外部地址传参必须进行可信性验证
- 实现白名单机制或使用权威注册表验证合约地址
-
重入防护:
- 使用Checks-Effects-Interactions模式
- 实现重入锁机制(如OpenZeppelin的ReentrancyGuard)
-
权限控制:
- 关键函数应实现完善的权限控制
- 使用修饰器限制函数调用权限
审计与测试
-
第三方审计:
- 项目上线前必须由专业安全团队进行智能合约审计
- 特别关注外部调用和资金流动相关逻辑
-
全面测试:
- 实现完整的单元测试和集成测试
- 特别测试边界条件和异常情况
- 进行模拟攻击测试
监控与响应
-
实时监控:
- 实现异常交易监控系统
- 设置大额资金流动警报
-
应急响应:
- 准备应急预案
- 建立快速响应机制
六、总结
本次Exactly Protocol攻击事件展示了智能合约安全中参数验证和重入防护的重要性。开发者应从中吸取教训,在合约开发中实施严格的安全措施,通过多重防护机制保障资金安全。智能合约安全需要持续的关注和改进,只有通过严格的安全实践和审计,才能有效防范此类攻击。