闪电贷是什么

  • 谈国鹏
  • 更新于 2020-10-27 10:14
  • 阅读 6334

通过闪电贷攻击讲解什么是闪电贷

闪电贷(Flash Loan)和昨天发生的 Harvest Finance 被黑事件密切相关。

个人声明一下,最近公众号讲了不少关于安全、黑客相关文章。均属于技术分享,不存在任何诱导之说。我们了解黑客是如何行骗的,可以更好地帮助我们防范黑客犯罪。

最近 DeFi 安全事件频发,很多攻击事件都和闪电贷有关。我们先了解一下什么是闪电贷。

闪电贷与抵押贷的区别

闪电贷(Flash Loan)不同于其他形式的借款。一般形式的借款均为抵押贷。例如你在 Compound 平台抵押 ETH 借出 USDT。一般来说你可以借出抵押物的 n%(例如:60%)。还款时,你还出借出物的本金+利息,赎回抵押物。抵押借贷一般借贷时间较长,你可以选择合适的时候进行还款。

而闪电贷在两个方面明显地区别抵押贷款:

  1. 无需抵押物
  2. 必须在同一个交易(transaction)中进行还款

从借出方而言,闪电贷永远是安全的,因为借出和还款必须同时发生才有效,否则交易失败。

有人肯定要问,既然借出,又必须立即要还,闪电贷还有什么用呢?

如果你用传统的思维考虑问题,闪电贷似乎无用。但是如果你用(全新的)智能合约的思路考虑问题,就不一样了,它大有用处!要知道,闪电贷的要求是在同一笔交易中借出和归还。如果你在一个交易的头部借出闪电贷,在尾部归还闪电贷,那么在交易中部可以做大量的事(调用智能合约使用闪电贷),从而让你的借款获得收益。

我们来看个例子:

有两个去中心化交易所(DEX1 和 DEX2),均有交易对:ETH/A。DEX1 中当前价格是 1 ETH/A,而 DEX2 中价格为 1.1 ETH/A。也就是说两个DEX中同一交易对价格出现了偏差(DEX2 中的A价格高10%)。那么此时你可以:

  1. 在 Aave 中借出闪电贷 100 ETH;
  2. 在 DEX1 中全部买入 A(为了解释原理,不考虑滑点的问题),得到 100 A;
  3. 将 100A 在 DEX2 中卖出,得到 110 ETH;
  4. 在 Aave 中偿还闪电贷 100 ETH;
  5. 获利 10 ETH 离场。

这是一个典型的用闪电贷获取利润的例子,我们可以看到它的几个典型特点:

  1. 空手套白狼,无需成本(ETH交易矿工费除外);
  2. 利用了价格差;
  3. 可以重复进行。

Harvest Finance 攻击事件:

昨天发生的 Harvest Finance 攻击例子和上面的例子剧本是一样的,只是一些细节不同。以下是慢雾团队梳理的关于本次攻击事件的逻辑:

  1. 攻击者通过 Tornado.cash 转入 20ETH 作为后续攻击手续费;
  2. 攻击者通过 UniswapV2 闪电贷借出巨额 USDC 与 USDT;
  3. 攻击者先通过 Curve 的 exchange_underlying 函数将 USDT 换成 USDC,此时 Curve yUSDC 池中的 investedUnderlyingBalance 将相对应的变小;
  4. 随后攻击者通过 Harvest 的 deposit 将巨额 USDC 充值进 Vault 中,充值的同时 Harvest 的 Vault 将铸出 fUSDC。而铸出的数量计算方式如下:amount.mul(totalSupply()).div(underlyingBalanceWithInvestment()); 计算方式中的 underlyingBalanceWithInvestment 一部分取的是 Curve 中的 investedUnderlyingBalance 值,由于 Curve 中 investedUnderlyingBalance 的变化将导致 Vault 铸出更多的 fUSDC。
  5. 之后再通过 Curve 把 USDC 换成 USDT 将失衡的价格拉回正常;
  6. 最后只需要把 fUSDC 归还给 Vault 即可获得比充值时更多的 USDC;
  7. 随后攻击者开始重复此过程持续获利。

可以看到,这几乎是一个教科书式的攻击。和我们前文举的例子主要的不同点在于:

  1. 黑客进行事前洗币,这是一个有预谋的攻击;
  2. 从 Uniswap 借出闪电贷,而不是 Aave;
  3. 通过在 Curve 中将巨额 USDT 卖成 USDC,主动制造价格差。

现在,你似乎已经感觉到,所谓黑客,就是找现有程序漏洞,或者主动制造出漏洞。然后攻击该漏洞,从而获利。

bZx 闪电贷攻击

闪电贷的攻击在此之前发生的也不止一次了。bZx 此前就发生了至少三起攻击事件。我们看其中一起来加深一下对于闪电贷攻击的印象:

  1. 黑客用闪电贷借出巨量 ETH;
  2. 用借来的 ETH 全额买入 sUSD,因为买量巨大,以至于 kyber 中的 sUSD 价格翻了一番;
  3. bZx 此时认为 sUSD 价格翻了一番(这是 bZx 协议bug所在)。此时黑客在 bZx 用买来的 sUSD 抵押贷款借出 ETH。因为 bZx 认为 sUSD 当前价格很高,所以借出了比正常 ETH 两倍的 ETH;
  4. 黑客用借出的 ETH 偿还了闪电贷借出的 ETH,拿着剩余大量 ETH,逃之夭夭。

哈,多么清晰的攻击!以上的所有例子都利用了同一弱点,价格差。尽管,现在很多 DeFi 协议都使用了相对强壮的 oracle 来管理价格,但是价格差一直都存在。

结语

以上的例子都是通过闪电贷进行黑客攻击,不当牟利。但是,闪电贷也可以被用来正当获利。只要有价格差,就有闪电贷获利的空间。闪电贷也是 DeFi 区别于传统金融最神奇的地方之一,它让智能合约散发出这个时代最耀眼的光芒。

转自公众号”谈谈区块链“ 链接:https://mp.weixin.qq.com/s/Rpmzags-VCeHy9VPwK2EUA

点赞 3
收藏 4
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
谈国鹏
谈国鹏
江湖只有他的大名,没有他的介绍。