{"content":{"title":"详细分析 Euler Finance 的 1.96 亿美元闪电贷攻击","body":"![image.png](https://img.learnblockchain.cn/attachments/2023/03/KeUkVMY06412929818599.png)\r\n**文章开头分享一个区块链安全和智能合约审计的交流群：741631068！**\r\n\r\n2023 年 3 月 13 日上午 08:56:35 +UTC，DeFi 借贷协议 Euler Finance 遭遇闪电贷攻击。\r\nEuler Finance 是一种作为无许可借贷协议运行的协议。其主要目标是为用户提供各种加密货币的借贷便利。这家总部位于英国的科技初创公司利用数学原理在以太坊和其他区块链网络上开发非托管协议，重点是实现高性能。\r\n**根据链上数据分析，攻击者已成功执行多笔交易，造成约 1.96 亿美元**的盗窃，成为 2023 年迄今为止最大的黑客攻击。被盗资产包括价值数百万的 DAI、USDC、Staked Ether (StETH) 和 Wrapped Bitcoin (WBTC)。\r\n被盗资产明细如下：\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/03/4dfIeekj64129322dd676.png)\r\n## 详细分析\r\n\r\n由于 Etoken 的 donateToReserves 函数中缺乏流动性检查，所以可能会发生攻击。攻击者使用不同的货币执行多次调用以产生利润，导致六种不同代币的巨额损失 1.96 亿美元。目前，资金仍留在攻击者的账户中。\r\n\r\n攻击者地址为：<https://etherscan.io/address/0xb66cd966670d962c227b3eaba30a872dbfb995db>\r\n\r\n攻击者的合约地址为：<https://etherscan.io/address/0x036cec1a199234fc02f72d29e596a09440825f1c>\r\n\r\n其中一项攻击交易可以在这里找到：[https://etherscan.io/tx/0xc310a0affe2169d1f6feec1c63dbc ](https://etherscan.io/tx/0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d)[7 ](https://etherscan.io/tx/0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d)[f7c62a887fa48795d327d4d2da2d6b111d](https://etherscan.io/tx/0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d)\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/03/YMQjM9Vi641293683a81c.png)\r\n\r\n1\\. 攻击者首先通过闪电贷向Aave借了3000万个DAI，然后部署了两份合约：一份用于借贷，一份用于清算。\r\n\r\n![](https://miro.medium.com/v2/resize:fit:700/0\\*GgIzh009xFAzwP3Q.png)\r\n\r\n2\\. 攻击者随后调用deposit函数并向 Euler 协议合约质押 2000 万个 DAI，获得 1950 万个 eDAI 作为回报。\r\n\r\n![](https://miro.medium.com/v2/resize:fit:700/0\\*zAkRoLkq85II4O4d.png)\r\n\r\n3\\. Euler Protocol 允许用户通过调用 mint 函数借入最多 10 倍于存款的资金。攻击者利用此功能借入了 1.956 亿个 eDAI 和 2 亿个 dDAI。\r\n\r\n![](https://miro.medium.com/v2/resize:fit:700/0\\*FAhUuDpAxlO18gTD.png)\r\n\r\n4\\. 攻击者调用repay函数，用闪电贷借来剩下的1000wDai来偿还债务，并销毁1000万dDAI。然后他们再次调用 mint 功能借入 1.956 亿个 eDAI 和 2 亿个 dDAI。\r\n\r\n![](https://miro.medium.com/v2/resize:fit:700/0\\*wbHpjg4ZAnnyQT61.png)\r\n\r\n5\\. 攻击者随后调用 donateToReserves 函数并捐赠了偿还债务所需金额的 10 倍，发送了 1 亿个 eDAI。然后他们调用 liquidate 函数启动清算过程，获得了 3.1 亿个 dDAI 和 2.5 亿个 eDAI。\r\n\r\n![](https://miro.medium.com/v2/resize:fit:700/0\\*nMFH2pW92vIiMzZs.png)\r\n\r\n6\\. 攻击者调用了withdraw函数，获得了3890万个DAI，用来偿还闪电贷借来的3000万个DAI。他们从这次攻击中获利 887 万 DAI。\r\n\r\n![](https://miro.medium.com/v2/resize:fit:700/0\\*S3-nfyF98a_n5MR2.png)\r\n\r\n## 核心漏洞\r\n\r\n首先，让我们看一下 donateToReserves 函数，这是用户容易被清算的地方。\r\n\r\n![](https://miro.medium.com/v2/resize:fit:700/0\\*NAdLWHswWD8qx0EO.png)\r\n\r\n对比下图中的donateToReserves函数和mint函数，我们可以看到donateToReserves函数中少了一个关键步骤checkLiquidity。\r\n\r\n![](https://miro.medium.com/v2/resize:fit:700/0\\*OY1ITqU8xVz9qLCa.png)\r\n\r\n接下来，我们跟进检查了checkLiquidity的实现。我们发现了 Call InternalModule 函数，它调用 RiskManager 来检查并确保用户的 Etoken > Dtoken。\r\n\r\n![](https://miro.medium.com/v2/resize:fit:700/0\\*vgqLCt2zqeTAfoa1.png)\r\n\r\n每次操作都需要检查用户的流动性，调用checkLiquidity。\r\n\r\n但是donateToReserves函数不执行这个操作，让用户先通过协议的某些函数让自己处于清算状态，然后完成清算。\r\n\r\n## 关于攻击的官方更新\r\n\r\n[Euler Finance 已在其官方推特](https://twitter.com/eulerfinance)(@eulerfinance)上确认了此次攻击，并表示他们目前正在与安全专业人员和执法部门合作解决该问题。\r\n\r\n![](https://miro.medium.com/v2/resize:fit:700/0\\*gmEe98fYdOAqmh59.png)\r\n\r\nEuler Finance 最近更新了他们为协议用户收回资金的努力。他们概述了自攻击发生以来他们采取的几项行动，包括通过禁用 EToken 模块来尽快停止直接攻击，该模块阻止了存款和易受攻击的捐赠功能。\r\n\r\n此外，他们还与各种安全组织合作，例如 TRM Labs、Chainalysis 和更广泛的以太坊安全社区，以协助调查和追回资金。Euler Finance 还与美国和英国的执法部门共享信息。\r\n\r\n最后，该公司试图联系攻击者以了解更多有关潜在恢复选项的信息。\r\n\r\n![](https://miro.medium.com/v2/resize:fit:700/0\\*Wb2vtrBsVWhYzfdi.png)\r\n\r\n## 结论\r\n\r\n最近针对 Euler Finance 协议的攻击凸显了实施严格安全措施的重要性，例如进行彻底审计和定期检查漏洞。\r\n\r\n随着去中心化金融生态系统的不断发展，项目必须优先考虑用户资金的安全并采用最佳实践来降低未来类似攻击的风险"},"author":{"user":"https://learnblockchain.cn/people/12138","address":null},"history":null,"timestamp":1678939972,"version":1}