Zerogoki攻击事件分析_TOKE:ZERO

北京时间2021年8月8日13点(区块高度12982491),Zerogoki项目下的合约遭到攻击,总计损失约67万美元。

Zerogoki是Duet Protocol的一个下属项目,用以在以太坊区块链平台上引入衍生品。在实现上,Zerogoki沿用了Duet Protocol的Lite Minting算法。

简而言之,用户首先购买平台币REI,然后将平台币Burn掉以兑换其他衍生资产(Synthetic Assets),如zUSD(对标美元的平台币)、zBTC 3L(BTC 3X Leveraged Long,即比特币三倍杠杆看多期货)。

FTX债权人:FTX已对LayerZero提起追回诉讼:金色财经报道,FTX债权人@sunil_trades在社交媒体上称,FTX已对LayerZero提起追回诉讼。据称,就在FTX关闭并禁止提款之前,LayerZero利用内部消息从FTX非法提取了2100万美元。FTX新任首席执行官正在带头对LayerZero Labs提起诉讼。此外,FTX还寻求从LayerZero Labs前首席运营官Ari Litan及其旗下Skip & Goose分别追回约1307万美元和665万美元资金。[2023/9/10 13:29:32]

作为一个衍生品合约,Zerogoki需要将衍生资产的价格(如比特币的价格)导入以太坊区块链。和以太坊上大多数平台一样,Zerogoki依赖价格预言机(Oracle)来获得价格。此次攻击正是利用了Oracle相关函数。

ZeroSync协会正在基于STARK证明开发比特币证明系统:3月28日消息,三位德国计算机科学家Robin Linus、Tino Steffens、Lukas George 等成立一个名为ZeroSync协会(ZeroSync Association)的瑞士非营利组织,将带头开发比特币证明系统,构建具有比特币隐私、互操作性和可扩展性的未来。ZeroSync基于STARK证明,为了实现比特币证明,使用由StarkWare创建的Cairo语言。

ZeroSync将分三个连续阶段推出,分别为标头链证明、假设有效链证明和全链证明,目前已经完成了前两个原型。ZeroSync Toolkit还将为比特币开发人员提供强大工具,以将零知识证明应用于他们自己的产品和服务。(Coindesk)[2023/3/28 13:30:52]

下面我们首先对被攻击合约0x80ecdb90的代码进行分析。

BBA与Zeromint合作推出NFT,促进比利时啤酒文化传播:1月1日消息,比利时桶联盟 (BBA) 的酿酒商和农民与Zeromint合作推出NFT,旨在保护联合国教科文组织认可的比利时啤酒文化和遗产。 作为合作的一部分,Zeromint将在GoChain区块链上铸造NFT,并通过BBA面向国际啤酒爱好者发行。据介绍,自即日起,该组织将在未来14天围绕可持续发展和比利时啤酒遗产的保护,运行若干BBA NFT收集项目。

据官方声明,第一届比利时桶NFT拍卖将用于招募11名参与者出演BBA出品的名为《比利时桶》的电影,该电影的目的是通过专业的电影制作进一步纪念比利时啤酒的历史,同时,BBA计划在全球推广和发行电影。

此外,NFT获奖者将加入白名单VIP通道参加所有BBA活动,并获得BBA俱乐部的复古啤酒菜单和专属瓶装。同时,NFT拍卖所得收入的80%将捐给比利时当地慈善机构。BBA还计划推出NFTs,除了为啤酒爱好者创造参与和奖励机会外,还提倡植树,学习专门的工匠技能和传统文化。

据悉,Zeromint为新成立的NFT交易平台。(cointelegraph)[2022/1/1 8:18:38]

保险巨头AXA Switzerland允许用户用比特币支付保险费:保险业巨头AXA Switzerland现在允许用户以比特币支付保险费。AXA Switzerland表示,旗下所有非寿险产品均可使用比特币付款选项。由于监管原因,人寿保险产品不支持该选项。[2021/4/15 20:22:50]

以上是被攻击合约的Swap函数。首先调用两次decode_op,从入参oracle中获得价格预言机相关的信息。OP结构体包含四个成员:数据类型(datatype)、Token地址(token)、预言机价格(price)和时间戳(timestamp)。

在进行一系列验证后,合约调用tax内部函数计算此次swap所收取的费用。接下来有三个Token操作:首先根据入参ns将平台币REI Burn掉;然后Mint衍生资产(在y.token中指定),数量为ns;最后Mint部分平台币给GOV合约作为此次swap的费用。

以上是swap开头的decode_op函数的实现。从这里可以看出,入参oracle除了包含OP结构体外,还包含了SIGNATURENUM个(在攻击时这个值为3)签名用于验证OP的值。我们推测Zerogoki设置了一系列验证者,价格预言机中包含的信息必须经过签名验证才有效。在代码中检查了用于签名的地址是否在数组authorization里,该数组是只能由owner进行设置的验证者数组。同时,代码还限定了必须由三个不同的authorized签名者进行验证。

总的来说,swap传入的参数,第一个参数ns用于指定swap两种Token的数量,没有经过任何校验;第二个参数包含了价格预言机的信息,需要authorized私钥进行签名验证。

在代码中我们注意到两点:

入参oracle中,与swap直接相关的只有x.token和y.token,即swap的两种token的类型(其中根据协议设计,x.token大部分为平台币REI)。

虽然入参oracle需要相对复杂的签名机制进行验证,但其对应的信息只用于进行验证及swap费用(即tax)的计算。

真正决定swap两种Token数量的是入参ns。

我们无从得知项目方为何要进行这样的设计。当然,由于swap函数开头要调用decode_op对入参oracle的签名进行验证。因此,这段代码出现问题的唯一原因,是至少有三个authorized签名者被compromised。

不幸的是,这种黑天鹅事件真的发生了。在攻击交易0x81e5f715中,攻击者想办法利用三个authorized签名者的公钥,向入参oracle提供了三个正确的签名;同时向入参ns提供了一个非常不合理的参数,导致攻击者用少量的REI Token就Mint了大量zUSD。

如上图所示,攻击者用300个REI Token,Mint出了70w+个zUSD代币(zUSD代币对标美元)。

深入分析后我们发现,攻击者提供给入参oracle的签名都是正确的,这三个签名对应三个authorized地址:

0x0d93A21b4A971dF713CfC057e43F5D230E76261C

0x3054e19707447800f0666ba274a249fc9a67aa4a

0x4448993f493b1d8d9ed51f22f1d30b9b4377dfd2

我们无从得知攻击者是怎样得到这三个地址对应的私钥的。最直观的原因有两种可能:三个地址的私钥同时泄露,或者同时出现了三名“卧底”。无论哪一种,看起来都像是一种概率极低的黑天鹅事件。但可以肯定的是,正是这种黑天鹅事件导致了这次奇怪攻击的产生。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金智博客

[0:15ms0-7:940ms