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] :芬尼攻击是扣块攻击的一种衍生攻击,主要发生在支持零确认交易的服
   280   281   282   283   284   285   286   287   288   289   290