DeFi借贷协议黑客攻击不断,2023年信任该如何重塑?

avatar
CertiK
1年前
本文约3219字,阅读全文需要约5分钟
2022年,黑客共从DeFi借贷协议中盗取了多少资产?我们应该如何防范?

DeFi借贷协议黑客攻击不断,2023年信任该如何重塑?

DeFi 借贷是相对简单的借贷方式。

放款人只需将数字货币存入借贷池,即可从其存入的资产中获得利息。

而借款人可以通过在平台上提供抵押品,以换取放款人提供的借贷资产。

借贷平台利用价格预言机来确定抵押品的价值,以计算可以借入多少数额。当抵押品的价值低于一定的阈值时,清算人(Liquidator)可通过偿还债务来清算,且获取清算奖励。

本文将回顾 2022 年发生的借贷协议黑客攻击事件,并分析应该如何保护借贷协议。

Mango Market 漏洞

2022 年 10 月 11 日,Solana 上的Mango Market被攻击,造成 1.16 亿美元的损失。攻击者利用了允许项目使用低流动性 token 作为抵押品的漏洞,操纵 MNGO 的价格,并恶意借贷超出应有数额的资产。

MNGO 只在几个中心化交易所(CEX)上线,这意味着其市场流动性很低。

例如其中一个价格预言机 Switchboard 使用的是 Raydium 作为价格来源。

攻击者在订单簿中提供了 4.83 亿单位的 MNGO perps(做空),并向第一个账户提供了 500 万枚 USDC。之后攻击者向第二个账户注资,然后以每单位 0.0382 美元的价格买入 4.83 亿单位的 MNGO perps,从而提高现货价格。

攻击者通过操纵价格预言机上 MNGO 的价格(在 Mango Market 里面的市场价格),将其拉高到 0.91 美元,从而在第二个账户上获利。由于 MNGO/美元的价格为每单位 0.91 美元(在 Mango Market 里面的市场价格),第二个账户能够在 Mango Market 上借到其他 token。

攻击者还用第二个账户中的资金(原始存款+将借贷的 MNGO 资金出售所得)在 Mango Market 上借入其他 token。 

上述借款行为使第一个账户的坏账总额为 11, 306, 771.61 美元,造成了 115, 182, 674.43 美元的资产损失。

下图就是在 Radium 上的一个截图示例,可以看得出 MNGO/USDC 对的流动性很低。

DeFi借贷协议黑客攻击不断,2023年信任该如何重塑?

虽然 Mango 使用了价格预言机和 TWAP,但「专业性」很强且拥有足够资本的攻击者,足以在流动性上做一些手脚,特别是当资产只上线了少数交易所导致流动性非常低的时候。

DeFi借贷协议黑客攻击不断,2023年信任该如何重塑?

关于 Mango 漏洞的详情解析,请查看往期文章《Mango Market 遭受攻击,损失 1.16 亿美元》

Deus Finance 漏洞

2022 年 4 月 28 日,Deus Finance被恶意攻击,导致约 1570 万美元资产受到损失。攻击者操纵了 DEI token 的价格,从 DeiLenderSolidex 合约中提取了大量的 DEI,却只提供了少量的抵押品。这也是在 Deus 在 2022 年遭受的第二次攻击。

DeFi借贷协议黑客攻击不断,2023年信任该如何重塑?

上图是 DeiLenderSolidex 的合约,链上价格是一个配对池的价格,输入价格是来自 Muon 预言机的加权平均价格(VWAP)。黑客需要同时操纵链 Muon 预言机以及链上价格的输入。Muon 预言机监控了 Solidly USDC/DEI 池内的交易,以计算成交量加权平均价格(VWAP)。

在同一个池子里的一系列闪电交易(flash-swap)会输出一个被操纵的价格,并被 Muon 预言机读取。

这该漏洞的根本原因是:Muon 预言机只使用了 Solidly 作为价格来源。Swap 使用的 flashswap()没有被 Muon 正确过滤,因此导致了短期内加权平均价格的不一致。

Inverse Finance

2022 年 4 月 2 日,Inverse Finance被恶意利用,导致了价值约 1450 万美元的资产损失。该事件发生的根本原因在于其使用的第三方价格预言机价格被操纵,因此攻击者以被操纵的价格借出资产。

Inverse 使用的是 Keep 3 r 预言机,它完全依赖 DEX 的价格数据。

它依赖于一个 TWAP 预言机,该预言机来自一个交易量少的 DEX 交易对,具有 30 分钟的时间窗口,以减轻市场操纵风险。

攻击者能够绕过这一限制,在很短的时间内(小于 15 秒)提交两笔交易,以便用当前池中 token 数量来计算价格。

攻击者首先部署了一个恶意合约来操纵 SushiSwap/Curve.fi SushiSwap:INV(INV-ETH 对)中的 INV/XINV 的价格。然后他们将上面的 INV 存入并铸造了 1746( 374+ 1372)个 XINV。由于 XINV 的价格是根据 SushiSwap:INV(INV-ETH Pair)中的储备金计算的,所以 INV 的价格急剧升高,此时每个 XINV 的价值为 20926 美元( 346* 3444/57.7)。

DeFi借贷协议黑客攻击不断,2023年信任该如何重塑?

随着 XINV 价格被操纵,攻击者能够用铸造的 XINV 借出资产作为其利润。借出的资产包括 1588 ETH、 94 WBTC、 3999669 DOLA 和 39 YFI;价值约 1450 万美元的资产被盗并转移到 Tornado Cash。
我们在几个月前也对这一事件进行了深入分析,请查看往期文章《泪纷纷,被盗项目欲断魂……Inverse Finance 被盗 1450 万美元事件分析》。

Cashio

2022 年 3 月 23 日,基于 Solana 的 Cashio 稳定币 CASH 遭到“无限铸币”类型漏洞的恶意利用,导致损失了价值约 5000 万美元。该事件根本原因源于缺乏对 common.crate_collateral_tokens 和 depositor_source 的必要验证。攻击者能够注入假账户以绕过验证并铸造 CASH。

为了铸造新的 CASH,用户需要存入抵押品。铸币过程的正确性在用户将“抵押品”转移到项目中进行验证。在 crate_collateral_tokens 的验证过程中,合约检查 token 类型是否与 saber_swap.arrow 账户的类型相匹配。

DeFi借贷协议黑客攻击不断,2023年信任该如何重塑?

然而,合约并没有对 mint 字段进行验证,如下图 saber_swap.arrow 所示。攻击者可以创建一个假的 saber_swap.arrow 账户,这将进一步允许其创建一个假的 crate_collateral_tokens 账户并允许存入假的抵押品。

DeFi借贷协议黑客攻击不断,2023年信任该如何重塑?

攻击的另一个方面是缺乏对 depositor_source 的检查,这应该是为了确保被存入的 token 类型与抵押品相匹配。

DeFi借贷协议黑客攻击不断,2023年信任该如何重塑?

用户可以通过拥有一家 bank 来设置抵押品的 token 类型。

使用该 crate_mint 功能可以无限制地创建抵押 token 类型,系统并没有确认与 bank 关联的 token 与正被铸造的 token 相同。

DeFi借贷协议黑客攻击不断,2023年信任该如何重塑?

因此,攻击者能够创建一个假 bank 并存入无价值的抵押品,使其能够铸造真正的 CASH 并从协议中抽走资金,以此导致了 5200 万美元损失的黑客攻击及相应稳定币价格的崩溃。

Fei Protocol

2022 年 4 月 30 日,Fei Protocol宣布他们正在调查Rari Fuse池上的一个漏洞。

目前报告的总损失约为8000万美元。攻击者对borrow函数进行了攻击。

exitMarket函数验证存款不再作为贷款的抵押品,然后允许它被提取。然而,borrow()函数没有遵循check-effect-interaction模式,而是在更新攻击者的借款记录之前,就将ETH转移到攻击者的合约中。

DeFi借贷协议黑客攻击不断,2023年信任该如何重塑?

如上述代码所示,“doTransferOut()”是在更新借款记录之前调用的。doTransferOut()函数通过底层调用将ETH转移给接收方。当borrow函数向借款人发送贷款金额时,它还没有更新其内部状态以反映所存资产已经被用作抵押。由于攻击者的借款记录没有及时更新,攻击者对exitmarket()进行了一个重入攻击,并提取了他们的抵押品(1.5亿USDC)。

关于Fei Protocol攻击事件的详情解析,请查看往期文章《死神来了之重入攻击,Fei Protocol 漏洞导致 7935 万美元被盗事件分析

Fantasm Finance

2022 年 3 月 09 日,Fantasm Finance的抵押池被恶意攻击,导致了约 270 万美元的损失。攻击者利用了协议的 mint 函数的错误检查代码_minFtmIn 中的缺陷。

DeFi借贷协议黑客攻击不断,2023年信任该如何重塑?

错误检查代码的目的是确保用户在铸造 XFTM 时将 FTM 存入合约。根据其实现,如果只投入 FSM,则需根据 FSM 的比例来计算 XFTM 的数量,超过 FSM 比例的部分需要由 FTM 来补足。

然而,代码实际上是与 msg.value(衡量与交易一起发送的 ETH 数量)相比较,来计算接受铸造的 FTM 的最小数量。

在上图的第一个红框中,重要的_minFtmIn 参数被忽略了,甚至没有声明这个变量,而是只需要 FSM(上图第二个红框)。

当只存入 FSM 时,不需要补充 FTM 抵押品。如果 FSM 占 10% ,那么 10 u xFTM 可以用 1 u FSM 铸造。

因此,攻击者能够在只存入真实价值的一小部分时铸造 XFTM。铸造的 XFTM 随后被卖回给该项目,使攻击者能够从项目中取出资产,并购买更多的 FSM 用于后续的攻击。

如何保护借贷协议

2022 年是全球Web3.0  行业安全的「黑暗」之年。根据我们的统计结果, 2022 年针对借贷协议的攻击共造成了超过 3 亿美元的损失——这也意味着,在接下来的几年中,我们将面对更迫切和更高的安全需求。

接下来我们将讨论我们从这些攻击事件中吸取的教训,并总结关于如何预防和应对的最佳做法。

  • 增加闪电贷保护

闪电贷允许任何人在没有抵押的情况下进行大额贷款。也因此经常被黑客使用,成为了多次大规模攻击的攻击媒介。

为了避免闪电贷攻击,开发者应该尽可能地考虑限制闪电贷的使用,只允许非合约地址与合约交互。另一个防止滥用闪电贷的措施是防止关键交易在同一区块内发生。这可以有效地降低与闪电贷攻击有关的安全风险。

  • 增加可重入性保护

可重入性智能合约中一个比较常见的安全问题。例如耗尽借贷池和操纵借款记录,特别是当与其他漏洞相结合时,重入问题可能会导致十分庞大的损失。

为了保护可重入性,项目可以使用 OpenZeppelin 提供的重入性防护,并遵循 check-effect-interaction 模式。

  • 选择一个可靠的价格预言机

预言机应能够过滤掉模糊的交易并使用多个数据源。避免使用只依赖单一交易对价格的预言机,因为攻击者只需要操纵一个池子的价格就可以操纵这个预言机的价格。

  • 慎重选择抵押 token

从经济角度来看,建议限制或不提供流动性差的 token 的杠杆。使用价格高度波动的 token 作为抵押品会增加整体风险,因为当 token 价格大幅波动时,抵押品的价值也会发生很大变化。这增加了攻击项目经济模型的机会,就像 Mango Market 的情况一样。它也会影响到系统的整体状态。如果整体抵押物和借出的 token 的价值的比例太低,系统可能无法正常运行。

  • 加强对合约配置的安全意识

虽然审计智能合约可以检查出许多人为错误并确保设计实践一致性,但借贷协议中仍有一些敏感参数需要人工配置。这些参数的不正确设置会导致严重的后果,就像错误配置的预言机合约会反馈错误的数据。开发人员和项目操作人员在配置这些参数时应谨慎行事。

原创文章,作者:CertiK。转载/内容合作/寻求报道请联系 report@odaily.email;违规转载法律必究。

ODAILY提醒,请广大读者树立正确的货币观念和投资理念,理性看待区块链,切实提高风险意识;对发现的违法犯罪线索,可积极向有关部门举报反映。

推荐阅读
星球精选