浅谈几种区块链网络攻击以及防御方案之日蚀攻击
旧博文,搬到 csdn
原文:http://rebootcat.com/2020/04/12/network_attack_of_blockchain_eclipse_attack/
写在前面的话
自比特币诞生到现在,比特币(网络)经历过大大小小非常多次的攻击,尤其在比特币诞生之初的几年,并且随着比特币价格的一路飙涨,黑客针对比特币网络的攻击就一直没有停止过。据估算,目前大约有 350 ~ 400 万比特币永久丢失,价值大约 240 ~ 280 亿美元。当然其中不只有由于黑客的攻击导致的丢失,毕竟比特币最初的几年很多人都没有意识到比特币的价值,很多的私钥都遗失了。
本文就谈一下目前几种区块链网络攻击,以及其防御方案。
本文尽量用简单易懂的白话来描述,也仅代表我个人的看法,欢迎探讨。
同系列:
- 浅谈几种区块链网络攻击以及防御方案之51%攻击
- 浅谈几种区块链网络攻击以及防御方案之日蚀攻击
- 浅谈几种区块链网络攻击以及防御方案之女巫攻击
- 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击
- 浅谈几种区块链网络攻击以及防御方案之其它网络攻击
日蚀攻击(Eclipse Attack)
P2P 网络
概念
在介绍什么是日蚀攻击之前,有必要先对区块链系统的底层 P2P 网络做一个简单的介绍,因为日蚀攻击就是利用了 P2P 网络的特性来进行的攻击。
P2P 即 Peer to Peer,中文意思是对等网络,它是分布式系统和计算机网络相结合的产物。对等的意思就是网络中的节点角色、地位是平等的,任何节点具有极强的自由,可以任意加入、离开网络。这跟传统的 C/S 模型的结构有很大区别,任何节点既是 client ,也是 server,或者说网络中没有 server 节点,任何节点 down 掉不会对整个网络产生致命的影响,具有极强的伸缩性。
P2P 网络从诞生到现在经过了几个阶段,分别是混合式 P2P,无结构化 P2P以及结构化 P2P。
- 混合式:顾名思义,P2P 网络混合了传统的 C/S 模型,网络中有角色充当 server 角色
- 无结构化:也就是网状结构模型,纯分布式网络,典型代表就是比特币网络,节点之间以一种随机的,松散的方式组织在一起
- 结构化:节点按照一定规则组织在一起,路由算法比较精准,比如 DHT 算法
路由表(邻居表)
P2P 网络里一个比较重要的概念就是路由表,或者说邻居表。路由表里面保存了网络里面的一些节点,具体数量从几个到几十个不等。路由表中的这些节点可以看做是这个节点与这个 P2P 网络建立关联的重要依据,或者说表示节点到这个 P2P 网络的一些入口。这个节点想要发送任何信息需要先转发给路由表中的节点,再由它们负责转发消息。这就是路由表的作用。
那么无论是哪一种结构的 P2P 网络,每个节点都有一个类似于路由表的概念,本质上就是跟这个网络中的多个节点建立了一些联系,然后后续的所有收发包都交由这些邻居代为收发。
所以对于 P2P 网络里的一个节点来说,它看不到网络的全貌,只能看到网络的局部信息。并且由于路由表的存在,哪怕路由表中只保存了一个入口节点,这个节点也能服务于整个 P2P 网络,其他节点也能通过一定的方式找到这个节点。
NAT 穿透
NAT 穿透不是 P2P 网络的一个必要特性,如果 P2P 网络中都是公网节点(具有公网IP),其实是不需要 NAT 穿透的。那么如果有一些私网节点(局域网节点)也加入到了这个 P2P 网络中,由于不能互通,导致其他节点无法发现这些私网节点,最后带来的结果就是这个私网节点能够成功发送信息到这个 P2P 网络中,但是可能却无法收到来自 P2P 网络里的消息。注意这里的用词是可能,因为存在一些场景是有可能收到的。
关于 NAT 穿透我有另外的博客介绍 NAT 穿透方面的东西,这里就不做展开讲了。
什么是日蚀攻击
上面介绍了关于 P2P 网络的一些知识和概念,下面开始正式介绍日蚀攻击。
日蚀,同日食,是指月球运动到地球和太阳的中间,如果三者正好在一条直线上,月球就会挡住太阳射向地球的光,月球身后的黑影正好落到地球上,这时发生日食现象。月球就切断了地球和太阳之间的(太阳光)联系。
再来看什么是日蚀攻击,日蚀攻击针对特定的某个节点,通过一些方法,填满被攻击节点的路由表,以便切断它们与其他对等点的所有入站/出站通信(这会有效地窒息受害者)。上面提到路由表的概念,路由表里的节点是这个 P2P 网络的入口节点,任何收发消息都要经过路由表中的节点。攻击者通过某种方式填满了被攻击的节点,理论上就是控制了这个节点进出网络的信息,造成被攻击节点被 “伪隔离”的现象。
我觉得用日蚀来形象化的比喻这种攻击还是很合适的,本质上就是隔离了这个节点或者说用恶意节点包围了受害节点。
那么会造成什么后果呢?
- 阻止受害节点查看真实的区块链信息
- 隔离网络中多个节点,以达到分裂网络的可能
- 用少于 51% 的算力发起 51% 攻击
上面的几点其实比较好理解的,受害节点被恶意节点包围之后,恶意节点可以选择性的给受害节点发包或者篡改真实的数据包,本质上就是让这个节点误以为自己还在这个网络中挖矿,然而真实情况是它已经从网络中隔离开来了。
如果受害节点很多的情况,从整个网络全局来看就是被隔离成多个部分,网络实际上已经被分裂了。那么就可以实施分裂网络的 51%攻击,只需要用比原来 51%攻击更少的算力就行。
关于 51%攻击可以查看这篇博文 浅谈几种区块链网络攻击以及防御方案之51%攻击。
如何发起日蚀攻击
由于每种区块链底层的 P2P 网络模型可能不一样,所以就以以太坊为例来做说明。
以太坊 kademlia网络原理
以太坊底层的 P2P 网络采用的是 kademlia 算法,kademlia 网络是一种结构化的 P2P 网络,网络中的节点按照一定的规则组织在一起。
kademlia 算法中的核心特点是用异或来定义两个节点的距离,这种距离与实际的物理距离没有任何关系。
每个节点的路由表会保存不同距离的节点,这个距离的最小值当然是 0,也就是它自己,这个距离的最大值跟节点 ID 的长度有关系(NodeID)。NodeID 是一段具有特定长度的字符串,每个节点具有唯一的 NodeID,用 NodeID 来作为这个节点在 P2P 网络中的身份信息。比如:
NodeID: DEA25B0AF6CC5EA9DA4961DBC5FFEB97
假设 NodeID 长度为 N bit(对于上面的 NodeID 来说 N 为 32 * 8 = 256),那么这个距离的最大值就是 N -1,即距离范围在 [0, N)。
kademlia 网络中的节点的路由表中会保存每一个距离的节点,数量在 1 个以上,这个值称为为 α 值。也就是说与自己的 NodeID 距离为 1 的会保存 α 个,距离为 2 的会保存 α 个,以此类推,直到距离为 N-1 的节点会保存 α 个。实际情况是距离越大,能找到符合要求的节点的概率也就越大,想一想为什么?
这里每一个距离称为一个 Bucket,每一个 Bucket 里保存着 [0, α] 个距离匹配的节点。
通过上述对 kademlia 算法的简要描述可以得出一个结论,知道一个节点的 NodeID,就能够计算出这个节点的路由表中的每一个 Bucket 中应该填入什么样的 NodeID。而这就是日蚀攻击的核心依据。
发起日蚀攻击
当我们知道目标节点的 NodeID 之后,就可以通过一定的方式去伪造生成满足不同 Bucket 的 NodeID,当这个目标节点重启之后,马上以这些 NodeID 启动节点去连接目标节点,由于 kademlia 的特性,这些特意伪造的 NodeID 肯定会被填入目标节点的路由表中,从而把路由表占满,以达到日蚀攻击的目的。
至于让目标节点重启,可以等待目标节点自动重启或者采用 DOS 攻击迫使目标节点重启,当重启之后马上进行上面的操作就可以完成日蚀攻击。
当成功发起日蚀攻击之后,随后就能隔离节点,篡改目标节点的收发数据包了。
如何防御日蚀攻击
根据上述的讨论知道,想要避免日蚀攻击由很多种办法:(可能只适用于 kademlia 网络)
- 提高节点进入网络的准入门槛
节点进入 P2P 网络需要一定的门槛,不论是以时间为代价还是以 Stake 或是工作证明为代价,这样就能有效防止大批量伪造节点进入网络,从而从源头上避免日蚀攻击
- 针对同一个 IP 段的节点做连接限制
攻击者很可能利用有限的 IP (1 ~ 2 个)伪造大量节点,发起日蚀攻击,那么对于目标节点来说,看到的节点都是来自于这个 IP,多半可以说明这是恶意节点。那么只需要对来自同一个 IP 段的节点做一定数量的限制,比如 最多 2 个,那么也能显著提高攻击者的攻击成本
- 对节点主动建立连接和被动建立连接的数量做一定的均衡
发起日蚀攻击,需要主动占满目标节点的路由表,也就是主动与目标节点建立连接,即便不是这样,也有方法让目标节点主动建立连接到恶意节点。所以对于进出的连接数,做一定的均衡能有效避免日蚀攻击的发生
- NodeID 重启之后变化
进行日蚀攻击的前提是需要知道目标节点的 NodeID,并且迫使目标节点重启,然后以事先根据目标节点 NodeID 计算好的伪造节点发起连接,达成日蚀攻击。所以如果节点重启之后 NodeID 变为与原来不再一致,那么攻击者事先计算伪造的节点就变得毫无可用之地了。
- 其他辅助措施
比如节点实时检测,发现恶意节点进行广播,并采取一定的惩罚措施等。
写在最后
最后我们再来简单对比一下比特币和以太坊对日蚀攻击的反应。
由于以太坊采用的是结构化的 P2P 网络,并且采用了 kademlia 算法,那么知道了 NodeID,基本上就大致能知道这个路由表中应该填入一些什么类型的节点;
而对于比特币来说,由于比特币的 P2P 网络采用的是无结构的模型,节点之间以随机,松散的方式进行组织。想要通过类似以太坊日蚀攻击的方法去攻击比特币网络,不太行得通,因为比特币节点不关心你的 NodeID。但是还是有办法迫使比特币节点只与恶意节点建立连接的。
Blog:
rebootcat.com
email: linuxcode2niki@gmail.com
2020-04-12 于杭州
By 史矛革
相关文章:
微服务的理想与现实
来源 | 京东智联云开发者随着云原生微服务的日益火热,很多人都开始对微服务的相关知识内容感兴趣。本篇内容,旨在扫盲(意思是小白可入),希望能对大家有帮助。如有问题,欢迎大家一起讨论,共同学习…

感恩心成就了车建新和红星美凯龙
前几天参加了红星美凯龙成立25周年庆典活动,庆典活动非常的隆重,庆典之前红地毯上星光熠熠,红星美凯龙掌舵人车建新等多位高管、品牌代言人大小S、刘谦、古巨基、萧亚轩、胡一虎等演艺群星、马未都、马艳丽、包小柏、王潮歌、殷智贤等不同领域…

第二阶段团队项目冲刺站立会议(九)
昨天做了什么: 已经简单实现我的后续显示问题。 今天准备做什么: 美观上的东西来不及做了估计,我要整合到项目的实现上去。 遇到的问题: 项目问题大体上和竞赛一致,但也有不一样的地方。转载于:https://www.cnblogs.co…
浅谈几种区块链网络攻击以及防御方案之女巫攻击
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/13/network_attack_of_blockchain_sybil_attack/ 写在前面的话 自比特币诞生到现在,比特币(网络)经历过大大小小非常多次的攻击,尤其在比特币诞生之初…

INODE上网IP地址刷新超时处理
IP地址刷新超时2011-06-07 09:19:08 连接网络...2011-06-07 09:19:08 开始进行身份验证... [wangliyafaguibu]2011-06-07 09:19:09 正在上传用户密码...2011-06-07 09:19:10 您的身份验证成功2011-06-07 09:19:10 自动获取IP地址...2011-06-07 09:19:11 IP地址刷新超时2011-06-…
让大规模深度学习训练线性加速、性能无损,基于BMUF的Adam优化器并行化实践...
导语:深度学习领域经典的 Adam 算法在大规模并行训练的情况下会导致模型性能损失。为了解决这一问题,微软亚洲研究院采用 BMUF 框架对 Adam 算法进行了并行化,并在微软大规模 OCR 和语音产品数据集上进行了测试,使其在并行训练中几…

Spring AOP AspectJ Pointcut Expressions With Examples--转
原文地址:http://howtodoinjava.com/spring/spring-aop/writing-spring-aop-aspectj-pointcut-expressions-with-examples/ 1) Matching Method Signature Patterns The most typical pointcut expressions are used to match a number of methods by their signatu…
限免!百名AI大咖,20大技术和行业论坛,不可错过的开发者嘉年华
根据《2020科技趋势报告》的预测,AI将引发第三次计算浪潮,也是重塑世界最大的动因之一。而在全球人工智能技术的赛道上,中国无疑是领先者,到2030中国将成为全球主要的人工智能创新中心。在这样的大环境下,如何抓住机遇…
浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币诞生到现在,比特币(网络)经历过大大小小非常多次的攻击,尤其在比特币诞生之初…

C++中#include的工作原理
大多数人可能对“#include”比较熟悉,因为我们写C/C程序的时候都会写的字符串之一,但是它是具体怎么工作的?或者它的原理是什么呢? 可能不太熟悉,也有可能没有去关心过。我们只关心程序能否正确运行,或者程…

浅谈几种区块链网络攻击以及防御方案之其它网络攻击
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特币诞生到现在,比特币(网络)经历过大大小小非常多次的攻击,尤其在比特币诞生之初…
基于深度学习和传统算法的人体姿态估计,技术细节都讲清楚了
作者 | 站长 pursueYfuture来源 | AI专栏(ID: pursue-Y-future)计算机视觉的一大研究热点是人体姿态估计,还有很多问题急需解决,比如遮挡,交互等等。在最近的CVPR2020里边也有很多这方面的工作。本文站长主要是想谈谈基…

怎么让百度快速重新收录
每天更新网站和做外链让百度重新收录的快速方法很多人都比较头疼让百度如何重新来收录你站点,这里为大家介绍一下我的经验;大家都知道做网络推广,特别是企业站推广,如果能在相关的关键字在搜索引擎里有个好的名次,肯定能给企业增长…

HQL语句大全
Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。Hibernate配备了一种非常强大的查询语言&#…
自动创建阿里云抢占式实例
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/08/24/auto_run_aliyun_spot/ aliyun_spot 自动创建阿里云抢占式实例。 支持一下作者,购买阿里云 背景 阿里云抢占式实例应该属于阿里云的一种闲置资源利用,性价比非常高&am…
What?! Python一行代码,能玩这么多童年的游戏?
来源 | 早起 Python责编 | Carol封图 | CSDN 下载自视觉中国儿童节就要来了,虽然秃头程序员没有头发,但是童心还是一直都在的,今天就分享一个私藏的GitHub项目——free-python-games,一行代码就能进入使用Python开发的小游戏快乐…

McAfee可能要收购NitroSecurity?
近日,根据国外媒体报道和业界人士的坊间传闻,有传闻指McAfee可能将在近期收购SIEM厂商NitroSecurity。最近,NitroSecurity正在准备IPO,去年年收入约4000万美元,在Gartner的MQ中位于Leader阵营。 NitroSecurity的SIEM技…

进程间通信IPC之--共享内存
每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读…

Scons构建C++项目
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/08/30/scons/ 前言 我是一个 linux c 开发者,但是一直对 Makefile 的语法很是头痛,每次都记不住,所以每次写 Makefile 都很痛苦,Makefile 里需要你自己编…
2020 AI产业图谱启动,勾勒中国AI技术与行业生态
《2020年国务院政府工作报告》提出,重点支持「两新一重」建设。其中「两新一重」中的第一个「新」,就是新基建,而人工智能是新基建的重要组成部分。新基建首次被纳入政府工作报告后,各大科技厂商纷纷押注,重金投向「新…

Windows Phone 7 SDK 7.1 Beta2 发布
早上看到消息,有Marketplace账号的筒子们注意了,可以去下载芒果的ROM了,一个开发者账号只能更新一个WP7,以下是App hub上的消息:来自http://create.msdn.com/en-US/news/Mango_Beta。关于开发工具的更新,可…

javascript基础语法——表达式
前面的话 一般地,关于javascript基础语法,人们听得比较多的术语是操作符和语句。但是,其实还有一个术语经常使用,却很少被提到,这就是javascript表达式(expression)。本文将详细介绍javascript表达式,表达式…

Hexo Next 博客添加相册瀑布流
原文:https://rebootcat.com/2020/09/19/nextphotowall/ 前言 一直没有时间来整理下博客搭建的一些事情,现在补上一篇,给 Hexo Next 博客添加一个相册功能,使用瀑布流的方式。 原理说明 使用 github 作为仓库存储图片文件&…

【分享几个日常巡检 监控数据库的语句】
查看数据库表空间语句 select df.tablespace_name "表空间名",totalspace "总空间M",freespace "剩余空间M",round((1-freespace/totalspace)*100,2) "使用率%" from (select tablespace_name,round(sum(bytes)/1024/1024) totalspa…
AI换脸、声音篡改等,明确写入新版《民法典》
来源 | HyperAI超神经5 月 28 日,十三届全国人大三次会议表决通过了《中华人民共和国民法典》(以下简称《民法典》)第四编人格权中的第四章肖像权,明确提出了以信息技术手段,对于他人肖像、声音等权益的侵害认定。《民…

awk: (FILENAME=- FNR=1) 致命错误: 试图访问字段 -2
执行:awk {print $(NF-2)} aa.log出现错误:awk: (FILENAMEaa.log FNR1) 致命错误: 试图访问字段 -2可能和aa.log中数据有关系:改为:awk NF>1{print $(NF-2)} aa.log转载于:https://blog.51cto.com/henly/1786692

迁移博客到香港虚拟空间
原文: https://rebootcat.com/2020/09/20/virtual_space_blog/ 缘起 我的博客一直采用的是 github pages 来托管,中间断断续续的也没怎么管理过,偶尔写几篇博客,所以也就没怎么关心过访问速度,搜索引擎收录等问题。 …
自动化神经网络理论进展缓慢,AutoML算法的边界到底在哪?
作者 | 夕颜出品 | CSDN(ID:CSDNnews)「AI 技术生态论」 人物访谈栏目是 CSDN 发起的百万人学 AI 倡议下的重要组成部分。通过对 AI 生态顶级大咖、创业者、行业 KOL 的访谈,反映其对于行业的思考、未来趋势判断、技术实践,以及成…

让电脑通过gns3里的路由器上网
题目我感觉写的不好,反正就是这个意思,看下文 头几天有网友问cisco2811路由器怎么用ACL封掉QQ,当时就想帮他,但是手里又没有cisco路由器,只有GNS3 cisco模拟器。 现在的问题就是要用gns3模拟器的路由器充当真实工作中的…

文件上传的渐进式增强
文件上传是最古老的互联网操作之一。 20多年了,它几乎没变,还是原来的样子:操作麻烦、缺乏交互、用户体验不佳。在这个新技术日新月异的时代,显得非常落伍。 网页开发者们想了很多办法,试图提升文件上传的功能和操作体…