区块链协议安全系列— —当拜占庭将军犯错时,区块链共识还安全么?(下集)
2021-07-20 11:16:00 Author: paper.seebug.org(查看原文) 阅读量:113 收藏

作者:灵巧@蚂蚁安全实验室
原文链接:https://mp.weixin.qq.com/s/Jo76cid30J1P6qVo5NFECw

在头条的分享中,蚂蚁天宸安全实验室的灵巧博士为大家介绍了BFT协议在区块链的应用,并取了有代表性的应用案例进行分析。 现在我们进入区块链协议安全系列——下集,分析BFT协议的威胁模型以及BFT协议被攻破后,对区块链安全会有哪些影响。

拜占庭协议已经被越来越多的链应用到共识协议中,共识协议的安全性直接决定了链的安全性。分析拜占庭协议的威胁模型有助于分析链的安全性。

1.1 拜占庭协议的安全假设

协议的全流程涵盖设计,实现,运行三个阶段。运行又涉及节点,网络,运营商多个角色。任何协议设计都离不开安全假设。我们以 PBFT 为例分析协议的安全假设,其他由 PBFT 衍生出来的协议变种在安全假设方面大同小异,我们不一一展开。

1.协议在设计时假设实现过程不受语言限制,但是不能存在编码方面的漏洞。

2.协议在设计时假设运行过程不受外界制约,处于理想状态,具体表现为:

○超过 2/3 节点的软硬件操作系统无漏洞,节点自身的安全性可靠

○超过 2/3 节点的网络链接正常,网络延迟在协议可接受的范围内

○超过 2/3 节点的实际操作者诚实可信,不作恶

○超过 2/3 节点的网络运营商诚实可信,不作恶

○超过 2/3 节点的硬件基础设施可靠,如网线,硬盘等不损坏

协议设计在以上 2 个大的前提下展开。最开始的 PBFT 协议并非为区块链而设计,而 PBFT 的安全假设又被默认继承到区块链中,这就会产生理想与现实的差距。我们分别分析这两种情况下的威胁模型。

1.2 理想世界的威胁模型

理想世界具体是指满足所有的安全假设的世界。在理想世界中,可以只考虑协议的设计存在的威胁。通常,协议设计者都是极为专业的研究人员,设计缺陷出现的可能性很小。目前为止,笔者了解到的小有瑕疵的设计是 PBFT 的优化设计。

1.2.1 PBFT 本身的优化方法

根据上文所述的 PBFT 的协议过程可知,PBFT 在每一个阶段都需要验证消息发送者的签名。使用公钥签名的方式验证消息存在如下不足:

●类似于RSA这样的签名算法,签名速度比较慢;

●其他公钥密码系统,如椭圆曲线公钥密码系统,虽然签名更快,但是验签更慢。

PBFT算法实际上在正常流程中采用 MAC(Message Authentication Code,消息验证码) 认证消息,因为它具有如下优点,使得算法相对于之前的算法性能提升了一个数量级以上:

●MAC 计算速度快;

●通过适当优化,可以减少其长度;

●通过对authenticator(vector of MAC)的使用,可以使验证时间为常量,而生成时间只随着节点数量线性增长。

具体来说,PBFT算法中使用 MAC 和公钥签名的具体场景是:

●所有正常操作流程中使用 MAC 验证消息;

●视图变更中的消息:view-change, new-view,以及出现错误时,使用公钥签名。

这些场景的出现频率相对较低,从而对算法的性能影响较小。

1.2.2 优化导致的威胁模型

那是否采用 MAC 只有优点,没有缺点呢?这一优化导致 PBFT 极不稳定,如果 primary 是恶意的,会导致系统不可用。具体来说如下:

首先,MAC 是对称的,需要两两共享密钥,为防止假冒,两两之间密钥不同。也就是 primary 和 2,3,4 等共享等密钥都不相同。那么,如果 primary 和 2 出现了冲突,其他人,如 3,4,无法确认谁对谁错。其次,如果 primary 是恶意的,primary 可以控制 MAC 数组的收发,他可以任意操纵 MAC 值,让 replica2 认为 replica3 提供的内容是错的,replica2 无法确认到底是 primary 还是 replica 3 是错的。那么 replica2 和 replica3 无法相互说服对方,系统就不可用了。上述攻击可以在不同的阶段实施。如,在preprepare阶段,primary可以篡改用户发送的 MAC数组,部分 replica 接受用户请求,部分不请求。在prepare阶段,primary可以让部分mac数组为错误,从而部分接受 primary 的 propose,部分不接受。

未优化之前使用证书给消息签名就不涉及这个问题。证书携带身份信息,且证书是节点所公认的。replica2 发现签名错误,通过两两通信,要么大家都认为这个签名是错的,要么最终收到一个正确签名, 那么可以保证所有 replica 都是一致认可、或一致不认可这个值。

在 PBFT 应用到区块链时,如果链不采用 MAC 优化,也就不会面临协议本身的脆弱性问题。

1.3 现实世界的威胁模型

理想很丰满 ,现实很骨感。通常,一些安全假设在现实世界中都会面临挑战。

1.3.1 协议实现过程存在漏洞

任何一个设计完美的系统在实现的过程中都不能保证 100% 正确,实现过程中会引入不同的漏洞。这类问题更多的是代码安全问题,代码安全问题属于另外一个课题,我们不在这里展开讨论,仅简单分析一下。

● 编码不当

编码不当有多种,使用的编程语言不同也会有不同的漏洞类型,比如 C/C++ 存在缓冲区溢出,整数溢出,解引用空指针,指针重释放,内存分配失败,内存泄漏等问题。Go 语言使用垃圾收集器自动管理内存,无需显示释放内存,所以不涉及指针重释放问题,但是也有其自身的问题,如Goroutine产生内存泄漏。其他语言的问题就不再一一列举。拜占庭协议的实现各有不同,实现中可能存在编码不当的问题,建议找专业的团队做代码审计。

● 逻辑不当

逻辑不当是常见的安全问题的类别。拜占庭协议复杂,更容易出现逻辑不当的问题,且因为协议复杂,通常性能会低,难以满足线上业务的需求,所以优化协议的实现是一个现实的问题。在优化过程中,如果没有严密论证优化方法,则可能让协议失效,如 MAC 地址的优化。实现过程中是否忠实的遵守协议设计是需要考量的一个因素。

● 权限不当

权限不当是另一类常见的安全问题。通常,BFT 协议运行在共识节点上,共识节点和普通节点的权限不同,需要在关键环节做鉴权。协议本身也分主节点和副节点,必要的环节也需要区别身份。如果权限不当,会导致协议安全性受挫。

1.3.2 操作系统存在漏洞

主流的操作系统有 windows,Linux,macOS,每一种操作系统都存在系统漏洞。如果没有及时为操作系统打补丁,攻击者就有可乘之机。

1.3.3 网络不可用

利用节点所在的网络特点攻击,让节点失去有效连接,是更贴近区块链范畴的攻击方法。BFT 协议不能脱离于网络连接而存在,区块链网络有一些独有的特点。有多种方法都可以让节点的网络不可用。

1.3.3.1 日蚀攻击

日蚀攻击(Eclipse Attack)是针对 P2P(或译为点对点)网络的一种攻击类型:攻击者通过使节点从整个网络上消失,从而完全控制特定节点对信息的访问。

P2P 网络的节点通常会维护一个路由表。日蚀攻击是指攻击者通过侵占节点的路由表,将足够多的虚假节点添加到某些节点的邻居节点集合中,从而将这些节点“隔离”于正常区块链网络之外。当节点受到日蚀攻击时,节点的大部分对外联系都会被恶意节点所控制,由此恶意节点得以进一步实施路由欺骗、存储污染、拒绝服务以及 ID 劫持等攻击行为。因此,日蚀攻击对区块链网络的威胁非常严重。

日蚀攻击和女巫攻击(Sybil attack)攻击(查看链接了解:https://www.binance.vision/zh/security/sybil-attacks-explained)密切相关,它需要较多的 Sybil 攻击节点相配合。为了实现对特定区块链节点群的日蚀攻击,攻击者必须首先设置足够多的 Sybil 攻击节点,并且向区块链网络宣称它们是“正常”的节点,然后使用这些Sybil节点与正常的区块链节点通信,入侵其路由表,最终把它们从区块链网络中隔离出去。在日蚀攻击中,攻击者不像在女巫攻击中那样攻击整个网络,而是专注于隔离和瞄准某个特定节点。这种攻击通常会导致受害者节点接收到被操纵的、伪造的区块链视图。

采用日蚀共识,可以让节点完全被攻击者控制,并且攻击者的代价很小。Heilman等人在2018年发表的论文显示,在以太坊网络上执行日蚀攻击只需要用到几台机器。日蚀攻击对区块链网络的影响十分重大。对于区块链网络来说,日蚀攻击破坏了网络的拓扑结构,减少了节点数目,使得区块链网络资源共享的效率大大降低,在极端情况下,它能完全控制整个区块链网络,把它分隔成若干个区块链网络区域。对于受害的区块链节点来说,它们在未知的情况下脱离了区块链网络,所有区块链网络请求消息都会被攻击者劫持,所以它们得到的回复信息大部分都是虚假的,无法进行正常通信。

1.3.3.2 地址池污染攻击

地址池污染,是指诱使同类链的节点互相侵入和污染的一种攻击手法,主要原因是同类链系统在通信协议上没有对非同类节点做识别。

地址池污染攻击实际上是一个所有公链都可能面临的问题,我们用以太坊为例子说明。以太坊的 P2P 网络主要采用了 Kademlia (简称 Kad ) 算法实现,Kad 是一种分布式哈希表( DHT )技术,使用该技术,可以实现在分布式环境下快速而又准确地路由、定位数据的问题。

以太坊地址池污染攻击是指,以太坊同类链(具体的说是使用以太坊 P2P discv4 节点发现协议的公链,包括以太坊、以太经典)由于使用了兼容的握手协议,无法区分节点是否属于同个链,导致地址池互相污染,节点通信性能下降,最终造成节点阻塞的一种攻击方式。

  • 第一步:发起恶意握手。

    攻击者 A 模拟整个握手过程,主动发起 ping 操作,并利用协议的第4步 neighbors,将返回的邻居表修改成我们收集到的以太坊节点地址,推送给受害节点 B(B 是一个以太坊同类链节点)。由于单次通信只能推送 16 个地址,我们需要多次推送以达到攻击效果。

  • 第二步:污染地址池。

    B 收到大量 A 返回的邻居表,尝试跟这些节点握手,并将这些节点加入了自己的地址池(俗称 K 桶)。

  • 第三步:污染自动扩散。 让人意外的是,不同链的节点居然互相握手成功了,更为可怕的是,它们把各自地址池里已知的节点推送给了对方,导致更多的节点互相污染,最终扩散致整个网络。

  • 威胁分析: 地址池污染攻击的同类链节点无法找到真正可用的节点,无法建立 TCP 数据同步通道,导致节点被攻击离线。对于矿池或者出块节点,地址池污染攻击可能导致广播延迟甚至失败,造成收益损失。地址池污染攻击可以使所有以太坊同类链地址池相互污染,导致节点通信效率全面下降,对整个区块链系统造成长久的伤害。

1.3.3.3 区块链网络 DDoS

DDoS攻击是一种对区块链网络安全威胁最大的攻击技术之一,它指借助于C/S技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动攻击,从而成倍地提高拒绝服务攻击的威力。利用 DDoS 攻击共识节点,让节点沦陷也是一个常见方法。

传统的DDoS攻击分为两步:第一步利用病毒、木马、缓冲区溢出等攻击手段入侵大量主机,形成僵尸网络;第二部通过僵尸网络发起DoS攻击。常用的攻击工具包括:Trinoo、TFN、TFN2K、Stacheldraht 等。由于各种条件限制,攻击的第一步成为制约DDoS攻击规模和效果的关键。

根据攻击方式的不同,基于区块链的 DDoS 攻击可分为主动攻击和被动攻击两种。基于区块链的主动DDoS攻击是通过主动地向网络节点发送大量的虚假信息,使得针对这些信息的后续访问都指向受害者来达到攻击效果的,具有可控性较强、放大倍数高等特点。这种攻击利用区块链网络协议中基于“推(push)”的机制,反射节点在短时间内会接收到大量的通知信息,不易于分析和记录,并且可以通过假冒源地址避过IP检查,使得追踪定位攻击源更加困难。此外,主动攻击在区块链网络中引入额外流量,会降低区块链网络的查找和路由性能;虚假的索引信息,会影响文件下载速度。

基于区块链的被动,DDoS攻击通过修改区块链客户端或者服务器软件,被动地等待来自其它节点的查询请求,再通过返回虚假响应来达到攻击效果。通常情况下,会采取一些放大措施来增强攻击效果,如:部署多个攻击节点、在一个响应消息中多次包含目标主机、结合其它协议或者实现漏洞等。这种攻击利用了区块链网络协议中基于“取(pull)”的机制。被动攻击属于非侵扰式,对区块链网络流量影响不大,通常只能利用到局部的区块链节点。

1.3.4 社会工程学攻击

Gartner集团信息安全与风险研究主任Rich Mogull认为:“社会工程学是未来10年最大的安全风险,许多破坏力最大的行为是由于社会工程学而不是黑客或破坏行为造成的。”一些信息安全专家预言,社会工程学将会是未来信息系统入侵与反入侵的重要对抗领域。

社会工程通常被视为网络威胁,但这一概念已存在很长时间,该术语也可能与现实世界的欺诈行为有关,通常涉及冒充审计者或IT专家。然而,互联网的出现使黑客可以更为轻松地在更广泛的范围内进行操纵攻击,不幸的是这些恶意活动也发生在区块链领域。

● 它是如何工作的?

所有类型的社会工程学都依赖于人类心理学上的弱点。诈骗者利用情绪来操纵和欺骗受害者。他们利用的是人们的恐惧、贪婪、好奇心,甚至他们帮助他人的意愿等。在多种恶意社会工程行为中,网络钓鱼是最常见也是众所周知的案例之一。

● 网络钓鱼

网络钓鱼电子邮件通常模仿来自合法公司的邮件,某些情况下,这些诈骗电子邮件会警告用户帐户需要更新或发生了异常活动,要求他们提供个人信息以确认其身份并管理其帐户。出于恐惧,有用户会立即点击链接并导航到虚假网站,为不法分子提供其所需数据。此时,这些信息将会掌握在黑客手中。

● 威胁软件

社会工程技术也被用于传播所谓的Scareware。顾名思义,威胁软件是一种旨在恐吓和威胁用户的恶意软件。它们通常涉及创建虚假警报,试图欺骗受害者安装看似合法的欺诈性软件或诱骗用户访问相关网站,以达到感染其系统的目的。这种技术通常依赖于用户担心他们的系统受到损害的心理,说服他们点击网页横幅或弹出窗口。这些消息通常会说:“您的系统已被感染,请点击此处进行清理。”

● 诱骗

诱骗是另一种给许多大意用户带来麻烦的社会工程行为。一般利用用户的贪婪或好奇心来引诱受害者。例如,诈骗者可以创建一个提供免费内容的网站,也可能故意将受感染病毒的设备留在公共场所,引诱好奇者把它下载到电脑上查看内容,最终感染目标计算机。

● 合谋

节点之间如果存在利益上的趋同,那么节点之间可能合谋使自己的利益最大化。在区块链共识协议中,当节点被利益驱使,有大于 f 个节点进行合谋,就能引导网络选择对合谋节点有利的结果达成共识。如在跨境汇款的场景中,节点来自不同的国家,如果来自同一个国家的节点之间合谋,那么可以发起双花攻击。

如果攻击者采用社会工程学的方式得到节点的管理权限,一样可以达到控制的恶意节点的数量大于 f 的目的。

1.3.5 运营商欺诈

运营商是指提供网络服务的供应商。运营商提供最最基础的网络服务, 掌握着通往用户物理大门的钥匙。节点通信依赖于网络连接,网络连接依赖于运营商提供服务。如果在运营商层面作恶,那么更加容易导致节点失效。运营商劫持就是一个例子。

什么是运营商劫持?

网络运营商为了卖广告或者其他经济利益,有时候会直接劫持用户的访问,目前,运营商比较常见的作恶方式有两种,分别是DNS劫持、HTTP劫持。

DNS劫持简单粗暴,会把请求重新定位到其它网站,比如假设想访问中国银行,正常的DNS 解析IP应该是中国银行的IP地址(假设是10.1.2.3),但是中间者修改这个DNS解析结果,返回用户一个非中国网银行的IP(假设是10.2.3.4),那么用户就会和这个非中国银行的网站建立连接并产生网络传输。

HTTP劫持是指,运营商发现 HTTP 请求的时候,会在正常的数据流中插入精心设计的网络数据报文,目的是让用户端程序解释“错误”的数据,并以弹出新窗口的形式在使用者界面展示宣传性广告或者直接显示某网站的内容。

从这些劫持行为来看,运营商也可能作恶。如果运营商作恶,可以直接从运营商层面发起日蚀攻击,让节点失去有效连接,可以达到控制的恶意节点的数量大于 f 的目的。

1.3.6 硬件基础设施遭破坏

2015 年 5 月 27 日,由于市政施工,杭州市萧山区某地光缆被挖断,进而导致支付宝一个主要机房受影响,随后全国部分用户约2小时无法使用支付宝。28日,在线旅游网站携程网也突发故障,导致网站和客户端无法登录。

如果在节点所在的网络基础设施损坏,也会导致节点不可用,可以达到控制的恶意节点的数量大于 f 的目的。

BFT 协议在区块链中担任重要角色,由上一节的威胁分析可知 BFT 协议在现实世界中面临多种威胁。协议被攻破后,对区块链安全会产生怎样的影响?

协议被攻破的表现是攻击者可以控制共识结果。一旦共识结果可以被操控,对区块链的影响主要是看是怎样的业务场景。

2.1 有些场景可导致拒绝服务

如果区块链的业务只是负责记录消息,如消费记录,共识节点的作用是对交易顺序,也就是对消费记录进行排序,并且就一个排序达成一致即可。这种场景下,如果错误节点大于容错上限,既可以左右排序的顺序,也可以左右共识节点无法达成一致。左右排序顺序不会造成危害,因为业务跟顺序无关。但是,左右节点无法达成一致会导致拒绝服务。

2.2 有些场景可导致双花

有些场景允许节点在同一区块高度两个区块都投票,且不会受到惩罚。如果区块链的业务有资金的流转,共识节点的作用是对流转结果达成一致,那么只需要多增加 1 个错误节点,就可以双花攻击。f + 1 个恶意节点里面任何一个轮值到 primary,都可以和剩下的 f 个恶意节点合谋,把网络分化为3个区:f 个 诚实节点(左)、f 个恶意节点、f个诚实节点(右)。然后:

1、恶意 primary 给 f 个诚实节点(左)和 f 个恶意节点 发送 mi,加上 primary 自己刚好满足 2f + 1。

2、恶意 primary 给 f 个诚实节点(右)和 f 个恶意节点 发送 mj,加上 primary 自己也刚好满足 2f + 1。

3、这里在一个 view 的 prepare 阶段针对同一个 sequence number 产生了两个交易,也就是所谓的双花。

双花攻击会对资金产生重要的危害。

2.3 更多场景要分开讨论

由上两个小节可知,若容错边界被打破,对实际业务产生的危害随着业务场景的不同而不同,要根据场景去分析。

具体案例分析:

有一个基于 PBFT 改进的溯源链案例,案例主要做溯源服务。溯源服务的核心在于存证。案例认为 PBFT 存在如下问题:

1.目前 PBFT 算法应用于联盟链中最主要的问题是动态性。原始 PBFT 网络中的节点数量固定,节点的增减都需要对共识网络进行初始化。

2.对于 PBFT 的共识过程中可以看出,PBFT 算法对于作恶的主节点并没有惩罚机制,仅仅是切换视图更换主节点,而拜占庭节点仍然停留在共识网络中。因此在区块链的实际应用中需要进行改进。

3.PBFT 算法对于网络的带宽要求过高,带宽随着节点的数量的增加呈多项式级别的增长。因此可以与其他的共识算法进行融合改进,选举出代表节点进行 PBFT 算法,从而减小网络带宽的开销。

案例进行了如下改进:

1.在共识网络中部署一条智能合约,当网络中的某些节点达到合约要求的时候,例如节点所拥有的资产的大小,节点对于区块链的贡献等,那么他就可以进入候选节点的名单中。

2.对达成共识的主节点进行一定的奖励,并对恶意或不作为节点进行惩罚甚至取消废除恶意节点,从而提高网络中拜占庭节点作恶的代价,维护整个区块链网络的稳定性。

3.在共识网络中加入超时重传机制,从而提高消息传达的成功率,并且可以减小进行视图切换的次数,从而增加区块链网络的出块效率。

针对以上改进,我们分析可能的威胁模型如下:

1.引入智能合约动态调整共识节点数量增加了 PBFT 的扩展性,但是智能合约的合约本身是否安全是一个需要考量的因素。智能合约可能存在编码不当问题,如各类溢出漏洞;逻辑不当问题,如对共识节点条件判断出现漏洞;权限不当问题,如智能合约被越权访问。

2.引入奖惩制度有助于提高网络稳定性,但是额外的处理逻辑可能引入新的问题,如逻辑不当问题。

3.引入超时重传机制有利于提高出块效率,但是超时重传会影响其他节点计算超时时间,可能导致逻辑混乱。

4.不管如何更改和优化协议,编码安全问题都是共性问题。

对区块链的安全影响分析如下:

1.以上威胁模型可导致共识协议被攻破,共识可以被人为操控。

2.溯源信息可以被伪造,共识不验证上链信息的合法性,任意伪造信息都可上链。

3.溯源信息可以被删除。

4.溯源链被拒绝服务。

对溯源链来说,信息的可靠性是最为重要的,共识协议被攻破之后,可靠性不复存在。

拜占庭将军问题最初由 Leslie Lamport 和另外两人在1982年提出,距今已有近 40 年的历史,在互联网领域,可以称的上是一个“经典”的问题。近年来,随着区块链技术的发展,拜占庭将军问题也重新焕发了生机。BFT 协议在区块链中有了广泛的应用。在蓬勃发展之余,威胁模型也变得多样,本文做了简要的分析。BFT 被攻破之后,对区块链安全的影响不能一概而论,需要看区块链上所承载的业务。我们也做了案例分析。

拜占庭将军问题是个经典问题,针对拜占庭协议的研究工作非常多,本文也只是管中窥豹,无法完全展现 BFT 的精妙,感兴趣的读者还需要自己做研究。由于区块链方案更新迭代的速度极快,不排除一些信息滞后,欢迎读者斧正。

本文图片来源于:

刘秋杉. Practical Byzantine Fault Tolerance[EB/OL].2014-09-09.

区块链安全:基于区块链网络攻击的方式原理详解

参考资料

https://academy.binance.com/zh/articles/what-is-social-engineering

https://mp.weixin.qq.com/s/uE_3NhH0mlEejJoUCfEchQ

https://www.jianshu.com/p/5fea30b25f0a

https://www.chainnews.com/articles/066979964730.htm

https://learnblockchain.cn/2019/08/29/pbft/

https://blog.csdn.net/yuanfangyuan_block/article/details/79872614

https://bihu.com/article/1427644620

https://bihu.com/article/1870080193

https://segmentfault.com/a/1190000019011651

https://zhuanlan.zhihu.com/p/42493898

https://colobu.com/2018/11/28/EOS-whitepaper/

https://docs.neo.org/docs/zh-cn/tooldev/consensus/consensus_algorithm.html

https://xz.aliyun.com/t/3160

https://paper.seebug.org/895/

https://www.theblockbeats.com/news/2634

https://www.jinse.com/blockchain/397228.html

https://www.idcbest.com/idcnews/11002090.html

https://www.jianshu.com/p/78e2b3d3af62

https://www.chainnews.com/articles/469245604416.htm

https://www.hyperchain.cn/news/282.html

https://people.eecs.berkeley.edu/~luca/cs174/byzantine.pdf

http://pmg.csail.mit.edu/papers/osdi99.pdf

https://www.usenix.org/legacy/events/osdi06/tech/full_papers/cowling/cowling.pdf

https://eprint.iacr.org/2016/199.pdf

https://juejin.cn/post/6844903732736425992


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1644/


文章来源: http://paper.seebug.org/1644/
如有侵权请联系:admin#unsafe.sh