在对各种语言、各种类型公链项目的长期漏洞挖掘、源码深度安全审计,以及对历史公链漏洞深度安全研究的过程中,长亭科技区块链安全专家团队总结出了一套完善的公链漏洞定级标准,为区块链中各类型漏洞的严重程度提供了科学具体的评估方法,并通过大量实践验证了漏洞定级的合理性。
为了真正提升区块链行业的安全程度,本着“知识共享、安全至上”的原则,长亭科技决定将此成果公开,欢迎伙伴们参考及探讨,完善区块链安全行业规范,共同为区块链行业保驾护航。
公链漏洞定义
漏洞是计算机信息系统在需求、设计、实现、配置、运行等过程中,有意或无意产生的缺陷。这些缺陷以不同的形式存在于计算机信息系统的各个层次和环节之中,一旦被恶意主体所利用,就会对计算机信息系统的安全造成损害,从而影响计算机信息系统的正常运行。
——摘自《CNNVD漏洞分级规范》
公链漏洞是区块链系统在需求、设计、实现、配置、运行等过程中,有意或无意产生的安全缺陷及安全风险。这些缺陷和风险以不同的形式存在于区块链系统的系统架构、业务逻辑、算法设计、代码实现等各个层次和环节之中,一旦被恶意主体所利用,就会对区块链系统的资金、数据、程序、主机等方面的安全性造成损害,从而影响区块链系统的正常运行。
特别说明:公链漏洞中的“公链”二字仅是为区分于合约等其他区块链相关领域,并未将联盟链、私有链中的漏洞排除在外。因此,本定级标准可以应用至所有公有链、联盟链、私有链,不仅限于公有链漏洞。
公链漏洞定级方法
根据漏洞在危害程度、利用难度两个维度的特征,辅以其他综合因素,可以将漏洞分为「严重」、「高危」、「中危」、「低危」四个等级。
备注:可据具体情况酌情调整实际等级
危害程度
严重危害
严重危害是指漏洞发生在核心系统业务逻辑(区块、交易、资金、共识验证处理等涉及核心资产与数据的逻辑),对整个区块链体系造成大量经济损失、大面积混乱、或获取节点宿主机权限等严重且多数不可逆的危害。
包括但不限于:
任意节点远程命令执行
区块链网络分叉
篡改历史区块数据
伪造、重放任意交易或区块并大量获益
获取任意节点托管的私钥
任意铸币、盗币
给任意账户造成资金损失
篡改鉴权、收费、转账等核心系统逻辑
破坏链上保密设计
高危害
高危害是指漏洞对部分节点或账户造成较严重危害,可以使部分区块链系统停滞,造成较大混乱或经济损失的问题。
包括但不限于:
任意节点程序崩溃或无响应
任意节点宿主机崩溃或无响应
使任意节点无法验收合法交易
使任意节点无法与其他节点维持任何有效连接
断开任意节点与其他节点的连接
伪造、重放任意交易或区块但无法大量获益
伪造签名、获得使用他人私钥给任意数据签名的能力
获取某些账户的私钥
获得少量非预期资金收益
给某些账户造成资金损失
越权修改账户地址或权限设置
中等危害
中等危害是指漏洞对部分节点或账户造成一定程度的混乱或经济损失的问题。
包括但不限于:
重放特定交易或区块
使任意节点启动失败
使任意节点无法与其他节点建立有效连接
显著降低其他攻击的利用难度
使服务端RPC接口失效
低危害
低危害是指漏洞不会对区块链系统、节点或账户造成实质性损害,但依然需要改进,具有潜在风险的问题。
不会直接造成经济损失的敏感信息泄漏
一定程度降低其他攻击的利用难度
利用难度
低难度
无利用门槛
成本较低或0成本
需要概率触发,但触发概率很大(>80%)
中等难度
需要概率触发,但触发概率较大(20%-80%)
需要攻击者达成某些正常条件。比如被动态票选为BP,或主动成为出块节点
需要受害者达成某些正常条件。比如需要未建立某些p2p连接
需要与非本程序中的常见攻击手段结合。比如CSRF、任意文件上传下载等
需要与本程序中的已知攻击手段结合
需要付出一定量或小于收益的资金成本
需要付出一定时间成本。比如数天
需要使用一定量网络/计算资源
高难度
需要概率触发,但触发概率较小(<20%)
需要用户达到某些低频条件,比如需要重启客户端
需要与本程序中的未知攻击手段结合
需要付出大量时间成本
需要使用大量网络/计算资源
极高难度
需要达到某些正常情况下不易出现的特殊条件。比如获取受到特别保护的特定数据
需要付出正常情况下不易达到的成本,但低于系统设计的预期成本。比如拥有全网30%以上算力,但不需要达到PoW预期的50%算力成本
漏洞定级案例
以下漏洞案例出自多个公链审计项目,长亭科技对漏洞进行科学定级,帮助公链项目方对相关漏洞建立了较为清晰的认识,并迅速响应进行修复,有效避免了风险。
【严重】Merkle Tree构建算法漏洞
为了验证merkle tree root,在交易的merkle tree的构建中,进行了两叶子节点的哈希值比较,给定了两个叶子节点哈希值的大小顺序,导致能够合法篡改区块中部分交易顺序。
**详细分析请参考
长亭科技此前发布的:《区块链公链审计过程中遇到的Merkle Tree底层实现问题》**
通过改变合法区块中的交易顺序,能够导致网络对于交易数据及账户状态实际认知不一致,导致网络分叉甚至无法维持共识。
需要获得一个合法区块并调换两个或两批相邻交易顺序,在其未传播至全网前广播篡改后的区块。
危害程度:造成网络分叉,属于严重危害
利用难度:触发无硬性门槛,需要选择包含交换后能够引起状态分歧的交易对的区块,或者自己构造这样的交易对,触发概率较大,成本较低,属于低难度
定级:严重危害+低难度=严重漏洞
【高危】P2P数据处理整型上溢
P2P层协议处理数据包时存在可控的整数上溢,使得中间变量内存过小,后续发生数组越界写操作,抛出异常。
可导致节点程序崩溃,由于语言特性无法通过越界写实现远程命令执行。
攻击者可构造恶意P2P数据包,发送至任意节点即可。
危害程度:造成任意节点崩溃,属于高危害
利用难度:无利用门槛,属于低难度
定级:高危害+低难度=高危漏洞
【中危】超长请求包导致节点无响应
Master子进程的RPC模块在处理请求时会经过Logger.info将请求输出至本subprocess的pipe中,并在Cluster主进程的print_out协程中通过asyncio.StreamReader.readline从pipe中取出log并打印至console。当一次输出大小超过64KB时readline会抛出异常,导致唯一从Master子进程的pipe取数据的print_out协程crash;当Master继续输出log到pipe至缓存满时会发生阻塞,导致Master子进程无响应,节点假死。
可导致任意节点程序无响应,具体表现为RPC模块失效等。
构造具有超长JSON数据的请求,发送至RPC接口即可。
危害程度:造成任意节点无响应,属于高危害
利用难度:考虑到需要目标节点主动开放RPC接口,属于中等难度
定级:高危害+中等难度=中危漏洞
【低危】解码函数信息泄漏
RPC某接口中的decode函数存在数组越界访问,并可通过后续逻辑泄漏数组范围外1字节信息。
泄漏相邻内存上1字节信息,无直接危害。
构造payload调用RPC接口,根据返回值判断被泄漏的信息。
危害程度:一般信息泄漏,降低其他攻击的利用难度,属于低危害
利用难度:无利用门槛,属于低难度
定级:低危害+低难度=低危漏洞
长亭科技自去年年初起开始关注区块链技术,致力于为区块链行业提供高质量的安全咨询与审计服务。一年多来,潜心在各种区块链细分领域中进行安全研究,并服务了众多项目,成功将多年来在传统安全领域内积累的深厚技术优势转化到这个新的行业,形成了以公链源码安全审计、智能合约安全审计、交易所渗透测试、区块链钱包安全审计为核心,公链设计及架构安全顾问、交易所货币托管所安全咨询、区块链安全技能培训等完整的区块链安全解决方案。区块链安全研究员于晓航获得多个区块链安全领域CVE编号。
2018年5月,长亭科技发布国内首部《区块链安全生存指南》,围绕区块链安全对不同应用的安全需求、行业内的大规模攻击事件及其应对策略进行了系统梳理。
2019年3月,长亭科技发布一套完善的公链审计Checklist,覆盖了历史上几乎所有公开的公链漏洞、审计中所有实际发现的漏洞、以及可能存在问题的潜在风险点。相关内容请参看长亭科技此前发布的:《区块链安全 | 长亭科技发布公链审计Checklist》。
发表评论
您还未登录,请先登录。
登录