IPFS/filecoin官方:加强公共DHT抵抗eclipse攻击

至联云 2020-11-06 20:21:58
go


随着网络规模的不断扩大,2020年IPFS的一个主要重点是改进内容路由。虽然我们对DHT上的请求速度进行了重大改进(https://blog.ipfs.io/2020-07-20-dht-deep-dive/),但我们的另一个关键重点是网络的安全性。在发布 go-ipfs 0.5 之前的工作中,A-SIT 和 Graz 科技大学的 Bernd Prünster 和 Alexander Marsalek 联系了我们,告知我们他们在针对 go-ipfs 0.4.23 的研究中发现的一种攻击,这种攻击可以让攻击者用最少的资源吃掉公共 DHT 上的任何节点。在过去3个小版本的go-ipfs(0.5、0.6和0.7)中,我们一直与Bernd和Alexander密切合作,这使得我们能够发布增量改进,减轻了他们的原始攻击,并将此类攻击的成本和难度提高了几个数量级。今天我们将深入研究该攻击和我们发布的各种缓解措施。如果你想阅读完整的论文,“全部的Eclipse病毒——扰乱“破坏IPFS系统”,你可以在TU Graz研究门户网站上找到它。

 

1.缓解攻击

Eclipse攻击指的是攻击者将对等体与网络其他部分隔离开来,使目标对等体只与攻击者控制的对等体通信的能力。这种攻击的目标是污染目标对等体的DHT路由表,使只有攻击者控制的对等体存在。在Bernd和Alexander发现的攻击中,他们利用libp2p和大量预先生成的Peer ID列表,创建了一个Sybil攻击,共计29TB的数据,以游戏libp2p中的信誉系统,从而接管路由表。

如果你对Sybil攻击(https://en.wikipedia.org/wiki/Sybil_attack)不熟悉的话,其原理是利用单个Peer的大量假名ID来颠覆信誉系统,以增加对网络的影响力。在这种攻击的背景下,假ID最终会在受影响对等体的路由表中取代诚实对等体的位置。

为了使这种攻击成功,libp2p中的一些漏洞被暴露出来,最终导致这种攻击在go-ipfs 0.4.23中非常有效。在这次攻击被发现的时候,libp2p存在的一个主要问题是,DHT并没有偏向于长寿的对等体,它并没有保护其下层桶中的对等体(网络另一半的对等体)。这个问题使得攻击者可以快速地将诚实的对等体从目标的路由表中驱逐出去,以支持其不诚实的对等体。作为go-ipfs 0.5中DHT大修工作的一部分,我们改变了路由表中条目的管理方式。其中一个主要的影响变化是,我们将不再从路由表中驱逐仍然可用的对等体。这加上我们在 go-ipfs 0.5 中对 DHT 所做的其他改进,使得攻击的执行难度增加了几个数量级。你可以在IPFS 0.5内容路由深挖(https://blog.ipfs.io/2020-07-20-dht-deep-dive/)中阅读关于DHT的详细变化。

除了go-ipfs 0.5中的改动,我们还修复了几个问题,进一步增加了这次攻击的难度和成本。攻击成功的部分原因是由于Sybil节点能够通过滥用对作为中继的对等体的评分方式的缺陷来游戏有价值连接的信誉系统。该缺陷可以让一个Sybil节点充当后续Sybil对等体的中继,从而继续提升中继的得分。这可以为单个对等体使用嵌套的Sybils快速获得大量的不正当的声誉。为了解决这个问题,我们对中继应用了一个恒定的分数,这使得我们仍然可以重视它们,但避免它们能够夸大自己的声誉。通过提高内部声誉系统的完整性,我们降低了Sybil攻击的功效。

我们为增加这类攻击的成本所做的另一个重大改变是在路由表中引入IP多样性要求。最初的go-ipfs 0.4.23攻击能够以相对较低的费用在单台机器上运行,因为路由表有可能只包含来自单一主机的对等体。现在,IP多样性的要求限制了来自任何主机的对等体数量,这使得从单台机器上执行日蚀攻击变得不可行,进一步将攻击成本从go-ipfs 0.5提高了两个数量级以上。

 

 

2.验证缓解措施

作为与Bernd和Alexander合作的一部分,我们希望确保我们能够正确地测试和验证我们的修复,我们采取了两种方法。

现场测试:在我们的允许下,他们对我们在公共网络上的一个托管引导节点进行了控制攻击。这使我们能够收集实时指标和日志,从我们的可见性和他们的外部观察中观察攻击的有效性。受控攻击是在IPFS发布之前的每个版本上进行的,从go-ipfs 0.5开始,这使我们能够在生产环境中验证我们的修复。

在Testground上进行复制:由于Testground(https://blog.ipfs.io/2020-05-06-launching-testground/)的开发和发布,以及Bernd和Alexander分享他们的攻击代码,我们能够创建测试计划来复制攻击的各个部分。这使我们能够在一个受控的测试环境中做大规模测试的变化,既验证攻击是可能的,并验证我们的缓解措施。拥有这些测试计划的好处是,我们可以继续在IPFS和libp2p的版本上运行它们,以确保我们不会引入回归。此外,这确保了我们可以在受控的环境中更长时间地运行攻击,以进一步分析攻击的有效性和成本。

 

3.我们今天的情况

这一年里,我们对IPFS和libp2p的性能和安全性都做了重大改进,而合作是这项工作成功的重要组成部分。Bernd和Alexander所做的研究,以及他们与我们紧密合作的意愿,对帮助我们提高网络的稳定性是非常宝贵的。我们很感谢有机会一起工作。随着9月份go-ipfs 0.7(https://blog.ipfs.io/2020-09-24-go-ipfs-0-7-0/)的发布,我们在IPFS和libp2p上执行eclipse和Sybil攻击的难度和成本较其0.4.23的前身增加了几个数量级。

如果你还没有更新到go-ipfs 0.7,我们建议你尽快更新,以利用这些改进的全部范围。请查看go-ipfs 0.7 更新指南,了解如何更新的细节。

版权声明
本文为[至联云]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4586144/blog/4704350

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云