Ethereum 君士坦丁堡安全漏洞对 FOD 的影响

cocleon 2019-06-30

FOD 与 Ethereum 的前世今生

FOD 是 FIBOS 生态中的稳定币,与 USDC 1:1 锚定,其服务于需要稳定价值衡量的应用场景。FOD 通过跨链网关将 ETH 链上的 USDC 与 FIBOS 链上的 FOD 价值绑定。这相当于 1:1 锁定了流通 FOD 同等数量的 USDC,并提供稳定即时的双向兑换。

Ethereum 君士坦丁堡升级对 FOD 的影响

本次 Ethereum 君士坦丁堡升级是 Ethereum 由大都会转向宁静前的最后一次升级,升级采取的硬分叉模式,为了防止用户在升级时转账出现问题,我们决定暂时关闭 FOD 通道。由于在 2019 年 01 月 16 日凌晨,Ethereum 君士坦丁堡版本被曝出安全漏洞因此 FOD 通道重启只能延期,重启日期需要根据 Ethereum 基金会对这次安全漏洞对处理结果待定。

Ethereum 君士坦丁堡安全漏洞

智能合约中 address.transfer(...)address.send(...) 存在重入攻击漏洞。

漏洞产生的情况

  1. 合约中有一个函数 A,A 中在改变状态后调用了 transfer/send 函数。这种情况有的时候不是很明显,比如二次 transfer 或者内部调用另一个智能合约
  2. 必须存在一个攻击者可访问的函数 B,其中(a)改变状态,(b)状态改变与函数 A 的状态改变冲突。
  3. 函数 B 执行消耗需要小于 1600 gas (2300 gas 限制 - 700 gas(为 call 提供的))

为什么此次升级会产生安全漏洞

在 Ethereum 拜占庭版本每个存储操作需要消耗至少 5000 gas,而 transfer/send 操作 gas 消耗要求小于 2300,在执行上述操作的时候会因为 gas 限制而无法执行。

在 Ethereum 君士坦丁堡版本中,改良了 EVM 机制,从而减少了 gas 的消耗,因此出现了重入攻击的安全漏洞。

Parity 客户端升级方法

在这次安全漏洞之前的 Parity 客户端包含了 Ethereum 君士坦丁堡版本的升级并会在区块高度达到 7080000 时激活。针对这次的安全漏洞,Parity 官方紧急发布了新的 Parity 版本。

Parity 升级方法
升级指令:

bash <(curl https://get.parity.io -L) -r stable

验证是否更新成功

parity -v

得到的结果查看版本是否是 Parity-Ethereum/v2.2.7-stable

Parity Ethereum
  version Parity-Ethereum/v2.2.7-stable-b00a21f39-20190115/x86_64-macos/rustc1.31.1
Copyright 2015-2018 Parity Technologies (UK) Ltd.

相关推荐

XinLianOrg / 0评论 2017-12-04