SharkTeam:Sonne Finance攻击事件分析
字数 1510 2025-08-19 12:41:54

Sonne Finance 攻击事件技术分析与防范指南

1. 事件概述

2024年5月15日,Sonne Finance遭受攻击,损失超过2000万美元。攻击者利用了两个关键漏洞:捐赠攻击和计算精度问题,通过精心设计的攻击流程窃取了大量资金。

2. 攻击细节分析

2.1 攻击基本信息

  • 攻击者地址: 0xae4a7cde7c99fb98b0d5fa414aa40f0300531f43
  • 攻击合约: 0x02fa2625825917e9b1f8346a465de1bbc150c5b9
  • 目标合约: 0xe3b81318b1b6776f0877c3770afddff97b9f5fe5
  • 攻击交易: 0x9312ae377d7ebdf3c7c3a86f80514878deb5df51aad38b6191d55db53e42b7f0

2.2 攻击流程

  1. 闪电贷阶段:

    • 借入35,569,150 VELO
    • 直接将VELO转账(捐赠)至soVELO合约
    • 结果: soVELO合约的totalCash增加,但totalSupply不变
  2. 攻击执行:

    • 创建新合约(0xa16388a6210545b27f669d5189648c1722300b8b)
    • 操作步骤:
      a. 转入2 soVELO
      b. 将soWETH和soVELO声明为抵押物
      c. 从soWETH借贷265,842,857,910,985,546,929 WETH
      d. 赎回35,471,603,929,512,754,530,287,976 VELO
      e. 将借贷的WETH和赎回的VELO转账给攻击合约
    • 重复此过程3次(共4次)
  3. 最终阶段:

    • 偿还闪电贷

2.3 关键计算分析

兑换率(exchangeRate)计算:

  • soWETH: 208,504,036,856,714,856,032,085,073
  • soVELO: 17,735,851,964,756,377,265,143,988,000,000,000,000,000,000

抵押借贷计算:

  • 抵押1 wei soVELO可借贷WETH数量:
    1 * exchangeRate * soVELOPrice / soWETHPrice = 763,916,258,364,900,996,923 (约763 WETH)
    
  • 实际借贷265 WETH仅需:
    265,842,857,910,985,546,929 * soWETHPrice / soVELOPrice / exchangeRate = 0.348 wei
    
    实际使用1 wei soVELO作为抵押

赎回计算:

  • 赎回35,471,603,929,512,754,530,287,976 VELO需要:
    35,471,603,929,512,754,530,287,976 * 1e18 / exchangeRate = 1.99999436 wei
    
    由于截断取整,实际计算为1 wei

3. 漏洞分析

3.1 捐赠攻击(Donation Attack)

  • 原理: 直接向合约转账代币而不铸造相应凭证,人为操纵了兑换率
  • 影响: 使攻击者可以用极少量抵押物(1 wei soVELO)借出大量资产

3.2 计算精度问题

  • 问题表现: 计算过程中采用截断取整而非四舍五入
  • 利用方式: 结合被操纵的exchangeRate,用1 wei soVELO赎回35M VELO

4. 安全建议

4.1 开发实践

  1. 逻辑完整性:

    • 确保存款、质押、状态更新等操作的完整逻辑链
    • 特别关注乘除法计算结果的取舍问题
  2. 精度处理:

    • 使用更高精度的数学库处理金融计算
    • 考虑采用四舍五入而非简单截断
  3. 防捐赠机制:

    • 实现捐赠检测和保护机制
    • 限制直接转账对关键参数的影响

4.2 审计与测试

  1. 第三方审计:

    • 项目上线前必须由专业安全公司进行智能合约审计
    • 特别关注金融计算和状态转换逻辑
  2. 全面测试:

    • 覆盖极端边界条件测试
    • 模拟各种异常和攻击场景

5. 总结

Sonne Finance攻击事件展示了DeFi协议中两个常见但危险的漏洞组合:参数操纵和精度问题。开发者必须对金融计算保持高度警惕,实施严格的安全措施,并通过专业审计验证合约安全性。

Sonne Finance 攻击事件技术分析与防范指南 1. 事件概述 2024年5月15日,Sonne Finance遭受攻击,损失超过2000万美元。攻击者利用了两个关键漏洞:捐赠攻击和计算精度问题,通过精心设计的攻击流程窃取了大量资金。 2. 攻击细节分析 2.1 攻击基本信息 攻击者地址 : 0xae4a7cde7c99fb98b0d5fa414aa40f0300531f43 攻击合约 : 0x02fa2625825917e9b1f8346a465de1bbc150c5b9 目标合约 : 0xe3b81318b1b6776f0877c3770afddff97b9f5fe5 攻击交易 : 0x9312ae377d7ebdf3c7c3a86f80514878deb5df51aad38b6191d55db53e42b7f0 2.2 攻击流程 闪电贷阶段 : 借入35,569,150 VELO 直接将VELO转账(捐赠)至soVELO合约 结果: soVELO合约的totalCash增加,但totalSupply不变 攻击执行 : 创建新合约(0xa16388a6210545b27f669d5189648c1722300b8b) 操作步骤: a. 转入2 soVELO b. 将soWETH和soVELO声明为抵押物 c. 从soWETH借贷265,842,857,910,985,546,929 WETH d. 赎回35,471,603,929,512,754,530,287,976 VELO e. 将借贷的WETH和赎回的VELO转账给攻击合约 重复此过程3次(共4次) 最终阶段 : 偿还闪电贷 2.3 关键计算分析 兑换率(exchangeRate)计算 : soWETH: 208,504,036,856,714,856,032,085,073 soVELO: 17,735,851,964,756,377,265,143,988,000,000,000,000,000,000 抵押借贷计算 : 抵押1 wei soVELO可借贷WETH数量: 实际借贷265 WETH仅需: 实际使用1 wei soVELO作为抵押 赎回计算 : 赎回35,471,603,929,512,754,530,287,976 VELO需要: 由于截断取整,实际计算为1 wei 3. 漏洞分析 3.1 捐赠攻击(Donation Attack) 原理 : 直接向合约转账代币而不铸造相应凭证,人为操纵了兑换率 影响 : 使攻击者可以用极少量抵押物(1 wei soVELO)借出大量资产 3.2 计算精度问题 问题表现 : 计算过程中采用截断取整而非四舍五入 利用方式 : 结合被操纵的exchangeRate,用1 wei soVELO赎回35M VELO 4. 安全建议 4.1 开发实践 逻辑完整性 : 确保存款、质押、状态更新等操作的完整逻辑链 特别关注乘除法计算结果的取舍问题 精度处理 : 使用更高精度的数学库处理金融计算 考虑采用四舍五入而非简单截断 防捐赠机制 : 实现捐赠检测和保护机制 限制直接转账对关键参数的影响 4.2 审计与测试 第三方审计 : 项目上线前必须由专业安全公司进行智能合约审计 特别关注金融计算和状态转换逻辑 全面测试 : 覆盖极端边界条件测试 模拟各种异常和攻击场景 5. 总结 Sonne Finance攻击事件展示了DeFi协议中两个常见但危险的漏洞组合:参数操纵和精度问题。开发者必须对金融计算保持高度警惕,实施严格的安全措施,并通过专业审计验证合约安全性。