一文详解:什么是闪电贷,为何DeFi频遭闪电贷攻击

 2023-09-09 21:33:52发布 2023-09-09 21:34:01更新

闪电贷是去中心化金融(DeFi)中一种无担保贷款。在同一个区块内完成借款、还款的一种贷款。因为借款和还款都在同一个区块内完成,都记录在同一个区块内,所以时间极短,称为闪电贷。

什么是闪电贷

闪电贷(Flash Loan)概念最早由Marble协议于2018年提出。Marble自诩“智能合约银行”,其产品是很简单、但很具智慧的DeFi创新——通过智能化合约完成的零风险贷款。

我们大多数人都熟悉传统贷款,贷方将钱贷给借款人,然后在固定的时间段内以固定的溢价或除本金之外的利息偿还。闪电贷具有相同的基本原理,但包括几个独特的特征:

无抵押贷款

这意味着借款人不需要用任何资产或存款来获得贷款。此外,与传统的无抵押贷款不同,没有信用检查流程。

所有闪电贷都是通过区块链上的智能合约完成的

并且规定如果借款人没有在单个区块链交易中归还资金,则贷款过程将被逆转,就好像它从未发生过一样。这个关键的区别就是为什么借款人能够在没有任何抵押品或信用检查的情况下获得快速贷款,因为它消除了贷方的任何风险。

贷款过程是即时的

一旦贷款延期,借款人必须调用其他智能合约来利用闪电贷尝试执行几乎即时的交易,然后在单块交易结束前将资金返还,通常在几秒钟内。

鉴于贷方的资本风险为零,借款人没有抵押或信用检查义务,因此闪电贷在整个DeFi中增长如此迅速也就不足为奇了。

闪电贷的运作方式

如果通过闪电贷获得资金(例如:通过Aave协议),则可在去中心化交易平台运用这种套利机会。整个过程大概会是这样的:

-获得1万美元贷款

-使用贷款在平台A购买代币

-在平台B转售代币

-偿还贷款(包括利息)

-将收益收入囊中

一切均在同一笔交易中完成。实际上,由于存在交易费用,外加竞争激烈、利率较高和滑动价差等因素,套利带来的利润很小。

此时,必须找到一种消除价差的方式,保证交易可以创造收益。

闪电贷的使用示例

闪电贷最常见的使用有3种。

套利

闪电贷可以放大成功套利的利润。

想象一下,Uniswap和Curve之间的DAI/USDC池存在价格差异。你可以在Curve上用1个DAI换取1个USDC,但在Uniswap上你只需要0.99个DAI就可以买到1个USDC。现在你可以尝试执行以下套利:

1.通过闪电贷向Aave借100,000DAI。

2.在Uniswap上将100,000DAI换成USDC,收到101,010USDC。

3.在Curve上将101,010USDC换成101,010DAI

4.偿还初始100,000DAI+0.09%的费用=100,090美元

5.利润920DAI

这一操作看起来很好,但我们必须考虑到以下几个因素:

网络费用:多步骤的套利交易可能成本不菲,在计算利润时,一定要将交易费用考虑在内。

价格滑点:一定要计算你在执行订单时将会遇到多少价格滑点(提示:这取决于交易额的大小和流动性池的流动性)。

抢先交易(Front running):很有可能别人会发现同样的机会,并且会设法抢先你一步行动。最重要的是,监控mempool的机器人可以发现你的盈利套利机会,并以更高的gas费发送相同的交易把你的盈利机会“偷走”。

更换抵押品

假设你用ETH作为抵押品从Compound借了DAI。你可以通过以下方式将抵押品从ETH换成例如BAT:

1.发起一笔闪电贷借出DAI

2.用借来的DAI偿还Compound中的贷款

3.提取你的ETH

4.在Uniswap上将你的ETH换成BAT

5.提供BAT作为Compound的抵押品

6.以你的BAT抵押品借出DAI

7.用借来的DAI+费用偿还步骤1的闪电贷

通过这样操作,额外付出借款金额的0.09%就能成功把你的抵押品从ETH换成了BAT。

自我清算

假设你在Compound上有一笔以ETH作为抵押借出DAI的贷款。ETH价格不断下跌,已经接近清算水平。你也没有或不想存入更多的ETH来降低你的清算水平,你也没有偿还贷款所需的DAI。

现在,与其让MakerDAO合约清算你的抵押品并向你收取清算费,不如采取以下步骤:

1.发起闪电贷,借出一笔DAI,金额是你在Compound上的欠债

2.偿还Compound上的DAI贷款,提取ETH

3.将足够的ETH换成DAI,以偿还步骤1的闪电贷+费用

4.拿住你剩下的ETH

迁移资产或债务

比如你在A平台上面有抵押ETH借出BNB,这时你感觉A平台有一些风险,所以想把整个借代迁移到B平台上,但是BNB不太方便直接拿过来归还,。

种情况下,可以在AAVE用闪电贷借一笔DAI,把DAI换成BNB,在A平台归还之后取出ETH,然后将ETH抵押到B平台借出相同数量的BNB,然后将BNB换成DAI归还闪电贷,在不挪动原来借出来的BNB的基础上完成了不同平台资产和债务的转移。

什么是闪电贷攻击

原则上,闪电贷允许用户随心所欲地借贷,而无需任何抵押。因此,借款人可以将价值数千美元甚至数十万美元的以太币作为贷款,而无需任何抵押品或KYC流程。

这导致了闪电贷攻击的兴起,其中恶意代理人拿出大笔闪电贷,然后利用这些资金来操纵市场并利用各种DeFi协议以获取可观的利润,通常以牺牲普通投资者和平台为代价用户。

这些攻击者通过一系列易受攻击的链上协议将借入的闪电贷款金额串连起来,以在偿还贷款之前获取数十万美元的被盗资产。

首次闪电贷攻击

第一次闪电贷攻击发生在 2020 年,借款人使用 DeFi 借贷协议dYdX获得了ETH闪电贷。然后,他们将贷款分成两部分,并将其发送到贷款平台Compound和 Fulcrum。

首先,借款方在dYdX(一款借贷DApp)中申请以太币闪电贷。然后,他们将这笔贷款分成了几部分,分别转入另外两家借贷平台:Compound和Fulcrum。

在Fulcrum(构建于bZx协议)中,攻击者利用一部分贷款来卖空以太坊,兑换包装比特币(WBTC),意味着Fulcrum现在要购入WBTC。

该信息继而传递给另一种DeFi协议——Kyber,其在Uniswap(一种基于以太坊的主流DEX)中将相应订单成交。然而,由于Uniswap的流动性较低,WBTC的价格大幅上涨,这意味着Fulcrum平台为购买的WBTC支付了更多资金。

闪电贷攻击

闪电贷攻击

与此同时,攻击者使用剩余的dYdX贷款又从Compound申请了一笔WBTC贷款。随着价格飙升,他们借贷而来的WBTC在Uniswap平台成功翻倍,收获了可观的利润。最后,他们也还清了dYdX提供的贷款并将剩余的以太币收入囊中。

这似乎是一项复杂而艰巨的工作,甚至可能难以理解。但最重要的是,攻击者利用了五种不同的DeFi协议操纵市场。难以置信的是,所有这些都发生在用来确认最初闪电贷所花费的时间之内。

现在能确定问题出在哪里吗?答案是Fulcrum使用bZx协议。通过操纵市场,攻击者可以欺骗市场,使其认为当前WBTC的价值比实际价值高很多。

第二次闪电贷攻击

仅仅几天后,bZx再次遭到袭击。攻击者又获得一笔闪电贷,然后将一部分贷款兑换为稳定币(sUSD)。你可能知道,稳定币通常与法定货币的价格挂钩。毕竟,它的名字中包含USD。

智能合约的名字听起来很智能,但实际情况却并非如此。它们不知道稳定币的价格应该是多少。因此,当攻击者(使用借入的以太币)买入大笔sUSD时,Kyber中的sUSD价格随之翻倍。

bZx认为sUSD价值2美元而非1美元。随后,攻击者拿到了高于bZx平台常规额度的以太币贷款,因为他们的1美元代币实际具备2美元的购买力。最终,攻击者成功偿还最初的闪电贷并将剩余资金尽数收入囊中。

闪电贷的风险

借贷协议闪电贷的风险备受关注。不论其合法性如何,这种攻击方式展示了攻击者的高超手法,给人留下深刻印象。攻击者利用的原理并不复杂,bZx应该使用不同的价格预言机获取数据。然而,现实情况证明,这种攻击的成本非常低廉,攻击者无需大规模投资,也没有经济上的威慑手段来阻止他们的行动。

在过去,试图操纵市场的个人或团伙必须持有大量数字货币。但随着闪电贷的出现,任何人都能在几秒钟内成为“巨鲸”。此外,正如前文所述,攻击者可以在短短几秒钟内获取数十万美元的以太币。

从积极的角度来看,其他参与者可以从以往的攻击中吸取经验教训。然而,因为这种攻击手段已经广为人知,因此不能排除其他人会成功实施类似攻击的可能性。

总结起来,闪电贷并不应对这些攻击负责。实际上,被利用的漏洞存在于其他协议中,闪电贷只是为攻击提供了资金。

为什么闪电贷会成为黑客攻击的工具

之所以会有黑客利用闪电贷来对DeFi平台进行攻击,获取利益,主要有一下两个原因:

首先,黑客攻击需要大量的前置资金。如果你在1000万美元的ETH投资获取为正的投资回报,这可能不算作是套利交易。

其次,短期贷款可以最大程度地减少攻击者的污点。如果你有一个如何以1000万美元的ETH操纵Oracle币的想法,即使个人拥有足够数量的ETH,但可能也不想用自己的资金来冒险。

如果自己的ETH可能沾染污点,交易所有可能会拒绝你的存款,洗钱难度大大增加、有风险。但如果用闪电贷贷出1000万美元,就没有太多人在意。各方都会有利益,且dYdX的抵押品池不会被认为是有问题的,dYdX的污染在某种程度上消失了。

闪电贷攻击与DeFi

目前,DEX(去中心化交易所)如Uniswap等,主要是通过自动化做市商和价格预言机来达到获取和汇报价格、汇率等功能的。

与CEX(中心化交易所不同),DEX的数据更加独立化,资产池的价格很容易因为交易量、流动性等剧烈变化,导致不同的DEX之间相同交易对的资产池产生差价,产生出套利空间。

因此,攻击者只要能够通过闪电贷借入大笔资金,再借助智能合约在交易平台操纵兑换率,最后通过不同平台间的兑换率差进行套利,便能达成“0成本”的无风险攻击。

如何防止闪电贷攻击

由于这些攻击利用去中心化交易所(DEX)相信他们自己的或单一的喂价,可以通过为货币下大笔订单来操纵这些信息,因此谨慎地利用去中心化定价预言机来确定资产的正确价格。

dApp可以通过多种方式保护自己免受闪电贷款攻击,其中一些最常见的是:

去中心化预言机

最安全的选择无疑是使用去中心化预言机,利用多个来源找出“真实价格”。一些去中心化的预言机,例如我们自己的UmbrellaNetwork,更进一步,通过将数据提交到区块链来确保数据的可靠性。

这意味着,如果不法分子试图对从去中心化预言机获取其提要的dapp进行快速攻击,价格操纵将失败,交易时间将过去,并且整个交易将逆转——未经处理。

高频定价更新

这是纸面上的一个简单修复,但在实践中可能会更昂贵。在这里,我们只是增加了流动性池向预言机查询新价格的次数的频率。逻辑是,随着更新次数的增加,池中代币的价格会更新得更快,并使价格操纵无效。

时间加权平均定价

通常的做法是使用平均值(或最近的中值)来计算流动性池中的价格。但是,TWAP建议使用跨多个区块的平均价格。

这有助于抵消闪电贷攻击,因为整个攻击交易序列需要在同一个区块内处理,但如果不操纵整个区块链就无法操纵TWAP。

防止此类攻击的另一个战略建议是在交易周期中使用两个交易块而不是一个。

推荐阅读