btc转化人民币|直指本质,EOS 漏洞的复盘和深层次原因探讨
链闻 ChainNews:
本文详细论述了 EOS 设计理念中的技术漏洞,从合约、节点设计和功能层面深度分析了 EOS 漏洞的必然性。
360 报的 EOS 漏洞,技术层面并不复杂,蛮容易搞懂的攻击逻辑。但是这个漏洞背后却显现了 EOS 设计理念有着一些深层次的安全隐患。
先简单复盘下漏洞本身:文尾的可以看原始的 360 英文报告
根源是在
https://github.com/EOSIO/eos/blob/master/libraries/chain/webassembly/binaryen.cpp#L78 这行代码,有个数组越界的内存漏洞:
因为 binaryen.cpp 这个代码是负责解析 EOS 智能合约的,所以攻击者可以:
先创建一个「恶意」的(即非正常格式的)智能合约;
把「恶意」的合约上传到 EOS 网络让超级节点来解析,进而触发越界,形成 EOS WASM 虚拟机进程的内存漏洞;
由于 EOS 为了性能的考虑,常用的内存缓解技术没有做到位,攻击者可以进一步在虚拟机进程里控制整个超级节点的机器,达到远程代码执行的效果。详情可参考下图漏洞发现者的解释。
而 EOS 官方的漏洞修复也是很奇葩的,BM 在 GitHub 上创建了这样一个 bug issue:https://github.com/EOSIO/eos/issues/3498 根据标题,就不难发现,BM 根本没修复根源的漏洞本身,却只是改了 assert 在 release 版也触发(简单可以这样理解:房子坏了没修房子,却只加强了门口的保安)
以致于漏洞发现者都说,你这种修复没有本质上解决问题(比如他认为的,在 32 位机器上还可以攻击):
说完了漏洞本身,我们再来探讨下深层次的原因(做安全的都知道,几乎没有孤立的漏洞,本质的问题不解决,还会有类似的「变种漏洞」在之后的日子里被发现)
1. 这个攻击的一大亮点是,合约本身可以是「恶意」的,是用来攻击节点的。
那为什么「恶意合约」这个威胁(threat model)会对 EOS 特别显著?似乎之前的其他区块链都还没遇到这个 threat model 的。
因为 EOS 部署合约是零成本的,任何人只要锁定一定量的 EOS 都可以免费发布合约来让超级节点解析。这样攻击者几乎是零成本。所以这个 threat model 对 EOS“特别”适用。
2. EOS 的 21 个超级节点的设计,会让这种攻击在现实世界里更容易实行。
EOS 超级节点的本质,就是用中心化来提高性能。可是无论每个超级节点背后有多少机群,一定有个主控端的机器。这样,攻击者只需要知道怎么破解每个主控机器的内存保护措施就可以了,反正最差情况也就适配 21 种。而相对地,就拿 ETH 举例好了:ETH 区块链网络现在有 18266 个节点,而这些节点又有下图这么多不同的客户端版本和机器版本,光适配这些不同配置的 exploit 就够黑客头疼的了 写 PoC 是相对简单的,现实运行是麻烦的,所以安全问题有时候是被一定程度地夸大了的。
而且,由于 EOS 的中心化,超级节点会保存一般区块链节点不会有的太多的重要信息,一旦攻破,后果比攻破一个或多个普通区块链节点问题严重的多。
3. EOS 为啥不用更严格的沙盒(sandbox)来限制内存漏洞呢?
因为 EOS 的智能合约功能太多了,除了跟操作系统层有很多交互,合约本身还支持异步执行(呵呵,以后「并发漏洞」也是个头疼的事情哦)
结语:想做的功能越多,被攻击的危险就越大。有时候,设计越是简单,往往越有力量。想想比特币为什么是最安全的吧,因为人家只想安安静静地做个「美男子」。
360 英文报告:http://blogs.360.cn/blog/eos-node-remote-code-execution-vulnerability/
更多精彩内容,关注链闻 ChainNews 公众号(id:chainnewscom),或者来微博@ 链闻 ChainNews 与我们互动!转载请注明版权和原文链接!
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。

链闻研究院



