热门标签 | 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》。


推荐阅读
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
  • 本文介绍了如何通过conda安装Selenium的wheel文件,包括查看环境、卸载旧版本、下载新版本的wheel文件以及安装操作的步骤。同时提供了使用清华源的方法。 ... [详细]
  • 阿里云虚拟主机安装多个织梦系统的方法
    本文介绍了在阿里云虚拟主机上安装多个织梦系统的方法。通过创建不同名称的文件夹并将不同的域名解析到对应的目录,可以实现多个系统的安装。在安装过程中需要注意修改数据库前缀,并在系统设置中还原数据库。同时还介绍了阿里云虚拟主机二级域名绑定二级目录和域名重定向的用法。 ... [详细]
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社区 版权所有