宇宙链 宇宙链
Ctrl+D收藏宇宙链

以太坊遭到攻击而导致分叉事件的技术分析

作者:

时间:1900/1/1 0:00:00

北京时间2021年8月27日20点50分左右,以太坊突然出现分叉。我们通过分析Geth的代码版本修改和这笔造成分叉的交易厘清了以太坊分叉的根本原因:Geth旧版本在处理预编译合约调用时,并未考虑特殊情况下参数值的处理,从而引发重叠拷贝,导致返回值异常。该漏洞已提交Geth官方,目前尚未披露细节,但攻击者已经利用漏洞实施了攻击。我们认为及时的分析和披露是必要的,也希望我们的分析能够为社区提供必要的理解和帮助。

攻击分析

运用我们的在线分析工具,可以看出:

动态 | 近一周Tehter在以太坊上新发行2240万USDT:据Tokenview稳定币数据监测,截止今日17时,近一周Tether Treasury在以太坊上新发行了2240万USDT,新发行USDT数量较前一周增长206.7%;有335.39万新发行的USDT流入到了各大交易所地址,其中币安和火币两家占比较高,分别占比29.82%和10.55%,此外近一周无新增印钞和销毁记录。[2020/2/2]

图一

这笔交易执行了一个精心构造的STATICCALL,攻击者将addr设为0x04,inOffset为0,inSize为32,retOffset为7,retSize为32。

声音 | V神:社区是以太坊最重要的部分 社区远比代码更重要:据橙皮书今日消息,V神近期在接受专访时表示,社区是以太坊最重要的部分。代码决定了一个平台现在能做什么,社区决定了一个平台未来能做什么。更何况不管是对于区块链,还是对于任何的软件生态系统,让人们能够参与进来并感觉友好是非常重要的,而这不是依靠代码就能实现的。[2020/1/8]

公告 | 预计将在今日凌晨3点45分进行以太坊君士坦丁堡和圣彼得堡双分叉:目前距离以太坊君士坦丁堡和圣彼得堡双分叉还有不到11个小时,当前区块高度为7,278,099,距离硬分叉高度还有1906个区块,网络哈希率为138850.5 GH/s。预计硬分叉时间将会在3月1日凌晨3点45分左右。有业内人士认为本次以太坊君士坦丁堡和圣彼得堡双分叉具有过渡性质,其实为下一个里程碑做准备,包括一项拟议的代码变更,这将改变当前以太坊的挖矿算法,让生态系统中的矿工能够在更公平的环境中工作。此外,以太坊开发人员还会讨论其他一系列全新的以太坊改进提案,并为 2019 年 6 月的“ethereum 1x“和“宁静”升级铺好道路。[2019/2/28]

图二

动态 | 以太坊开发者提议在2月底进行君士坦丁堡升级:据coindesk消息,以太坊核心开发人员在周五早上的核心开发者电话会议期间提议在2月26日到2月28日之间的某个时间段进行硬分叉,具体分叉的区块还有待确定。据悉,本次电话会议的参与者包括以太坊创建者Vitalik Buterin以及其他开发者。[2019/1/19]

由于STATICCALL的目标地址是预编译合约,所以会执行图二中的RunPrecompiledContract。

图三

图四

根据图三和图四的代码,可以看到预编译合约0x04真正执行的逻辑只是简单地把in返回。

图五

图六

图五是STATICCALL的执行过程,753行是执行预编译合约的入口,751行的args指向EVM的Memory中inOffset~inOffset+inSize这篇区域的指针,也就是说args指向Mem。

根据图六以及前文对预编译合约0x04的分析,我们可以知道753行的返回值ret是与args完全相同的指针,也指向Mem。

在1.10.7版本的Geth中:762行将ret指向的值赋给EVM的Memory中retOffset~retOffset+retOffset这篇区域,也就是将Mem的值赋给Mem,而由于ret是一个指向Mem的指针,这次Memory.Set修改了Mem的值,也就修改了ret所指的值。所以在第771行返回的ret已经不是预编译合约执行结束时的ret了。在1.10.8版本的Geth中:增加了766行:ret=common.CopyBytes,将Mem中的值做了一次深拷贝赋给ret,那么在767行执行的Memory.Set只会修改Memory而不会修改ret,在771行返回的ret就是正确的ret。总结

通过对整个攻击流程的梳理和Geth源代码的分析,我们认为根本原因在于Geth旧版本在处理预编译合约的调用时并未考虑异常值的处理,导致攻击者利用该漏洞实施了重叠拷贝,影响了返回值,最终导致分叉的出现。由于Geth是BSC、HECO、Polygon等公链的基础,因此该漏洞影响范围甚广。目前各公链也先后推出了升级和补丁,我们也呼吁各相关节点尽早升级打上补丁,以确保基础设施的安全。

标签:RET以太坊MEMETHRETRO价格以太坊币现在的价格是多少evmos币的memo是什么togetherbnb游戏哪里恐怖呀

比特币最新价格热门资讯
又现NFT抢购潮:Space Poggers为何突然走红?

作者|秦晓峰编辑|郝方舟出品|Odaily星球日报原标题:《凭一己之力推高Gas费的「SpacePoggers」到底是个啥?》 昨日凌晨,一款名为SpacePoggers的项目进行了NFT发售.

1900/1/1 0:00:00
粉丝智商税?腾讯音乐在玩的NFT会影响音乐行业吗?

/本期主角:NFT+音乐/在国外火爆已久的NFT风潮,如今总算刮到国内了。今年阿里、腾讯等大厂小厂纷纷试水布局NFT市场,各种动作不断,可谓引领了NFT在国内网络市场的热点.

1900/1/1 0:00:00
万卉:NFT只谈倍数不谈流动性都是耍流氓

巴比特讯,微博大V万卉发文称关于NFT艺术,只谈倍数不谈流动性都是耍流氓,”炒“NFT或者经常说去”扫荡地板“(sweepthefloor)在真正的收益上需要打一个流动性折扣.

1900/1/1 0:00:00
BAYC疯狂的一周:名人、巨鲸加持,无聊猿彻底与“无产阶级”说再见

回顾过去的一周,头像类NFT市场迎来了一轮惊人的FOMO。在Visa宣布购入一枚CryptoPunk之后,CryptoPunks在当日的成交量和成交额均达到历史新高,单日交易354枚,交易额27821ETH,约9222万美元.

1900/1/1 0:00:00
新加坡中央银行探索利用区块链技术实现多个CBDC之间的跨境支付

新加坡中央银行,新加坡金融管理局(MAS),启动了一个新的基于区块链技术的项目,以简化使用中央银行数字货币(CBDC)的跨境支付流程.

1900/1/1 0:00:00
数据:以太坊伦敦升级完成后6日内燃烧超过2.7万ETH,价值8800多万美元

巴比特讯,根据etherchain以及ultrasound.money数据显示,自8月5日20:33以太坊伦敦升级后,截至8月11日20:33已经有27271枚ETH被烧毁,当前价值约为8800万美元.

1900/1/1 0:00:00