摘要
传统的DoS攻击以少量的服务器作为攻击目标,但是很难攻击拥有大量节点的系统,比如:区块链系统。到目前为止仍然没有成功的针对主要加密货币区块链的攻击。
本文提出首个针对基于PoW的加密货币的DoS攻击:区块链DoS攻击(BDoS)。和传统DoS不同的是,BDoS从系统的设计机制出发来进行攻击:它利用了系统的激励机制来阻止矿工参与挖矿。之前,如果要针对整个PoW区块链进行DoS攻击,要求攻击者和其它所有诚实矿工拥有相当的算力。而BDoS可以使用远少于之前方案的算力(以2020年3月比特币为例,需要21%的算力),让区块链系统停止运行。研究发现BDoS攻击可以让比特币系统会随着挖矿工业越来越成熟变得更加脆弱,矿工的收益也随之下跌。
BDoS和已知的自私挖矿攻击不一样,自私挖矿以增加攻击者的收益为目标,而BDoS以破坏区块链系统为目标。本文对为区块链上的攻击提了一个重要的新思路:攻击者可以通过在不公开区块的情况下来证明区块确实存在,并且以此来操控矿工的收益。
背景
在互联网诞生早期,DoS攻击就开始在互联网上出现,并且一直存在着。最常见的,攻击者通过向服务器发送大量的请求导致服务器处理不过来,从而无法为合法用户提供服务。现有的针对DoS攻击的方案一般都是比较简单的识别flooding攻击源的方法。攻击者一般也是通过大量的肉鸡来实现所谓的分布式拒绝服务攻击。这些肉鸡一本都是一些合法的被攻击者侵入的互联网设备。
类似比特币这样的加密货币显然是攻击者的一个非常合适的攻击对象。攻击者可以通过攻击比特币网络来造成比特币价格波动(比如著名的Mt.Gox攻击),从而可以从中获取巨额利益。潜在的进行这类攻击的攻击者还包括一些不看好加密货币的官方、一些竞争币拥有者等等。但是到目前为止,仍未看到针对主流加密货币系统成功的DoS攻击。
区块链去中心化的特性是造成此类攻击难以实施的主要原因。在区块链系统中,没有一个中心化服务器,因此攻击者没有一个合适的攻击对象。区块链系统中的数据有区块链网络中所有的对等节点来维护,每一个服务器都有区块链的整个数据,因此仅攻击单个或几个节点对于区块链系统运行无实质影响。目前对于区块链/加密货币的攻击一般也是基于少量节点的。
基于此认识,成功攻击一个类似比特币的PoW加密货币,需要控制一个区块链网络51%的算力,因此攻击成本巨大:设备成本、电力成本、人工成本等等。
对于加密货币的一些基础背景知识可以参考我们之前发布的关于比特币的文章。
详细内容
本文提出的BDoS攻击可以通过控制矿工的收益来让他们没有动力来挖矿,从而导致区块链系统瘫痪。
攻击方式
为了将区块链引入到这个瘫痪状态,攻击者需要首先挖到一个区块,而后通过某种方式向区块链中其它节点证明他确实挖到了一个新的区块。
以比特币为例,矿工挖到区块之后,可以将区块的头部(不包括包含大量交易详细数据的区块本体),通过自己大量的网络连接发送给区块链中其它的网络节点。如下图所示,矿工收到一个区块的头部之后,可以有三种策略:
- 仍然在主链上挖矿(忽略收到的新区块的头部)
- 在收到的区块头部上进行挖矿(我们称这种为SPV矿工,SPV的概念可以参考我们之前比特币的文章)
- 停止挖矿,直到区块链恢复正常
策略1
如果矿工使用策略1,那么就会形成类似自私挖矿策略的情形,一旦矿工们在主链区块,也就是上图中的$B_1^{\star}$上挖到一个新的区块。这时候攻击者就将他所挖到的区块$B_A$的本体也公布出来。这时候就形成了区块链分岔,如下图所示,这样就形成了两个分岔之间的竞争。
和自私挖矿中一样,攻击者可以利用大量的网络连接,以最快的速度将他的区块广播到全网,这样很多诚实矿工就会在攻击者的区块$B_A$上进行挖矿。这样很有可能$B_i$不会被包含在主链中,这样相比于没有攻击的情况,矿工们的期望收益就减少了。
策略2
如果攻击者使用策略2,这是个更糟糕的策略,因为攻击者此时永远不会将区块$B_A$公开,这样所有在此区块后面挖矿的矿工的计算都会被浪费掉。此策略会导致矿工们为0收益。
策略3
如果矿工啥也不干,那显然攻击就成功了。
如果原始(无攻击的情况下)挖矿收益不是太高的情况下,攻击者就可以确保矿工们如果继续挖矿(采用策略1和策略2)会为负收益(比如:电费 > 挖矿收益)。在这种情况下,一个理性的矿工会停止挖矿,也就是采用了策略3。
成功攻击条件
首先,攻击者是一个非理性经济人,他以破坏区块链网络系统为目标,而非以获取利益为目标。攻击成功也就是对于一个挖矿的矿工$i$,他采用停止挖矿策略需要满足以下三个条件:
- 攻击者的算力比例$\alpha_A$足够大
- 矿工$i$的挖矿算力比例$\alpha_i$足够小
- 矿工在网路中无攻击时的收益率(原始收益率)不那么高
收益率公式为:
下图展示了在不同情况下,原始收益率最高达到多少才能使攻击失败。我们用$\gamma$为诚实矿工在攻击者区块链分支上进行挖矿的比例。
简单分析一下这个图:假设攻击者的网络状况非常好,也就是$\gamma=1$,那么如果攻击者拥有全网20%的算力,一个拥有10%算力的节点在收益率小于2.5的情况下,就更倾向于不挖矿。如果矿工的算力也为20%,那么在收益低于1.8的时候,矿工就不会再继续挖矿了。可以看出,矿工算力越大,攻击难度也越大。
下图展示了各挖矿设备2017年7月1日到20年5月11日的收益率图:
我们可以看到在2020年5月时的收益率不到2, 蚂蚁S9的收益低于1,这个时候攻击较容易成功。
【NOTE】:挖矿收益受到比特币价格波动的影响极大,最近(2021.3.18)比特币价格疯涨,收益率较高。
多币模型
对于在网络中有多个可挖的币种的情况下,基本收益率都是差不多的。有证据表明,矿工们会在不同的币种之间不停地切换,矿工们会选择收益较大的币种来进行挖矿。这会使得BDoS攻击变得更加简单,因为只要被攻击的币种的收益率下降一点点,矿工们就会倾向于将算力转移到其它币种去,此时攻击成功。这种多币模型更加贴近现实情况。
缓解方案
叔块Uncle block
本文的攻击可以应用到类似比特币这类PoW模型的加密货币的,对于其它类型比如以太坊无效。这是因为以太坊的分岔上的区块也就是叔块也可以获取一定的收益,并不像比特币那样分支会被直接丢弃。因此,即使矿工所挖到的区块没有被包含在主链上,收益率也并不会下降太多,因此攻击会更加困难。因此,采用叔块是缓解BDoS攻击的一种方案。
实际上虽然以太坊可以抵御BDoS,它在其它一些攻击上,更加脆弱。后面我们分享一些该方面的论文。
忽略攻击者的区块
此策略的难点在于识别攻击者的区块,一个简单的方案为:使用收到区块头部的时间与全部区块的时间差来衡量一个区块是否为攻击区块。如果间隔时间太长,就认为此区块为攻击区块。此类方案只能应用在类似比特币这种可以使用区块头的加密货币中有效,对于那些使用智能合约以及零知识证明的币种无效。
结束语
本文提出了首个针对整个区块链的拒绝服务攻击BDoS。BDoS利用了基于PoW的加密货币底层的共识及挖矿机制,来向矿工们证明攻击者已经挖到了一个区块,但是攻击者不会公开这个区块。攻击者此种行为及其后续的策略可以降低矿工的收益率,如果一个矿工的目的是获取收益,那么他情愿会选择切换到收益更高的币种上挖矿或不挖矿,最终导致区块链瘫痪。
文中还对实施此攻击的一些实际条件进行了一些分析,感兴趣的同学可以参考原论文。
引用
[1] Mirkin, Michael, et al. "BDoS: Blockchain Denial-of-Service." Proceedings of the 2020 ACM SIGSAC conference on Computer and Communications Security. 2020.
更多推荐