写在前面的话
自比特币诞生到现在,比特币(网络)经历过大大小小非常多次的攻击,尤其在比特币诞生之初的几年,并且随着比特币价格的一路飙涨,黑客针对比特币网络的攻击就一直没有停止过。据估算,目前大约有 350 ~ 400 万比特币永久丢失,价值大约 240 ~ 280 亿美元。当然其中不只有由于黑客的攻击导致的丢失,毕竟比特币最初的几年很多人都没有意识到比特币的价值,很多的私钥都遗失了。
本文就谈一下目前几种区块链网络攻击,以及其防御方案。
本文尽量用简单易懂的白话来描述,也仅代表我个人的看法,欢迎探讨。
同系列:
- 浅谈几种区块链网络攻击以及防御方案之51%攻击
- 浅谈几种区块链网络攻击以及防御方案之日蚀攻击
- 浅谈几种区块链网络攻击以及防御方案之女巫攻击
- 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击
- 浅谈几种区块链网络攻击以及防御方案之其它网络攻击
拒绝服务攻击(Denial of Service Attack)
分布式拒绝服务攻击(Distributed Denial of Service Attack)
概念
信息安全的三要素——“保密性”、“完整性”和“可用性”中,拒绝服务攻击,针对的目标正是“可用性”。该攻击方式利用目标系统网络服务功能缺陷或者直接消耗其系统资源,使得该目标系统无法提供正常的服务。
拒绝服务攻击(DoS) 问题一直得不到合理的解决,目前还是世界性难题,究其原因是因为这是由于网络协议本身的安全缺陷造成的,从而拒绝服务攻击也成为了攻击者的终极手法。攻击者进行拒绝服务攻击,实际上让服务器实现两种效果:一是迫使服务器的缓冲区满,不接收新的请求;二是使用IP欺骗,迫使服务器把合法用户的连接复位,影响合法用户的连接。
而分布式拒绝服务攻击 (DDoS) 是指攻击者采用分布式攻击手法施行 DoS 攻击,通常是控制了多台机器向目标主机或者路由器发起 DoS 攻击。
针对区块链来说,攻击者通过 DDoS 攻击试图减慢网络速度,或者迫使网络停止运作。也可用于针对矿池,使矿池脱机,或者针对特定的目标主机,使其从网络离线。
危害
DDoS 攻击造成的危害自不必说,中心化场景下,通常针对网站或者主机施行攻击,造成网站无法访问,影响业务运作,造成巨大经济损失;
在区块链场景下,攻击者目标通常是为了一定的利益才执行这样的攻击,导致网络速度变慢,或者影响矿工挖矿,从而方便攻击者对目标下手。
DDoS 并非是区块链特有的攻击,在中心化场景下的攻击其实相对会更多。
攻击形式
带宽攻击
带宽攻击很好理解,通过攻击使受害者节点的网络带宽耗尽,从而造成拒绝服务的效果。
区块链系统的底层构建于 P2P 网络,其中通信上广播占据了大部分通信,一次广播通常就是大于 N 倍的收包,随着网络规模的扩大,节点数量的增多,通信的压力也会很大。
攻击者通过疯狂向节点通信端口发包,或者攻击者利用软件逻辑触发系统自动的大规模通信(比如触发同步),耗尽节点的带宽,最终从网络中离线。
而一旦离线重启之后,往往又会伴随着其他的攻击,比如 日蚀攻击,详情可以参考之前的博文: 浅谈几种区块链网络攻击以及防御方案之日蚀攻击
CC 攻击
DDoS 攻击是针对 IP 的攻击,而 CC 攻击的是服务器资源。
CC攻击全称Challenge Collapsar,中文意思是挑战黑洞,因为以前的抵抗DDoS攻击的安全设备叫黑洞,顾名思义挑战黑洞就是说黑洞拿这种攻击没办法,新一代的抗DDoS设备已经改名为ADS(Anti-DDoS System),基本上已经可以完美的抵御CC攻击了。CC攻击的原理是通过代理服务器或者大量肉鸡模拟多个用户访问目标网站的动态页面,制造大量的后台数据库查询动作,消耗目标CPU资源,造成拒绝服务。CC不像DDoS可以用硬件防火墙来过滤攻击,CC攻击本身的请求就是正常的请求。我们都知道网站的页面有静态和动态之分,动态网页是需要与后台数据库进行交互的,比如一些论坛用户登录的时候需要去数据库查询你的等级、权限等等,当你留言的时候又需要查询权限、同步数据等等,这就消耗很多CPU资源,造成静态网页能打开,但是需要和数据库交互的动态网页打开慢或者无法打开的现象。这种攻击方式相对于前两种实现要相对复杂一些,但是防御起来要简单的多,提供服务的企业只要尽量少用动态网页并且让一些操作提供验证码就能抵御一般的CC攻击。
CC攻击的种类有三种,直接攻击,代理攻击,僵尸网络攻击,直接攻击主要针对有重要缺陷的 WEB 应用程序,一般说来是程序写的有问题的时候才会出现这种情况,比较少见。僵尸网络攻击有点类似于 DDOS 攻击了,从 WEB 应用程序层面上已经无法防御,所以代理攻击是CC 攻击者一般会操作一批代理服务器,比方说 100 个代理,然后每个代理同时发出 10 个请求,这样 WEB 服务器同时收到 1000 个并发请求的,并且在发出请求后,立刻断掉与代理的连接,避免代理返回的数据将本身的带宽堵死,而不能发动再次请求,这时 WEB 服务器会将响应这些请求的进程进行队列,数据库服务器也同样如此,这样一来,正常请求将会被排在很后被处理,就象本来你去食堂吃饭时,一般只有不到十个人在排队,今天前面却插了一千个人,那么轮到你的机会就很小很小了,这时就出现页面打开极其缓慢或者白屏。
SYN 洪泛攻击
SYN Flooding 攻击是指攻击者发送了大量的 TCP/SYN 包,并且以一个假的 IP 作为发送地址到达目标主机,由于 TCP 在建立连接的时候有 3 次握手,也就是建立连接需要发送 3 个包,当目标主机收到这个 SYN 建连包之后,会回复一个 SYN-ACK 包。
但是由于攻击者恶意伪造了来源 IP,那么攻击者是收不到这个 ACK 包的,但是会导致目标主机打开了一个半开放的连接,如果攻击者发动了频繁的 SYN 洪泛攻击,那么会造成目标主机 TCP 资源消耗枯竭,导致无法与正常客户端建立连接,以达到拒绝服务的效果。
Land 攻击
Land 攻击是 SYN 攻击的变种,攻击者此时伪造的来源 IP 就是目标主机的 IP,也就是说这个 TCP SYN 包的来源 IP 和 目的 IP 相同,都是目标主机,那么就会导致目标主机向自己发送大量的 SYN-ACK 包,从而消耗 TCP 资源,阻止正常客户端的连接建立。
攻击案例
GitHub 遭受史上最大规模 DDoS 攻击
GitHub 想必大家都不陌生,全球最大的同性交友网站。在美国东部时间 2 月 28 日下午 17:28 分,几乎一瞬间收到了 1.35 Tbps 的流量访问。这是互联网有史以来规模最大、威力最大的分布式拒绝服务攻击 (DDos)。
不到十分钟,GitHub 就不得不向 CDN 服务商 Akamai 请求协助。最终 Akamai 接管了GitHub 的所有信息流,并通过其清理中心发送数据以清除和阻止恶意数据包。8 分钟后,攻击者发现没什么效果,选择了撤退,停止了攻击。
详情可以查看 GitHub 的官方声明: February 28th DDoS Incident Report
此次的 DDoS 攻击是属于中心化世界里面的一次较为著名的攻击,而且类似于这样的攻击每天都在发生。
大家可以看一下这个网站,来自卡巴斯基实验室的数据(多观看几分钟能看到 3D 攻击画面,还是挺震撼的): 网络威胁实时地图
2016 年以太坊 DDoS 攻击
2016 年以太坊发生过一次严重的 DDoS 攻击,此次攻击也被称为 “EXTCODESIZE” 攻击。
攻击者让矿工和节点需要花费很长的时间 (20 ~ 60 秒) 来处理一些区块。造成这次攻击的原因是一个 EXTCODESIZE 的操作码,它具有相当低的 gas 价格,需要节点从磁盘读取状态信息。攻击交易调用此操作码的频率大约是 50000 次每区块。这样的后果就是,网络大大放缓了,但没有共识故障或是内存超载发生。
因为此次攻击事件,很多媒体都宣告了以太坊的末日。可见在区块链世界里,DDoS 攻击的后果是比较严重的。
以太坊 Fomo3D,黑客拿走 2200 万
Fomo3D 是以太坊上一个比较火爆的 Dapp,是一个类似于资金盘的游戏。此次攻击过程还是挺有趣的,各位可以往下看。
首先,介绍一下 Fomo3D 这个游戏的规则:
规则1: 每个人参与游戏需要购买一个 Key
规则2: 在一轮游戏中,谁是最后一个购买 Key 的人,则可以拿走奖池中的大奖
规则3: 只要有人购买一个 Key, 游戏倒计时就会增加 30 秒
规则4: 游戏启动从 24 小时倒计时
规则里面最吸引人的一条是,只要你是最后一个购买的人,你就是最终的大奖得主,是不是很有 Du博 的感觉?
![](https://cdn.jsdelivr.net/gh/smaugx/MyblogImgHosting/rebootcat/network_attack_of_blockchain_ddos_attack/3.png)
所以看到规则后,你会怎么做?
正常人一般都是在倒数的最后几分钟或者几秒钟去购买 Key,这样的话自己也许是倒计时结束后最后一个购买的人。但是这个想法是大多数人的想法,我们毕竟只是普通玩家。
那么稍微高级一点的玩家呢,比如程序员,可能会写个脚本,自动化的方式来购买 Key,速度是不是比手工快多了。
那么来看看黑客玩家是怎么做的?
我们都知道,购买 Key 之后,只要后面没有人再购买,你就是大奖得主,基于本文的探讨,如果你以前没有听说个这个事件的话,那么此刻你是不是已经有了一些想法?对的,没错,就是利用 DDoS 攻击,在你购买成功后,马上施行攻击,拖慢整个网络,造成矿工无法打包或者打包很慢,那么势必会影响到其他交易的正常进行。如果你比较幸运,正好导致其他正在购买 Key 的人的交易失败了,那么你就是大奖得主。
但是说起来容易,实际做起来还是不太容易操作的。因为你要能确保你购买成功后的 DDos 攻击能让后续的交易都失败,不然弄巧成拙,帮助了某个漏网之鱼,别人恰好因为你的攻击成为了最后一个购买的人。
了解以太坊的人应该听说过 gas 机制,可以理解为一个交易的手续费,而矿工通常会优先打包 gas 费用较高的交易,那么这位黑客利用自己的智能合约创建了大量的交易,并且具有高额的 gas 费用,几乎垄断了以太坊网络的所有算力,这样就造成了以太坊拥堵了接近 3 分钟,进而使其他的玩家无法打包购买 Key 的交易,从而成为大奖得主。
该黑客此前还尝试过多次这样的攻击,直至最后一次才成功。
是不是还是很有趣的?区块链公链本身具有比较致命的缺陷就是 tps 很低,单位时间处理的交易有限。后续的交易只能在排队,尤其是在网络被攻击拖慢的情况下,交易成功的时间会大大拉长。
DDoS 防御方案
高防服务器
高防服务器就是指能独立硬防御 50Gbps 以上的服务器,本身就能抑制一定的 DDoS 攻击。这个没什么好说的,买就是了,只是比较贵。
CDN 加速
CDN 本身就就有大带宽,多节点的优势,并且隐藏了真实的网站 IP。通过把流量分配到多地多节点降低攻击负载,防止源站崩溃。
配置防火墙
防火墙能防御 DDoS 和其他的一些攻击。防火墙有软件防火墙和硬件防火墙之分。必要可以两者结合。
攻击检测和溯源
通过分析攻击的方法和手段,追踪攻击的路由,检测出恶意的 IP 和路由,做好相应的屏蔽,保护主机。
黑名单机制
通过建立黑名单机制,限制黑名单的访问。
写在最后
DDoS 攻击每天都在发生,对于区块链系统来说,由于接入的节点性能参差不齐以及无许可的特征,想要利用中心化的防御机制去做好 DDoS 防御可能还是有难度。况且由于区块链本身的弊端,性能瓶颈,更容易被攻击者利用。
附
Blog:
2020-04-14 于杭州
By 史矛革