热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

长亭科技公链漏洞定级标准

 在对各种语言、各种类型公链项目的长期漏洞挖掘、源码深度安全审计,以及对历史公链漏洞深度安全研究的过程中,长亭科技区块链安全专家团队总结出了一套完善的公链漏洞定级标准,为区块链中各类型漏洞的严重程度提

 

在对各种语言、各种类型公链项目的长期漏洞挖掘、源码深度安全审计,以及对历史公链漏洞深度安全研究的过程中,长亭科技区块链安全专家团队总结出了一套完善的公链漏洞定级标准,为区块链中各类型漏洞的严重程度提供了科学具体的评估方法,并通过大量实践验证了漏洞定级的合理性。

为了真正提升区块链行业的安全程度,本着“知识共享、安全至上”的原则,长亭科技决定将此成果公开,欢迎伙伴们参考及探讨,完善区块链安全行业规范,共同为区块链行业保驾护航。

公链漏洞定义

漏洞是计算机信息系统在需求、设计、实现、配置、运行等过程中,有意或无意产生的缺陷。这些缺陷以不同的形式存在于计算机信息系统的各个层次和环节之中,一旦被恶意主体所利用,就会对计算机信息系统的安全造成损害,从而影响计算机信息系统的正常运行。

——摘自《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》。


推荐阅读
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 未定义的打字稿记录:探索其成因与解决方案 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 了解如何在VSCode中通过配置文件自定义调试控制台的名称。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 数据库多表联合查询:内连接与外连接详解
    在数据库的多表查询中,内连接和外连接是两种常用的技术手段。内连接用于检索多个表中相互匹配的记录,即只有当两个表中的记录满足特定的连接条件时,这些记录才会被包含在查询结果中。相比之下,外连接则不仅返回匹配的记录,还可以选择性地返回不匹配的记录,具体取决于左外连接、右外连接或全外连接的选择。本文将详细解析这两种连接方式的使用场景及其语法结构,帮助读者更好地理解和应用多表查询技术。 ... [详细]
author-avatar
手机用户2502923495
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有