本篇文章由Sw/eden的Eric Björk、EOS Tribe的 Eugene Luzgin、HKEOS的 Jae Chung、EOS Rio的Igor Lins e Silva、eosDAC的Michael Yeates以及@jemxpat共同编写。
动机与忧虑
EOSIO是具有突破性和开创性的软件。EOSIO不仅引导了区块链应用程序的新时代,而且为区块链可用性、可扩展性和管理方式创造出新的范例。包括加入本次活动参与者,成千上万人为实现其潜在力,投入了大量的时间和金钱。2018年6月2日至3日,EOS主网推广时期潜在力和可能性的期望值会上升至顶点。
但是EOS主网是独特的潜在攻击对象。 筹募大量资金且长达一年时间的ICO、大型社区参与、身负巨大期望的条件下,很自然地会出现系统受损的恶意者。我们认为慎重考虑会受到攻击的可能性以及针对此类攻击的预防措施是理所当然的。
在eos-bios程序中实施的bootstrap程序会导致严重的漏洞,攻击者可以破坏节点或整个区块链。直接在区块链上发布BP网络有关的过多信息会导致从protocol injection 到 volumetric DDoS所有类型的攻击。
虽然不能100%保证任何系统的安全,但是不建立合理应对的预防措施是不负责任的表现。从本文中,我们想详细解释一些攻击的可能性,证明不安全boot chain测试攻击,并提出更安全的bootstrapping方法。
我们对为此产生的不适或焦虑感到遗憾。将近两个月的时间,我们通过公开或个人telegram试图解释其问题和解决方案,并激励修改完善bios代码。可惜,安全模式的更改没有实现,甚至还被积极反对。只能通过发布攻击损坏区块链的精准、可证明的方法,并展示如何减少其风险。如果我们什么都不做,其失败风险是不堪设想的。
我们与社区分享之前,为了广泛调查eos-bios, 判断这是否仅限于推断,于是我们没有急于公布这些困难。以下内容是由事实证据为基础编写的。
现有eos-bios启动程序中发现的安全缺陷
Eosio的很多功能是由插件提供的。 他们使系统生成区块并相互连接其他节点等。eosio基本软件包括许多插件。区块生成节点时在实时网络中不应该运行不必要的插件,因为某些程序会允许区块链受黑客攻击,而且其中某些插件不应该暴露于公开访问节点上。
其中我们注意到一个插件叫net_api。它提供远程操作插件的api。如果此api在公众网络公开,那么任何能连接此网络的人都可以指示BP连接或断开其他设备。这不异于一个僵尸网络。即使不是eos-bios网络的一部分,Mac mini也可以断开网络中的任何节点。
实时网络中允许此漏洞,意味着攻击者可以准确地阻止区块链功能运作,甚至分割节点以便最终停止网络。Ghostbusters团队在eos-bios设计之初就注意到了此漏洞,并将其告知给EOS加拿大,但是没有任何更变。这是我们无法支持使用eos-bios启动的原因之一。
得知某节点在运行网络插件时的攻击操作示例
运行命令:
cleos -u [peer-url] net peers
返回节点回复列表:
其次获取节点列表:
cleos -u [peer-url] net peers | grep peers
再断开每个对等点:
cleos -u [peer-url] net disconnect host:port
最终可以强制连接到任何其他节点,这也增加了网络不稳定的风险:
cleos -u [peer-url] net connect host:port
建议的解决方案
那么我们是否应该为此感到恐慌而抛弃所有代币呢?当然不。我们已经调查并测试了启动网络相关的潜在的安全风险,同时我们也尝试并讨论了解决上述问题的措施。
鉴于EOS缺乏足够安全的审查,且BP节点存储着敏感的节点私钥,于是我们必须采取额外措施来保护那些生产节点。理论上说,不应允许公共互联网访问BP节点的同时BP进行mesh。因此,我们建议使用基于开源的WireGuard内核VPN软件,超级节点间通过点对点安全通道进行P2P通信。
每个BP节点将连接于1个或多个建立安全连接的full node。这些full node将在开放网络协议上公开,并可以访问整个区块链网络。BP节点不应该在公开网络环境中公开非VPN IP地址。同时,对于容错BP节点应该与其他节点建立几个可信的连接。
第一层(区块生产层)
2个BP:1个生产节点&一个预备节点
BP控制交换机:监控和切换失效设备
第一层节点可以通过VPN(WireGuard)与其他可信节点或full node
除BP API以外,不安装多余软件,其访问仅限于BP控制开关
第二层(P2P层)
Full node传递区块
通过直连通道(WireGuard)连接到第一层节点
通过P2P VPN(WireGuard)安全地mesh到可信任的BP
仅使用History API和Chain API,仅限于第三层的代理服务器
推荐通过公开full node使其进行外部访问,如交易所、门户网络、新入场BP
第三层(API层)
支持HTTP端点的Web服务器
第三层节点应该是纯防火墙,并且没有区块链信息。
通过HTTP(WireGuard)连接我们的第二层节点
使用Patroneos防御基本DDoS和应用层攻击
第四层(公共层)
全球BP负载均衡器(所有流量进入此单点)
在ISP级别控制容量攻击
所有HTTPS(SSL)流量导到第三层服务器
DNS配置(可选)
L4如短TTL的DNS round robin一样简单
结论
我们全身心致力于推出并支持一个稳定、有修复能力的EOS主网。鉴于上述事实以及eos-bios启动过程的不安全性,我们的BP社区强烈反对使用其作为标准启动程序,因为它使任何人得以攻击整块区块链。
作为一个社区,我们有责任确保EOS主网的安全性和恢复能力。使用eos-bios程序将给EOS区块链的启动和EOS持币者带来不必要风险。任何对EOS区块链启动的失败或其不安全性的负面新闻将会对EOS价格以及声誉产生不利影响。
因此我们认为,在该安全缺陷被怀有恶意的第三方利用之前,将任何不安全和不稳定的网络方案剔除,方能维护所有相关者的利益。 同时我们将在启动和运营环节竭尽全力推出安全改进方案。
安全必要性不容忽视,并且必须将其视为首要考虑因素。
参与的BP团队:
· Sw/eden
· EOS Tribe
· HKEOS
· EOS Rio
· Block Matrix
· eosDAC
· Eosmeso
· AcroEOS