Cointime

扫码下载App
iOS & Android

去中心化借贷平台HopeLend遭受借贷攻击事件分析

项目方

北京时间2023年10月18日19:48:59,Hope.money的借贷池受到了基于闪电贷实施的攻击。

Hope.money构建了包括HopeLend借贷平台、HopeSwap去中心化交易所、稳定币$HOPE、治理代币$LT,为用户提供去中心化金融全栈服务。

本次攻击涉及的协议是HopeLend,是一个去中心化借贷平台,用户可以为协议提供流动性或者超额抵押借贷赚取收益。

事件始末

在HopeLend的代码实现中,借贷池存在可被利用的漏洞,由于在销毁存款凭证时,出现了错误的整数除法问题,导致小数点部分被截断,实现了销毁比预期少的凭证数量,获得和预期一致的价值代币。

攻击者利用这个缺陷掏空了Hope.money上存在资金的多种借贷池。

其中hEthWbtc借贷池于73天前部署,但是其中没有资金,因此黑客通过往该借贷池注入大量资金来达到让贴现率戏剧性地暴涨,从而实现了在一个区块交易内快速掏空了所有其他借贷池子的资金。

更戏剧性的是,实现利用的黑客没有获得漏洞利用的资金,他的攻击交易被抢跑者发现,抢跑者模仿其攻击行为并成功抢走了所有攻击收益资金(527 ETH),最终有50%的攻击收益资金(263 ETH)被抢跑者用于贿赂打包区块的矿工(payload)。

发现漏洞的初始黑客,在区块18377039创建了攻击合约,并在区块18377042进行了攻击合约的调用,此时抢跑者监控到内存池里的交易,并将其攻击合约进行模拟,作为抢跑合约的输入,在同样的18377042区块进行利用,而初始黑客在18377042区块的交易由于排序在抢跑者后面,从而执行失败了。

资金去向

抢跑者在获得收益后的一小时,将资金转移到:0x9a9122Ef3C4B33cAe7902EDFCD5F5a486792Bc3A

在10月20日13:30:23,疑似官方团队联系了该地址,允许抢跑者留下26ETH(10%的获利)作为奖励,并得到抢跑者的答复。

最终资金在沟通一个小时后,转移到GnosisSafe的多签金库中。

下面我们将展示真实的漏洞和黑客进行利用的细节。

前置信息

*HopeLend的借贷协议实现Fork自Aave,因此涉及到漏洞相关的核心业务逻辑参考自Aave的白皮书。

0x00存款和借贷

Aave是一个纯粹的DeFi,借贷业务通过流动性池实现,用户在Aave存款提供流动性时,期望获得借贷所获得的收益。

贷款收益并不会完全分配给用户,有少部分利息收入会被计入风险储备金,此部分比例较少,大部分贷款收益会分发给提供流动性的用户。

在Aave中进行存款放贷时,Aave是通过贴现的方式,将不同时间点的存款数量转化成流动性池初始时间点的存款数量份额,因此每数量份额的底层资产对应的本息和,就可以直接用amount(份额) * index(贴现率)算出来,大大方便了计算和理解。

可以理解为类似购买基金的过程,基金的初始净值是1,用户投入100块钱获得100的份额,假设经过一段时间获得收益,净值变成1.03,此时用户再次投入100块钱,获得的份额是97,用户的总份额是197。

这其实是将该资产按照index(净值)进行贴现处理。之所以这么处理,是因为用户实际的本息和是用balance去乘以当前的index。当第二次存款的时候,用户正确的本息和应该是 100 * 1.03 + 100 = 203,如果不做贴现处理,第二次用户存入100后的本息和就变成了(100+100) * 1.03 = 206,是错误的,如果进行了贴现,本息和就变成了(100 + 100 / 1.03) * 1.03 = 103 + 100 = 203,203的结果是正确的。

攻击过程

0x25126......403907(hETHWBTC pool)

0x5a63e......844e74(攻击合约-套现)

攻击者:

1. 借出初始闪电贷资金,进行质押

攻击者首先从Aave闪电贷借入2300WBTC,将其中2000枚WBTC质押(deposit)到HopeLend,资金将会被转移至HopeLend的hEthWbtc合约( 0x251…907),同时获取相应的2000枚hETHWBTC。

2. 借助空借贷池操纵初始贴现率(liquidityIndex)

从HopeLend进行闪电贷借入2000枚WBTC。

目前的价值是1 hETHWBTC = 1 WBTC。

按照正常的存取ETHWBTC换回WBTC的操作,是不会影响兑换比例(只有当收入了利息才会影响兑换比例,1 hETHWBTC会获得更多WBTC)。

此时黑客开始通过一系列复杂操作,操纵贴现率:

• 黑客直接又将得到的2000枚WBTC通过直接转账(transfer)的方式转移资金至HopeLend的hEthWbtc合约( 0x251…907),这一步并不是还贷。

• 黑客随后取出(withdraw)之前步骤1中质押(deposit)的绝大部分WBTC(1999.999…),所以上一步才需要转回WBTC以补充池子内的资产。

• 最后黑客手上仅保留最小单位(1e-8)的hEthWbtc,这里不能完全提完,是因为需要留下一点点,作为计算贴现率(liquidityIndex)时,会基于现有的加上新增的,如果清零的话,导致贴现率(liquidityIndex)变成0,就不能让池子里的比例失衡。

• 把上一步销毁掉绝大部分hEthWbtc换回来的wBTC,加上之前闪电贷剩余的wBTC,归还向HopeLend池子借出的闪电贷,共支付2001.8枚WBTC(其中包含利息1.8枚wBTC)。

• 上面的过程销毁掉大部分的hEthWbtc,只留下1最小单位(1e-8)的hEthWbtc在黑客账户,这样一来hETHWBTC总量就减少了,而借贷池里却有2001.8枚wBTC,此时的贴现率(liquidityIndex)达到惊人的126,000,000。

这里涉及到一个知识,存款用户的利息根本上来自池中流动性的增长,借贷池会根据存款率和使用率,动态调节借款和存款利率。

此处,当池子从闪电贷利息(1.8WBTC)获得额外流动性时,百分之七十(126,000,000)被计入liquidityIndex(liquidityIndex),这个数值用来计算每单位存款(hEthWbt)的贴现价值。

由于池子在黑客操作前为空,还款后totalLiquidity仅为1,amount是126000000,初始liquidityIndex为1,得出结果为126000001。

3. 继续放大贴现率

黑客继续从HopeLend进行闪电贷借入2000枚WBTC,并每次归还额外的1.8枚WBTC,使得每次LiquidityIndex得以累加126,000,000。

黑客重复执行了60次该过程,最终liquidityIndex达到7,560,000,001,攻击者持有的1个最小单位的hEthWBTC贴现价值可达75.6WBTC(约为214万美元)。

这也就使得黑客操控了hEthWBTC,使之价值失真。

4. 掏空其他存在资金的借贷池,形成收益

攻击者接着将1个最小单位的hEthWBTC为抵押,从HopeLend的其他五个代币池借出了大量资产。

包括:

  • 175.4 - WETH
  • 145,522.220985 - USDT
  • 123,406.134999 - USDC
  • 844,282.284002229528476039 - HOPE
  • 220,617.821736563540747967 - stHOPE

这些代币被作为收益通过Uniswap兑换为WBTC和WETH,扣除各种费用后,最终黑客获利为约263枚WETH(除去贿赂payload的263.9枚WETH)。

为什么黑客可以从其他池子借走大量资金:

借款或取走存款时,借贷合约会检验用户的抵押资产状况,确保借出不超过抵押。

由于之前贴现率已被黑客操纵且贴现率会以normalizedIncome乘数计入抵押价值计算,其手中的一单位hEthWBTC抵押价值高达75.6WBTC。

每一次从其他池借款,黑客都轻松通过了抵押资产校验。

此时, 攻击者总共在HopeLend投入了2000+1.8*60枚WBTC用于操纵liquidityIndex,只留存了1单位的hEtthWBTC。

5. 利用关键漏洞点(整数除法错误)套现  

为了取出之前的投入wBTC,攻击者部署了另一个攻击合约:0x5a63e......844e74,并调用其中的withdrawAllBtc()方法

漏洞过程如下:

① 首先存入151.20000002枚wBTC,根据当前的liquidityIndex(1 最小单位hEthWBTC=75.6wBTC),攻击者获得2个最小单位的hEthWBTC。

② 取出(withdraw)113.4个wBTC,反算出其对应的hEthWBTC份额,对hEthWBTC进行burn操作。

③ 113.4个wBTC需要销毁1.9999999998最小单位的的hEthWBTC,但是由于div函数精度问题,仅一个最小单位的hEthWBTC被销毁,因此变成可被利用的漏洞,黑客仍可保留1个最小单位的hEthWBTC。

关键漏洞

hEthWBTC的burn方法调用了高精度除法rayDiv。

此处:

a=11340000000(打算取出的WBTC)

b=7560000001000000000000000009655610336(贴现率)

虽然(a*1e27+b/2)/b = 1.9999999998,solidity自带的div方法截断返回1, 相当于11340000000 / 7560000001除法后小数位被截断了。

0x5a63(攻击合约-套现)继续存入75.60000001WBTC恰好又获得1个最小单位hEthWBTC,从而继续持有2个最小单位hEthWBTC。

如此循环取出113.40000000wBTC,存入75.60000001wBTC的操作,每次攻击者可以凭空获取37.8枚wBTC。

循环58次后,攻击者取出了所有前期投入的wBTC ,并顺利归还Aave的闪电贷。

结论

由于hEthWBTC借贷池未被初始化,攻击者得以轻易操纵liquidityIndex,将其增至极大,提现率作为除数极大放大后,由于整数除法的截断误差,使得取出之前的投入更容易在一个区块内实现。

在运转良好的借贷池中,由于池中已有流动性,不容易因为少量的贷款利息增加而极大增加贴现率。

评论

所有评论

推荐阅读

  • 香港正计划让证券及期货事务监察委员会与香港海关共同监管虚拟资产OTC交易

    9月12日消息,香港目前正在探索是否让证券及期货事务监察委员会(SFC)与香港海关(C&ED)一起参与监管虚拟资产场外交易(OTC)服务。据知情人士透露,香港证券交易委员会已就可能为加密货币场外交易服务实施新的许可制度征求业内人士的意见,这将使证券监管机构与C&ED合作监督这些公司,因为讨论是私下的。 根据2月份公开的一项提案,计划中的OTC法规和许可以前是C&ED的唯一领域。场外交易服务促进了双方之间的直接和私人大批量加密货币交易。 知情人士表示,近几个月来,香港证监会还就为加密货币托管服务引入新的许可制度咨询了公司。他们说,关于这两种许可证的讨论仍处于早期阶段,可能会发生变化。

  • 美国现货比特币ETF昨日净流出4397万美元

    据Trader T监测,美国现货比特币ETF昨日净流出4397万美元。

  • Flow Traders标记地址约17小时前向富达以太坊ETF转移3000枚ETH

    9月12日消息,据Arkham监测,Flow Traders标记地址于大约17小时前向富达以太坊交易所交易基金FETH地址转移3000枚ETH,价值约合700万美元,随后这笔资金被转移至富达托管冷钱包地址(Fidelity Custody:Cold Wallet)。

  • 新加密风险基金Reforge计划筹集8000万美元

    据彭博社报道,Alexander Lin和CarlHua创立新风险基金Reforge,计划筹集8000万美元,目前已筹得2500万。通过Reforge,Lin希望寻找能让创始人和开发者更容易接受区块链的技术。其表示:“我们认为,目前第一层区块链的格局无法满足最优秀的消费者创始人的需求。” 此外,Reforge风投基金联合创始人Alexander Lin认为,资本分配者推动快速推出代币以获取回报是主要原因。其还批评了加密与人工智能跨界初创企业中的投资过热现象,并质疑去中心化计算网络满足AI工具电力需求的可行性。 据悉,Lin和CarlHua都曾在Shima Capital担任高级职务,直到今年1月才离开,成立Reforge。

  • 美国国会首次就DeFi举行听证会,各党议员意见不一

    9月11日消息,美国国会首次就去中心化金融(DeFi)举行听证会,共和党和民主党议员在此问题上表现出明显分歧。该听证会由众议院金融服务委员会主办,主题为“解码 DeFi:解析去中心化金融的未来”,旨在探讨代币化等新兴话题以及区块链在金融领域的应用。 民主党议员 Brad Sherman 持强烈批评态度,称 DeFi 主要用于犯罪、逃避制裁和逃税。民主党代表 Maxine Waters 提到了 Laura 和 Tiffany Trump 的 X 账户被黑客入侵,用于推广与特朗普家族 DeFi 项目“World Liberty Financial”相关的诈骗代币的事件。她质疑 SEC 和 CFTC 等监管机构是否有能力应对 DeFi 平台和“声称去中心化以逃避监管的实体的大规模不合规行为”。相比之下,DeFi Education Fund 首席法务官 Amanda Tuminelli 强调了 DeFi 的开放性和包容性。 此次长达两个半小时的听证会凸显了美国立法者在 DeFi 技术问题上的严重分歧,也反映了监管机构面临的挑战。加密律师 Jake Chervinsky 在社交媒体上评论道:“几年前,DeFi 只有十个项目,没人认为会有什么成就。现在它在华盛顿的权力殿堂上得到充分展示。”(Cointelegraph)

  • 今日恐慌与贪婪指数升至37,等级仍为害怕

    今日恐慌与贪婪指数为37,等级仍为害怕。注:恐慌指数阈值为0-100,包含指标:波动性(25%)+市场交易量(25%)+社交媒体热度(15%)+市场调查(15%)+比特币在整个市场中的比例(10%)+谷歌热词分析(10%)。

  • 北京警方破获一起利用虚拟币转移资金的地下钱庄案件,涉案金额8亿余元

    据法制日报报道,近日,北京警方在侦办一起职务侵占案件过程中,发现涉案人员在短期内将大量侵占资金集中转入某外籍华人境内账户。针对该线索,北京市公安局经侦总队与东城分局协同作战,辗转全国多个省市,打掉一个通过虚拟币交易实施洗钱犯罪的地下钱庄团伙。目前,涉案4名主要犯罪嫌疑人因涉嫌非法经营罪被检察机关批准逮捕。经查证,团伙主要成员吕某多年前取得外国国籍,国外生活期间,发现通过虚拟币交易可将境内人民币转移至境外并兑换为外币。后吕某会同陈某等人,利用虚拟币交易平台,协助有转移资金意向的境内人员大肆购买虚拟币,从而将资金转移至境外,涉案金额约8亿余元。同时,警方查明该团伙曾为多起电信诈骗案件、职务侵占案等提供资金通道、转移涉案赃款。

  • 澳大利亚法院裁定 Kraken 法币保证金受《公司法》约束,加密保证金扩展不受限制

    9月10日消息,澳大利亚联邦法院裁定,Kraken的法币保证金扩展受《公司法》设计与分销义务(DDO)约束,而加密货币保证金扩展不受限制。 Kraken对此表示认可,并已调整保证金产品,限制散户投资者进行法币保证金交易,但加密货币保证金交易保持不变。 Kraken同时呼吁澳大利亚为加密行业制定更加清晰的法规,称当前法律环境不利于行业创新和发展。

  • CoinTime 8月11日要闻速递

    1.美联储理事鲍曼:对降息保持谨慎

  • Jupiter联创:WBTC托管的比特币不应被用于其他用途,BitGo应当澄清社区质疑

    Jupiter联合创始人meow在社交媒体发表“致 WBTC 新旧托管人的一封信”,文中表示,“几年前开始 WBTC 项目时选择了Bitgo作为合作伙伴,因为我们认为由一个完全专注于托管工作的合作伙伴来保管比特币才是最关键的。” “但最重要的是在任何情况下,WBTC背后的比特币都不应该被用于任何用途。我不打算对Bitgo做出任何评判,他们确实迄今为止一直是出色的托管商,我相信他们有着最好的意图。”
    Meow认为对于WBTC、整个defi生态系统以及bitgo/bitglobal来说至关重要的是立即澄清一些事情:
    1. 持有BTC的多重签名到底是谁的一部分?
    2.BTC会被用于任何目的吗?
    3. 这次合作对双方来说有什么好处,是对TRON采用WBTC有利吗?
    4. 跨司法管辖区到底有什么帮助?
    5. 是否有可能让一个非常受尊敬的独立方加入多重签名组,同时充当沟通者和签名者?