区块链安全问题研究
2022-09-30刘晓锋吴玉娟
谢 婷,刘晓锋,吴玉娟
(西华师范大学,四川 南充 637000)
0 引言
2008年,中本聪提出具有去中心化、可追溯和匿名化等特点的区块链技术,受到各界人士的关注,至此诞生出各种基于区块链技术的应用,如比特币、莱特币和以太坊等[1]。在区块链从1.0到3.0版本期间,出现过各种安全事件。作为区块链1.0版本的比特币发生过的安全问题,例如,大整数溢出造成了比特币被盗取了千万亿;Mt.Gox交易所因攻击者获取wallet.dat文件副本,被盗取了几十万的比特币;丝绸之路2.0交易网站曾因交易延展性问题导致比特币被盗。区块链2.0版本的以太坊发生过的安全问题,例如,著名的The DAO事件,被盗取了几百万的以太币;签名钱包Parity存在安全问题,攻击者利用多重钱包漏洞盗取了几十万的以太币;还有其他因智能合约漏洞和以太坊本身导致的各种安全事件。区块链3.0版本的应用也因代码漏洞导致安全事件发生,如Wormhole因代码漏洞受到黑客攻击[2]。
以上各种安全事件均暴露出基于区块链技术的各种应用缺乏真正意义上的安全。区块链本身是以去中心化、防篡改和匿名化等特点受到人们的广泛关注,但在使用区块链技术时出现各种安全问题,导致人们开始担忧区块链的未来,由此引发区块链技术的信任危机。
1 区块链安全问题
国内外文献针对区块链安全问题研究存在两种研究方式。(1)第一种方式[3-4],按照攻击事件归属区块链架构的某一层,进行相应分类,如表1所示。单独分析各安全问题属于哪层出现的安全问题,隔断了各种安全问题的联系,没有考虑除六层架构以外的安全问题。因此这种研究方式缺乏各层之间安全事件的联系性和全面性。(2)第二种方式,针对区块链中某一层出现的安全问题进行研究,如孙国梓等[5]只对合约层中出现的各种安全事件进行分析,ATZEI等[6]对交易中出现安全问题所造成区块链用户资产丢失的安全事件进行研究,不过这种研究方式过于单一化与集中化,对发生在区块链各层的安全问题并没有考虑完全,缺乏全面化与综合化。
本文考虑区块链安全事件的复杂多样,主要从区块链自身安全机制问题、运行环境问题和使用者安全问题三个方面进行研究与讨论。
1.1 区块链自身安全机制问题
由于区块链自身安全机制存在一定问题,所以根据区块链的六层逻辑架构分析区块链自身安全问题。(1)数据层,区块链的数据层存在哈希函数、加密技术和时间戳的安全性问题。哈希函数的攻击是通过变色龙HASH函数[7-8]实现篡改数据,其原理是攻击者在保持输出相同的情况下,人为地设置自己想要的输入值,因此变色龙HASH函数的出现改变了区块链不可篡改的特点,违背了区块链技术创始本意。随着技术发展,最初采用的加密技术是在HASH256量子计算[9]下被破解的,因此无法实现区块链用户的匿名性。时间戳的使用是准确定义交易时间,防止出现双花攻击,但区块上的时间戳是为矿工定义的,因此出现有利于矿工自己而设计的时间戳漏洞。例如,在GovernMental攻击中就存在根据时间戳漏洞来设计时间戳,攻击者使自己的时间戳比之前区块的时间戳晚一分钟来赢得奖励。(2)网络层,网络层目前出现的问题主要是传播机制问题。传播机制采用的洪泛法是指每个节点将自己所含的交易信息都广播给相邻节点。攻击者通过网络层的启发式聚类法[10]推测出每个节点关系及身份,导致区块链的匿名性特点并不存在。(3)共识层,共识层由共识算法[11-12]组成,但各种共识算法有不同优缺点,导致共识层存在扩展性差和硬分叉的安全性问题。可扩展性主要是指系统效率,其中TPS(系统吞吐量)是可扩展性的一项重要指标。针对可扩展性的安全问题是粉尘攻击和空块攻击,粉尘攻击中攻击者利用比特币设计规则漏洞,进行大量小额交易,又由于比特币交易区块大小有限,导致网络拥塞。空块攻击则只打包新币发行的coinbase交易,其他类型交易都不会打包到区块,一旦出现大量类似攻击,会导致交易确认时间过长,系统吞吐量过低。硬分叉是指系统中各个节点出现分歧而导致区块链分叉。硬分叉导致区块链主要的安全问题是交易回滚和重放攻击。(4)激励层,激励层主要包括发行机制和分配机制,而发行机制存在因优先打包而交易费用高的交易,导致一些费用低的交易等待时间过久的安全问题。(5)合约层,在合约层中区块链本身存在的问题是合约状态无法预测、可变的交易状态和交易延展性。当调用一个合约时,此时合约状态和之后状态可能会不一样,合约状态受其他交易和分叉影响,导致合约状态改变。在Dynamic Libraries攻击中,用户在执行交易时合约状态改变,导致将以太传输给攻击者。交易ID是由交易大小、类型、时间和签名等因素计算而成的值。交易延展性则指当签名改变时交易ID也会随之发生变化,因此攻击者利用这一缺点修改交易ID,盗取交易费用。Mt.Gox交易所就受到了类似攻击。(6)应用层,主要涉及分布式应用程序(DAPP)。DAPP的安全事件是代码漏洞,攻击者利用这些漏洞设计木马病毒攻击DAPP,导致DAPP瘫痪。
针对区块链自身安全机制出现的问题,提出区块链六层架构模式的解决方案。
区块链数据层针对哈希函数、加密技术和时间戳攻击分别提出相应解决方案。对于使用变色龙哈希函数篡改区块数据的安全问题,可以将诚实节点已知的区块高度与当前区块最长链高度进行比较,如果相差很大就有可能存在篡改区块的行为。为防止因加密技术被量子技术破解所引发的安全问题,1989年,BENNETT等[13]根据量子力学原理提出量子加密技术。有关预防时间戳攻击可使用Oyente工具,检测出漏洞问题。
网络层通过传播机制识别节点身份的安全问题,通过零知识证明、群签名和环签名等方案解决该问题。使用零知识证明方案,使相邻节点除了传播信息这一零知识证明外,不能得到其他任何信息,攻击者无法通过其他信息推测节点身份。而群签名和环签名是把多个节点信息混合,使攻击者无法从混合节点信息推测节点身份。
共识层中涉及可扩展性差和硬分叉的问题。区块链中的可扩展性差问题会影响区块链系统效率,因此对于系统检测出的可扩展性差问题,需要通过ZHOU等[14]提出的链上和非链上方法解决。硬分叉带来的重放攻击和交易回滚问题对区块链影响非常大,而对于硬分叉问题只能采取预防手段,即中本聪所说的“鼓励诚实节点挖‘好链’”[15],这样区块链才能长期维持。
激励层中发行机制问题可通过增加时间限制和优先级来解决。当费用低的交易等待时间过长时,系统会将费用低的交易优先级进行相应调整,以防止该交易等待时间过长。合约层中存在的问题,可使用基础的检测工具Oyente,检测智能合约的基础漏洞。对于区块链应用层出现的DAPP漏洞问题,则需要程序不断打补丁,修改程序出现的漏洞问题。
1.2 运行环境问题
区块链中因交易所出现的安全问题不在少数,主要有代码漏洞、以太坊的Solidity语言和以太坊虚拟机(EVM)问题。比特币交易所因在编写代码时存在整数溢出问题,被盗走几百万比特币。以太坊中Solidity语言由于没有引入构造来处理特定领域,如导致交易记录被不可预测地重新排序和延迟。又因每个合约中都含有fallback函数,导致攻击者利用fallback函数转移交易所的以太币,如The DAO攻击。以太坊中虚拟机存在问题,即在以太传输时,如果收件人地址是孤立地址(不与任何用户或合约相关联),则以太将永远丢失。这些问题都是交易所在创建时所携带的运行环境问题。
矿池的形成给攻击者创建攻击机会,攻击者对矿池的攻击行为主要有51%算力攻击和截留攻击。51%算力攻击是指某一矿池中矿工数占总矿工数比例超过50%,该矿池相当于掌握区块链,即产生区块和去除区块。截留攻击如图1所示,主要是矿池A为获取收益,将自己内部矿工成员伪装成矿池B的成员,如果伪装者找到一个完整的解决方案,构成完整的工作证明,则其会放弃该解决方案,从而减少矿池B的总收入。虽然矿池A获取收益,但EYAL[16]提到矿池A只是临时获取收益,如果矿池B同样攻击矿池A,它们就将面临囚徒困境。若一池选择攻击,通过攻击进行报复,则会增加收益;然而,当两者都攻击时,在纳什均衡时,两者赚得比两者不攻击时要少。
图1 截留攻击工作原理
对于网络协议上存在的漏洞,APOSTOLAKI等[17]提出因边界网关协议(BGP)存在的漏洞,攻击者可对自治系统(AS)进行路由攻击。路由攻击包括分割攻击和延迟攻击。分割攻击即区块链中一部分节点区域受到攻击者控制,接受或者发送信息都通过攻击者。因此,攻击者不仅可以获取信息、伪造信息,还可以在不同区发送同一笔交易,导致出现双花攻击。延迟攻击则是攻击者在分割区块链各个节点后,作为中间节点把发送方的信息进行修改,然后发送给接受方,这种攻击非常隐蔽,导致接收方与发送方无法发现攻击,并且区块链网络中绝大多数节点容易受到此类攻击。
区块链运行环境解决方案:首先是交易所的安全问题,目前研究人员针对这些漏洞设计出许多检测工具,如MythX、Abbe和Oyente等。专业研发员根据这些工具检查基本漏洞,防止因这些漏洞而产生的攻击。其次是解决矿池问题中的51%算力攻击和截留攻击。为防止51%算力攻击,在区块链网络中限制各矿池占总矿池的算力比例,从而阻止攻击发生。对于解决截留攻击的方案分为预防和阻止,其预防原理是矿池通过部分工作证明和完全工作证明的比率来估计矿工的预期采矿功率和实际采矿功率,如果结果高于设定置信区间的差异就表示攻击。截留攻击的阻止方案包括两种[18]:其一是突击测验,即间接检查未提交方案的矿工;其二是修改比特币协议,其思想是将无法辨别的有效块交给矿池进行审查,从而阻止攻击发生。最后给出解决网络协议安全问题的两种方案[19]:第一种方案是无需任何协议更改的短期措施,主要包括增加节点连接的多样性、选择比特币对等点时考虑路由因素、监控往返时间(RTT)、监视其他统计数据和使用不同的ASes网关等措施;第二种方案是检测和防止路由攻击的长期措施,主要包括加密比特币通信、使用消息身份验证码、使用UDP心跳和在多个连接上请求块等措施。
1.3 使用者安全问题
使用者安全问题主要是秘钥的管理问题,如太平洋资本公司CEO Peter Schiff曾在登录比特币钱包时,因秘钥丢失导致无法登录;Poker EOS交易所也因团队私钥管理不当,导致项目账户私钥泄露,其攻击方式是攻击者采用钓鱼攻击手段,将网站伪装成加密货币交易所Kraken网站,导致大量用户的账号和秘钥被盗取。
对于使用不当导致的私钥丢失问题,HOMOLIAK等[20]构建了SmartOTPs钱包框架,提供一种安全、可用的管理加密代币的方法,该框架能够阻止拥有用户私钥或攻击客户端的攻击者。对于钓鱼攻击导致的秘钥丢失,可以使用反钓鱼软件工具来预防钓鱼攻击。
1.4 区块链安全问题总结
对区块链安全问题进行总结,见表2。
表2 区块链安全问题总结
2 区块链安全检测模型设计
目前,检测模型都是针对区块链六层架构或者区块链某层安全问题进行检测,这种检测模型忽略了运行环境和使用者所带来的问题,导致存在检查遗漏现象。本文提出的检测模型根据三层分类架构进行安全问题检测,其流程如图2所示。首先输入安全问题,其次判断安全分类属于哪类安全问题,最后根据不同的分类层次进行相应的解决。这种检测模型比单独针对区块链六层架构安全问题的分析更加全面和彻底,不仅考虑了六层架构出现的安全问题,也考虑了运行环境和使用者出现的安全问题。
图2 模型流程图
3 总结与展望
综上所述,对区块链自身安全机制问题、运行环境问题和使用者安全问题分别进行讨论。对于区块链自身安全机制问题,通过六层架构对攻击方式与相应解决方案进行描述;对于运行环境问题,从交易所、矿池和网络协议三方面进行研究;对于使用者安全问题,则对秘钥管理漏洞展开分析。本文详细阐述了区块链中存在的攻击事件,旨在维护区块链安全,促进区块链健康发展。
关于区块链未来发展的一项研究是漏洞检测工具的开发。目前的检测工具只能检测一些基本漏洞,对复杂多样的漏洞仍检测不出,因此未来工作应致力于研发更精准的检测工具软件。关于区块链未来发展的另一项研究是去匿名化,虽去匿名化与区块链创立之初的想法相违背,但去匿名化有利于政府部门对犯罪行为的监督。当然,区块链的去匿名化和匿名化应针对具体对象而言,既满足普通用户的需求,又不给犯罪分子以可乘之机,旨在维护网络安全。