前言然而换言之,我们应该深入了解阿蒂斯atis的发展规律,为整个行业带去新的生机,让市场焕发生机。
今早,z 疑似遭遇第二次攻击,不同的是本次的对象是 eth/usd 交易对,但也许有人会有疑问,usd 不是对标 usd 的稳定币吗?这都能被攻击?攻击手......
前言
今早,z 疑似遭遇第二次攻击,不同的是本次的对象是 eth/usd 交易对,但也许有人会有疑问,usd 不是对标 usd 的稳定币吗?这都能被攻击?攻击手法具体是怎样的?带着这样的疑问,针对此次事件,慢雾安全团队接下来将复盘这两次攻击过程。
在第一次攻击中,攻击者结合 f和 c 中的贷款,对 z 实施攻击,主要分成以下几步:
. 从 yx 借了个 eth
. 到 c 用eth 借了 个 btc 准备抛售
. 到 z 中用 个 eth 开倍杠杆做空,换了 . 个 btc,而这里换取的 btc 是通过 k n 来获取价格的,然而 k n 最终还是调用 u 来获取价格, 倍杠杆开完后兑换回来的个 btc 实际上是拉高了 us 中 btc/eth 的价格,换取价格是 /,但是实际上大盘的价格不会拉到这么多
. 用从 c 借来的个 btc 来在 us 中卖掉,由于第三步中 z 中的倍杠杆已经把价格拉高,所以这个时候出售 eth 肯定是赚的,然后卖了个 eth
. 归还 yx 中的借贷
第二次攻击与之前稍有不同,但核心都在于控制预言机价格,并通过操纵预言机价格获利。
注: 下文中出现的 weth 是 eth 的化代币,可统一认为是 eth。与 eth 之间的兑换比例是 :
细节剖析
本次发生攻击的交易哈希为:
通过上的分析,我们看到这笔交易中发生了大量的转账。
这么多转账交易中,攻击者一共购买了次 usd,最终获利离场,那么攻击者具体是怎么操作的呢?我们使用区块浏览器 . 来做进一步分析。
、赛前准备
和第一次一样,首先攻击者需要从 f借入一定的金额开始本次的攻击,第一次攻击是从 yx 借入eth,这次,攻击者选择从 z 本身支持的 f下手,借入 个 eth。
、发球
在完成从 z 的借入之后,攻击者开始通过 k 进行 usd 的买入操作,第一次使用了个 eth 购买了 ,. 个 usd, 这个操作令 weth/usd 的价格瞬间拉低,捧高了 usd 的价格。这次的交易兑换的比例大概为 :,而 k 最终是通过 us 来进行兑换的,所以此时 u 的 weth/usd 处于低位,反过来,usd/weth 升高。
在完成第一次的个eth的兑换之后,攻击者再次在 k 进行次小额度的兑换,每次使用个 eth 兑换 usd,从我们能够看到,每一次的兑换回来的 usd 金额在不断减少。
这表明 usd/weth 的价格被进一步拉升,这加剧了 u 中 usd/weth 的价格,此时价格已经达到顶峰了,大概是 :。
在完成以上两步操作之后,攻击者已经完成狩猎前的准备,随时可以开始攻击。
、一杆进洞
在完成对 usd/weth 的拉升后,攻击者此时需要采集大量的 usd,为后续兑换 weth 做准备。为了达成这个目的,攻击者向 s 发起 usd 的购买,通过向 s 发送eth 购买 usd,直接把 s 中的 usd 买空,s 合约返还个 eth 给攻击者。
完成了上面的操作后,攻击者直接对 z 发动总攻,直接用之前操作得来的一共 ,, 个 usd 向 z 兑换 weth,此时由于 z 兑换还是要去查询 u 的 usd/weth 的价格,而这个价格已经被攻击者人为拉得很高了,此时兑换,就能通过 ,, 个 usd 换取大量的 weth, 此次交易一共用 ,, 个 usd 换取了个 weth,此时攻击已经完成。
、归还借贷
完成了对 z 的攻击之后,将eth 归还给 z, 完成闪电贷流程,从 z 来,再回到 z 去,还使 z 遭受了损失。
赛后复盘
通过分析攻击者的攻击手法,我们统计下攻击者在攻击过程中的支出和收入情况。
收入
=&; z 闪电贷
+
=&; s 返还
+
=&; 使用 usd 在 zx 兑换 weth
=
eth
支出
+ (*) =&; 拉高 usd/weth 价格
+
=&; 买空usd
+
=&; 归还z闪电贷
=
eth
总的收益为:-=eth
防御建议
两次攻击的主要原因还是因为 u 的价格的剧烈变化最终导致资产的损失,这本该是正常的市场行为,但是通过恶意操纵市场,攻击者可通过多种方式压低价格,使项目方造成损失。针对这种通过操纵市场进行获利的攻击,慢雾安全团队给出如下建议:
项目方在使用预言机获取外部价格的时候,应设置保险机制,每一次在进行代币兑换时,都应保存当前交易对的兑换价格,并与上一次保存的兑换价格进行对比,如果波动过大,应及时暂停交易。防止市场被恶意操纵,带来损失。