导语:Boston大学和Pittsburgh大学的研究人员发表论文描述了一种针对以太坊的eclipse攻击。
简介
Eclipse攻击是一种网络级的攻击,攻击者模仿所有其他节点的入流量和出流量,达到将受害者与网络上的其他节点隔离的目的。这种攻击意味着通过让最新的区块信息不能到达节点来达到隔离节点的目的。事实上,比特币网络也易受到eclipse攻击。但在以太坊网络上,两个节点就足以发起eclipse攻击。
为什么以太坊易受到eclipse攻击?
根据一般的理解,与比特币网络相比,以太坊的P2P网络对于eclipse攻击是更有弹性的。因为比特币节点默认只有8个出连接,而且以太坊P2P网络使用了加密认证消息,比特币P2P网络并没有认证网络消息。也就是说,比特币P2P网络易受到针对完整性的MIMT攻击和BGP篡改攻击。
但是,常识很多都是错的。理论证明,以太坊的P2P网络是没有比特币网络安全的。在以太坊网络中,只需要控制两个不同IP地址的节点就可以发起off path的eclipse攻击。而在比特币网络中,发现off path的eclipse攻击则需要控制上百个不同IP地址的主机才可以完成。
攻击
一共有两种off path eclipse攻击和一种修改时间的攻击。
独占连接的eclipse攻击
攻击者利用了连接以太坊客户端的所有网络连接都可能是其他节点的incoming。所以攻击者等到受害者设备重启时,模拟从攻击者节点到受害者设备的入连接。当受害者的所有连接slot都被该攻击者占有时就被eclipse攻击了。
占有table的eclipse攻击
以太坊网络还受到一种低资源的eclipse,攻击者使用特别伪造的节点id集重复地ping受害者设备。当受害者设备重启时,大概率会将13个出连接与攻击者相连。然后攻击者用入连接来占完受害者的所有连接就完成了对节点的eclipse攻击。
修改时间的eclipse攻击
如果本地始终比以太坊网络上的其他节点早20秒,那么也可以对节点发起eclipse攻击。这种攻击是通过修改以太坊网络上节点所运行的NTP协议来完成的。
Eclipse攻击的启示
Eclipse攻击完成了对consensus一致性算法、区块链二层协议、以及smart contracts契约的攻击。
一致性算法
Eclipse攻击可以用来攻击区块链的一致性算法,还可以作为自私挖矿(double spending and selfish mining)的最优恶意策略。
区块链二层协议
在区块链二层协议中,一对用户将交易信息放在区块链上来建立两个用户的支付通道。用户可以用没有放在区块链上的交易互相支付(on blockchain),这种off-blockchain的支付非常迅速,因为不受到区块链相关的性能瓶颈的影响。最后,将反映币平衡的支付信息放在区块链上,支付通道就关闭了。该协议的安全性安全性要求在支付通报关闭后不能有off-blockchain的支付。因此,攻击者可以欺骗受害者让受害者以为支付通道没有关闭,而没有收到eclipse攻击的网络节点可以看到支付通道关闭了。如果受害者是商户的话,那么攻击者就可以在不支付的情况下获得商品。
对smart contracts契约的攻击
以太坊的smart contracts有很多独特的特性。比如,smart contracts可以含有表示状态的变量,而状态可以根据以太坊区块链上的交易信息进行更改。有研究发现,如果用户看到的区块链是不同的,那么以太坊smart contracts就可以被攻击。经过尝试,eclipse攻击可以用来注入这些不一致中。
对策
1. 限制最大的incoming TCP连接数量,要求客户端有incoming和outgoing TCP连接。
2. IP与ECDSA key一对一映射。因为在不扩充资源的前提下可以创建无数的节点ID,然后每个节点以不同的IP地址运行。为了修复这个问题,研究人员建议应用IP和ECDSA key之间严格的一对一映射。
3. 不公开节点ID与表中bucket之间的映射。节点ID与bucket映射继承自Kademlia协议,节点a和节点b之间的距离是在反映在节点b的table的bucket中的。
这些对策不能预防eclipse攻击,只能增加发动eclipse攻击所需要的节点,即增加实施eclipse攻击的难度。
更多攻击细节、预防措施和实验数据参见论文Low-Resource Eclipse Attacks on Ethereum's Peer-to-Peer Network。