作者:Roman Palamarchuk 编译:CoinTime 237
闪电贷已成为去中心化金融(DeFi)生态系统中越来越受欢迎的功能,它为个人和企业提供了无需抵押即可快速获得大量资本的途径。使用闪电贷,借款人可以在单个交易块结束时立即将资金归还给借贷平台。
然而,这些贷款的便捷性也导致闪电贷攻击增加,这是一种恶意行为,黑客可以利用闪电贷提供的临时流动性操纵价格或窃取资金。这些攻击对个人和DeFi平台都会造成灾难性后果,导致数百万美元的损失。
在本文中,我们将探讨与闪电贷攻击相关的风险,并提供开发人员和企业家可以采取的可操作步骤,以保护自己和其用户。我们将研究闪电贷攻击的真实案例,并讨论如何通过改进安全措施和最佳实践来防止这些攻击。
闪电贷攻击如何进行?
闪电贷攻击依靠闪电贷提供的临时流动性来操纵加密货币的价格,利用DeFi智能合约的漏洞或从协议中窃取资金。
要执行闪电贷攻击,攻击者通常会按照以下三个步骤进行:
1. 借款:攻击者从一个DeFi平台获得闪电贷,并在不提供任何抵押品的情况下借出大量加密货币。
2. 操纵:使用借来的资金,攻击者操纵目标加密货币的价格或利用DeFi智能合约中的漏洞。
3. 偿还:攻击者通常会在同一交易块内偿还闪电贷,并将借来的资金归还给借贷平台。
闪电贷攻击成功的关键是能够在同一交易块内偿还贷款。这使得攻击者能够利用临时流动性而无需提供任何抵押品,就使得借贷平台难以防范这些类型的攻击。
简单的闪电贷示例

假设攻击者想要利用DeFi智能合约中的漏洞来窃取资金。攻击者首先从借贷平台获得了1000 ETH(约价值180万美元),以闪电贷的方式进行借款。然后,攻击者使用500 ETH购买一种在一个交易所被低估,而在另一个交易所被高估的加密货币。
例如,假设加密货币XYZ在交易所A上被低估,以1 ETH = 10 XYZ的价格交易,在交易所B上被高估,以1 ETH = 12 XYZ的价格交易。攻击者使用500 ETH在交易所A上购买了5000个被低估的XYZ,然后立即在交易所B上以高估的价格卖出这5000个XYZ,获得600个ETH。
现在,攻击者拥有了1100个ETH:原始的500个ETH加上套利交易的600个ETH利润。攻击者偿还了1000个ETH的闪电贷款,加上任何费用和利息,并保留了剩下的100个ETH利润。
这是闪电贷套利攻击的一个例子。这种攻击利用不同交易所之间的价格差异来产生利润。套利本身并不具有恶意性;许多交易者使用闪电贷进行合法目的。但是,当用来通过加剧DeFi智能合约中的漏洞来窃取协议中的资金时,就变得具有恶意性。
闪电贷攻击类型
现实中的闪电贷攻击可能采取许多不同的形式,具体取决于所使用的特定漏洞或操纵策略。
1、价格操纵:攻击者可以利用闪电贷款通过人为膨胀或压低其价值来操纵加密货币的价格。这可能会导致基于操纵价格下单的交易者遭受重大损失。
2、套利:攻击者可以利用闪电贷来执行套利交易,利用分离的去中心化交易所(DEX)之间的价格差异。虽然这种攻击本身并不一定具有恶意性,但它仍可能导致合法交易者遭受损失。
3、智能合约漏洞:攻击者可以利用闪电贷来利用DeFi智能合约中的漏洞,例如重入漏洞或整数溢出错误。这可以使他们窃取协议中的资金或执行其他攻击。
需要强调的是,在大多数情况下,闪电贷本身不是漏洞。但是攻击者利用它们快速获取大量资金,可能会对系统造成重大影响。
闪电贷攻击的真实案例
Euler Finance: 1.97亿美元 (2023年3月)
这是最近且规模最大的黑客攻击之一,黑客利用平台内部计算率的错误进行攻击。
漏洞解释: Euler Finance平台用户使用两种主要类型的代币进行借贷:eToken(代表抵押品)和dToken(代表债务)。黑客利用平台 eToken 函数的一个漏洞,导致被借资产转换为抵押资产时出现错误。黑客涉及了两个主要的链上实体:一个前置机器人和他们的私人钱包。他们获得了 Tornado Cash 的初始资金,用于支付Gas费和创建必要的合约。
攻击解释: 黑客从 DeFi 协议 Aave 中借取了约3000万美元的 DAI 作为闪电贷。他们将2000万美元的 DAI 存入Euler Finance平台,并获得类似金额的 eDAI 代币。通过利用平台的借贷能力,黑客借入了原始存放数量的10倍。他们使用剩余的1000万美元的 DAI 来偿还部分债务,并继续借款,直到闪电贷关闭。
结论:由于攻击,Euler Finance在 DAI、wBTC、stETH 和 USDC 中损失了约1.97亿美元的加密货币。Euler Finance的原生代币 EUL 也经历了超过45%的下降。
PS:攻击发生后不久,黑客将资金归还给了平台。
Cream Finance: 1.3亿美元 (2021年10月)
2021年10月,Cream Finance遭遇史上最大的 DeFi 黑客攻击之一,损失超过1.3亿美元。
漏洞解释: 此次攻击利用的漏洞与 CREAM 的 yUSDVault 相关。攻击者的目标是铸造大量 crYUSD 代币,并利用储藏库中的漏洞使这些股份的估值翻倍。
攻击解释: 在攻击期间,两个账户从 MakerDAO 和 AAVE 中借出闪电贷款。MakerDAO 中的 DAI 存入 Curve 的 yPool 中,创建 yDAI,用于铸造 yUSD。AAVE 中的 ETH 作为抵押品,借入更多的 yUSD。第二个地址向第一个地址转移了价值约5亿美元的 yUSDVault 代币。
重复执行此过程多次,第一个地址积累了大约150亿美元的 crYUSD,并且在 yUSDVault 中积累了大约5亿美元。攻击者赎回了5亿美元的 yUSDVault 代币以获取更多的 yUSD,将 yUSDVault 的总供应量减少到约800万美元。随后,攻击者向 yUSDVault 存入约800万美元的 yUSD,有效地使其总价值翻倍。
通过对 yUSDVault 代币实施的 PriceOracleProxy 确定其价值,该代币的总价值被除以 yUSDVault 代币的总供应量。通过将 yUSDVault 总供应量减少到约800万美元并将约800万美元的 yUSD 存入储藏库中,攻击者实际上将 yUSDVault 股份(crYUSD)的估值翻倍。
结论:第一个攻击地址拥有约150亿美元的 crYUSD,而储藏库现在将其估值为约300亿美元。攻击者使用20亿美元和之前提取的5亿美元来偿还他们的闪电贷。剩余的10亿美元的 crYUSD 允许攻击者从Cream Finance的可用资产中提取13亿美元。
bZx: 100万美元 (2021年11月)
这次黑客攻击非常复杂,涉及两种不同的攻击方式。在针对第一个漏洞后,黑客迅速采用了另一种方法执行第二次攻击。
漏洞解释: 第一次攻击中的核心漏洞是 bZx 对于价格确定性的单一 Oracle 的依赖,导致黑客利用闪电贷款来操纵抵押物池。在第二次攻击中,漏洞是 bZx 使用 Uniswap 现货价格作为 Oracle,该价格被操纵以增加抵押品的价值。
攻击解释: 在第一次攻击中,黑客通过闪电贷借取了1000万美元的 ETH,并使用它来操纵抵押品池,同时以5倍的杠杆空头持有 ETH-wBTC 交易对,导致大幅滑点。在第二次攻击中,黑客使用闪电贷将 Uniswap Synthetix USD 价格上涨到2美元,然后将 sUSD 存入 bZx 作为抵押品,比他们本应被允许借入的更多数量 ETH。
结论: 这些对 bZx 的攻击揭示了平台的漏洞,特别是对单一 Oracle 的依赖和其抵押物池易受操纵。这些攻击导致超过98.5万美元的损失,强调了需要强大的安全措施以及使用多个受信任的 Oracle 进行价格确定性的重要性。
如何预防闪电贷攻击?
考虑到前面的案例,我们可以列出保护自己免受闪电贷款攻击的关键方法清单:
1、使用再入防护来防止意外的合同调用。使用适当的访问控制机制,例如 OpenZeppelin 的 Ownable,限制关键功能的使用。使用经过充分测试的库和框架,例如 OpenZeppelin 用于合同开发。
2、由于这些攻击源自外部智能合约,因此有必要验证允许使用闪电贷功能的地址。确保外部合同调用是真实且安全的,并限制互动仅限于受信任的合同。
3、彻底的第三方智能合约审计和验证始终是有价值的安全措施。进行全面的测试以识别潜在漏洞,并与知名的审计公司合作审查您的合同。
4、利用各种 Oracle 获取最精确和安全的价格信息,考虑某些 Oracle 可能会受到攻击。实施时间加权平均价格机制(TWAP)以最小化与价格操纵相关的风险。
5、定期审查并了解 DeFi 的安全最佳实践和漏洞报告。
最后的想法
闪电贷攻击对 DeFi 协议构成重大威胁,因为它们可以让攻击者利用智能合约中的漏洞,从而获取巨额资金。尽管 DeFi 协议在过去几年中已经取得了长足的进步,但这些攻击证明了 DeFi 仍然存在严重的安全风险。
为了保护自己免受闪电贷攻击,用户和开发人员需要采取适当的安全措施和最佳实践,例如使用再入防护、访问控制机制、经过充分测试的库和框架以及第三方智能合约审计和验证。
此外,定期审查和了解 DeFi 的安全最佳实践和漏洞报告也是非常重要的。虽然没有绝对安全的系统,但采取适当的措施可以最大限度地减少攻击成功的可能性,并帮助保护用户和协议的资产安全。
所有评论