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

三、攻击流程详解

  1. 准备阶段:

    • 攻击者(0x417179df)通过攻击合约(0x6dd61c69)创建多个恶意市场代币合约和多个uniswapPool合约
  2. 初始攻击:

    • 调用被攻击合约(0x675d410d)的leverage函数
    • 传入恶意构造的市场代币地址作为参数
  3. 重入攻击执行:

    • leverage函数通过deposit函数到pool合约中添加USDC和恶意市场代币的流动性
    • 重入到被攻击合约的crossDeleverage函数
  4. 资金转移:

    • crossDeleverage函数使用USDC到pool合约中兑换恶意市场代币
    • 攻击合约移除pool中的流动性
    • 提出兑换而来的USDC代币获利
  5. 循环攻击:

    • 多次循环上述操作
    • 每次攻击更换被攻击用户地址和恶意市场代币地址
    • 将获得的USDC发送给攻击者(0xe4f34a72)

四、漏洞技术分析

核心漏洞

  1. 参数验证不足:

    • DebtManager合约中的leverage函数未校验传入market参数是否为可信的市场合约
    • 导致在permit函数修饰器中可将状态变量_msgSender修改为攻击者任意的传参地址
  2. 资金处理缺陷:

    • 在与pool进行兑换时,使用用户的exaUSDC余额来抵消付给pool合约的USDC数量
    • 这一机制被攻击者利用来非法获取资金

五、安全防范建议

开发规范

  1. 严格地址验证:

    • 所有外部地址传参必须进行可信性验证
    • 实现白名单机制或使用权威注册表验证合约地址
  2. 重入防护:

    • 使用Checks-Effects-Interactions模式
    • 实现重入锁机制(如OpenZeppelin的ReentrancyGuard)
  3. 权限控制:

    • 关键函数应实现完善的权限控制
    • 使用修饰器限制函数调用权限

审计与测试

  1. 第三方审计:

    • 项目上线前必须由专业安全团队进行智能合约审计
    • 特别关注外部调用和资金流动相关逻辑
  2. 全面测试:

    • 实现完整的单元测试和集成测试
    • 特别测试边界条件和异常情况
    • 进行模拟攻击测试

监控与响应

  1. 实时监控:

    • 实现异常交易监控系统
    • 设置大额资金流动警报
  2. 应急响应:

    • 准备应急预案
    • 建立快速响应机制

六、总结

本次Exactly Protocol攻击事件展示了智能合约安全中参数验证和重入防护的重要性。开发者应从中吸取教训,在合约开发中实施严格的安全措施,通过多重防护机制保障资金安全。智能合约安全需要持续的关注和改进,只有通过严格的安全实践和审计,才能有效防范此类攻击。

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攻击事件展示了智能合约安全中参数验证和重入防护的重要性。开发者应从中吸取教训,在合约开发中实施严格的安全措施,通过多重防护机制保障资金安全。智能合约安全需要持续的关注和改进,只有通过严格的安全实践和审计,才能有效防范此类攻击。