闪电贷(Flash Loan)是 DeFi 的一个独特创新。它允许你在没有任何抵押的情况下借入任意数量的资金,条件是借款和还款必须在同一笔交易内完成。如果交易结束时没有还清,整笔交易回滚,就像什么都没发生。

这个设计本身是中性的,它为无抵押套利和清算提供了可能性。但攻击者利用闪电贷获得了攻击 DeFi 协议所需的巨额弹药,不需要自己持有任何资金。

据 PeckShield 和 SlowMist 等安全公司的不完全统计,2023-2024 年间,闪电贷攻击造成了超过 3 亿美元的 DeFi 损失。

核心要点: 闪电贷攻击的核心不是闪电贷本身,而是 DeFi 协议的定价漏洞。攻击者用借来的巨额资金操纵预言机价格或利用 AMM 滑点,在价格偏差中套利。防范关键在于使用去中心化预言机和 TWAP(时间加权平均价格)。

闪电贷的基本机制

在传统金融中,借贷需要抵押物。你借 100 万美元,银行要求你有等值或更高价值的抵押资产。闪电贷不需要。

在以太坊上,一笔交易(transaction)是一个原子操作:要么全部成功,要么全部回滚。如果你在交易中借了 1000 万美元的 USDC,然后立即在另一个地方用它赚了 1100 万美元,还给借贷平台 1000 万 + 手续费,交易成功。你的净利是 100 万 - 手续费。

但如果你借了 1000 万美元,却没能赚到足够的钱还回去呢?整笔交易回滚。借贷平台的钱原封不动,你的手续费也退回。就像你从来没借过。

这个机制的关键是原子性。以太坊的每笔交易是一个不可分割的整体。要么所有操作都成功,要么全部撤销。

攻击者如何利用闪电贷

闪电贷攻击的基本模式:

第一步,从 Aave、dYdX 或 bZx 等支持闪电贷的协议中借入巨额资金。

第二步,利用借来的资金操纵某个 DeFi 协议的定价机制。常见手法包括操纵 AMM(自动做市商)池的价格、操纵预言机喂价、利用套利窗口。

第三步,从价格偏差中获利。

第四步,归还闪电贷借款加手续费。

第五步,剩余利润留在攻击者地址。

整个过程在一笔交易、一个区块内完成。

经典攻击模式

预言机操纵。 这是最常见的闪电贷攻击模式。很多 DeFi 协议使用单一的去中心化交易所(如 Uniswap)作为价格来源。攻击者用闪电贷借入巨额资金,在 Uniswap 上大量买入或卖出某个代币,使其价格暂时偏离正常水平。然后利用这个偏差价格在目标协议中执行有利操作。

比如,攻击者借入大量 ETH,在 Uniswap 上砸盘,使某代币的 ETH 价格暴跌。目标协议读取了这个暴跌后的价格(因为它直接用 Uniswap 池作为喂价来源),误以为代币贬值了。攻击者趁机在目标协议中以低估的价格大量买入代币。然后攻击者还原 Uniswap 池的价格,归还闪电贷,带着低价买入的代币离开。

流动性操纵。 攻击者用闪电贷向流动性池注入大量单边流动性,改变池的价格曲线,然后利用这个扭曲的价格在另一个依赖该池的协议中套利。

重入组合攻击。 攻击者利用闪电贷放大重入攻击的影响。单独的重入可能只能偷走几千美元,但配合闪电贷的巨额资金,损失可以放大数百万倍。

为什么协议容易受攻击

DeFi 协议容易被闪电贷攻击的根本原因是定价机制的脆弱性:

单一价格来源。 如果协议只从一个 DEX 池获取价格,攻击者只需操纵那一个池的价格就能欺骗协议。

即时价格(Spot Price)。 如果协议使用当前瞬时价格而非时间加权平均价格,攻击者可以在一笔交易内制造巨大的价格偏差。

缺乏闪贷保护。 一些协议没有检测或限制闪电贷发起的交易,使得攻击者可以不受阻碍地执行复杂的多步攻击。

防范方法

使用 Chainlink 等去中心化预言机。 Chainlink 从多个数据源聚合价格,攻击者无法通过操纵单一来源来欺骗预言机。

使用 TWAP(时间加权平均价格)。 Uniswap V3 的 TWAP 预言机通过计算一段时间内的平均价格来减少短期价格操纵的影响。攻击者在一笔交易内无法显著改变 TWAP。

多源价格验证。 同时从多个 DEX 和预言机获取价格,如果价格差异超过阈值则拒绝执行交易。

闪贷检测。 检查交易是否在同一区块内借入和归还大额资金,如果是则增加额外的安全检查。

合理的流动性要求。 确保协议涉及的流动性池有足够的深度,使得操纵价格需要极高的成本。

闪电贷本身不是坏事。它让 DeFi 更高效,降低了套利和清算的门槛。问题在于协议如何处理价格数据。如果协议的定价机制是脆弱的,闪电贷只是放大了这个脆弱性的后果。