区块链一直以不可篡改、分布式、永久可查验等特点得到人们的青睐,这些特点使区块链听起来非常安全,甚至像是个万无一失的技术。但实际上,针对区块链的攻击一直都存在,且每次发生,往往会造成巨大的损失,对于区块链的开发者和使用者来说,了解这些攻击的原理是至关重要的。预防胜于治疗,切莫“头痛医头,脚痛医脚”。
基于对等网络(P2P)的攻击
1、日蚀攻击- 一个节点将选择“x”个节点作为访问区块链的基础,该节点从这“x”个节点获取区块链的数据。
如果攻击者可以使得此节点选择的“x”个节点都为攻击者可控制的节点,就可以使得被攻击节点处在一个“孤立”的状态。被攻击节点将从主网中被隔离出来,完全由攻击者控制。
如下图所示:
2、女巫攻击- 这里的“女巫”并不是指拥有魔法的女人,而是出自一部美国电影《Sybil》,剧中的主人公拥有16重人格,扮演着16个不同的角色。而女巫攻击就是指同一节点伪装成不同节点发起的一种攻击。
攻击者通过伪造的身份,使少量节点伪装成大量节点,进而影响整个网络。攻击者可能利用女巫攻击进行双花、实现51%攻击等,并且要实施日蚀攻击,一般都会先进行女巫攻击。
3、异形攻击-异形攻击又称为“地址污染”。
当不同公链使用兼容的握手协议时,我们称这些公链为同类链。攻击者将同类链的节点数据加入被攻击的公链节点中,当被攻击的公链节点进行通信并互换地址池时,就会污染其他正常节点的地址池,并持续污染整个公链网络,导致公链通信性能下降,最终造成节点阻塞等现象。
很多借鉴以太坊开发的区块链系统,与以太坊使用了相同的通讯算法,它们都属于以太坊的同类链。
基于共识和挖矿的攻击
1、自私挖矿 – 区块链的共识机制决定着节点会认同最长链才是真实有效的。攻击者可以在当前最新区块上持续挖矿但不进行广播,从而隐藏自己挖出的区块。
当攻击者节点隐藏的区块长于已在链上的公布的最长区块时再进行广播,从而成为最长链,使得原先的最长链进行回滚,从而实现双花等攻击。
同时,进行自私挖矿的节点可以比其他诚实节点获得更大的利益。假设在区块1的基础上继续的挖矿,自私节点挖出“2’”和“3’”,但其并不对外广播这两个区块,并继续在“3’”的基础上继续挖矿,而当其他节点挖出了“2”时,其也对外广播“2’”,使得链上产生分叉,如此继续,当自私节点挖出较长的链并进行广播时,其可以获得“2’”到最新区块的所有挖矿奖励。
如下图所示:
2、挖矿木马 – 攻击者通过上传恶意程序到公开网络或者制作蠕虫病毒等方式将挖矿程序传播到他人计算机上。
利用他人计算机资源和电力进行挖矿,获取挖矿利益。被攻击的计算机会消耗大量的资源,导致电脑卡顿,使用寿命减短。
3、51%算力攻击– 51%算力攻击是区块链最著名的攻击方式之一。
在一个POW共识的区块链网络中,算力即是权力。当超过50%的算力都由一人控制时,此人就可以任意的撤销和阻止交易,进而实现双花。
这种攻击在大型网络中较难实现,在小型网络中发生的可能性更高。在POS共识中与之类似的有币龄累计攻击和长距离攻击。
4、时间劫持攻击 – 一个节点是通过其他节点时间的中位值来确定时间的。
如果攻击者将一个恶意的节点列表置入被攻击节点的对等节点列表中,就可以控制此节点的时间,例如通过日蚀攻击。
被攻击的节点将不会接收来自正常网络的出块。由于这些交易无法提交到实际的区块链网络,攻击者便可以对此节点发起双花等攻击。
基于0确认的攻击
1、芬尼攻击– 如果攻击者可以隐藏一个包含自己交易的区块,就可能实现一笔双花。
当一个交易所或其他机构接受0确认的交易时,攻击者可以向其进行转账,花费其隐藏区块中已经花费的资金,在新交易的区块广播前,将隐藏的区块广播。
因为所隐藏的区块时间更早,所以在后面进行的花费将被回滚,从而实现双花。
2、种族攻击 – 此类型攻击是“芬尼攻击”的分支,攻击者将同时进行两笔交易,花费同一笔资金,一笔转给支持0确认的商家进行提现;一笔转账给自己,并给予更高的gas。
节点会优先处理gas更高的交易,所以后一笔交易将不会被执行。通常攻击者会连入与被攻击商家较近的节点进行操作,使得商家优先收到最终不被执行的交易。
区块链中的漏洞导致的代价可能非常之高,尤其是公链,任何人都可以匿名的连入公链,而区块链的不可更改性又使得攻击发生后更难以挽回损失,虽然可以通过硬分叉和软分叉进行修复,但显然这不是一个好的方法。因此在实际上线前做好安全审计和是尤为重要的。