P2P协议的异形攻击漏洞
同许多的区块链项目一样,墨客MOAC的p2p底层也采用了Kademlia作为分布式哈希表的实现。
最近由慢雾安全团队提出的针对区块链项目p2p网络的异形攻击方法,其实早在去年就已经被墨客底层团队所发现。
当时墨客的母链节点(vnode),在处理恶意握手的情况时,其地址池也会被其他Kademlia网络(如太坊节点,以太经典等)中的节点污染,同时这样的污染会在整个墨客的vnode网络自动扩散。
被污染的地址池会极大的降低墨客母链节点间的连通性,从而导致scs子链之间的通信障碍。
严重的情况下,由于同属于一个子链的scs节点之间无法通信,会导致子链分叉的情况发生。针对这一情况,墨客底层团队提出了多种解决方案。
在综合考虑了安全性,兼容性等因素之后,最终采用了在母链节点中加入动态黑名单的方案,来阻止地址池的污染和扩散。
MOAC动态黑名单
就是在vnode程序中动态的维护一个同样采用Kademlia网络但与墨客p2p协议不兼容的节点列表,其中包括以太坊节点,以太经典节点等。
当vnode程序探测到恶意握手发生时,发起恶意握手的节点随即被加入黑名单,并切断与vnode的通信连接。之后,如果该节点继续发起新的恶意握手,则会在建立连接的阶段就被中止通信。
随着以太坊等Kademlia网络中的节点不断变化,vnode维护的黑名单也会不断更新变化,从而对本身的地址池提供保护,消除地址池污染的威胁。
采用该方案后,对于墨客网络中相邻的vnode节点发起的地址池请求,将始终返回没有被污染的地址列表,解决了污染扩散的问题。
该方案在进过几轮的内部测试,testnet测试后,已经与3月6日随1.0.8版本发布。
鉴于慢雾安全团队已经将攻击的详细步骤公开,黑客可以据此编写自动化的攻击脚本来实施攻击。
墨客底层团队在这里强烈建议所有运行vnode的单位(特别是矿场)与个人,尽快将vnode版本升级至1.0.9或以上,以避免不必要的安全威胁和经济损失。
墨客团队:
这个问题之前做p2p优化的时候已经注意到。那时我们的vnode节点k桶也是大量被以太坊地址污染的,导致我们p2p网络的性能较差,因此之前子链常常因为无法相互通信而产生分叉。
3月份发布的1.0.8版本已经对这个问题做了防护,主要是在上文的第二步k桶的污染这里做了隔离,从而保证vnode的k桶一直都是干净的。徐卿最近的几次测试,p2p网络的性能都较以往有大幅提高。之后所有新的项目方的部署,包括filestorm, 都是用的1.0.8以上的版本,应该是对这个攻击免疫的。
井底望天评论:
你用p2p的话,就会找到自己的一些邻居,然后你们之间可以交换信息,达成共识。
但是如果你发现的一堆假邻居呢?墨客解决了难题,对整个行业有重大贡献。