[返回币圈淘金首页]·[所有跟帖]·[ 回复本帖 ] ·[热门原创] ·[繁體閱讀]·[坛主管理]

以太坊的日蚀攻击

送交者: 到哪都是韭菜[品衔R1] 于 2024-10-04 3:15 已读 1051 次  

到哪都是韭菜的个人频道

+关注

日蚀攻击是一种攻击去中心化网络的方法,攻击者通过这种方法试图隔离和攻击一个或多个特定用户,而不是攻击整个网络。以太坊有三个特征可能使其容易受到日蚀攻击。首先,快速创建区块会创造出无尽的松散区块,通过增加以太币的供应量间接侵犯了诚实矿工的利益。其次,叔块机制意味着节点可以从这些区块中获利。第三,以太坊增强的节点连接性为攻击者提供了动机。


什么是日蚀攻击?

日蚀,是指月球运动到地球和太阳的中间,如果三者正好在一条直线上,月球就会挡住太阳射向地球的光,月球身后的黑影正好落到地球上,这时发生日蚀现象。月球就切断了地球和太阳之间的(太阳光)联系。

日蚀攻击针对特定的某个节点,通过一些方法,填满被攻击节点的路由表(1),以便切断它们与其他对等点的所有入站/出站通信(这会有效地窒息受害者)。路由表里的节点是这个 P2P 网络的入口节点,任何收发消息都要经过路由表中的节点。攻击者通过某种方式填满了被攻击的节点,理论上就是控制了这个节点进出网络的信息,造成被攻击节点被 “伪隔离”的现象。

因此日蚀来形象化的比喻这种攻击还是很合适的,本质上就是隔离了这个节点或者说用恶意节点包围了受害节点



日蚀攻击造成什么后果呢?

1. 阻止受害节点查看真实的区块链信息
2. 隔离网络中多个节点,以达到分裂网络的可能
3. 用少于 51% 的算力发起 51% 攻击

受害节点被恶意节点包围之后,恶意节点可以选择性的给受害节点发包或者篡改真实的数据包,本质上就是让这个节点误以为自己还在这个网络中挖矿,然而真实情况是它已经从网络中隔离开来了。如果受害节点很多的情况,从整个网络全局来看就是被隔离成多个部分,网络实际上已经被分裂了。那么就可以实施分裂网络的 51%攻击,只需要用比原来 51%攻击更少的算力就行。


日蚀攻击是如何工作的?


日蚀攻击要求攻击者控制主机节点的僵尸网络(每个节点都有自己的IP地址),并计算出受害者的邻近节点,基本上是通过反复试验。实现这一目标所需的努力取决于网络的规模和性质,但如果成功,攻击者将在受害者注销并重新加入网络后控制所有连接节点。



在这个场景中,有三个参与者——攻击者、受害者和一个诚实节点。如果受害者发现了一个区块,攻击者就不会将此区块传播到网络。如果攻击者发现了一个区块,他们就和受害者分享。通过这种方式,攻击者为自己和被遮蔽的节点创建了一个私有区块链。



这样,攻击者可以获得比诚实挖矿多 96.4% 的收益。日食攻击是可能的,因为在去中心化的网络中,一个节点不能同时连接到网络上的所有其他节点。相反,为了提高效率,一个给定节点将连接到一组选定的其他节点,这些节点依次连接到自己的选定组。因此,仅使用两台具有唯一IP地址的计算机就可以发起日食攻击。



以太坊依赖于基于一种名为Kademlia的协议(2)的结构化网络,该协议旨在让节点更有效地连接到其他节点。通过使用密钥生成算法,攻击者可以非常迅速地创建无限数量的节点ID(点对点网络上的标识符)。更糟糕的是,攻击者甚至可以创建节点 ID,使它们比随机节点 ID 对受害者更具吸引力,基本上将受害者吸引到他们身边。




如何防御日蚀攻击?




1. 提高节点进入网络的准入门槛


节点进入 P2P 网络需要一定的门槛,不论是以时间为代价还是以 Stake 或是工作证明为代价,这样就能有效防止大批量伪造节点进入网络,从而从源头上避免日蚀攻击




2. 针对同一个 IP 段的节点做连接限制


攻击者很可能利用有限的 IP (1 ~ 2 个)伪造大量节点,发起日蚀攻击,那么对于目标节点来说,看到的节点都是来自于这个 IP,多半可以说明这是恶意节点。那么只需要对来自同一个 IP 段的节点做一定数量的限制,比如 最多 2 个,那么也能显著提高攻击者的攻击成本




3. 对节点主动建立连接和被动建立连接的数量做一定的均衡


发起日蚀攻击,需要主动占满目标节点的路由表,也就是主动与目标节点建立连接,即便不是这样,也有方法让目标节点主动建立连接到恶意节点。所以对于进出的连接数,做一定的均衡能有效避免日蚀攻击的发生




4. NodeID 重启之后变化


进行日蚀攻击的前提是需要知道目标节点的 NodeID,并且迫使目标节点重启,然后以事先根据目标节点 NodeID 计算好的伪造节点发起连接,达成日蚀攻击。所以如果节点重启之后 NodeID 变为与原来不再一致,那么攻击者事先计算伪造的节点就变得毫无可用之地了。




5. 其他辅助措施


比如节点实时检测,发现恶意节点进行广播,并采取一定的惩罚措施等。

参考概念

1. 路由表


P2P 网络里一个比较重要的概念就是路由表,或者说邻居表。路由表里面保存了网络里面的一些节点,具体数量从几个到几十个不等。路由表中的这些节点可以看做是这个节点与这个 P2P 网络建立关联的重要依据,或者说表示节点到这个 P2P 网络的一些入口。这个节点想要发送任何信息需要先转发给路由表中的节点,再由它们负责转发消息。这就是路由表的作用。




那么无论是哪一种结构的 P2P 网络,每个节点都有一个类似于路由表的概念,本质上就是跟这个网络中的多个节点建立了一些联系,然后后续的所有收发包都交由这些邻居代为收发。





所以对于 P2P 网络里的一个节点来说,它看不到网络的全貌,只能看到网络的局部信息。并且由于路由表的存在,哪怕路由表中只保存了一个入口节点,这个节点也能服务于整个 P2P 网络,其他节点也能通过一定的方式找到这个节点。

2. 以太坊 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。而这就是日蚀攻击的核心依据。

喜欢到哪都是韭菜朋友的这个贴子的话, 请点这里投票,“赞”助支持!

内容来自网友分享,若违规或者侵犯您的权益,请联系我们

所有跟帖:   ( 主贴楼主有权删除不文明回复,拉黑不受欢迎的用户 )


用户名: 密码: [--注册ID--]

标 题:

粗体 斜体 下划线 居中 插入图片插入图片 插入Flash插入Flash动画


     图片上传  Youtube代码器  预览辅助



[ 留园条例 ] [ 广告服务 ] [ 联系我们 ] [ 个人帐户 ] [ 创建您的定制新论坛频道 ] [ Contact us ]