《我学区块链》—— 二十四、以太坊安全之 Geth 客户端 DoS 漏洞

二十四、以太坊安全之 Geth客户端DoS漏洞

  在 Geth 客户端导致节点崩溃的高危漏洞后,以太坊又因为 EXTCODESIZE 操作码问题,而受到 DDoS 攻击。

geth-ddos

  这次攻击的现象是,矿工和节点需要花费很长的时间(20~60秒)来处理一些区块。造成攻击的原因是一个 EXTCODESIZE 操作码,它具有相当低的 gas 价格,需要节点从磁盘中读取状态信息。攻击交易调用此操作码的频率大约是 50000 次每区块。这样的后果是,网络已经大大放缓了,但却没有共识故障或内存超载发生。目前,已经确定了几个可持续的中期修复路线,并已有开发者正在实施。

  故障发生后,以太官方建议大家切换至 Parity 客户端进行挖矿,并使用以下配置:

–cache-size-db 1024 –gas-floor-target 1000000 –gasprice 50000000000

  如果要继续使用 geth 客户端,可以使用以下设置:

–cache 1024 –targetgaslimit 1000000 –gasprice 50000000000


或

–cache 1024 –targetgaslimit 1500000 –gasprice 20000000000

  关于 geth 的配置,前者是 Jeffrey Wilcke 给出的,后者是以太坊创始人 Vitalik Buterin 给出的。

  与此同时,当 bug 发现后,Geth 的开发者发布了新的软件版本,但其升级率却很低,这会使那些运行兼容拜占庭功能的节点在之后更加容易遭受 DoS 攻击。

  究其原因,这个漏洞源于新的拜占庭功能中的一个疏忽,致使这个 bug 可能会被那些想要使以太坊节点离线的攻击者所利用。

  下面再补充一些相关信息:

  2015年,以太坊创始人 Vitalik Buterin 及其团队推出以太坊完整发展路线分为四个阶段,即 ”前沿”(Frontier)、”家园”(Homestead)、”大都会”(Metropolis)和 ”宁静”(Serenity)。据悉,由于开发精力受限,升级 “大都会” 需要经过两次硬分叉,即 “拜占庭” 硬分叉与 “君士坦丁堡” 硬分叉。“君士坦丁堡” 硬分叉时间未定,预计在 2018年。

  以太坊已多次通过硬分叉来升级。区块链以节点连接,硬分叉后用户将使用新的共识链条。以太坊的硬分叉是改变以太坊底层协议,创建新的规则,提高整个系统。协议在某个特定区块上被激活。所有的以太坊客户端都需要升级,否则将停留在遵循旧规则的老链上。

  硬分叉存在风险,目前以太坊平台已执行了四次硬分叉,其中一次导致替代链以太坊经典(ETC)的诞生。硬分叉并不一定会导致链条断裂,产生新的币种。但是2016年以太坊硬分叉提出的修改方案在社区存在很大争议,最终导致链条分裂为以太坊和以太坊经典,以太坊经典成为与以太坊竞争的加密数字货币。

  “拜占庭”升级得到社区一致同意,“拜占庭”硬分叉将只是软件的更新,基本不会导致以太坊发生分裂产生新的以太币。升级后,早期软件版本将不再与新网络兼容。据以太坊分叉追踪器(Ethereum fork tracker)数据,“拜占庭”之前的区块链已经停止挖矿,这也有效的降低了分叉出新货币的可能。

  “拜占庭”升级的关键在于网络节点的更新,以太坊社区要确保节点客户端能够准备好这次升级。以太坊客户端主要有Go ethereum(Geth)和Parity,还有以太坊创始人Vitalik Buterin所创建的基于python的客户端。在“拜占庭”硬分叉前夕,Geth软件客户端的开发者发现了一个DoS攻击漏洞。据CoinDesk所述,故障软件可能会导致共识问题,导致网络分区或将平台暴露来阻断服务攻击。Geth随即发布了一个新的软件版本。开发者表示“拜占庭”硬分叉正在平缓进行。

  此次“拜占庭”升级将为以太坊平台引进9大关键改进协议(EIP)。“拜占庭”硬分叉是以太坊升级大都会的第一阶段,本次硬分叉将为智能合约的开发者提供灵活的参数,对于开发者更为友好。

  硬分叉后以太坊的具体变化包括:

  1、增加‘REVERT’操作符,允许处理错误不需要花费掉所有的gas(EIP 140)

  2、现在交易接收方可以包括一个状态字段,用以指出交易成功还是失败(EIP 658)

  3、在alt_bn128 (EIP 196)和配对检查上(EIP197)增加椭圆曲线和标量乘法,允许ZK-Snarks和其它加密数

  4、支持大数模幂(EIP 198),实现RSA签名验证和其它加密应用。

  5、支持可变长度返回值(EIP 211)

  6、增加‘STATICCALL’操作符,允许对其它合约进行非状态改变调用(EIP 214)

  7、修改难度调整公式,将叔块计算在内(EIP100)

  8、冰河期/难度炸弹延期一年,区块奖励从5个以太坊降到3个以太坊(EIP 649)

另,Parity挖矿指南:

https://docs.google.com/document/d/1j3v8bKjXQcMNNdx5Juwo3PRRCcHy8XcA6R9-0W7NCso/edit

https://github.com/ethcore/parity/wiki/Mining
  

阅读更多

更多精彩内容