SharkTeam:BH闪电贷攻击原理分析
字数 1927 2025-08-10 09:43:36
BH代币闪电贷攻击技术分析与防范指南
1. 攻击事件概述
时间:2023年10月11日
平台:BNB Chain
损失金额:约120万美元
攻击方式:闪电贷攻击结合流动性操纵
2. 关键合约地址
- 攻击者地址:0xfdbfceea1de360364084a6f37c9cdb7aaea63464 (0xfdbf)
- 攻击合约:
- 0x216ccfd4fb3f2267677598f96ef1ff151576480c (0x216c)
- 0xf040735f8619d8615cf0ee532f58c106c4924300 (0xf040)
- 被攻击合约:0x8ca7835aa30b025b38a59309dd1479d2f452623a (0x8ca7)
3. 攻击流程详解
3.1 闪电贷借款阶段
攻击者通过两种方式借入USDT:
- 通过攻击合约0xf040调用flashloan函数借入1,521,678.713 USDT
- 通过Uniswap的2个LP合约swap函数借入25,000,000 USDT
总计借入:26,521,678 USDT
3.2 价格操纵阶段
3.2.1 Upgrade函数循环调用(12次)
Upgrade函数功能:
- 将USDT转移到被攻击合约
- 转移10% USDT至特定地址(0xc9fc...a20e)
- 将60% USDT添加流动性到USDT/BH-LP合约(BH由被攻击合约支付)
- 将30% USDT通过USDT/BH-LP兑换成BH
- 将兑换的BH转账给指定地址
初始比例:USDT:BH ≈ 1:96
12次调用后:比例基本保持不变(≈1:96)
3.2.2 0x33688938函数调用
- 添加流动性:19,487,579.804 USDT
- 转移:3,000,000 USDT
调用后比例:USDT:BH ≈ 1:57(BH价格上涨)
3.2.3 大规模兑换
通过PancakeSwap将22,000,000 USDT兑换成209,261,023 BH
兑换后比例:USDT:BH ≈ 1:1.6(BH价格暴涨)
3.3 获利阶段
3.4.1 0x4e290832函数循环调用(10次)
函数功能:
- 销毁BH:将BH从攻击合约转移到被攻击合约并销毁(数量为LP中BH余额的55%)
- 移除流动性:根据销毁的BH数量计算需要移除的流动性
- USDT转移:将获得USDT的85%转移到攻击合约
- 添加流动性:将获得USDT的10%重新添加流动性
- 兑换:将剩余5% USDT兑换成BH(进一步抬高价格)
关键点:
- 由于BH价格被抬高,移除流动性可获得更多USDT
- 攻击者移除了超过自身添加的流动性(包含合约原有LP)
10次调用结果:
- 收到:26,358,571 USDT
- 比闪电贷多出:1,344,981 USDT
3.4 还款与获利
- 偿还闪电贷本金+手续费
- 剩余利润:1,275,981 USDT转移至攻击者地址
4. 漏洞分析
4.1 主要漏洞
-
流动性移除无限制:
- 0x4e290832函数未检查移除的流动性数量是否超过攻击者添加的部分
- 允许攻击者移除合约原有的流动性
-
价格操纵漏洞:
- 移除流动性的计算基于LP中的BH价格
- 攻击者通过循环操作人为抬高BH价格
- 高价时移除流动性可获得更多USDT
4.2 攻击原理
-
价格操纵循环:
- 通过Upgrade函数添加流动性并小额兑换,逐步抬高价格
- 通过大规模兑换造成价格剧烈波动
-
套利机制:
- 低价时添加流动性
- 人为抬高价格后移除流动性
- 利用价格差套取额外USDT
5. 安全建议
5.1 开发注意事项
-
流动性管理:
- 严格记录每个地址添加的流动性数量
- 移除流动性时不得超过该地址添加的部分
-
价格敏感操作:
- 对依赖LP价格的计算逻辑进行严格审计
- 设置价格波动阈值,异常时暂停交易
-
函数权限控制:
- 关键函数设置访问权限
- 限制单次交易中的循环调用次数
5.2 审计建议
-
第三方审计:
- 项目上线前必须通过专业安全团队审计
- 特别关注涉及流动性操作和价格计算的函数
-
模拟测试:
- 在测试网模拟极端交易场景
- 包括大额闪电贷、循环调用等情况
-
监控机制:
- 实时监控合约的流动性变化
- 设置异常交易警报系统
6. 总结
本次攻击展示了闪电贷结合流动性操纵的典型模式,攻击者通过精心设计的交易流程:
- 利用闪电贷获取大量资金
- 通过循环调用操纵代币价格
- 利用合约漏洞移除超额流动性
- 套取利润后还款
防范此类攻击的关键在于:
- 严格的流动性管理
- 敏感操作的价格波动控制
- 完善的权限和调用限制机制
开发者应以此为鉴,在合约设计中充分考虑各种极端情况,避免类似漏洞的出现。