美文网首页区块链研习社
区块链安全体系的梳理

区块链安全体系的梳理

作者: 死鱼 | 来源:发表于2020-03-07 22:03 被阅读0次

    摘要

    近几年区块链技术火热发展,同时区块链的安全问题也伴随而来。我从区块链的架构入手,理解区块链的安全体系架构,同时利用此结构分析一些常见攻击手段原理,对区块链安全体系的认识做一个思路梳理,仅供学习参考。

    介绍

    近年来区块链的概念炒作如日中天,但区块链应用实际落地时却常令人失望,其中很大一部分问题来自于区块链频繁发生的安全问题。为了分析区块链的安全问题,我们需要先梳理一下区块链能真正解决的问题到底是什么,本文从解决“可信”问题的角度阐述区块链解决问题的本质。

    然后我们深入探讨一下区块链系统的架构设计,本文引用 中国信息通信研究院 的《区块链安全白皮书》的定义,把区块链应用架构分为4个层次,分别为存取上层应用所需的基础数据的 存储层 、构建共识网络的 协议层 、提供区块链应用能力支撑的 扩展层 、以及各行业落地部署的 应用层

    接着针对每一层可能出现的安全威胁进行一一整理,比如 物理层 面临具体节点周围环境的安全威胁,包括硬件安全、系统安全、网络安全; 协议层 主要面临协议缺陷的威胁,比如POW的51%攻击、POS的贿赂攻击、PBFT的女巫攻击、粉尘攻击,包括P2P协议实现上的流量威胁,比如日蚀攻击等; 扩展层 主要面临智能合约代码、虚拟机、开发人员开发规范不成熟带来的安全缺陷,比如诸多智能合的漏洞; 应用层 则主要面临传统安全领域的安全隐患,比如服务节点DOS攻击、DApp上的传统web攻击、密钥管理上的安全隐患、远程RPC漏洞(比如著名的黑色情人节攻击)

    分析完各层的安全问题后,我们简单地思考一下,从各种常见的攻击原理入手,看看这些攻击到底是结合了哪几层的安全缺陷。本文中主要分析一下著名的的分叉攻击、贿赂攻击、女巫攻击、粉尘攻击、日蚀攻击、黑色情人节攻击。

    最后,我尝试思考一下攻击者攻击的目的都有哪些。很多攻击者其实都是为了达到目的而不择手段,在攻防领域来说,这些不择手段就是各式各样的现存漏洞利用。单纯简单地分析漏洞,其实只是照搬现有技术,本文的目的更多是希望能把区块链的安全架构剖析开来后,结合攻击的目的,观察一下各层次的缺陷还有没有一些尚未发现的结合方式。

    思考,区块链是什么?

    在网络安全领域来说,“可信”一直是大家追求的目标,“可信”意味着可以相互相信、可以相互依赖,在数据通信过程中如果能实现多端可信,那业务的安全就能得到保证。

    但是“可信”又是一个相当难实现的目标,比如双军问题、拜占庭将军问题,这么多年来还没有找到一个相当令人满意的解决方案。在过去我们常见的解决方案是引入一个“可信第三方”,比如淘宝、银行。通过这个可信的第三方来实现信任的传递。

    可信第三方模型

    引入可信第三方确实能解决可信的问题,但是随之而来的单边控制问题又变得十分尴尬,因为大家都得听一个老大哥的话,很多场景是不希望又这个老大哥存在的,比如DNS、BGP,这些倾向于节点扁平的业务,权威第三方的存在可以说是一种耽误。所以这个时候,有人提出了一种新的模型:“群体信任模型”。

    群体信任模型

    这个模型利用群体的信任来传递通信双方的信任,群体节点利用密码学+P2P网络实现了各种各样的共识算法,确保了这种方法是可行的,是一种可替代可信第三方的可信传递方法。

    那区块链是什么?区块链本质上就是利用了群体信任模型,对必须依赖可信第三方的传统解决方案带来了一个颠覆性的思路,为解决扁平信任的问题带来了一种全新的解决方案,在这个思路上的技术、应用、市场,就是我们所认为的区块链。

    区块链应用架构

    根据 中国信息通信研究院 的《区块链安全白皮书》的定义,区块链应用架构分为四层:

    名称 概述
    存储层 区块链底层数据的存取模块
    协议层 共识算法的实现模块,包括网络的实现和密码学算法
    扩展层 为应用的实现提供平台,如智能合约开发语言、虚拟机
    应用层 区块链技术在具体行业落地的各种服务

    1、存储层

    存储层是区块链底层数据的存取模块。就像操作系统的文件操作模块,每个文件其实保存了系统的状态,操作一个系统其实本质上就是对这些状态进行增删改查。在区块链中,存储层的职责是实现底层数据的读写功能,从而给上层的服务提供格式规范的数据,让上层利用这些数据格式定义区块链的各种状态。比如以太坊网络的三同步方式,则是存储层的功能扩展之一。

    2、协议层

    协议层的目的是共识算法的实现模块。上一层实现了底层数据存取后,下一步就是实现区块链的核心功能,实现共识。我们上一章节介绍了区块链的本质,区块链其实就是利用群体信任模型来解决信任传递的问题。而群体之所以能做到信任,靠的就是共识算法,协议层的职责就是实现共识算法

    一般来说,共识算法的实现需要依赖P2P网络进行通信,以及依赖各类密码学算法组成的共识机制。所以协议层包含了网络功能开发吗?是的,不同于OSI七层协议中的协议层,区块链的协议层是囊括了整个共识协议落地运行的实现在内,因此这里需要考虑网络的实现、共识机制的实现、以及共识流程的有序稳定运行。

    3、扩展层

    扩展层的存在是为应用的实现提供平台。有了数据,数据也可信地在节点之间同步了,业务方对数据进行读写不就可以实现应用了吗,为何还需要一个扩展层呢?这个问题就像操作系统一样,在过去,程序员开发业务是直接使用汇编语言对机器码进行操作,上个年代的码农人人都是内存操作大师,给他一个0一个1就能开辟一片天(?)。后来操作系统出来了,提供了一种高级程序语言,让程序员不需要懂汇编、不怎么需要理解机器码操作的底层机制就能够实现业务的开发。
    区块链中的扩展层就是这么一个存在,他的职责是为应用开发提供一个开发、运行平台,让开发者不需要直接接触区块链的底层数据结构,就能利用区块链进行业务的开发。十多年前的比特币对扩展层并没有做明确的抽象,所以比特币仅仅是实现了价值的传递问题,并没有提供开发平台。而以太坊和fabric的出现,带来了智能合约一个概念,传统比特币的链上调用主要是转账的操作,而智能合约的链上调用则变成对底层数据的封装后的操作,甚至能虚拟出变量、函数的概念,这一做法其实打开了区块链扩展层的概念。而智能合约的执行则需要一定的虚拟环境,就像JAVA的执行需要在JVM中,以太坊智能合约的执行需要在EVM的环境中实现。

    4、应用层

    应用层则是区块链系统解决实际问题的一系列解决方案总和。当区块链的底层数据能够实现有序同步,且开发人员拥有能够操作底层数据的高级语言(智能合约开发语言)后,群体信任模型就能够被业务开发者使用,用于解决实际的问题。应用层的职责非常广泛,基本是与传统互联网业务开发的结合,比如用于操作以太坊节点的远程RPC开发,协助网页开发DApp的Web3.js开发,冷热钱包管理工具,交易所等等等等。

    区块链各层上的安全隐患

    上一章节中,我们把区块链的实现架构分成了4个层次进行分析,对每个层次的目的做了一定的理解。这一章节中我们针对每个层次中存在的安全隐患进行一一分析。

    名称 涉及到的模块 安全隐患
    存储层 硬件、网络设备,文件、操作系统、数据库软件 设备安全风险,子网攻击风险
    协议层 网络搭建、密码学算法、共识机制 网络实现风险,密码算法风险,共识机制缺陷风险
    扩展层 合约开发语言、合约运行环境 智能合约程序漏洞风险,运行虚拟环境风险
    应用层 Web服务全家桶 传统安全

    1、存储层风险

    设备安全风险技术干货 | 聊聊区块链安全攻防实践 (by 余弦),余弦大佬在这篇文章中分享了一个他们设备被恶意刷马的故事,警示我们存储层的设备、系统软件安全也是需要备受重视的一部分。
    这块的防御方向主要是传统的系统、硬件的安全防御思路。

    设备安全风险

    子网攻击风险:引用[1]文章中介绍了利用路由劫持、中间人攻击等方式,对以太坊的节点进行渗透攻击,并分析了攻击的性能(对公网的攻击效果不咋地)。给我们暴露了,区块链节点所处的网络环境中存在一定的被攻击风险。
    防御的角度来说,对于概念上完全脱离线下的区块链系统,我们仍然需要加固线下设备、网络的安全,

    2、协议层风险

    网络实现风险:区块链的实现常需要见使用P2P网络组网,而P2P网络的实现其实也未必十分安全,比如日蚀攻击,就是通过利用P2P网络实现上的漏洞达成的。
    这里的防御措施主要是,在网络实现的逻辑上需要更严谨的设计。

    密码学算法风险:比如量子计算,区块链上大部分机制都是依赖了非对称加密算法和哈希算法,例如ECC和SHA256,谷歌量算说数秒内就能破解RSA1024,所以这方面是否对区块链存在威胁也是值得探讨的。
    防御措施主要抗量子算....好吧,知识盲区。

    共识机制缺陷风险:现存共识机制的实现未必是完美的,比如POW链上的51%攻击就是共识机制的缺陷。共识算法非常多,每种算法都有各自的特点与各自的风险隐患在其中。
    共识机制的防御主要集中在全网的监控工作上。

    3、扩展层风险

    智能合约漏洞:智能合约有点像高级语言,存在的风险也很像。一方面是因为开发人员能力参差不齐,导致诸多业务漏洞被利用;另一方面也是因为智能合约语言的不成熟,开发规范不完善等原因导致。
    合约漏洞的防御主要是代码审计的工作,毕竟很多漏洞都是人为为主。

    运行虚拟环境风险:智能合约的运行依赖于运行环境,例如以太坊只能合约依赖EVM运行。而这个虚拟环境存在的本身也带来了产生风险的可能。
    防御机制同上。

    4、应用层风险

    传统安全:应用层主要就是业务利用区块链的问题了,这里的安全覆盖面相当广阔,从web安全到系统安全到网络安全,是一个交叉比较多的层。而此层常见的安全漏洞主要是区块链软件的漏洞,比如以太坊的geth漏洞(远程RPC[2]漏洞综述)、比特币的P2P网络桶漏洞(导致日蚀攻击)等等。
    传统安全的防御上来一把梭。

    几种常见攻击分析总结

    1、分叉攻击

    指目的是在全网产生多条稳定的最长链的攻击。指POW链上51%的算力或POS链上的大部分资源被某集团控制,其可对该链为所欲为的风险。
    这一类攻击属于共识协议的缺陷,是密码学算法和共识机制共同导致的安全威胁,可能可以归属于协议层的共识机制威胁。
    关于预防的想法:预防分叉攻击,最重要的还是对公网的监控。

    2、贿赂攻击

    指收买矿工,让特定的矿工工作在攻击者希望的最长链上。攻击者购买了商品,获得货物,商户开始等待区块链网络确认交易的过程中,攻击者向全网宣称,奖励不保存该交易数据的最长链。当不包含该交易的最长链足够长,得到确认后,该交易数据从链上消失,攻击者也白拿了货物。
    这类攻击也是针对了共识机制的缺陷进行攻击,主要属于协议层的共识机制威胁。
    关于预防的想法:待补充

    3、女巫攻击

    模拟大量虚假节点在全网撒谎,即是女巫攻击。攻击者生成大量的攻击节点加入网络,并且这些节点只传播攻击者生成的区块,或者传播错误的数据包,这种攻击容易污染了公链节点之间传播的网络包。在PBFT链中主要体现为身份认证的缺陷,一旦被入侵后果不堪设想。这块主要属于协议层的网络威胁,但结合共识机制,甚至扩展层智能合约的漏洞进行攻击,可能会有不错的效果。
    关于预防的想法:一方面加强PBFT的身份认证防御,另一方面针对全网的女巫攻击,有很多传统的入侵检测解决方案。

    4、粉尘攻击

    发送极小量的虚拟货币到具体钱包,实现对钱包匿名性的追踪;或者发布大量交易阻塞网络。比特币用户一开始并不会注意那些极小金额的转账交易,但是账户一旦被粉尘utxo沾上(也就是被动接收了转账),之后的只要对这个utxo进行操作,就能被发送粉尘的一方检测到。比如坏人转了一笔被粉尘化的钱到交易所,这时候就可以定位坏人的具体身份。另一方面,粉尘攻击也能阻塞网络。比如比特币网络,打包的优先级并不是转账的多少,而是转账笔数的多少(我理解为手续费越高越优先),所以大量的粉尘转账能够阻碍比特币网络的转账效率,比特币网络也确实经常很拥堵。
    这种攻击一方面利用了应用层的软件缺陷,也就是比特币UTXO模型的实现缺陷;另一方面也利用了协议层的共识机制缺陷,实现网络堵塞。
    关于防御的想法:提醒匿名用户重视粉尘交易,尽可能不去消费不明来源的UTXO;矿工节点可对粉尘交易做降级处理等。

    5、日蚀攻击

    利用多个恶意节点持续占满一个或者多个正常节点的P2P网络连接池,使得这些正常节点无法接受公网的交易数据,与公网隔离。日蚀攻击不仅能针对一两个节点进行攻击,如果攻击者拥有大量算力,例如拥有30%多算力,它甚至有可能通过把全网的节点间自治域进行分割,强行实现分叉等操作。要在比特币上实现日蚀攻击,还需要借助实现比特币的软件曾经出现一个,P2P节点连接池的漏洞。所以日蚀攻击涉及到应用层的软件缺陷协议层的P2P网络实现缺陷
    关于防御的想法:比特币团队看到这个漏洞发布后,迅速地发布了更新,修复了软件中P2P连接池的漏洞。日蚀攻击主要是P2P路由层面的漏洞利用,或许可以细化下去进行研究。

    6、黑色情人节攻击

    利用远程RPC接口中unlock_account的调用漏洞,利用了泄露身份认证进行资源盗窃。这个攻击主要针对了以太坊geth的漏洞利用,当geth节点调用unlock_account函数后,账户会保持3分钟的解锁状态,在这3分钟内,所有关于account的操作都不需要授权。如果account对象的函数对rpc接口透明开放,攻击者很可能不断监控节点的解锁状态,一旦账户可用,转账跑路。这属于业务开发层面上出现的漏洞,也是由于geth开发时缺乏对接口的保护意识导致,属于应用层软件的缺陷导致的攻击风险。
    关于防御:官方明确声明unlock_account的危险性,推荐所有开发者在解锁使用完账户后,马上上锁。尽管如此,个人感觉节点仍然可能有那么一点点的时间间隙,账号处于解锁状态,所以干脆不要把account这类高危接口开放给rpc,或者给RPC调用加上白名单,带上堡垒机等等。

    思考攻击者的目的

    单纯分析漏洞其实只是对过去发生的事情做总结,网络的攻和防在未来仍然持续发生,螺旋上升,唯独攻击者的初心是基本不变的。最后在这里简单换位思考一下攻击区块链的目的都有哪些。

    1、直接获利

    攻击者目的是直接获取虚拟货币的,比如黑色情人节攻击、分叉攻击、挖矿病毒等。希望能通过攻击就能让钱包蹭蹭蹭。

    2、间接获利

    攻击者并不是直接获取虚拟货币,而是绕个弯赚钱的,比如贿赂攻击。我们知道虚拟货币的发展非常火爆,已经设计到很多金融领域的玩法,比如多边套利等骚操作,对区块链进行攻击,结合金融领域进行套利也是值得思考的一种渠道。

    3、溯源(监管)

    为了破坏匿名性的攻击。比如追踪性质的粉尘攻击。

    4、拒绝服务(监管)

    为了让区块链服务在特定的网络空间内无法对用户服务。

    总结

    本文结合区块链的应用系统架构,针对每一层涉及的模块分析其可能存在的风险。然后结合现存的几个著名攻击手段,透过其攻击原理,探讨这些攻击本质上是利用了哪些层面的安全缺陷。最后简单换位思考攻击者进行攻击的目的,希望能引发思考,从目的入手挖漏洞。

    引用

    [1] Ekparinya P, Gramoli V, Jourjon G. Impact of man-in-the-middle attacks on ethereum[C]//2018 IEEE 37th Symposium on Reliable Distributed Systems (SRDS). IEEE, 2018: 11-20.
    [2] Wang X, Zha X, Yu G, et al. Attack and defence of ethereum remote apis[C]//2018 IEEE Globecom Workshops (GC Wkshps). IEEE, 2018: 1-6.

    相关文章

      网友评论

        本文标题:区块链安全体系的梳理

        本文链接:https://www.haomeiwen.com/subject/hqavrhtx.html