btc钱包bcc钱包错误|EOS 漏洞的简单复盘和原因探讨
360 报的 EOS 漏洞,技术层面并不复杂,很容易懂它的攻击逻辑。但是这个漏洞背后却显现了 EOS 设计理念有着一些深层次的安全隐患。
先简单复盘下漏洞本身:
根源是在这行代码,有个数组越界的内存漏洞:

因为 binaryen.cpp 这个代码是负责解析 EOS 智能合约的,所以攻击者可以:
1. 先创建一个「恶意」的(即非正常格式的)智能合约;
2. 把「恶意」的合约上传到 EOS 网络让超级节点来解析,进而触发越界,形成 EOS WASM 虚拟机进程的内存漏洞;
3. 由于 EOS 为了性能的考虑,常用的内存缓解技术没有做到位,攻击者可以进一步在虚拟机进程里控制整个超级节点的机器,达到远程代码执行的效果。

漏洞发现者的解释
而 EOS 官方的漏洞修复也是很奇葩的,BM 在 GitHub 上创建了这样一个 bug issue:根据标题,就不难发现,BM 根本没修复根源的漏洞本身,却只是改了 assert 在 release 版的触发(简单可以这样理解:房子坏了没修房子,却只加强了门口的保安)

漏洞发现者说,这种修复没有本质上解决问题(他认为,在 32 位机器上还可以攻击):

说完漏洞本身,再来探讨下深层次的原因(做安全的都知道,几乎没有孤立的漏洞,本质的问题不解决,还会有类似的「变种漏洞」在之后的日子里被发现)
一、这个攻击的一大亮点是,合约本身可以是「恶意」的,是用来攻击节点的。那为什么「恶意合约」这个威胁(threat model)会对 EOS 特别显著?
因为 EOS 部署合约是零成本的,任何人只要锁定一定量的 EOS 都可以免费发布合约来让超级节点解析。这样攻击者几乎是零成本。所以这个 threat model 对 EOS“特别”适用。
二、 EOS 的 21 个超级节点的设计,会让这种攻击在现实世界里更容易实行。
EOS 超级节点的本质,就是用中心化来提高性能。可是无论每个超级节点背后有多少机群,一定有个主控端的机器。这样,攻击者只需要知道怎么破解每个主控机器的内存保护措施就可以了,反正最差情况也就适配 21 种。而相对地,拿 ETH 举例:ETH 区块链网络现在有 18266 个节点,而这些节点又有很多不同的客户端版本和机器版本,光适配这些不同配置的 exploit 就够黑客头疼的, 写 PoC 是相对简单的,现实运行是麻烦的,所以安全问题有时候是被一定程度地夸大了的。
而且,由于 EOS 的中心化,超级节点会保存一般区块链节点不会有的太多的重要信息,一旦攻破,后果比攻破一个或多个普通区块链节点问题严重的多。
三、EOS 为啥不用更严格的沙盒(sandbox)来限制内存漏洞呢?
因为 EOS 的智能合约功能太多了,除了跟操作系统层有很多交互,合约本身还支持异步执行,「并发漏洞」也是个头疼的事情。
想做的功能越多,被攻击的危险就越大。有时候,设计越是简单,往往越有力量。
链闻 ChainNews:提供每日不可或缺的区块链新闻。
原文作者:道
链闻编译:YY
版权声明:文章为作者独立观点,不代表 链闻 ChainNews 立场。
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。

链闻速递



