以太坊的节点发现机制基于Kademlia
发布时间:2019/9/10 11:34:41 访问次数:2122
以太坊的节点发现机制基于Kademlia,但其目的却不同,Kademlia旨在成为在分布式对等网络中存储和查找内容的手段,而以太坊仅用于发现新的节点。由于以太坊的节点是由其公钥表示的,并且不受IP限制,因此在一个机器上可以同时存在很多节点。攻击者在很少的服务器上制作出很多的节点,并积极的ping受害者的服务器。通过Kademlia协议,攻击者的节点信息将存储并填充在受害者节点列表中。下一步就是让受害者重启机器,手段包括断电、ddos攻击等等。重启后,攻击者再不停的ping被害者的节点以建立tcp连接,一旦被害者所有的tcp连接都是攻击者制造的,那么就达到了把被害者与正常的网络隔离的目的,当然最大的目的应该还是为了双花。
网上有很多关于日蚀攻击的详细介绍,在这里不做赘述。
在刚才提到的论文中,提到了以太坊的geth1.8.0解决了日蚀攻击,于是作者拿1.8.0和1.7.3做对比,理清了以太坊解决这个问题的做法。
如果说互联网是信息的载体,那么区块链就是价值的载体,所有的Money都存储在网络之上,早就被黑客们觊觎了很久。
不过,幸运的是,至今还没有黑客可以攻破过比特币的网络,使之瘫痪,简单的依靠算力来实施51%攻击的话,成本大的惊人,而且攻破变得无利可图。
除了我们所熟知的51%算力攻击之外,其实还有一种叫作日蚀攻击的存在,它的神奇之处在于并不需要大的算力便可以完成双花攻击。
那么,这是怎么一回事呢?
日蚀攻击
波士顿大学副教授Sharon Goldberg曾发表过一篇题为“对以太坊点对点网络进行的低资源日蚀攻击”的论文,介绍了攻击手法。
日蚀攻击是来自网络层的攻击,它攻击的点不是整个网络,不会使网络瘫痪,而是单个或少数的节点,使整个p2p网络被隔离开。
说到这里,我们先了解什么是p2p网络。
以上就是一个p2p网络,整个网络是由一个一个对等的节点连续而成的,每个节点就是我们说的一个区块帐本。
那么,当你启动一个新节点的时候,你是怎么知道这个网络在哪,怎么加入网络呢?
所以,在程序当中有配置一些种子节点IP,通过这些种子节点IP建立TCP连接,然后再定期的与种子节点交换各自已连接的其它节点IP,这样你就有可能连接到除种子节点以外的节点了。
同时,每个节点都在本地维护了一个与自己连接的节点IP列表。
在交换节点列表中,其实就是很多不同策略的。可以随机找一个节点连接,也可以按一特定算法帅选出。其最好的结果当然是要足够的随机,分散化。
以太坊的节点发现机制采用了Kademlia协议,也叫K桶算法,这个协议比较复杂,财神也是看了几遍也没看太懂。但是它用公钥生成节点ID,并与其它节点采用异或取值计算节点与节点的逻辑距离,来分散在不同的桶子里。
它有一个缺点就是,与IP地址无关。因此一台机器上便可以运行很多的节点(作恶成本低),我们称这些为“作恶节点”吧。作恶节点不断的与某个受害节点相连接,然后把受害节点本地保存的列表中其它的IP都挤出去,
因为K桶算法能保存的节点信息有限,当受害节点的本地列表全部被替换为“作恶节点”的IP时,那么就等于把这个节点与整个p2p网络隔离开了。
然后,只要受害节点重启程序,它就会断开之前的连接,并在本地列表中选出部分节点进行TCP连接,但是无论选谁,都是“作恶节点”。受害节点发出的所有交易信息,均只能发给作恶节点,同时它接收的区块也是作恶节点传输来的。
“日蚀攻击”能造成哪些后果
如“日蚀攻击”成功实施,那么恶意方就能“选择受害者的挖矿能力并用它攻击区块链的共识算法”或者实现“双花攻击和自私挖矿”。
另外,研究人员解释称,“日蚀攻击”能诱骗受害者查看不正确的以太网交易细节并诱骗卖家向攻击者发送尚未完成交易的产品。
最后但并非最不重要的一点是,“日蚀攻击”还能通过覆盖被遮蔽节点的区块链视图针对以太坊合约发动攻击,从而延迟该节点对可能为智能合约内部计算所使用的多种参数的视图,导致产生遭攻击者利用的不正确的智能合约内容。
修复方案已发布
研究人员不仅发布了自己的研究成果,还和以太坊基金会一起默默地修复了这些问题。
研究人员表示已经推荐了多种应对措施,而且开发人员已经将其中一些建议应用在了两周前发布的在以太坊节点上运行的软件geth 1.8.0上。
这些应对措施虽然不能完全阻止“日蚀攻击”,但它们把执行此类攻击所需的恶意节点数量从两个增加到数千个。
更多详情可查看由Marcus等人撰写的论文《针对以太坊对等网络的低资源日蚀攻击》。
下图就是一个日蚀攻击图,受害节点连续的所有节点均来自作恶节点。
简单攻击手法:便是直接黑了你的电脑,把你节点的配置文件给改了,让你只能连接作恶节点。
复杂的办法是:黑客知道你的IP地址后,不断的用作恶节点与你建立连接,然后把你本地的K桶列表填满,把其它正常的节点都挤出去了(漏洞),然后再ddos攻击迫使你觉得电脑太卡了,一旦你重启了便会重新连接其它节点,但是从你的本地列表中选出来节点全是被感染的作恶节点。(这一切都是神不知鬼不觉)
这时,作恶节点只便可以构造一些非法的交易,比如大额转帐给受害节点,并且传给它后续的区块,以让受害节点以为区块已经被确认了,以为自己收到ETH。
这时,作恶节点仍可双花这些ETH。受害节点连接的只是一个小的网络,与外面的帐本并不是同步的,但你发现的时候可能已经晚了。
好在,这个漏洞被发现后,在Geth 1.8.1 版本后便修复了。
而比特币网络是否也存在日蚀攻击呢?当然,任何一个网络都会存在日蚀攻击。不过比特币网络需要大量真实拥有IP地址的节点,攻击才有效,这也就是说攻击成本依然很高。
所以,我们在接手大额转帐的时间,应该去主流的区块链浏览器当中确认一下是否到帐,不要以钱包接收成功为准。在开发主链的过程当中,也应该考虑到这一点。
免责声明:
凡标注“来源:互联网转载”的文章均来自其他媒体,转载的目的在于传递更多信息,并不代表本站观点,图片来源于网络收集整理,版权归原作者所有;如果发现本站有涉嫌抄袭,侵权内容,请发送邮件:602684288@qq举报,并提供相关证据,一经查实,立刻删除涉嫌侵权内容。
以太坊的节点发现机制基于Kademlia,但其目的却不同,Kademlia旨在成为在分布式对等网络中存储和查找内容的手段,而以太坊仅用于发现新的节点。由于以太坊的节点是由其公钥表示的,并且不受IP限制,因此在一个机器上可以同时存在很多节点。攻击者在很少的服务器上制作出很多的节点,并积极的ping受害者的服务器。通过Kademlia协议,攻击者的节点信息将存储并填充在受害者节点列表中。下一步就是让受害者重启机器,手段包括断电、ddos攻击等等。重启后,攻击者再不停的ping被害者的节点以建立tcp连接,一旦被害者所有的tcp连接都是攻击者制造的,那么就达到了把被害者与正常的网络隔离的目的,当然最大的目的应该还是为了双花。
网上有很多关于日蚀攻击的详细介绍,在这里不做赘述。
在刚才提到的论文中,提到了以太坊的geth1.8.0解决了日蚀攻击,于是作者拿1.8.0和1.7.3做对比,理清了以太坊解决这个问题的做法。
如果说互联网是信息的载体,那么区块链就是价值的载体,所有的Money都存储在网络之上,早就被黑客们觊觎了很久。
不过,幸运的是,至今还没有黑客可以攻破过比特币的网络,使之瘫痪,简单的依靠算力来实施51%攻击的话,成本大的惊人,而且攻破变得无利可图。
除了我们所熟知的51%算力攻击之外,其实还有一种叫作日蚀攻击的存在,它的神奇之处在于并不需要大的算力便可以完成双花攻击。
那么,这是怎么一回事呢?
日蚀攻击
波士顿大学副教授Sharon Goldberg曾发表过一篇题为“对以太坊点对点网络进行的低资源日蚀攻击”的论文,介绍了攻击手法。
日蚀攻击是来自网络层的攻击,它攻击的点不是整个网络,不会使网络瘫痪,而是单个或少数的节点,使整个p2p网络被隔离开。
说到这里,我们先了解什么是p2p网络。
以上就是一个p2p网络,整个网络是由一个一个对等的节点连续而成的,每个节点就是我们说的一个区块帐本。
那么,当你启动一个新节点的时候,你是怎么知道这个网络在哪,怎么加入网络呢?
所以,在程序当中有配置一些种子节点IP,通过这些种子节点IP建立TCP连接,然后再定期的与种子节点交换各自已连接的其它节点IP,这样你就有可能连接到除种子节点以外的节点了。
同时,每个节点都在本地维护了一个与自己连接的节点IP列表。
在交换节点列表中,其实就是很多不同策略的。可以随机找一个节点连接,也可以按一特定算法帅选出。其最好的结果当然是要足够的随机,分散化。
以太坊的节点发现机制采用了Kademlia协议,也叫K桶算法,这个协议比较复杂,财神也是看了几遍也没看太懂。但是它用公钥生成节点ID,并与其它节点采用异或取值计算节点与节点的逻辑距离,来分散在不同的桶子里。
它有一个缺点就是,与IP地址无关。因此一台机器上便可以运行很多的节点(作恶成本低),我们称这些为“作恶节点”吧。作恶节点不断的与某个受害节点相连接,然后把受害节点本地保存的列表中其它的IP都挤出去,
因为K桶算法能保存的节点信息有限,当受害节点的本地列表全部被替换为“作恶节点”的IP时,那么就等于把这个节点与整个p2p网络隔离开了。
然后,只要受害节点重启程序,它就会断开之前的连接,并在本地列表中选出部分节点进行TCP连接,但是无论选谁,都是“作恶节点”。受害节点发出的所有交易信息,均只能发给作恶节点,同时它接收的区块也是作恶节点传输来的。
“日蚀攻击”能造成哪些后果
如“日蚀攻击”成功实施,那么恶意方就能“选择受害者的挖矿能力并用它攻击区块链的共识算法”或者实现“双花攻击和自私挖矿”。
另外,研究人员解释称,“日蚀攻击”能诱骗受害者查看不正确的以太网交易细节并诱骗卖家向攻击者发送尚未完成交易的产品。
最后但并非最不重要的一点是,“日蚀攻击”还能通过覆盖被遮蔽节点的区块链视图针对以太坊合约发动攻击,从而延迟该节点对可能为智能合约内部计算所使用的多种参数的视图,导致产生遭攻击者利用的不正确的智能合约内容。
修复方案已发布
研究人员不仅发布了自己的研究成果,还和以太坊基金会一起默默地修复了这些问题。
研究人员表示已经推荐了多种应对措施,而且开发人员已经将其中一些建议应用在了两周前发布的在以太坊节点上运行的软件geth 1.8.0上。
这些应对措施虽然不能完全阻止“日蚀攻击”,但它们把执行此类攻击所需的恶意节点数量从两个增加到数千个。
更多详情可查看由Marcus等人撰写的论文《针对以太坊对等网络的低资源日蚀攻击》。
下图就是一个日蚀攻击图,受害节点连续的所有节点均来自作恶节点。
简单攻击手法:便是直接黑了你的电脑,把你节点的配置文件给改了,让你只能连接作恶节点。
复杂的办法是:黑客知道你的IP地址后,不断的用作恶节点与你建立连接,然后把你本地的K桶列表填满,把其它正常的节点都挤出去了(漏洞),然后再ddos攻击迫使你觉得电脑太卡了,一旦你重启了便会重新连接其它节点,但是从你的本地列表中选出来节点全是被感染的作恶节点。(这一切都是神不知鬼不觉)
这时,作恶节点只便可以构造一些非法的交易,比如大额转帐给受害节点,并且传给它后续的区块,以让受害节点以为区块已经被确认了,以为自己收到ETH。
这时,作恶节点仍可双花这些ETH。受害节点连接的只是一个小的网络,与外面的帐本并不是同步的,但你发现的时候可能已经晚了。
好在,这个漏洞被发现后,在Geth 1.8.1 版本后便修复了。
而比特币网络是否也存在日蚀攻击呢?当然,任何一个网络都会存在日蚀攻击。不过比特币网络需要大量真实拥有IP地址的节点,攻击才有效,这也就是说攻击成本依然很高。
所以,我们在接手大额转帐的时间,应该去主流的区块链浏览器当中确认一下是否到帐,不要以钱包接收成功为准。在开发主链的过程当中,也应该考虑到这一点。
免责声明:
凡标注“来源:互联网转载”的文章均来自其他媒体,转载的目的在于传递更多信息,并不代表本站观点,图片来源于网络收集整理,版权归原作者所有;如果发现本站有涉嫌抄袭,侵权内容,请发送邮件:602684288@qq举报,并提供相关证据,一经查实,立刻删除涉嫌侵权内容。
热门点击
- IC 7400工作及其应用
- 显示技术中的显示器件种类繁多,
- 数据采集系统是智能仪器的重要组成部分
- 华为手机芯片一部分是自己生产的称为“华为麒麟
- 零序电容电流补偿法
- 差分对的详细分析线电感和电容的分析
- 各种电子电路都需要直流电源供电
- 2020年,中国芯片产业与国际先进水平之间的
- OPT3007超薄环境光传感器
- 逻辑分析仪的分类
推荐技术资料
- 单片机版光立方的制作
- N视频: http://v.youku.comN_sh... [详细]