月亮链 月亮链
Ctrl+D收藏月亮链
首页 > 比特币 > 正文

GAS:详解:以太坊漏洞可导致“重入攻击”_NBA

作者:

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

编者按:本文来自DVPNET,作者BCSEC,Odaily星球日报经授权转载。1月16日凌晨,以太坊准备进行君士坦丁堡硬分叉的前一日被披露出来了一则漏洞,该漏洞由新启动的EIP1283引起,漏洞危害准确的说应该是一种可能会让一些合约存在重入漏洞的隐患,而不是一定会使合约产生重入漏洞。该漏洞在被发现之后以太坊基金会立马宣布了停止硬分叉,并商议择日再启动以太坊君士坦丁堡硬分叉。一、导致以太坊延迟硬分叉的EIP1283到底是什么?

EIP的全称是EthereumImprovementProposals,任何人都可以上去提一些对以太坊的改进提案,不过必须得严谨、正式,以太坊君士坦丁堡这次漏洞就是由一个EIP引起的,这个EIP的编号是1283。EIP1283使以太坊虚拟机使执行智能合约的引擎更高效,并降低在以太坊上运行智能合约的成本。该提案是针对SSTORE操作码的,该操作码主要用于合约持久化存储数据,EIP1283为SSTORE操作码设计了更加合理的gas收费方式。详情地址如下:https://eips.ethereum.org/EIPS/eip-1283为什么需要EIP1283?EIP-1283提案由WeiTang(@sorpass)于2018年8月1日创建,作为EIP-1087和EIP-1153的替代方案。EIP-1087由NickJohnson创建,主要是改变EVMSSTORE运行gas费用收取方式,减少过多的gas费用成本;EIP-1153由AlexeyAkhunov创建,相比EIP-1087更加便宜,gas费用计算规则更加简单。EIP-1283提出了在SSTORE上进行gas计量的方案,为数据存储的变化引进更加合理公平的定价方案。其中定义了三个概念:存储槽的原始值:在当前事务发生回滚后会存在的值叫原始值。存储槽的当前值:在使用SSTORE操作码之前存在的值叫当前值。存储槽的新值:在使用SSTORE操作码之后存在的值叫新值。然后以这三个概念为基础,设计了如下处理逻辑:如果当前值等于新值,则扣除200gas。如果当前值不等于新值如果原始值等于当前值如果原始值为0,则扣除20000gas。否则,扣除5000gas。如果新值为0,则在退款计数器中增加15000gas。如果原始值不等于当前值,则扣除200gas。如果原始值不为0如果当前值为0,请从退款计数器中减少15000gas。如果新值为0,请向退款计数器中增加15000gas。如果原始值等于新值如果原始值为0,则将退款计数器中增加19800gas。否则,则在退款计数器中增加4800gas。根据如上的逻辑可以发现,当使用SSTORE操作码的时候如果不改变任何值的时候,只消耗200gas。如果改变了值最终又重置为0的话也只消耗20000+200-19800=400gas。而在之前EIP1087的逻辑中如果使用SSTORE操作码改变了值最终又重置为0的话需要消耗20000+5000-10000=15000gas。显然EIP1283的处理逻辑比EIP1087更加合理,也更加便宜,但是问题就在这里。二、EIP1283漏洞分析

Coinbase:不会退出NFT项目:2月23日消息,加密货币交易所Coinbase表示,不会退出其NFT项目,在发布新一季财报后,Coinbase在与投资者和分析师的最新财报电话会议上回答了一系列有关公司健康状况的问题,其中包括Coinbase NFT平台损失了多少资金、是否有减少亏损的计划、以及Coinbase NFT市场份额等。

根据Dune Analytics数据显示,过去一周Coinbase NFT市场只有41笔交易,Coinbase总裁兼首席运营官Emilie Choi没有透露任何具体项目损失金额数字,仅表示该公司会继续将Coinbase NFT视为一个有价值的项目并探索中长期机会,不过她承认Coinbase现在投入到NFT项目的资源比过去少,“但不会以任何方式认输,Coinbase NFT团队已经开始重新调整资源”。(decrypt)[2023/2/23 12:23:57]

重入漏洞是指在同一笔交易中因两个合约互相调用而导致合约进行重复转账的一种现象,其产生的根源是没有使转账作为事务的最后一个步骤。比如说,如果在转账之后再进行状态变更的话就很容易重入漏洞,最经典的一起事件就是TheDAO事件,所以最安全的做法是一笔事务中只有一笔转账,且在转账之前做好所有状态变更,转账作为最后一个操作进行,如果以这种标准来实现的话,是不会受EIP1283影响的,所以这就是为什么说EIP1283只是可能使某些合约产生重入漏洞隐患。那么,什么样的合约容易产生这种隐患?请看以下Demo。这是一个模拟资金共享服务的合约,资金余额由deposits变量存储,然后由splits变量存储分配比例。比如有一笔资金需要a和b共同分配首先调用init函数存储双方的钱包地址调用deposit函数向通道充钱调用updateSplit函数来改变通道的分配率执行splitFunds函数分配资金如果1号通道的分配率是99,那么执行splitFunds函数的时候给a分配通道中99%的资金,给b分配1%的资金。该合约大概业务就是这样,在EIP1283生效之前,该合约是没有重入漏洞的,EIP1283生效才会存在重入漏洞。前面提到过了,在EIP1283中如果将一个值更改后又重置为0,那么只消耗400gas。再看看是怎么实现按比例分配的:所以我们可以将a账户设置为我们的恶意合约,在合约的fallback函数中调用updateSplit函数来改变通道的分配率,使两个地址都能分到超过通道余额总量的币.比如说我先给a账户分配100%的通道余额,再在a账户合约fallback函数中改变通道分配率,又给b账户分配100%的余额,这样就成功套出了双倍的钱,而且攻击者可以一直套,直到掏空为止。攻击者Demo:Ps:为了节约gas,fallback函数中使用内联汇编来模拟调用updateSplit函数。调用attack函数即可触发重入漏洞。为什么说要EIP1283生效才会产生漏洞呢,因为该合约使用transfer进行转账,transfer转账最多消耗2300gas,在EIP1283生效之前对变量进行更改再重置至少需要15000gas,而生效后只需要400gas,2300gas上限已经足够做一些事情了。三、漏洞复现

Hashflow宣布集成互操作协议Wormhole:12月7日消息,去中心化交易平台Hashflow宣布与互操作性协议Wormhole集成,以提供跨链交易功能。目前Hashflow支持以太坊、Avalanche、Optimism、Arbitrum、Polygon与BNB Chain。而本次合作将使Hashflow用户能够以更低费用在更多链上交换加密货币。(The Block)[2022/12/7 21:29:01]

关于该漏洞的复现,ChainSecurity已经在Github上公开了。先clone下来gitclonehttps://github.com/ChainSecurity/constantinople-reentrancy.git然后README里面会告诉你怎么复现,不过在此之前先得把环境装好,需要环境:1.nodejs(stable)2.npma.truffle:npminstall-gtruffleb.ganache-cli@beta:npmi-gganache-cli@beta不同的系统有不同的环境搭建方式,这里不再赘述,有了以上环境就可以进行复现了,运行以下命令:ganache-cli--hardfork=constantinopletruffletest运行结果:在进行攻击之后成功增加攻击账户内的余额,复现完毕。四、修复方案

Bibox交易所现已支持SEELE通过SeeleN公链充提:据官方消息,SeeleN DAO生态与Bibox交易所达成战略合作。Bibox交易所成为SeeleN DAO生态战略合作交易所,并支持SeeleN DAO生态功能通证SEELE通过SeeleN公链进行充值和提现业务。[2022/7/19 2:22:53]

修复方案预计应该会在以太坊君士坦丁堡中删除与EIP1283有关的更新,目前以太坊开发者还在协商解决,不过笔者认为合约安全最终还是要合约来解决,不能依赖于公链本身,就像前面说的,只要合约采用的是最安全的写法便可以避免这次君士坦丁堡分叉带来的问题。而且目前还没有检测出来有合约正好会触发这个重入漏洞,但不排除这种可能性。参考链接https://medium.com/chainsecurity/constantinople-enables-new-reentrancy-attack-ace4088297d9https://github.com/ChainSecurity/constantinople-reentrancyhttps://eips.ethereum.org/EIPS/eip-1283https://eips.ethereum.org/EIPS/eip-1087

苏州工业园区加快推进数字人民币应用场景落地:金色财经消息,今年以来,苏州工业园区加快落实推进数字人民币试点推广应用,推进各项场景落地。近期,园区不仅在全国率先以数字人民币形式批量拨付政策奖补资金、向相关企业兑现金融产业补贴近8000万元,还积极落地政府采购场景数字人民币应用。近日,园区财政审计局推出全国首例以数字人民币放贷的“园采贷”金融创新产品,仅用一天时间即实现放款。(苏州日报)[2022/7/19 2:21:34]

诺奖得主Steve Hanke:稳定币面临跨币种结算风险:金色财经消息,诺贝尔经济学奖得主Steve Hanke周三在接受雅虎财经采访时表示,由于时间滞后性,稳定币面临跨币种结算风险。这位经济学家警告说,稳定币的跨币种结算风险,因为它们在几分钟内在买卖双方之间流动,但支持这些“稳定”币的资产至少需要一天时间才能结算。Hanke提到了1974年的Bankhaus Herstatt危机事件,拥有8亿美元资产的Bankhaus Herstatt在遭受4.5亿美元的外汇和其他损失之后,被联邦德国当局关闭。Hanke认为,在数字资产生态系统中,与美元挂钩的算法稳定币TerraUST此前与美元脱钩,这使加密市场的其余部分处于风险边缘。(yahoo)[2022/6/30 1:40:22]

标签:GAS以太坊NBAINB0XGAS币以太坊价格币走势图coinbase交易所官网WINB价格

比特币热门资讯
VEIL:红杉刚投的Veil能把去中心化Augur再次带火吗?_Compound Augur

文|张雪编辑|卢晓明最近,基于Augur和0x开发的预测市场平台Veil宣布获得了一笔融资,Paradigm领投,红杉资本和1confirmation跟投.

1900/1/1 0:00:00
GAS:以太坊是如何运作的?(二)_IMI

前言:本文主要阐述当前以太坊的具体运作原理,有助于我们理解以太坊背后的各种概念和操作,适合初学者阅读.

1900/1/1 0:00:00
GOX:门头沟剩余资产20亿,法胖和富豪 Brock Pierce开启抢夺模式_btc交易平台app

编者按:本文来自区块律动BlockBeats,作者:0x28,星球日报经授权发布。历时6年的85万比特币被盗案仍得不到相对合理的解决,涉嫌监守自盗的嫌疑人即将恢复到入狱前的肥胖体形,投资者们的加.

1900/1/1 0:00:00
区块链:星球日报 | 比特大陆回应“吴忌寒创办新公司”系谣言;蚂蚁金服区块链公司落地上海;平安壹账通预计下半年赴港IPO_比特币

头条世界黄金协会报告:比特币不足以成为黄金替代品,加密货币不适合作为避险资产近日,世界黄金协会发布了一份报告,调查了2018年所有主要市场的情况,其中包括黄金和加密货币.

1900/1/1 0:00:00
BIT:2019年第5-7周区块链二级市场报告|U型反弹,临近短期变盘点_bitkeep官网下载流程

2019年第5-7周区块链二级市场报告2019年1月27日-2019年2月16日本期报告重点内容:近三周大盘走势:U型反弹.

1900/1/1 0:00:00
区块链:蔡维德:170家全球银行加入摩根大通稳定币网络,国外区块链金融帝国开始形成_联盟链

170家全球银行愿意加入区块链支付网络我们预测未来会有其他银行发行它们的稳定币。昨天新加坡华侨银行(OCBC)宣布发行内部OCBConeToken.

1900/1/1 0:00:00