又一经典的闪电贷套利 —— Wault.Finance 被黑事件分析

本次攻击事件是经典的利用闪电贷进行套利的案例,我们建议先对项目在DeFi各种场景下的攻击面进行推演,排查可能的攻击面,对项目进行优化和加固。

> 2021 年 08 月 04 日 10:23 AM,慢雾区情报系统捕获到了 **Wault.Finance** 的 WUSDMaster 合约疑似被黑的情报,慢雾安全团队第一时间介入分析,以下是分析的详细内容。 ## **事件相关方信息** 攻击者地址:0x886358f9296de461d12e791bc9ef6f5a03410c64 攻击者合约地址 A:0xaa895873a268a387e38bd841c51d2804071197a1 攻击者合约地址 B:0x50afa9383ea476bdf626d6fba62afd0b01c8fea1 被攻击的项目:https://app.wault.finance/bsc/#wusd 被攻击的项目地址:0xa79fe386b88fbee6e492eeb76ec48517d1ec759a (Wault.Finance 的 WUSDMaster 合约) ### **事件相关方背景** **攻击者:** 黑客通过创建了攻击合约地址 A,并在合约的构造函数中发起攻击。 **被攻击项目:** WUSDMaster 是一个质押 BSC_USDT 换取 WUSD 的合约,可以通过质押 (stake) BSC_USDT 来获得 WUSD, 通过赎回 (redeem) 将 WUSD 燃烧,然后换成 BSC_USDT,在这过程中一部分资金会转给金库 (Treasury), WUSDMaster 会用 WEX 补贴给用户。 ### **攻击事件的核心点** WUSDMaster 合约的 stake 函数中,会在质押的时候 1:1 兑换 BSC_USDT 和 WUSD,但是它还进行了一次 swap 操作,正是因为这个 swap 操作导致可以被黑客利用进行套利。 ![3b2ad75a067ddedfd774848ee0869c48.png](https://img.learnblockchain.cn/attachments/2021/12/xwjNGjow61c13da08e003.png) **核心问题点** **:** 允许数量 1:1 兑换 BSC_USDT 和 WUSD 的同时,WUSDMaster 的 swap 操作会额外导致 WaultSwapPair(BSC_USDT-WEX) 的池子中的代币失衡,从而形成套利空间。 **注意:** BSC_USDT 和 WUSD 也可以理解为价格上也是 1:1 ## **攻击事件的剖析** 攻击的交易 Txid 0x31262f15a5b82999bf8d9d0f7e58dcb1656108e6031a2797b612216a95e1670e 攻击的合约地址 0xaa895873a268a387e38bd841c51d2804071197a1 攻击者地址 0x886358f9296de461d12e791bc9ef6f5a03410c64 被攻击的项目地址 0xa79fe386b88fbee6e492eeb76ec48517d1ec759a (wault.finance 的 WUSDMaster 合约) 我们可以把本次的过程分为 3 个阶段:**准备套利资金、构造套利空间、实施套利** 。 **第一阶段:通过闪电贷获得初始攻击资金** 1、在 WaultSwapPair (BSC_BUSD-WUSD) 中通过闪电贷借了 16,839,004 枚 WUSD; 2、调用 WUSDMaster 合约中的赎回 (redeem) 函数,将闪电贷借到的 WUSD 燃烧掉,换成 BSC_USDT 和 WEX; 3、去 PancakePair (WBNB-BSC_USDT) 中通过闪电贷借了 40,000,000 枚BSC_USDT; 4、将借到的 23,000,000 枚 BSC_USDT 在 WaultSwapPair (BSC_USDT-WEX) 中换成了 WEX。此时攻击者已经做好了套利的准备。 **WEX 的数量:** 624,440,724 = 106,502,606 + 517,938,118 **WEX 的来源:** redeem 操作 + WaultSwapPair (BSC_USDT-WEX) 中兑换所得 **第二阶段:使 BSC_USDT-WEX 池子失衡形成套利空间** 1、 多次 (68 次) 调用 WUSDMaster 合约中的质押(stake)函数; ![e97ab6248209a18a4de8dca587b6af05.png](https://img.learnblockchain.cn/attachments/2021/12/HD7WP3bQ61c13dcb449cd.png) 2、stake 函数会执行 wswapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens 将质押一部分的 BSC_USDT 换成 WEX,这样就会使得 WaultSwapPair (BSC_USDT-WEX) 池子的 WEX 数量减少,价值变高; 3、多次 stake 之后 BSC_USDT-WEX 池子中,BSC_USDT 数量多,WEX 数量少,形成套利空间; 4、且攻击者每次调用 stake 都会以 1:1 的兑换方式使用 BSC_USDT 兑换 WUSD,所以攻击者在这一步的兑换可以无损的情况下就额外的将 BSC_USDT-WEX 池子打失衡了。 **第三阶段:进行套利,并偿还闪电贷** 1、攻击者将第一阶段准备好的 WEX 在已经失衡的 BSC_USDT-WEX 池子中进行兑换,就可以换出更多的 BSC_USDT; **624,440,724 枚 WEX => 25,930,747 枚 BSC_USDT** 2、攻击者将多次 (68 次) 调用 stake 函数所得到的 WUSD 在偿还闪电贷之后,剩余 110,326 枚 WUSD 通过 WaultSwapPair (BSC_BUSD-WUSD) 换成了BSC_BUSD; **110,326 枚 WUSD => 109,284 枚 BSC_BUSD** 3、将所得到的 BSC_USDT 和 BSC_BUSD 还完闪电贷后换成了 BEP_ETH。 ## **MistTrack 分析过程** 慢雾 AML 团队分析统计,最终攻击者获利 370 枚 BEP_ETH,并通过 Anyswap 进行资金转移,约损失 93 万美元。 **资金流向分析** 慢雾 AML 团队分析发现,攻击者相关的钱包地址情况如下: **攻击者地址:** 0x886358f9296De461d12e791BC9Ef6F5a03410C64 慢雾 AML 旗下 MistTrack 反洗钱追踪系统分析发现,攻击者首先从 Binance 提币,获得初始资金,接着部署了合约。 ![a0a4b1a584fc3ba1bac9751a30212e9c.png](https://img.learnblockchain.cn/attachments/2021/12/MIX6FNhU61c13de4cb31d.png) 通过三次操作,攻击者将 ETH 兑换为 anyETH,再通过跨链平台将所得 ETH 跨链到以太坊地址: 0x886358f9296De461d12e791BC9Ef6F5a03410C64。 ![293533f2863b9c3a4e9a35694a56053e.png](https://img.learnblockchain.cn/attachments/2021/12/oN5aJazr61c13deb31774.png) **值得注意的是** : 1.、跨链后的以太坊地址: 0x886358f9296De461d12e791BC9Ef6F5a03410C64 有一笔交易转出到了 Binance。 ![4cdd7f9153955c643f0b7d88ad48e80c.png](https://img.learnblockchain.cn/attachments/2021/12/fvOEVtQy61c13df68b95b.png) 2、攻击者获利地址最初的一笔交易是来自混币平台 Tornado.Cash 转入的 100 ETH。 ![ed831f8db37ae8db6e2e36ab927d380d.png](https://img.learnblockchain.cn/attachments/2021/12/mjMIt8sA61c13dff64de0.png) ## **事件梳理 (UTC)** - 1:25:07 攻击者从 Tornado Cash 提取 100 ETH - 1:27:09 攻击者充币到币安 1 ETH - 1:35:24 攻击者从币安提现 2 BNB 到 BSC - 1:35:27 攻击者从币安提现 0.72213159 Binance-Peg ETH 到 BSC - 1:43:52 - 1:49:05 攻击者在 BSC 上部署合约实施攻击 截止目前,攻击者获利地址 0x886358f9296De461d12e791BC9Ef6F5a03410C64 共有余额 468.99 ETH。 ![5f38c22a26bdf3d07fd0b287d34e80e6.png](https://img.learnblockchain.cn/attachments/2021/12/uajjR1zK61c13e2255bfb.png) ## **总结** 本次攻击事件是经典的利用闪电贷进行套利的案例,由于经济模型上的设计缺陷导致的攻击者可以对 WaultSwapPair (BSC_USDT-WEX) 的池子进行套利攻击。项目方在开发之初也要关注经济模型的设计所带来的攻击面,建议让第三方专业的团队或专家对项目在 DeFi 各种场景下的攻击面进行推演,排查可能的攻击面,从经济模型和架构设计上对项目进行优化和加固。 慢雾安全团队已经将攻击者地址加入到 AML 系统中进行监控,并且使用了 AML 系统的联动能力尽可能的对攻击者资金进行封堵。 *参考攻击交易:* *https://bscscan.com/tx/0x31262f15a5b82999bf8d9d0f7e58dcb1656108e6031a2797b612216a95e1670e* 本文首发于:https://mp.weixin.qq.com/s/aFSnSDPk4RYlcKz6Qr_CmQ

2021 年 08 月 04 日 10:23 AM,慢雾区情报系统捕获到了 Wault.Finance 的 WUSDMaster 合约疑似被黑的情报,慢雾安全团队第一时间介入分析,以下是分析的详细内容。

事件相关方信息

攻击者地址:0x886358f9296de461d12e791bc9ef6f5a03410c64

攻击者合约地址 A:0xaa895873a268a387e38bd841c51d2804071197a1

攻击者合约地址 B:0x50afa9383ea476bdf626d6fba62afd0b01c8fea1

被攻击的项目:https://app.wault.finance/bsc/#wusd

被攻击的项目地址:0xa79fe386b88fbee6e492eeb76ec48517d1ec759a (Wault.Finance 的 WUSDMaster 合约)

事件相关方背景

攻击者: 黑客通过创建了攻击合约地址 A,并在合约的构造函数中发起攻击。

被攻击项目: WUSDMaster 是一个质押 BSC_USDT 换取 WUSD 的合约,可以通过质押 (stake) BSC_USDT 来获得 WUSD, 通过赎回 (redeem) 将 WUSD 燃烧,然后换成 BSC_USDT,在这过程中一部分资金会转给金库 (Treasury), WUSDMaster 会用 WEX 补贴给用户。

攻击事件的核心点

WUSDMaster 合约的 stake 函数中,会在质押的时候 1:1 兑换 BSC_USDT 和 WUSD,但是它还进行了一次 swap 操作,正是因为这个 swap 操作导致可以被黑客利用进行套利。

核心问题点 允许数量 1:1 兑换 BSC_USDT 和 WUSD 的同时,WUSDMaster 的 swap 操作会额外导致 WaultSwapPair(BSC_USDT-WEX) 的池子中的代币失衡,从而形成套利空间。

注意: BSC_USDT 和 WUSD 也可以理解为价格上也是 1:1

攻击事件的剖析

攻击的交易 Txid 0x31262f15a5b82999bf8d9d0f7e58dcb1656108e6031a2797b612216a95e1670e

攻击的合约地址 0xaa895873a268a387e38bd841c51d2804071197a1

攻击者地址 0x886358f9296de461d12e791bc9ef6f5a03410c64

被攻击的项目地址 0xa79fe386b88fbee6e492eeb76ec48517d1ec759a (wault.finance 的 WUSDMaster 合约)

我们可以把本次的过程分为 3 个阶段:准备套利资金、构造套利空间、实施套利

第一阶段:通过闪电贷获得初始攻击资金

1、在 WaultSwapPair (BSC_BUSD-WUSD) 中通过闪电贷借了 16,839,004 枚 WUSD;

2、调用 WUSDMaster 合约中的赎回 (redeem) 函数,将闪电贷借到的 WUSD 燃烧掉,换成 BSC_USDT 和 WEX;

3、去 PancakePair (WBNB-BSC_USDT) 中通过闪电贷借了 40,000,000 枚BSC_USDT;

4、将借到的 23,000,000 枚 BSC_USDT 在 WaultSwapPair (BSC_USDT-WEX) 中换成了 WEX。此时攻击者已经做好了套利的准备。

WEX 的数量: 624,440,724 = 106,502,606 + 517,938,118

WEX 的来源: redeem 操作 + WaultSwapPair (BSC_USDT-WEX) 中兑换所得

第二阶段:使 BSC_USDT-WEX 池子失衡形成套利空间

1、 多次 (68 次) 调用 WUSDMaster 合约中的质押(stake)函数;

2、stake 函数会执行 wswapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens 将质押一部分的 BSC_USDT 换成 WEX,这样就会使得 WaultSwapPair (BSC_USDT-WEX) 池子的 WEX 数量减少,价值变高;

3、多次 stake 之后 BSC_USDT-WEX 池子中,BSC_USDT 数量多,WEX 数量少,形成套利空间;

4、且攻击者每次调用 stake 都会以 1:1 的兑换方式使用 BSC_USDT 兑换 WUSD,所以攻击者在这一步的兑换可以无损的情况下就额外的将 BSC_USDT-WEX 池子打失衡了。

第三阶段:进行套利,并偿还闪电贷

1、攻击者将第一阶段准备好的 WEX 在已经失衡的 BSC_USDT-WEX 池子中进行兑换,就可以换出更多的 BSC_USDT;

624,440,724 枚 WEX => 25,930,747 枚 BSC_USDT

2、攻击者将多次 (68 次) 调用 stake 函数所得到的 WUSD 在偿还闪电贷之后,剩余 110,326 枚 WUSD 通过 WaultSwapPair (BSC_BUSD-WUSD) 换成了BSC_BUSD;

110,326 枚 WUSD => 109,284 枚 BSC_BUSD

3、将所得到的 BSC_USDT 和 BSC_BUSD 还完闪电贷后换成了 BEP_ETH。

MistTrack 分析过程

慢雾 AML 团队分析统计,最终攻击者获利 370 枚 BEP_ETH,并通过 Anyswap 进行资金转移,约损失 93 万美元。

资金流向分析

慢雾 AML 团队分析发现,攻击者相关的钱包地址情况如下:

攻击者地址:

0x886358f9296De461d12e791BC9Ef6F5a03410C64

慢雾 AML 旗下 MistTrack 反洗钱追踪系统分析发现,攻击者首先从 Binance 提币,获得初始资金,接着部署了合约。

通过三次操作,攻击者将 ETH 兑换为 anyETH,再通过跨链平台将所得 ETH 跨链到以太坊地址:

0x886358f9296De461d12e791BC9Ef6F5a03410C64。

值得注意的是 :

1.、跨链后的以太坊地址:

0x886358f9296De461d12e791BC9Ef6F5a03410C64 有一笔交易转出到了 Binance。

2、攻击者获利地址最初的一笔交易是来自混币平台 Tornado.Cash 转入的 100 ETH。

事件梳理 (UTC)

  • 1:25:07 攻击者从 Tornado Cash 提取 100 ETH

  • 1:27:09 攻击者充币到币安 1 ETH

  • 1:35:24 攻击者从币安提现 2 BNB 到 BSC

  • 1:35:27 攻击者从币安提现 0.72213159 Binance-Peg ETH 到 BSC

  • 1:43:52 - 1:49:05 攻击者在 BSC 上部署合约实施攻击

截止目前,攻击者获利地址

0x886358f9296De461d12e791BC9Ef6F5a03410C64 共有余额 468.99 ETH。

总结

本次攻击事件是经典的利用闪电贷进行套利的案例,由于经济模型上的设计缺陷导致的攻击者可以对 WaultSwapPair (BSC_USDT-WEX) 的池子进行套利攻击。项目方在开发之初也要关注经济模型的设计所带来的攻击面,建议让第三方专业的团队或专家对项目在 DeFi 各种场景下的攻击面进行推演,排查可能的攻击面,从经济模型和架构设计上对项目进行优化和加固。

慢雾安全团队已经将攻击者地址加入到 AML 系统中进行监控,并且使用了 AML 系统的联动能力尽可能的对攻击者资金进行封堵。

参考攻击交易: https://bscscan.com/tx/0x31262f15a5b82999bf8d9d0f7e58dcb1656108e6031a2797b612216a95e1670e

本文首发于:https://mp.weixin.qq.com/s/aFSnSDPk4RYlcKz6Qr_CmQ

  • 发表于 1天前
  • 阅读 ( 68 )
  • 学分 ( 0 )
  • 分类:资讯

评论