背景信息
2022年?7月10号,一个火热的NFT项目TheSaudis开启了freemint活动。而就在mint活动结束后,一位名叫RIGHTBLOCK的用户在市场上大量地抛售该NFT,项目方发现后迅速锁定到了该用户并对合约进行改动以此来将该用户手里的大量NFT转移回来,他们之后承诺会将这些NFT回馈给社区用户。
那么为什么项目方可以将该用户手里的NFT转移呢?经过我们的分析发现该NFT项目的合约采用了EIP-2535协议也叫做钻石协议,项目方利用该协议重写了合约的功能,以此来实现这些NFT的转移。接下来慢雾安全团队将会为大家介绍下这个钻石协议的细节。
安全公司:BiSwap LP迁移池攻击事件已造成约71万美元的损失:7月1日消息,根据安全公司Fairyproof发布的BiSwap LP迁移池攻击事件简析,BISwap的迁移合约少了两个验证:1.未验证迁移者就是交易发起者,导致任意?都可以替别?进?迁移。2.未验证参数中的两种代币和Pair为真实的,导致攻击者可以伪造token0、token1及Pair的?式进?攻击。攻击者?先通过真实的pair和假的token0,token1,调?迁移合约的迁移函数,将?户的LP燃烧后的资产留在合约中,?户添加的只是两种假代币组成LP池。然后攻击者再通过真实的token0,token1及假的LP,调?迁移合约的迁移函数,将第?步留在合约中的资产添加为自己的LP。这样通过狸猫换太?的方式将?户的资产替换成假的LP资产,?真实的LP资产添加到了攻击的的LP中。Fairyproof还表示,此次攻击造成约710251美元的损失。
此前今日早些时候消息,BiSwap表示,已检测并解决Migrator合约漏洞,请勿与访问该合约,用户资金安全。[2023/7/2 22:12:51]
钻石协议介绍
Binance:由于技术困难,FLOKI和PEPE存款已暂停:5月5日消息,由于技术困难,Binance上的FLOKI和PEPE存款已暂停。在此期间,用户可能无法查看FLOKI或PEPE存款,Binance正在努力解决该问题,用户资金是安全的。一旦问题解决,存款将重新开放。[2023/5/5 14:45:31]
EIP-2535是以太坊上一个将合约进行代码模块化组合的提案,其目的是为了让大型的智能合约突破24kb大小的最大限制,并且让合约更方便地更新功能。
要理解钻石协议,首先有几个相关的概念定义需要知道:
钻石:钻石可以理解为代理合约,也是与用户进行交互的主合约
切面:正如真正的钻石有不同的侧面一样,一个钻石合约也有着不同的面,钻石合约的每个功能所需要调用的合约对应一个切面,所以也可以理解为实现合约
数据:Gemini于7小时前将95000多枚ETH转入新的EOA账户地址:1月4日消息,据0xScope监测,Gemini于7小时前将95342枚ETH(约1亿多美元)转入新的EOA账户地址:0x8c95306141c67e885f9608e7042e450f223b8524。
此前,该95000多枚ETH曾由两个Genesis地址分别在2020年底和2021年中转入Gemini部署的合约。2022年11月21日,该合约将ETH转入Gemini持有的EOA账户,而后ETH又被转入新创建的EOA地址。[2023/1/4 9:51:49]
钻石切割:钻石协议标准扩展了一种叫钻石切割的功能,其主要作用从钻石中增加、替换或删除切面和功能,可以理解为合约的升级
放大镜:钻石协议标准中的放大镜功能主要是返回关于切面的信息和钻石存在的功能,这些信息是保存在钻石合约内部的存储结构——DiamondStorage中
诺奖得主:特斯拉的股票“就像比特币一样”,估值全靠炒作和信仰支撑:金色财经报道,诺贝尔经济学奖得主保罗·克鲁格曼在他的专栏中“炮轰”马斯克和特斯拉,认为特斯拉的股票“就像比特币一样”,估值全靠炒作和信仰支撑,除此之外并没有多少重大的意义。
克鲁格曼认为,特斯拉没有受益于强大的网络外部性(用户越多,用户得到的效用就越多),这一点使其远不能与苹果、微软这些长期盈利的公司相比。在克鲁格曼看来,苹果拥有一个由设备、应用程序和服务组成的生态系统,用户很难离开,而微软的Word和Excel仍然是企业的默认选择,因为它们是用户最熟悉的,也是行业标准。相比之下,特斯拉在电动汽车领域不仅面临着来自通用汽车和福特等传统汽车制造商日益激烈的竞争,而且电动汽车并不是一个拥有显著网络外部性的业务。
克鲁格曼还指出,特斯拉的受欢迎很大程度上源于人们对马斯克“是一个很酷的人”的印象,但这一形象在他收购推特后的一系列事件后已经开始消退。[2022/12/29 22:14:52]
整个钻石模型类似下图:
数据:20分钟内发生3笔10亿枚及以上CRO大额链上转账:10月10日消息,Whale Alert监测数据显示,20分钟内发生多笔CRO大额链上转账移动,分别为10亿枚(约1.07亿美元)、10亿枚(约1.07亿美元)、13.33亿枚(约1.43亿美元)。[2022/10/10 12:51:55]
通过使用钻石标准规范去创建钻石合约,这个合约可以像使用当前合约的代码一样使用任何数量的其他切面合约的代码。
在该钻石合约中不同的函数功能需要调用对应的不同的切面合约的代码来实现,并且可以利用钻石切割的功能来对钻石合约中的函数功能进行修改。
这与市面上大多数使用一个代理合约和一个实现合约来实现交互与升级的方式有所区别。
事件分析
接下来回头分析下TheSaudis这次事件中的一些细节,在该项目的DiamondCutFacet.sol合约中,可以看到实现了diamondCut功能的函数。
该函数首先会调用LibDiamond库的enforceIsContractOwner函数来判断调用者是否是合约的owner,如果是owner调用的话会调用LibDiamond库的diamondCut函数来实现钻石合约的功能更新。
跟进到该函数我们发现钻石切割会根据传入的不同的action来判断进行添加、替换或删除功能,故接下来跟进看看项目方调用该函数的交易。
我们发现传入了新的切面合约0x70d8ccaf6b50b051ab1e8fa238626163e45a8b03,传入的action设置为1则应该是调用了replaceFunctions?来实现替换功能。
从replaceFunctions函数中可以分析出该函数首先会为传入的地址新增一个切面,接着从存储中循环读取传入的每个函数选择器对应的旧的切面进行删除,并为这些函数的切面添加为传入的新的切面地址。
至此可得知TheSaudis项目方就是利用了钻石切割函数来重写了转账功能,以此来将用户RIGHTBLOCK手中的NFT转移回自己的账户。
相关信息
TheSaudis合约地址:
0xe21ebcd28d37a67757b9bc7b290f4c4928a430b1
用户Rightblock地址:
0x80266b1e3f0C2cAdAE65A4Ef5Df20f3DF3707FfB
项目方更新合约的交易:
0xbc559a72f73e6c9a53416fd13a3ebaaa76dca5855ff8b79511585f514eaf2390
来源:金色财经
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。