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:

  1. 通过攻击合约0xf040调用flashloan函数借入1,521,678.713 USDT
  2. 通过Uniswap的2个LP合约swap函数借入25,000,000 USDT
    总计借入:26,521,678 USDT

3.2 价格操纵阶段

3.2.1 Upgrade函数循环调用(12次)

Upgrade函数功能:

  1. 将USDT转移到被攻击合约
  2. 转移10% USDT至特定地址(0xc9fc...a20e)
  3. 将60% USDT添加流动性到USDT/BH-LP合约(BH由被攻击合约支付)
  4. 将30% USDT通过USDT/BH-LP兑换成BH
  5. 将兑换的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次)

函数功能:

  1. 销毁BH:将BH从攻击合约转移到被攻击合约并销毁(数量为LP中BH余额的55%)
  2. 移除流动性:根据销毁的BH数量计算需要移除的流动性
  3. USDT转移:将获得USDT的85%转移到攻击合约
  4. 添加流动性:将获得USDT的10%重新添加流动性
  5. 兑换:将剩余5% USDT兑换成BH(进一步抬高价格)

关键点

  • 由于BH价格被抬高,移除流动性可获得更多USDT
  • 攻击者移除了超过自身添加的流动性(包含合约原有LP)

10次调用结果

  • 收到:26,358,571 USDT
  • 比闪电贷多出:1,344,981 USDT

3.4 还款与获利

  • 偿还闪电贷本金+手续费
  • 剩余利润:1,275,981 USDT转移至攻击者地址

4. 漏洞分析

4.1 主要漏洞

  1. 流动性移除无限制

    • 0x4e290832函数未检查移除的流动性数量是否超过攻击者添加的部分
    • 允许攻击者移除合约原有的流动性
  2. 价格操纵漏洞

    • 移除流动性的计算基于LP中的BH价格
    • 攻击者通过循环操作人为抬高BH价格
    • 高价时移除流动性可获得更多USDT

4.2 攻击原理

  1. 价格操纵循环

    • 通过Upgrade函数添加流动性并小额兑换,逐步抬高价格
    • 通过大规模兑换造成价格剧烈波动
  2. 套利机制

    • 低价时添加流动性
    • 人为抬高价格后移除流动性
    • 利用价格差套取额外USDT

5. 安全建议

5.1 开发注意事项

  1. 流动性管理

    • 严格记录每个地址添加的流动性数量
    • 移除流动性时不得超过该地址添加的部分
  2. 价格敏感操作

    • 对依赖LP价格的计算逻辑进行严格审计
    • 设置价格波动阈值,异常时暂停交易
  3. 函数权限控制

    • 关键函数设置访问权限
    • 限制单次交易中的循环调用次数

5.2 审计建议

  1. 第三方审计

    • 项目上线前必须通过专业安全团队审计
    • 特别关注涉及流动性操作和价格计算的函数
  2. 模拟测试

    • 在测试网模拟极端交易场景
    • 包括大额闪电贷、循环调用等情况
  3. 监控机制

    • 实时监控合约的流动性变化
    • 设置异常交易警报系统

6. 总结

本次攻击展示了闪电贷结合流动性操纵的典型模式,攻击者通过精心设计的交易流程:

  1. 利用闪电贷获取大量资金
  2. 通过循环调用操纵代币价格
  3. 利用合约漏洞移除超额流动性
  4. 套取利润后还款

防范此类攻击的关键在于:

  • 严格的流动性管理
  • 敏感操作的价格波动控制
  • 完善的权限和调用限制机制

开发者应以此为鉴,在合约设计中充分考虑各种极端情况,避免类似漏洞的出现。

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. 总结 本次攻击展示了闪电贷结合流动性操纵的典型模式,攻击者通过精心设计的交易流程: 利用闪电贷获取大量资金 通过循环调用操纵代币价格 利用合约漏洞移除超额流动性 套取利润后还款 防范此类攻击的关键在于: 严格的流动性管理 敏感操作的价格波动控制 完善的权限和调用限制机制 开发者应以此为鉴,在合约设计中充分考虑各种极端情况,避免类似漏洞的出现。