Page 285 - 《软件学报》2021年第5期
P. 285
田国华 等:区块链系统攻击与防御技术研究进展 1509
6.1 挖矿场景中的攻击
“挖矿”是维持 PoW 系统正常运转的动力,很多攻击者尝试利用挖矿过程中存在的漏洞获利,这会导致严重
的资源浪费,进而降低区块链网络的吞吐量.其中,主要包括针对矿机系统和挖矿机制的恶意攻击.
6.1.1 针对矿机系统的攻击
由于系统代码的闭源特性,用户无法检查矿机的安全性,所以存在诸多安全隐患.
(1) 0day 漏洞攻击(zero-day (0day) vulnerability) [35] :目前,大多数矿机的系统都是通用的,一旦某个矿机系
统被发现存在 0day 漏洞,攻击者可以利用该漏洞得到系统控制权限.
(2) 网络渗透攻击(network penetration attack) [101] :攻击者通过利用多种安全漏洞对客户端系统(如钱包客
户端、矿机系统、Web 服务系统等)进行持续性渗透,最终获取系统的控制权限,威胁矿机的系统安全.
该攻击方式不限制于某一特定漏洞,最终以获取系统权限为目的.
(3) 地址篡改攻击(address tampering attack) [102] :攻击者在攻陷矿机系统之后,通过篡改挖矿奖励接收地址
的方式,劫持并盗取原属于目标矿工的挖矿奖励.
6.1.2 针对挖矿机制的攻击
在挖矿过程中,“聪明”的矿工可能利用挖矿机制的一些漏洞做出趋利行为,导致严重的资源浪费.主要包括:
(1) 算力伪造攻击(computational forgery attack) [31] :在比特币系统中,矿池一般通过特定的工作量证明检
验算法来检验当前矿工的实际算力.如果算法存在某些漏洞时,“聪明”的矿工可能通过虚报算力来获
取更高的奖励,这将严重影响奖励分配的公平性,导致矿池的算力流失.
(2) 扣块攻击(block withholding attack) [32] :也被称为藏块攻击.主要有 3 种形式:第 1 种是矿池下发计算任
务后,恶意矿工直接返回一个错误的计算值,然后分得矿池根据算力分发的数字货币奖励;第 2 种是矿
工挖出区块后,不向矿池返回,而是私自广播至整个网络,独自获得相应的区块奖励;第 3 种是恶意矿
工不会发布自己挖到的区块,导致矿池收益降低.扣块攻击成本较高,恶意矿工获利较少,甚至不获利,
所以该攻击常见于矿池恶意竞争的场景中:恶意矿工作为“间谍”加入敌方矿池,在领取敌方矿池奖励
的同时,通过浪费敌方矿池的算力资源来获取己方矿池的报酬,实现两方获利.扣块攻击的出现,激化
了矿池间的恶意竞争,严重扰乱了正常的挖矿秩序.
(3) 丢弃攻击(drop attack) [33] :攻击者将多个具有良好网络连接的节点置于网络中,这样不但可以方便地
获知最新被广播出的区块,也可以比其他节点更加快速地传播目标区块.当攻击者挖出新区块后不会
及时公布,直至得知有区块被公布时,攻击者会立即发布自己的区块,并且利用布置好的节点快速地
广播到整个网络,使得该合法节点开采的区块被丢弃,从而获取奖励.
(4) 空块攻击(empty block attack) [103] :空块攻击是早期比特币网络中常见的攻击方式,攻击者通过生成空
块获取比打包交易区块更快的出块速度,从而以更大的可能性获取出块奖励.空块的产生,意味着比
特币网络有 10 分钟处于拒绝服务的状态.偶尔出现空块不会对网络产生太大影响,但短期内出现大
量空块,会使交易池中的交易大量滞留,平均交易时间延长.
(5) 通用挖矿攻击(general mining attack) [104] :通用挖矿攻击常见于区块链系统初始化建立的阶段,当该系
统与某个已成熟区块链系统采用相同的架构和共识机制时,后者系统中具备大量算力的攻击者可能
加入新区块链进行挖矿,以恶意竞争出块奖励.此时容易产生算力集中化问题,甚至当攻击者算力超
过新系统全网一半时,可能发起 51%攻击来实现代币双花、历史修复、卖空攻击等攻击目的.
[9]
(6) 交易顺序依赖攻击(transaction-ordering dependence attack) :区块链交易场景中,交易的处理顺序不
同,则其产生的结果也不相同.例如:当攻击者发布一个奖励丰富的解题智能合约时,攻击者可以监听
网络中与之相关的解题交易,并在目标解题交易被验证、打包上链前,发布一个具备高 Gas 值的交易,
将解题合约的奖励降低为 0.出于最大获利的目的,矿工会优先将高 Gas 值的交易打包上链,导致解题
者无法获得智能合约中原先声明的奖励.
(7) 芬尼攻击(Finney attack) [10] :芬尼攻击是扣块攻击的一种衍生攻击,主要发生在支持零确认交易的服