中钞区块链技术研究院院长张一锋、上海证券交易所技术有限责任公司执行经理朱立、中钞区块链技术研究院研究员练娜联合撰文《区块链技术与应用安全分析报告》。
区块链技术近年来快速发展,其价值得到越来越多认可的同时,技术与应用方面的安全挑战也逐渐凸显。本文研究了针对区块链技术与应用的攻击方式及安全事件,提出了包括基础设施层、密码算法层、节点通讯层、共识协议层、运行平台层、智能合约层和系统应用层的七层安全模型,并针对模型各层对应的具体风险点,提出了解决方案。此外还探讨了区块链数据隐私问题。研究结果表明,区块链安全是一个系统性工程,需要围绕不同层级进行全面的安全体系建设,实现区块链系统的整体安全,才能确保区块链技术应用实践的安全。
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式,是一种全新的分布式基础架构。人们利用区块链式数据结构来验证与存储数据,利用共识算法来生成和更新数据,利用密码学保证数据传输和访问的安全,利用由自动执行的智能合约来兑现以数字形式定义的承诺。所以,《经济学人》杂志把区块链技术称为“信任的机器”,认为区块链技术可以构建一种全新的基于网络和算法的可信数据处理方式和多方协作机制。
一直以来,安全问题都是信息产业发展要处理的核心问题。随着科学技术的演变和复杂化,信息安全问题的需求日益迫切,同时也被赋予了新的内涵外延。近年来区块链技术被广泛应用到各个行业领域,作为新兴信息技术的集合,它所面临的安全问题也日趋增长。
信息安全工作通常强调所谓CIA三要素,即保密性(Confidentiality)、完整性(Integrity)和可用性(Availability)。区块链安全工作同样存在这三方面的要求:
机密性(应对泄露):确保在数据处理的每个交叉点上都实施了必要级别的安全保护措施以防止未经授权的访问和信息披露。在数据的内部存储、相互传输、访问授权等场景中,这种级别的保护措施都应该发挥作用。
完整性(应对篡改和破坏):保证信息和系统的准确性和可靠性,并禁止对数据的非授权更改。软硬件和通信机制必须协同工作,才能正确地维护和处理数据,并确保数据在被传输时不被意外更改和蓄意破坏。
可用性(应对失效):确保授权的用户能够及时、可靠地访问数据和资源。系统应能够在可以接受的性能级别以可预计的方式运行,并以安全且快速的方式从崩溃中恢复。为此,应采取必要的保护措施消除来自内外部的威胁。
本文结合近年来区块链技术与应用发展过程中出现的主流攻击事件展开分析和探讨,并尝试给出解决方案或建议。
根据区块链的技术特征,其安全模型可以由七层架构组成,自下而上分别包括基础设施层、密码算法层、节点通讯层、共识协议层、运行平台层、智能合约层和系统应用层。各层分别从各自层面应对相应的安全风险,实现区块链系统的整体安全。
其中,基础设施层包含了区块链在其上运行所需的基础软硬件,如操作系统;密码算法层包含了区块链实现中所需要的密码学技术,如非对称加密算法、数据摘要算法等;节点通信层包含了节点之间的通讯传输机制;共识协议层主要包含了各类共识协议;运行平台层包含了智能合约运行环境,如EVM虚拟机;智能合约层主要包含各类部署在区块链上的业务合约;系统应用层指基于智能合约,结合传统IT技术构建的可被最终用户访问的各类应用。
各层之间面临着不同的安全风险:
据统计2011-2018年9月,智能合约层和系统应用层安全事件所占整体安全事件比重一直稳定在90%以上。进入2018年以后,由于智能合约快速应用,其对应的安全事件所占比重呈现出一定的上涨。
2018年区块链安全事件同比增长近400%,安全攻击主要集中在系统应用层和智能合约层,分别占60%与30%左右。
区块链节点服务器仍存在被黑客植入木马、窃听网络通信、DDOS攻击等安全风险。虽然区块链技术本身能够在一定程度上抵御少数节点被恶意控制所造成的破坏,但如果因为底层系统漏洞使得黑客可以轻易控制大部分节点,整个区块链网络仍会面临较大危险。
这方面因为与传统IT系统的安全攻击与防护没有太大的差异,所以本文不展开做详细的阐述。
加密算法是保证区块链的安全性和不可篡改性的关键,为区块链的信息完整性、认证性和不可抵赖性提供了关键保障。
根据被破译的难易程度,不同的密码算法具有不同的安全等级。不存在绝对的安全,如果破译密文的代价大于加密数据的价值,那么可以认为“安全的”;如果破译密文所需的时间比加密数据的时间更长,那也可以认为是“安全的”。
区块链技术大量依赖了密码学的研究成果,如非对称算法和哈希(Hash)算法。这些密码算法目前是相对安全的,但并非绝对安全。
一是存在对密码学算法的攻击方法,如作用于散列函数的穷举攻击、碰撞攻击、长度扩展攻击。
穷举攻击是指是对截获到的密文尝试遍历所有可能的密钥,直到获得了一种从密文到明文的可理解的转换;或使用不变的密钥对所有可能的明文加密直到得到与截获到的密文一致为止。
碰撞攻击是指攻击者找到算法的弱点,瓦解它的强抗碰撞性,使攻击者能在较短的时间能寻找到值不同但hash相同的两个值。
长度扩展攻击是指针对某些允许包含额外信息的加密散列函数的攻击手段。在已知密文hash和密文长度的情况下,推导出密文与另一消息拼接后计算出来的hash。
二是算法实现过程中可能存在后门和漏洞,威胁到区块链系统的安全性。比如,所采用的密码算法本身虽然没有安全漏洞,但算法库的实现存在错误,这类代码编程过程中形成的漏洞,有可能成为区块链实践中黑天鹅安全事件爆发的诱因,例如:OpenSSL就曾因代码编写错误出现密钥安全漏洞。
三是未来可能作用于多种密码学算法的量子攻击。随着量子计算机算力提升,使得穷举时间复杂度大大降低,目前多种加密算法面临被瓦解的风险。
因此,为在密码算法层防范安全风险,应当注意以下几点。
第一,尽量采用经过安全认证的硬件密码机或算法库,来保证密码算法和密钥管理方面的安全性。
第二,应充分考量随着时间的推移支持迁移到新算法的可行性。计算机计算能力变得更快,这变相降低了现有算法的强度,当前一般通过增加密钥长度的方式以抵消其带来的风险。不排除未来出现安全性更高、速度更快、计算和存储资源要求更少的优异特性的新算法的可能。
第三,充分考量密钥管理的重要性。区块链系统包含的各种密钥和Hash值等数据需要得到有效保护和管理,以保证区块链系统自身不受损害。密钥的安全至关重要,其管理系统应包括密钥创建、密钥派生、密钥分发、密钥存储和安全审计等安全性管理功能。
第四,充分考量在用户丢失密钥、密钥过期或受到其他危害时使用区块链的例外程序。密钥或私钥的盗窃风险可以通过限制密钥的有效期和使用量来缓解。实践中,某些区块链系统因没有设计任何方法来替换被盗用的密钥,导致用户损失。
第五,加密算法应当在安全性和计算成本之间有所折衷。在应用环境中,应根据特定行业所需的保护级别,选择合适的密码算法和密钥长度。要特别注意的是,虽然目前依赖现有的密码算法的加密算法和密钥长度可以满足当前的安全需求,但需要充分考虑量子计算的发展在未来可能带来的影响。
大部分公有区块链系统以P2P网络为基础,P2P网络技术重要的特点就是开放性,它在带来方便的同时,也伴随着各种安全问题。P2P网络依赖附近的节点进行信息传输会暴露对方的IP,攻击者可以利用这个漏洞给其他节点带来安全威胁,区块链节点可能是普通家庭PC,可能是云服务器等等,其安全性参差不齐,其中安全性较差的节点更易遭受攻击,进而影响P2P网络的整体安全。
针对P2P网络,攻击者可以发动日蚀攻击、窃听攻击、分割攻击、延迟攻击、拒绝服务攻击(DDoS)等攻击。
日蚀攻击是其他节点实施的网络层面攻击,其攻击手段是囤积和霸占受害者的点对点连接的对等节点,将该节点从主网中隔离,这样的节点被为日蚀节点。这种类型的攻击旨在阻止最新的区块链信息进入到日蚀节点,使其成为信息孤岛,甚至控制其信息输入。
窃听攻击可以使攻击者将区块链中的用户标识与IP关联起来。
分割攻击的攻击者可以利用边界网关协议(BGP)劫持来将区块链网络划分成两个或多个不相交的网络,此时的区块链会分叉为两条或多条并行链。攻击停止后,区块链会重新统一为一条链,以最长的链为主链。其他的链将被废弃,其上的交易、奖励等全部无效。
延迟攻击是攻击者利用边界网关协议劫持来延迟目标的区块更新,而且不被发现。因为它是基于中间人修改目标请求区块的数据来做到的,在目标请求获取最新区块的时候,将它的这一请求修改为获取旧区块的请求,使得目标获得较旧的块。
DDoS攻击是通过大流量或漏洞的方式攻击P2P网络中的节点,使网络中部分节点网络瘫痪。
2018年3月闪电网络遭受DDoS攻击,导致大约200个节点离线,节点从大约1050个降到了870个。只要闪电网络骨干节点被攻击,整体网络就会面临巨大危险。理论上节点分布更均衡可以解决该问题,但是闪电网络很难做到分布均衡,就像其开发者所说的:“我部署的闪电网络服务从一开始就遭受僵尸网络的攻击。在对抗条件下部署去中心化很难。”尤其不少许可链的项目,其共识节点大量集中部署在单一云计算服务供应商的网络内,更容易受到这方面的影响。
公有链对加入其中的用户不设任何访问授权机制,恶意节点可在加入后刻意扰乱运行秩序,破坏正常业务;而许可链尽管设置了不同等级的访问控制机制,也可能存在恶意节点利用漏洞混入进而展开攻击,或发生节点联合等情况。
鉴于以上这些情况可能带来的安全威胁:应在对等节点进行信息传输时进行加密,包括传输过程的加密和信息本身的加密;应通过安全散列计算及数字签名等技术保证传输过程中数据的完整性;应通过节点身份认证防止信息传递过程中受到攻击。对许可链而言,具体做法一是采取节点授权准入原则,二是在终端接入时进行身份认证,三是在交易前对节点通信双方进行身份认证。
区块链有不同的类型,如根据准入机制不同,区块链分为公有链和许可链。这就需要相适应的共识机制来保证链上最后的区块能够在任何时候都反应出全网的状态。共识机制是维持区块链系统有序运行的基础,相互间未建立信任关系的区块链节点通过共识机制,共同对写入新区块的信息达成一致。
以Fabric为代表的许可链系统使用PBFT共识机制。PBFT是一种状态机副本复制算法,即作为状态机进行建模,使得状态机可以在分布式系统的不同节点进行安全可靠的副本复制。对于许可链来说,由多信任方共同管理维护,节点信任度高,使得PBFT成为首选共识机制。只要大于2/3的节点是诚实的,PBFT就能在理论上保证系统的安全性,所以目前没有针对PBFT的有效攻击方法。
公有链与许可链在共识协议安全上考虑的因素不尽相同。以PBFT为代表的传统BFT算法的安全前提通常只假设整个网络中恶意节点不超过一定比例(比如不超过33%),但不去追究或考虑恶意节点的比例为何可以满足实际要求,也不考虑如何通过制度设计引导节点控制者的行为以促成恶意节点的比例不超阈值。但对于大部分公有链而言,由于节点可以匿名地动态加入及退出,如果没有良好的基于经济人假设的奖惩制度设计,合作不会自动产生,类似于“恶意节点比例不超阈值”这样的安全前提也不会神秘地自动满足。所以本文所说的“共识机制”,也包括区块链的激励机制。
以比特币为代表的公有链多使用POW共识机制。POW共识机制本质上就是在所有提供算力资源的集群中通过一种算法机制选择出一个幸运节点,因POW算法不存在终局性(即可被后期追赶的最长链推翻)状态,一旦总算力过小,则非常容易被攻击者劫持整个区块链,严重影响区块链系统的安全性。尤其随着通用矿机(可以挖多种币的矿机)和算力云化租赁服务的出现,算力分布更容易随着租赁方的变化在不同链之间快速切换,这是因为此时某条链上的加密货币受到攻击而贬值不会影响到矿机拥有者的利益,所以矿机拥有者有动力出租矿机给黑客而不顾及用途,从而降低了51%攻击的门槛。如果矿机拥有者拥有的矿机只能用于挖掘某一种特定的加密货币,则其利益在相当程度上和特定加密货币的安全性是一致的,此时矿机拥有者随意出借矿机给攻击者允许其造成这种加密货币的价格大幅下跌,就变得非常不理性,因此攻击者就较难通过短期租赁算力的方式开展这种攻击。这正是一个典型的激励不相容降低公有链安全性的案例。
以Peercoin为代表的加密货币使用POS共识机制。采用工作量证明机制发行新币,采用权益证明机制维护网络安全。POS机制根据每个节点拥有代币的比例和时间,依据算法等比例地降低节点的挖矿难度,从而加快了寻找随机数的速度。这种共识机制可以缩短达成共识所需的时间,但本质上仍然需要网络中的节点进行挖矿运算。
常见的针对公链共识机制的攻击有51%攻击、长距离攻击、币龄累计攻击、预计算攻击等。其中长距离攻击、币龄累计攻击、预计算攻击是针对POS共识机制的;51%攻击是针对POW共识机制的。
在区块链的实施中如何选择共识机制,取决于实际场景对共识机制安全性与效率的要求,共识机制发展最终是资源消耗、节点扩展、安全性、效率和开放性这五个因素的均衡。
区块链的运行平台层,在密码算法层、节点通信层、共识协议层的基础上构建了面向智能合约和区块链应用的运行环境,是构成区块链PAAS服务的核心部分,其攻击与安全风险主要来自于智能合约虚拟机的设计与实现。智能合约虚拟机是区块链智能合约的运行环境。安全的智能合约虚拟机是沙盒封装的,并确保其运行环境是完全隔离的,即在智能合约虚拟机中运行代码是无法访问网络、文件系统和其他进程的。甚至智能合约之间的访问和调用也需要接受必要的管理和限制。
智能合约虚拟机运行在区块链的各个节点上,接收并部署来自节点的智能合约代码,若虚拟机存在漏洞或相关限制机制不完善,很可能运行来自攻击者的恶意的智能合约。目前针对合约虚拟机的主要攻击方式有:逃逸漏洞攻击、逻辑漏洞攻击、堆栈溢出漏洞攻击、资源滥用漏洞攻击。
逃逸漏洞攻击是指在虚拟机运行字节码时提供沙盒环境,一般用户只能在沙盒的限制中执行相应的代码时,此类型漏洞会使得攻击者退出沙盒环境,执行其他本不能执行的代码。
逻辑漏洞攻击是指利用编码不合规范,未对特定数据或代码做容错处理,进而构建特定场景,导致系统出现逻辑问题。
堆栈溢出漏洞攻击是指攻击者通过编写恶意代码让虚拟机去解析执行,最终导致栈的深度超过虚拟机允许的最大深度,或不断占用系统内存导致内存溢出。
资源滥用攻击是指攻击者在虚拟机上部署一份恶意代码,消耗系统的网络资源、存储资源、计算资源、内存资源。
2018年5月29日,国内安全软件360安全卫士在其官方微博上发布长文《360发现区块链史诗级漏洞,可完全控制虚拟货币交易》,指出在EOS平台的智能合约虚拟机中发现一系列新型安全漏洞。如果这一系列安全漏洞受到攻击,攻击者会构造并发布包含恶意代码的智能合约,EOS超级节点将会执行这个恶意合约,并触发其中的安全漏洞。攻击者再利用超级节点将恶意合约打包进新的区块,就会导致网络中所有安全节点(备选超级节点、交易所充值提现节点、加密货币钱包服务器节点等)被远程控制。之后,攻击者可以“窃取EOS超级节点的密钥,控制EOS网络的虚拟货币交易,获取EOS网络参与节点系统中的其他金融和隐私数据,例如交易所中的加密货币、保存在钱包中的用户密钥、关键的用户资料和隐私数据等”。
虽然因为EOS当时处于早期阶段并未正式上线,没有形成很严重的后果,但因为运行平台层技术实现上的复杂性,以及其自身新的功能也在不断迭代开发,所以新的 bug 和安全漏洞可能会不断被发现,其面临的安全威胁也将不断变化。因此,仅仅防范已知的漏洞是不够的,还需要具有新的开发理念,一是有出现错误能即时终止的手段以及及时修复bug的途径;二是谨慎发布和校验智能合约;三是通过公开资源来确保获取到最新的安全进展;四是对区块链的特性加深理解。
智能合约本质是一段运行在区块链网络中的代码,它完成用户所赋予的业务逻辑。一方面,区块链为智能合约的运用提供可信的计算运行平台,另一方面,智能合约大大扩展了区块链的应用范围。合约条款由计算机代码评估并执行不受人为干预,所以合约代码一旦上链,执行过程和结果都完全公开而且不可篡改。随着智能合约的广泛应用,出现了各种漏洞攻击事件,安全风险问题日益严重。智能合约漏洞一旦被黑客利用就可能导致很多严重的安全问题,特别是资产安全问题。
一旦智能合约的编程代码设计不完善,就可能出现安全风险。其安全风险包含了三个方面:第一,漏洞风险,包括合约代码中是否有常见的安全漏洞。第二,可信风险。没有漏洞的智能合约,未必就安全,合约本身要保证公平可信。第三,不合规范风险。由于合约的创建要求以数字形式来定义承诺,所以如果合约的创建过程不够规范,就容易留下巨大的隐患。
目前针对智能合约的主要攻击方式有:可重入攻击、调用深度攻击、交易顺序依赖攻击、时间戳依赖攻击、误操作异常攻击、整数溢出攻击和接口权限攻击等。
可重入攻击是指当一个合约调用另一个合约的时候,当前的操作就要等到调用结束之后才会继续。这时,如果被调用者需要使用调用者当前所处的状态,就可能发生问题。2017年7月,以太坊钱包Parity爆出极其严重的的漏洞,使得攻击者从三个高安全的多重签名合约中窃取到超过15万ETH(约3000万美元)。攻击者通过调用initWallet智能合约(理论上这个智能合约只允许被调用成功一次),而initWallet智能合约未设置重入检查,以防止攻击者多次初始化智能合约将这个钱包合约的所有者进行覆盖从而将钱包所有者修改为攻击者,这相当于从unix中获得了root权限。
调用深度攻击针对虚拟机中智能合约的调用深度限制,这个限制是为了防止调用栈资源被滥用。调用深度攻击可以让合约调用失败,即使这个调用在逻辑上不存在任何问题,在虚拟机层面已经不被允许了,因为调用深度达到了虚拟机中的阈值,不再往下执行。攻击者可以通过控制调用深度来使某些关键操作无法执行,如转账、余额清零等。
交易顺序依赖攻击是指交易进入未确认的交易池,并可能被矿工无序地包含在区块中,因此打包在区块中的交易顺序与交易生成的顺序完全不同。如果攻击者可监听到网络中对应合约的交易,然后发出他自己的交易来改变当前的合约状态,例如对于悬赏合约减少合约回报,则有一定几率使这两笔交易包含在同一个区块下面,并且排在另一个交易之前,完成攻击。
时间戳依赖攻击是指攻击者可以通过设置区块的时间戳来尽可能满足有利于他的条件,从中获利。
误操作异常攻击是指当一个合约调用另外一个合约时,后者操作可能执行失败,从而退回到未执行前的状态,此时前者若不检查后者执行的结果继续往下执行,会导致很多问题。
整数溢出攻击是指如果攻击者向智能合约提供了一个超出代码处理范围的参数,就会产生崩溃结果,这样的崩溃助长了多重攻击。崩溃可能触发拒绝服务攻击,更严重地,关于系统内部的重要信息可能会在错误消息中泄漏。2018年初,区块链形式化验证平台VaaS(Verification as a Service)检测发现,基于EOS区块链的代币合约同样可能存在BEC代币合约类似的整数溢出漏洞。
接口权限攻击是指智能合约错误地将高权限的接口暴露给普通用户调用,导致系统状态出现异常。常见的接口权限攻击多出现在ERC20 代币合约的铸币权限上,一些开发者没有在初始化后关闭铸币权限,导致任何人可以调用生成新的代币。2017年11月,著名的Parity 多签钱包被一个用户误触发了共享库销毁函数,导致价值2.85亿美元的以太币永久锁定。
从以上的安全事件可以看出,现阶段智能合约并不完善,存在的各种漏洞一旦被黑客利用,就会造成资产损失。解决这些问题仍具有挑战性。以整数溢出为例,智能合约中有存在针对数值的计算和存储都是在无符号整数的范围中计算和存储的情况。一旦提供的数字输入或计算结果超过定义的字节数(即其数值范围超过了正常能够表示的数值范围),则会发生数值溢出情况。此种情况一旦在合约中出现,极易影响其合约中的处理逻辑和数值状态,导致验证的安全问题。如2018年4月,黑客利用美链BEC代币智能合约中的数据溢出的漏洞进行攻击,成功地向两个地址转出了天量级别的BEC代币,导致市场上海量BEC被抛售,BEC价格几小时内几近归零。
智能合约的本质是代码,它界定了各方使用合约的条件,在满足合约条件下机器指令被执行,其开发本身对程序员就是一项挑战。受限于自身的安全意识和代码编写能力,开发人员一旦没有全面考虑可能应对的风险,智能合约的可靠性就难以保证。
为防范智能合约层的安全风险,首先,在开发数值计算相关的智能合约时应该使用安全数值计算库,并做完整的生命周期式安全合规检查,防止整数溢出漏洞;应充分考量智能合约执行的功能,不能对数据完整性、安全性和平台稳定性产生负面影响。
其次,智能合约不可避免地与区块链之外的应用程序相互作用,目前没有方法和标准可以将与外部应用程序连接时引入安全漏洞的风险降至最低。所以一方面需要先进行智能合约协议安全性分析,防止业务逻辑漏洞的出现;另一方面应对与外部应用程序进行智能合约交互进行标准化,为保护完整性、安全性和稳定性提供指导。
最后,在系统安装智能合约代码时,确保代码来自正确的可信提供商并且未被修改,如果攻击者有能力安装恶意智能合约代码则可以改变智能合约的行为。必须有控制措施确保智能合约只能由已被授权人员安装,或能将部署在链上的代码和公布的合约源码自行编译后的结果进行比对以确认其一致。
系统应用层涉及不同行业领域的场景和用户交互,导致各类传统安全隐患较为集中,成为攻击者实施攻击的首选。2018年7月至12月间,EOS链上的DApp共发生49起安全事件,波及37个DApp,导致项目方共损失近75万枚EOS,按照攻击发生时的币价折算,总损失约合319万美元。
加密货币交易平台是为用户提供在线交易服务的重要渠道。不论是内部泄露数据还是外部黑客入侵,都会造成关键信息泄露。目前针对交易平台的攻击主要包括:账户泄露攻击(撞库、穷举)、DDoS攻击、Web注入攻击、钓鱼网页攻击。
账户泄露攻击(撞库、穷举)是指攻击者通过手机互联网上已公开或还未公开的用户名、邮箱、密码等信息来在要攻击的网站上通过程序批量尝试。若网站不对登陆接口做请求限制或者风控,则会导致攻击者可以无限发送请求逐个测试可能的值来暴力破解某些关键信息。
2017年10月2日,OKCoin旗下交易所出现大量账户被盗情况,不完全统计损失金额在1000万元人民币左右,用户怀疑平台已被攻击,或有已被关闭平台的交易所员工向黑客泄漏了平台用户的账户信息,黑客通过用户信息破解账户密码登录平台,然后在平台上完成数字资产转移。
DDoS攻击是攻击者想办法让目标机器停止提供服务,若交易平台被DDoS攻击,不但交易平台蒙受损失,加密货币的交易量也将大大减少,间接影响价格涨跌。
Web注入攻击是指通过对web连接的数据库发送恶意的SQL语句而产生的攻击,从而产生安全隐患和对网站的威胁,可以造成逃过验证或者私密信息泄露等危害。
钓鱼网页攻击是指是一种企图从电子通讯中,通过伪装成用户信任的网页以获得如用户名、密码和信用卡明细等个人敏感信息的犯罪诈骗过程。常用手段是导引用户到URL与界面外观与真正网站几无二致的假冒网站输入个人数据。就算使用强式加密的SSL服务器认证,要侦测网站是否仿冒实际上仍很困难。
区块链的钱包是密钥管理的工具,钱包中包含公私钥对,私钥与用户的资产直接相关。用户用私钥进行签名交易,从而证明用户交易的输出权。获取了私钥,就获得了资产的使用权和交易权。目前主流的钱包分为软钱包和硬件钱包。
软钱包一般运行在有互联网连接的设备上,因此也称其为热钱包,例如电脑客户端钱包、手机APP钱包、网页钱包等。用软钱包交易是很方便的,但是安全性相对于硬件钱包来说要低很多。主要攻击手段包括私钥窃取、破解攻击、APP内存篡改攻击。
私钥窃取是指由于钱包私钥文件多点备份不安全导致钱包私钥泄露。经调查,在互联网可接入的地方,都能看到密钥的存储。攻击者可以针对密钥文件进行专门扫描,以及开发相关的木马病毒进窃取。2019年1月14日,加密货币交易所Cryptopia被盗,成为2019年第一黑客盗窃事件,共有价值1600万美元的以太坊ETH被盗窃。此次攻击涉及了大量钱包,超过7.6万,而且这部分钱包都没有基于智能合约,这意味着黑客获得的私钥数量不是一个两个而是成千上万。
APP内存篡改攻击是指攻击者通过控制内存中的应用代码,解析出APP内逻辑、功能、流程、漏洞等各类关键内容,针对发现的漏洞植入相应后门代码并针对APP进一步攻击。
硬件钱包的私钥存储和运算,往往是运行在封闭的硬件(如安全芯片)内部,没有直接暴露在互联网或开放的软件运行环境中,有时候也被叫做冷钱包,其安全性要远高于软钱包,但往往不方便交易。但硬件钱包也非绝对安全,比如2018年初硬件钱包制造商Ledger公司产品上发生过的中间人攻击,以及第35届混沌通讯大会(35C3)上WalletFail团队所展示的侧通道攻击(side channel assault)等,都说明硬件钱包的安全仍需要不断的完善。
还有一种针对钱包私钥的攻击叫作“彩虹攻击”,即通过事先遍历所有常见的助记词组合并预先生成对应的公私钥,然后在网络中寻找已经被彩虹表记录碰撞出来的账户,一旦被彩虹表碰撞,则意味着攻击者拥有了对应账户的控制私钥,验证威胁账号安全。该安全攻击手段使得热钱包和冷钱包都面临较大的风险。2018年7月11日上午,在发布EOS账户存在”彩虹“攻击风险的高危预警后,区块链安全公司PeckShield紧急启动部署了一系列应急处理方案。其中启用的EOS Rescuer公共查询服务已累计提供数万次查询,监测到的受影响的高危账户资产也已做妥善管理。
为应对系统应用层的安全风险:平台端上线前应进行渗透测试,运行中进行全方位安全防护,同时制定遭受攻击后的应对措施。钱包端因为涉及加密资产的安全,更容易被攻击者攻击。这其中私钥的保护最为重要,用户私钥的生成最好使用随机字符串进行生成,若允许用户自定义输入则必须输入足够复杂的助记词。应该加密保存私钥,恪守按需使用、离线使用的原则使用私钥,尤其不应该通过网络传输私钥。另外,结合门限签名等密码算法的私钥管理方案,对于钱包端私钥的安全保护,也具有重要的实践意义。
事实上在实践中,大部分的区块链系统应用层的安全问题,都不是区块链自身的安全风险带来的,甚至与区块链本身没有丝毫关系。比如大量加密货币交易平台爆出的安全问题,本质上都是其自身上层应用中存在的安全管理漏洞所致,不涉及底层的区块链技术。但是很多舆论宣传倾向于把这类安全事件归类到和区块链相关的安全案例中。所以还是需要人们提高风险辨别能力,对风险能够有清晰的认识从而加以正确的区分。
在CIA三要素中,区块链在确保完整性和可用性方面天然具有某种优势,但在确保机密性方面尚存在较大挑战。
隐私是一种与公共利益、群体利益无关,当事人不愿他人知道或他人不便知道的个人信息(只能公开于有保密义务的人)、当事人不愿他人干涉或他人不便干涉的个人私事,以及当事人不愿他人侵入或他人不便侵入的个人领域。
在区块链上,实体的标识信息及其在区块链上的交易活动信息都可能被用户认为有隐私保护的必要。区块链上个人信息保护可参考的法规有我国的《GB/T35273-2017 信息安全技术个人信息安全规范》中关于开展收集、保存、使用、共享、转让、公开披露等个人信息处理活动应遵循的原则和安全相关要求,以及国际上的《通用数据保护条例》(General Data Protection Regulation)。
区块链技术的逻辑要求相关上链数据必须得到不同节点的共识验证,因此,区块链上的数据隐私保护与传统的数据隐私保护相比,具有不同的特点与要求,往往需要设计专门的隐私保护策略:一是设计隐私保护技术方案,区块链在设计和实现时,宜考虑提供适当的隐私保护方案来加强对其上运行的隐私数据的保护。二是链上(on-chain)链下(off-chain)分割,区块链上的隐私保护,需根据实现方案考虑链上和链下隐私数据的保护策略。三是访问控制,区块链在设计和实现时,应采取技术措施控制隐私相关数据的访问权限,对隐私数据访问者进行身份验证并检查其授权。四是需要重点研究同态加密、零知识证明、安全多方计算、TEE(如SGX)等技术领域,最大限度地为区块链体系提供隐私保护能力。同态加密在保证信息不解密的情况下运行。零知识证明即证明者能够在不向验证者提供信息本身内容的情况下,使验证者相信某个论断真实可信,保证身份的匿名性。安全多方计算是解决一组互不信任的参与方之间隐私保护的协同计算问题,安全两方计算作为其特例,一般基于混淆电路和不经意传输等技术实现。TEE技术则是在信任特定硬件设备(如Intel芯片的SGX功能)难以攻破的前提下选择在受硬件保护的Enclave环境中解密外部输入数据、执行智能合约代码、加密输出数据,此过程中明文信息只出现在Enclave中但不能被外部看到。当然,在实现匿名的过程中,所需的代价可能较高,也可能给追踪与监管带来非常大的挑战。
区块链是信息互联网向价值互联网转变的重要基石,是现代数字货币体系的可选技术之一。它以密码学技术为基础,通过分布式多节点“共识”机制,可以“完整、不可篡改”地记录价值转移(交易)的全过程。
区块链作为密码学、网络技术、数据库等多种技术组合的新型技术,复杂程度更高,更容易出现安全问题,因此区块链安全在考虑传统技术范畴内的基础设施安全外,更需要围绕密码算法安全、节点通信安全、共识协议安全、运行平台安全、智能合约安全和系统应用安全等不同的层级进行全面的安全体系建设。安全是个系统性工程,风险的发生也遵循木桶原理,容易从最薄弱的一块板上突破。
区块链技术仍然处在初期阶段,其安全问题处于动态发展过程中,本报告积极探索区块链安全的本质,希望为区块链安全的应用实践给出指导性建议。