Page 288 - 《软件学报》2021年第5期
P. 288
1512 Journal of Software 软件学报 Vol.32, No.5, May 2021
前对矿机系统进行代码审计、性能测试,以预防 0day 漏洞攻击.
(2) 部署阶段:矿工应该在原有的软件防护基础上增加辅助的安全检测技术,如入侵检测、防火墙、蜜罐
技术等,进一步预防网络渗透攻击和地址篡改攻击.
此外,攻击者可以利用挖矿机制中存在的漏洞恶意骗取、竞争出块奖励,也可以通过扰乱交易顺序实现双
花攻击等.其中,算力伪造攻击和扣块攻击属于恶意骗取矿池出块奖励的攻击行为,可以尝试以下防御策略.
(1) 身份管理机制:矿池应结合保证金奖惩机制(如 Casper 机制)和身份认证机制,对新加入的矿工进行身
份认证,要求其缴纳一定的保证金,为其诚实的挖矿行为做保证.
(2) 细粒度的工作量检验算法:矿池应定时更新其使用的工作量检验算法,对以往算法中存在的问题进行
背书,作为新算法设计的重要依据.
(3) 合理的绩效制度:矿池应定时对矿工进行绩效考核,奖励表现优秀的矿工,驱逐效率低下的懒惰矿工.
对矿池内的矿工行为进行管理和约束,保证矿池公平有序地运行.
(4) 相互监管制度:设置矿工相互监管奖励,一旦矿工因进行算力伪造攻击和扣块攻击而被举报,则矿池
奖励举报者,没收恶意矿工的保证金,将其加入黑名单后驱逐出矿池,不再录用.
丢弃攻击、空块攻击、通用挖矿攻击则属于恶意竞争出块奖励攻击行为.丢弃攻击中,攻击者主要依赖于
网络资源优势,可以比其他节点更快获取数据上链信息,也可以更快地完成数据打包上链.所以丢弃攻击可以看
作是女巫攻击的变种攻击,也可以作为自私挖矿攻击的前置攻击,提高攻击者实施自私挖矿攻击的成功率.为了
防止丢弃攻击,区块链网络可以引入身份认证机制,对用户潜在的节点身份进行关联分析,杜绝单个用户通过操
纵多个节点获取远高于其他节点的网络优势.在空块攻击场景中,攻击者之所以可以通过生成空块恶意竞争奖
励,是因为区块链网络不存在对新区块的有效性验证过程.因此,区块链网络节点只要在获取新区块时执行有效
性验证,即可有效缓解阻止空块攻击.通用挖矿攻击则需要特定的场景才可以实施,其关键在于攻击者利用新系
统与旧系统之间相同的架构和共识机制导致的矿机(算力)通用问题,通过成熟系统的中算力对新系统实现算力
压制,从而恶意竞争出块奖励,甚至实施双花攻击、卖空攻击等恶意行为.因此,新区块链项目必须考虑系统封闭
性、专机专用等问题,从根本上杜绝算力通用导致的通用挖矿攻击.
芬尼攻击、种族攻击、交易顺序依赖攻击属于扰乱交易顺序类的攻击方式.芬尼攻击和种族攻击主要针对
的是支持零确认交易的服务场景,前者主要利用挖矿便利,攻击者只有在挖到包含自己交易的区块时,才会通过
零确认交易扰乱交易秩序,实现代币双花等目的;而后者和交易顺序依赖攻击则是通过提高交易 Gas 的方式扰
乱交易顺序,进而实现代币双花等目的.这两者的共性在于区块链节点在接受新区块时未验证区块内交易与交
易池中的未确认交易是否存在冲突.由于零确认交易可以满足商家的即时性支付需求,所以直接通过禁止零确
认交易来阻止芬尼攻击和种族攻击的方式不具备可行性.区块链系统可以考虑开通钱包的子账户来保证零确
认交易的安全性,即,用户需要通过专门的子账户才能完成零确认交易操作.此时,零确认交易由矿工单独打包
验证,在一定程度上可以避免零确认交易与普通交易的冲突.此外,为了避免攻击者扰乱交易顺序,区块链系统
可以要求矿工在打包交易时,通过代币锁定技术缴纳保证金之后再广播新区块.其他节点在接受新区块时,可以
就区块内交易在交易池中进行遍历验证:如果通过验证,则接受新区块;否则,该节点可以通过举报矿工恶意行
为来获取矿工被锁定的保证金及出块奖励.
在区块链交易场景中,攻击者的最终目的是通过直接或间接手段获取用户节点的账户信息,进而盗取资产,
主要存在交易平台和用户账户两个攻击目标.为了保证交易平台中用户的账户隐私,交易平台应采取以下措施.
(1) 引入密码安全等级分析机制.系统可以在用户设置账户密码时,对当前密码的安全性进行实时评级,
避免用户使用弱口令,从而预防弱口令攻击.
(2) 交易平台应在用户登录账号时进行人机识别,在一定程度上缓解撞库攻击.而用户也应该注意避免多
网站的密码通用问题,可以考虑对账户进行安全等级评估,相同安全等级的账户采用相同的密码,这
样既可以缓解撞库攻击,也能避免账户密码过多给用户带来的密码管理问题.
(3) 通过限制目标账户的登陆频率和限制单节点的访问请求频率,从被访问端和访问端两个方向限制攻