宅客频道编者按:“我们不生产币,我们是币的搬运工。”白帽汇安全研究院负责人邓焕如此描绘他所观察到黑客在区块链币世界的猖獗现象。“有些技术可以产品先行,但是自带金融属性的技术必须得安全先行。”白帽汇 CEO 赵武这样说。在专业的安全研究人员看来,黑客要想攻击区块链实在太简单了,那么自带金融属性的区块链又受到了哪些安全威胁?5月8日,白帽汇安全研究院联合安全智库发布了一份《区块链安全分析报告》,雷锋网截取了其中“区块链攻击对象分析”部分章节。
区块链攻击对象分析
基于目前世界各国对加密货币的态度不尽一致,在区块链货币领域黑客几乎可以为所欲为,尚处于无法监管的状态,所以思考已经发生或者可能发生的安全问题对于区块链应用来说是必不可少的。
就目前区块链的特征,我们进行了如下分层:应用服务层、中间协议层和基础网络。并基于以下层面出发,针对每层中各个“攻击面”去分析已发生或者可能发生的安全风险:
一般来说,区块链系统由数据层、网络层、共识层、激励层、合约层和业务服务层组成。其中,数据层封装了底层数据块区以及相关的数据加密和时间戳等技术;网络层则包括分布式组网机制、数据传播机制和数据验证机制等;共识层主要封装网络节点和各类共识算法;激励层将经济因素集成到区块链技术体系中来,主要包括经济激励的发行机制和分配机制等;合约层主要封装各类脚本、算法和智能合约,是区块链可编程特性的基础;业务层则封装了区块链的各种应用场景和案例。
该模型中,基于时间戳的链式块区结构、分布式节点的共识机制、基于共识算力的经济激励和灵活可编程的智能合约是区块链技术最具代表性的创新点。经过对区块链技术的各个层面进行纵向剖析,并针对上述层次的不同“角色”进行安全性分析后,我们发现目前攻击者通常从两个点出发:
1. 区块链中的中心化对象:交易平台、在线钱包等。
2. 区块链中的去中心化对象:智能合约、共识机制等。
我们根据攻击者主要采用的攻击方式、对象和等级,总结如下表所示:
3.1 数据层
3.1.1 区块数据
基于区块链技术本身的特性,区块数据是分布在多个节点上的链式结构数据,节点与节点之间的“互动”将记录在区块中,然后在各个节点之间同步完整的区块数据,每个节点都有自己的一份区块数据,单一或少部分的节点的区块数据自行或被篡改,都无法影响整个区块链的运行,依赖这种去中心化的架构,可以很容易做到数据防篡改。
风险
针对区块数据的安全风险,我们分析总结了以下攻击方式:
恶意信息攻击
在区块链中写入恶意信息,例如病毒特征码、政治敏感话题等。借助区块链数据不可删除的特性,信息被写入区块链后很难删除。若区块链中出现恶意信息,将会遭到*毒软件、政治敏感等多方面的问题。
资源滥用攻击
随着时间的推移,区块数据可能会爆炸式增长(节点之间恶意频繁交互),也可能会呈线性增长,这主要取决于此区块链应用的设计,依赖现有的计算机存储技术,区块数据若发生爆炸式增长,可能导致节点无法容纳又或者使区块链运转缓慢,从而使稳定运行的节点越来越少,节点越少,则越趋于中心化,引发区块链危机。
不过目前主流的区块链应用譬如BTC、ETH等,都完好的解决了此问题,比特币的解决方法为固定区块大小为1M,防止区块过度膨胀,区块链大小呈线性增长,即使到2029年区块数据也只有1T左右,但是此解决方案并不优雅,限制区块大小的同时也给比特币带来了交易时间长的诟病,目前比特币的一笔交易需要确认数小时。
攻击场景距离:若链中没有设计相应的操作限制,攻击者可以通过发送大量的垃圾信息来堵塞整个区块链,使区块链中真正的信息迟迟得不到处理,又或者使区块链中的存储节点超负荷运行。
案例
2017年2月份,以太坊的Ropsten测试链就遭到了一次恶意攻击,攻击者发动了千万级别的垃圾交易信息,直接阻塞的网络的正常运行。
此案例虽然发生在测试网络上,并没有使以太坊网络受到实质性的影响,但也给我们敲响了警钟,区块链的应用目前还处于萌芽阶段,主流的应用不存在此问题理所当然,但不代表新的区块链应用不会存在这类问题,这都是区块链开发者需要注意的。
2017年在EuskalHack安全会议上,有安全研究者提出了基于区块链模式的botnet网络,利用区块链网络进行C&C的恶意指令发布的并且提供了POC[17]。
3.1.2 签名与加密方式
简要
密码学是保证区块链的安全性和不可篡改性的关键,而且区块链技术大量依赖了密码学的研究成果,为区块链的信息完整性、认证性和不可抵赖性提供了关键保障。
风险
加密技术作为一个区块链整体的支柱,其安全性显得尤为重要,例如前些年所流行的MD5和sha1摘要算法,目前已经证明安全性不足,现在已经不能被商用。
所以,公认的高强度加密算法在经过长时间的各方面实践与论证后,已被大家所认可,但不代表其不存在漏洞,不可被破解。
如比特币目前大量使用的是sha256算法,到目前为止,此算法还是安全的,虽然有人依然持有质疑,但是并没有任何直接的公开证据表明此算法存在漏洞。
然而,比特币所使用的算法也并不是毫无瑕疵,至少目前引发了以下问题:
1. sha256算法对应的ASIC矿机以及矿池的出现,打破了中本聪最初设计“一CPU一票”的理念,淘汰了普通GPU挖矿,全网的节点逐渐减少,逐渐趋于中心化。
2. 假名制,通过公共账本你可以查看任意账户的所有交易信息,这显然是和隐私保护背道而驰的,而且在日常的互联网生活中很难不在互联网中留下痕迹,例如:在论坛中发布交易信息,钱包地址就与论坛账户产生了对应关系。门罗币在此方面则优于比特币。
所以,在设计区块链应用的时候,务必要对加密方式慎重选择。对于目前主流的签名方式有如下:
针对加密方式的安全风险,我们分析总结了以下攻击方式:
穷举攻击
此类攻击方式主要作用于散列函数中,且几乎所有散列函数或多或少都受此攻击方式影响,而且其影响程度与函数本身无关,而是与生成的hash长度有关,主要是一个概率论的问题,其中最典型的的方式是基于生日悖论的“生日攻击”。
生日悖论:如果一个房间里有23个或23个以上的人,那么至少有两个人的生日相同的概率要大于50%。这就意味着在一个典型的标准小学班级(30人)中,存在两人生日相同的可能性更高。对于60或者更多的人,这种概率要大于99%。
碰撞攻击
此种攻击方式主要作用于散列函数中,比较典型的案例是“md5摘要算法”和“sha1摘要算法”。
它的攻击原理是通过寻找算法的弱点,瓦解它的强抗碰撞性这一特性,使得散列函数原本要在相当长一段时间才能寻找到两个值不同hash相同的值的特性被弱化,攻击者能在较短的时间能寻找到值不同但hash相同的两个值。
长度扩展攻击
此种攻击方式主要作用于散列函数中,准确的说是基于Merkle–Damgård构造的摘要算法。其原理是通过算法弱点,在已知密文hash和密文长度的情况下,推导出密文与另一消息拼接后计算出来的hash。
后门攻击
此种攻击方式作用于所有开源加密算法库中,RSA算法是区块链中身份验证的基石,RSA算法本身是没问题的,但是在实际情况中,人们可能更多的是选择别人已经写好的“轮子”直接拿来用,而不是自己再去实现一套加密函数。
这就带来了一个问题,在别人已经写好的“轮子”中,可能被安插后门,比较典型的案例是:NSA在RSA算法中安插后门,使得攻击者能直接通过公钥算出私钥。
量子攻击
此种攻击方式作用于大部分密码学算法。目前所有的加密算法以及摘要算法,其安全强度取决于它被穷举的时间复杂度,这使得依赖现有的计算机的计算能力,针对比较强的加密算法要对它进行暴力破解是非常难的,但是量子计算机拥有传统计算机无可比拟的算力,使得时间复杂度大大降低,于是,其安全强度便可能被瓦解,此问题是比特币社区中一直在讨论的问题。
案例
目前暂无实际攻击曝光,但在某些层面可能存在致命安全隐患
3.2 网络层
3.2.1 P2P网络
区块链的信息传播主要依赖于其点对点传输的特性,采用P2P[4]式的网络架构,寻找适宜的节点进行信息传播,当建立一个或多个连接后,节点将一条包含自身IP地址消息发送给其相邻节点。相邻节点再将此消息依次转发给它们各自的相邻节点,从而保证节点信息被多个节点所接收、保证连接更稳定。
风险
P2P网络依赖附近的节点来进行信息传输必须要互相暴露对方的IP,若网络中存在一个攻击者,就很容易给其他节点带来安全威胁,中心化的网络不会太过担心此问题的原因是组织的网络中心的安全性都是极高的,即使暴露也不会有太大问题。
而去中心化的公链网络节点可能是普通家庭PC,可能是云服务器等等,其安全性必然是参差不齐的,其中必有安全性较差的节点,对其进行攻击将直接威胁节点的安全。
针对P2P网络的安全风险,我们分析总结了以下攻击方式:
日食攻击
日食攻击是其他节点实施的网络层面攻击,其攻击手段是囤积和霸占受害者的点对点连接间隙,将该节点保留在一个隔离的网络中。这种类型的攻击旨在阻止最新的区块链信息进入到日食节点,从而隔离节点。
窃听攻击
攻击者可以使用这种攻击来让区块链中的用户标识与ip关联起来,在某些情况下甚至可以追溯到用户的家庭地址。
以比特币为例,当你在比特币网络上执行交易时,你的比特币客户端通常通过连接到一组八台服务器来加入网络,这个初始连接集合就是你的入口节点,每个用户都会获得一组唯一的入口节点。
当你的钱包发送比特币完成购买时,入口节点将交易转交给比特币网络的其余部分,研究人员发现,识别一组一口节点意味着识别一个特定的比特币客户端,以此来推导出某个用户。
那么,攻击者要做的是与比特币服务器建立多个连接,连接后,攻击者必须听取客户端与服务端的初始连接,这会泄露客户端的ip地址。
随着交易流经网络,它们将会与客户端的入口节点相关联,如果匹配,那么攻击者就知道这是来自一个特定客户端的交易。
BGP劫持攻击
边界网关协议(BGP)是因特网的关键组成部分,用于确定路由路径。BGP劫持,即利用BGP操纵因特网路由路径,最近几年中已经变得越来越频繁。 无论是网络犯罪分子还是政府,都可以利用这种技术来达到自己的目的,如误导和拦截流量等,目前在区块链网络中节点的流量一但被接管又能对整个网络造成巨大的影响,如破坏共识机制,交易等各种信息。而对于BGP劫持攻击中,目前有安全研究者已经证明该攻击的概念可行性,从2015年11月5日至2016年11月15日通过对节点网络的分析统计目前大多数比特币节点都托管在少数特定的几个互联网服务提供商(ISPs),而60%的比特币连接都是在这几个ISP。所以这几个ISP可以看到60%的比特币流量,所以也能够做到对目前比特币网络的流量控制权,研究者通过劫持的场景验证了至少如下两个攻击概念是可行的,同时给出了验证的代码[8]。
分割攻击
攻击者可以利用BGP劫持来讲区块链网络划分成两个或多个不相交的网络,此时的区块链会分叉为两条或多条并行链。攻击停止后,区块链会重新统一为一条链,以最长的链为主链,其他的链将被废弃,其上的交易、奖励等全部无效。
攻击场景举例:
1) 首先,攻击者发动BGP劫持,将网络分割为两部分,一个大网络、一个小网络。
2) 在小网络中,攻击者发布交易卖出自己全部的加密货币,并兑换为法币。
3) 经过小网络的“全网确认”,这笔交易生效,攻击者获得等值的法币。
4) 攻击者释放BGP劫持,大网络与小网络互通,小网络上的一切交易被大网络否定,攻击者的加密货币全部回归到账户,而交易得来的法币,依然还在攻击者手中,完成获利。
延迟攻击
攻击者可以利用BGP劫持来延迟目标的区块更新,而且不被发现。因为它是基于中间人修改目标请求区块的数据来做到的:在目标请求获取最新区块的时候,将它的这一请求修改为获取旧区块的请求,使得目标获得较旧的块。
攻击场景举例:
1) 攻击者修改矿工获取最新块请求
2) 矿工无法获取到新区块
3) 矿工损失算力以及奖励机会
节点客户端漏洞
攻击者在内网或者外网利用各种手段譬如漏洞扫描,0day漏洞利用等技术,对节点客户端进行攻击,此类攻击主要针对客户端自身软件可能存在安全漏洞进行利用,获取节点的控制权限。
拒绝服务攻击
通过大流量,或者漏洞的方式攻击P2P网络中的节点,使网络中部分节点网络瘫痪,节点瘫痪意味着链中总算力受损,使得其更容易遭受51%攻击,而目前进行拒绝服务攻击成本也较低,大量的攻击工具平台能轻易在黑市购买用于攻击。
案例
2018年3月22日,闪电网络[10]节点遭受DDOS攻击,导致大约200个节点离线,从大约1,050个节点降到了870个。
3.2.2 广播机制
在区块链中,节点是与节点互相连接的。当某节点接入到区块链网络后,单个节点会与其他节点建立连接。此时该节点就具备了广播信息的资格,在将信息传播给其他节点后,其他节点会验证此信息是否为有效的信息,确认无误后再继续向其他节点广播。
风险
针对广播机制的安全风险,我们分析总结了以下攻击方式:
双重支出攻击
又称双花问题,指的是一个代币花费在多笔交易中的攻击,它的实现方法主要有以下几种。
1.种族攻击:在面对0确认的交易便立刻进行付款的商家可能会遭遇此攻击。欺诈者直接向商家发送支付给商家的交易,并发送冲突的交易,将代币投入自己到网络的其余部分。第二个冲突的交易很可能会被开采出来,并被区块链节点认为是真的,于是付款交易作废。
2.芬尼攻击:当接受0确认的付款时可能会遭遇此攻击。假设攻击者偶尔产生数据块。在他生成的每个区块中,他包括从他控制的地址A到地址B的转移。为了欺骗你,当他生成一个块时,他不会广播它。相反,他打开您的商店网页,并使用地址A向您的地址C付款。您可能会花费几秒钟的时间寻找双重花费,然后转让商品。接着他广播他之前的区块,他的交易将优先于你的交易,于是付款交易作废。
3.Vector76攻击:也被称为单一确认攻击,是种族攻击和芬尼攻击的组合,因此即使有一次确认的交易仍然可以逆转。对于种族攻击,相同的保护措施显然降低了发生这种情况的风险。 值得注意的是,成功的攻击会使攻击者花费一个块,他们需要通过不传播它来“牺牲”一个块,而是仅将其转让给被攻击的节点。
4.替代历史攻击:即使商家等待一些确认,这种攻击也有机会成功,但风险较高。攻击者向商家提交支付的交易,同时私下挖掘其中包含欺诈性双重支出交易的分支。等待n次确认后,商家发送产品。如果攻击者此时碰巧找到n个以上的区块,他就会释放他的分支并重新获得他的硬币。
5.51%攻击:如果攻击者控制全网算力的一半以上,则前面提到的替代历史攻击有100%的概率成功。由于攻击者可以比网络的其他部分更快地生成块,所以他可以坚持自己的私有分支,直到它比诚实节点网络建立的分支更长,它将代替主链。
交易延展性攻击
延展性攻击者侦听P2P网络中的交易,利用交易签名算法的特征修改原交易中的input 签名, 生成拥有一样input和output的新交易,然后广播到网络中形成双花,这样原来的交易就可能有一定的概率不能被确认,在虚拟货币交易的情况下,它可以被用来进行二次存款或双重提现。
案例
1.2014年8月,在线黑市Silk Road 2遭遇交易延展性攻击,部分比特币被盗,损失约260万美元
2.2013年11月,GHash.io矿池对赌博网站BetCoin Dice进行多次付款欺诈,实施双重支出攻击
3.2.3 验证机制
区块链的运行为了维持其数据的有效性与真实性,必须要有相应的验证机制来限制节点必须将真实信息写入区块中。
风险
针对验证机制的安全风险,我们分析总结了以下攻击方式:
验证绕过
验证机制的代码是区块链应用的核心之一,一旦出现问题将直接导致区块链的数据混乱,而且核心代码的修改与升级都涉及到区块链分叉的问题,所以验证机制的严谨性就显得尤为重要。
必须要结合验证机制代码的语言特性来进行大量的白盒审计或是模糊测试,来保证验证机制的不可绕过。
案例
比特币无限造币漏洞:2010年8月15日,有人在比特币区块链的第74638块上发现了一条让人惊愕的交易,这笔交易里竟然出现了184,467,440,737.09551616个比特币,其中各有922亿个比特币被发送到两个比特币地址。
这次攻击的根本原因则是比特币的验证机制中存在大整数溢出漏洞,由于大整数溢出为负数,网络各个节点对黑客的交易均验证通过,导致了比特币区块链中凭空出现了大量比特币。
3.3 激励层
3.3.1 奖励机制
激励层目的是提供一定的激励措施鼓励节点参与区块链的安全验证工作。区块链的安全性依赖于众多节点的参与。例如比特币区块链的安全性是基于众多节点参与工作量证明带来的巨大的计算量,使得攻击者无法提供更高的计算量。节点的验证过程通常需要耗费的计算资源和电能。为了鼓励节点参与,区块链通常会采用虚拟货币的形式奖励参与者,目前比特币、莱特币、以太币都是这种机制的产物。以比特币为例,奖励机制包括了两种,第一种是新区快产生后系统生成的比特币,第二种是每笔交易会扣除万分之一比特币作为手续费。在前期,每一个区块的创建者都会获得一定数量的比特币,创世区块提供50个比特币,之后随着系统中比特币数量的持续增加,这种模式提供的比特币数量会持续减半。当比特币总量达到2100万时,新产生的区块将不再生成比特币。这时主要依靠第二种手续费作为奖励机制。
风险
奖励不符合市场预期
区块链项目需要顺应市场自动适当调整奖励,而不是一味降低。若在区块链项目奖励机制中,当节点们的工作成本小于和接近于收益的时候,他们往往会选择不再为这个区块链工作,从而很容易导致中心化问题。
攻击场景:
1. 比特币区块链上的被全部开采完毕
2. 矿工奖励骤降,大量矿工下链
3. 攻击者以较低成本发动51%攻击
案例
目前暂无实际攻击曝光,但在某些层面可能存在致命安全隐患
3.4 共识层
3.4.1 共识机制
共识机制赋予了区块链技术灵魂,使它与其他的P2P技术差异化。
目前常用的共识机制有PoW(工作量证明机制)、PoS(权益证明机制)、DPoS(股份授权证明机制),然而他们都不是完美的,都有各自的优点与缺点。对于各种共识机制的对比[11]我们列出如下列表进行说明:
风险
针对共识机制的安全风险,我们分析总结了以下攻击方式以及适用范围:
短距离攻击
此类攻击比较典型的是“贿赂攻击”,此攻击主要影响PoS共识机制,贿赂攻击流程如下:
1) 攻击者购买某个商品或服务。
2) 商户开始等待网络确认这笔交易。
3) 此时,攻击者开始在网络中首次宣称,对目前相对最长的不包含这次交易的主链进行奖励。
4) 当主链足够长时,攻击者开始放出更大的奖励,奖励那些在包含此次交易的链条中挖矿的矿工。
5) 六次确认达成后,放弃奖励。
6) 货物到手,同时放弃攻击者选中的链条。
因此,只要此次贿赂攻击的成本小于货物或者服务费用,此次攻击就是成功的。相比之下,PoW 机制中贿赂攻击就需要贿赂大多数矿工,因此成本极高,难以实现。
长距离攻击
此类攻击比较典型的是“51%”攻击。在PoS 中,产生每个 Block 的速度相对 PoW 快了很多。因此,少数不怀好意的节点会想着把整个区块链共识账本全部重写。这在 PoW 中是经典的 51% 问题,即:当某一个节点控制了 51% 及以上算力,就有能力篡改账本,但达到 51% 算力是件极其困难的事情。而在 PoS 中缺乏对算力的约束,那么就存在潜在可能篡改账本。
币龄累计攻击
在最早的 Peercoin 版本中,挖矿难度不仅与当前账户余额有关,也与每个币的持币时间挂钩。这就导致,部分节点在等待足够长时间后,就有能力利用 Age 的增加来控制整个网络,产生非常显著的影响。
预计算攻击
当 PoS 中的某一节点占有了一定量的算力后,PoS 中占有特定算力的节点,就有能力通过控制 Hprev 来使自己所在算力范围有能力去计算 Hnext。
女巫攻击
又称Sybil攻击,在Sybil攻击中,攻击者通过创建大量的假名标识来破坏对等网络的信誉系统,使用它们获得不成比例的大的影响。对等网络上的实体是能够访问本地资源的一块软件。实体通过呈现身份在网络上通告自身。 多于一个标识可以对应于单个实体。
换句话说,身份到实体的映射是多对一的。对等网络中的实体为了冗余,资源共享,可靠性和完整性而使用多个标识。
在对等网络中,身份用作抽象,使得远程实体可以知道身份而不必知道身份与本地实体的对应关系。
默认情况下,通常假定每个不同的标识对应于不同的本地实体。实际上,许多身份可以对应于相同的本地实体。
对手可以向对等网络呈现多个身份,以便出现并充当多个不同的节点。因此,对手可能能够获得对网络的不成比例的控制水平,例如通过影响投票结果。
案例
2016年8月份,基于以太坊的数字货币Krypton遭受来自一个名为“51% Crew”的组织通过租用Nicehash的算力,进行51%攻击,导致该区块链损失约21,465 KR的代币。
注:若想获取整份报告,链接如下:https://www.bcsec.org。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved