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 攻击流程
-
闪电贷阶段:
- 借入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数量:
1 * exchangeRate * soVELOPrice / soWETHPrice = 763,916,258,364,900,996,923 (约763 WETH) - 实际借贷265 WETH仅需:
实际使用1 wei soVELO作为抵押265,842,857,910,985,546,929 * soWETHPrice / soVELOPrice / exchangeRate = 0.348 wei
赎回计算:
- 赎回35,471,603,929,512,754,530,287,976 VELO需要:
由于截断取整,实际计算为1 wei35,471,603,929,512,754,530,287,976 * 1e18 / exchangeRate = 1.99999436 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协议中两个常见但危险的漏洞组合:参数操纵和精度问题。开发者必须对金融计算保持高度警惕,实施严格的安全措施,并通过专业审计验证合约安全性。