链资讯 链资讯
Ctrl+D收藏链资讯
首页 > Polygon > 正文

ETH:新加坡安全公司Numen发现Aptos公链首个高危0day漏洞_NFT

作者:

时间:

1.前言

相对于ethereum的soldity语言,move语言最近越来越火,而且由于其自身相对于soldity的强大优势,越来越受到重视。其中move语言被用于很多明星项目,比如Aptos,sui。近期我们的Web3安全漏洞检测产品发现了一个整数溢出的漏洞。可以导致Aptos节点崩溃,造成拒绝服务。本文通过对该漏洞的介绍,希望大家对move语言以及其安全性有更多的认识和理解。作为move语言安全性研究的领导者,我们会持续关注move语言的安全性,为move的生态安全做出我们的贡献。?

2.Move语言的重要概念

模块和脚本?

Move有两种不同类型的程序:模块和脚本。模块是定义结构类型以及对这些类型进行操作的函数的库。结构类型定义了Move的全局存储的模式,模块函数定义了更新存储的规则。模块本身也存储在全局存储中。脚本是可执行文件的入口点,类似于传统语言中的主函数main。脚本通常调用已发布模块的函数来更新全局存储。脚本是临时代码片段,不会发布在全局存储中。一个Move源文件可能包含多个模块和脚本。然而,发布模块或执行脚本都是独立的虚拟机操作。?

对于熟悉操作系统的人来说,move的module就类似系统的可执行文件运行的时候加载的动态库模块,而script类似主程序。用户可以通过自己编写script,来访问全局存储,包括调用module模块的代码。?

全局存储?

Move程序的目的是读取和写入树形的持久全局存储。程序不能访问文件系统、网络或任何此树以外的数据。?

在伪代码中,全局存储看起来像:?

新加坡淡马锡基金抛售其 Coinbase 持股:金色财经报道,根据美国证券交易委员会(SEC)的最新文件,新加坡国家投资基金淡马锡已卖出其持有的加密货币交易所 Coinbase (COIN) 股票。在第三季度提交的文件中,该基金列出了 8,168 股 Coinbase 股票所有权,价值约 210 万美元,但第四季度提交的文件显示没有 Coinbase 持仓。截至 2021 年底,淡马锡的总投资组合价值 3010 亿美元。市场数据显示,自去年 4 月首次公开募股以来,Coinbase 的股价已下跌约 40%。(coindesk)[2022/2/15 9:51:47]

从结构上讲,全局存储是一个森林,这个森林由以账户地址为根的树组成。每个地址可以存储资源数据和模块代码。如上面的伪代码所示,每个地址最多可以存储一个给定类型的资源值,最多可以存储一个给定名称的模块。??

MOVE虚拟机原理?

movevm与evm虚拟机都一样,需要将源码编译成字节码,然后在虚拟机中执行,下图是整体的流程:?

1.将字节码通过函数execute_script被加载进来?

2.执行load_script函数,这个函数主要用来反序列化字节码,并校验字节码是否合法,如果校验失败,就会返回失败?

新加坡WBF交易所即将上线BED:据官方消息显示,WBF交易所即将上线BED,并在开放区上线BED/USDT交易对。

据悉,BED全称Back exchange decentralized 其分片最高可达每秒千万级TPS高吞吐,是优先服务去中心化金融体系行业的标杆,拥有聚核流动性池、预言机、挖矿即销毁与一体的顶级Defi超级应用体。

BED原始团队由新加坡德威普基金公司与多国极客联合开发,为整合跨链技术,去中心化交易所,E-POS挖矿,一键开发商用代币。[2021/4/22 20:47:47]

3.校验成功之后就会开始执行真正的字节码代码?

4.执行字节码,访问或修改全局存储的状态,包括资源,modules?

注:move语言还有很多特性,这里我们就不一一介绍,后续我们会从安全性角度继续分析move语言的特性。?

3.漏洞描述

本漏洞主要设计验证模块,在讲具体漏洞之前先介绍下验证模块的功能以及StackUsageVerifier::verify。?

验证模块?

通过前面,我们知道在真正执行字节码代码之前,会有验证字节码的环节,而验证环节有可以细分为好多子过程,?

分别是:?

BoundsChecker,边界检查,主要是用来检查module与script的边界安全。具体包括检查signature,constants等的边界?

DuplicationChecker,该模块实现了一个检查器,用于验证CompiledModule中的每个向量是否包含不同的值?

新加坡WBF交易所将上线ROCC:据官方消息显示,WBF交易所将正式上线ROCC,并于11月20日16时在创新区上线ROCC/USDT,充值将在11月19日12时开放,提现将在11月19日12时开放。

?ROCC由创始团队发起,将首次招募全球1000节点。各区域的超级节点负责人独立运营社区,创始团队统一管理通证生态。创始团队致力于ROCC生态的开发,建设和推广,以促进安全和可持续发展,开源生态社会的和谐发展.[2020/11/19 21:21:56]

SignatureChecker,用于检查signature被用于函数参数,本地变量,结构体成员时,字段结构正确?

InstructionConsistency,验证指令一致性?

constants用于验证常量,常量的类型必须是原始类型,常量的数据正确的序列化为其类型?

CodeUnitVerifier,验证函数体代码的正确性,分别通过stack_usage_verifier.rs与abstract_interpreter.rs来达到目的?

script_signature,用于验证一个脚本或入口函数是否是一个有效的签名?

该漏洞发生在verify环节CodeUnitVerifier::verify_script(config,script)?;函数中。可以看这里有许多的verify子流程。?

动态 | Crypto.com与Xfers合作,用户将能够使用新加坡元交易加密货币:在新加坡金融科技节上,Crypto.com宣布与新加坡金融科技公司Xfers合作,将为其用户提供用新加坡元(SGD)买卖加密货币的能力。Crypto.com用户将能够快速购买和出售主流加密货币,包括BTC、ETH、LTC、XRP及其自己的MCO和CRO代币。另一项合作将是Crypto为Xfers的试点稳定币计划StraitsX和XSGD稳定币提供支持。与新加坡元挂钩的稳定币将被引入Crypto.com Pay,这是一种用于客户和商家之间结算的移动支付解决方案。(CryptoBriefing)[2019/11/13]

分别是stack安全校验,类型安全校验名,本地变量安全性校验,以及引用安全校验。而漏洞产生的地方就在栈安全校验过程中。?

栈安全校验(StackUsageVerifier::verify)?

该模块用于验证函数的字节码指令序列中的基本块是否以平衡的方式使用。每个基本块除了那些以Ret操作码结尾的,必须确保离开block时候栈高度与开头时候相同。此外,对于任何基本块的块,栈高度不得低于开始时的栈高度。?

循环校验所有代码块是否满足以上条件:??

即循环遍历验证所有基本块的合法性。?

漏洞详情?

前面已经介绍过,由于movevm是栈虚拟机,在验证指令合法性的时候,很显然,第一需要确保指令字节码是否正确,第二需要确保栈空间经过一个block代码块调用之后,栈内存合法,即栈操作之后,栈保持平衡。verify_block函数正是用来完成第二个目的的。?

动态 | 币安新加坡法币交易所正式推出 目前仅支持BTC/SGD交易对:据TechCrunch消息,币安新加坡法币交易所已正式上线,但目前仅支持BTC/SGD交易对。币安发言人表示,如果法规允许,未来可能会上线更多交易对。[2019/4/25]

从verify_block代码中我们可以看到,for循环会循环解析block代码块中的所有指令,然后通过对num_pops,num_pushes加减操作来验证指令块的对栈的影响是否合法,首先通过对stack_size_increment<num_pops来判断栈空间是否合法,如果num_pops大于stack_size_increment就说明字节码pop的数目大于栈本身的大小,就返回错误,字节码校验失败。然后通过stack_size_increment-=num_pops;stack_size_increment+=num_pushes;这两条指令来修改每个指令执行之后对栈的高度的影响,最后当循环结束之后,stack_size_increment需要等于0,即保持本block内的操作之后,需要保持栈的平衡。?

看起来这里似乎没什么问题,但是由于这里在执行16行代码的时候,没有去判断是否存在整数溢出,导致可以通过构造超大num_pushes,间接控制stack_size_increment,从而产生整数溢出漏洞。那么如何构造构造这样一个巨大的push数目呢?这里首先需要介绍一下movebytecode文件格式。?

movebytecode文件格式?

如同WindowsPE文件,或者linuxELF文件,move的字节码文件以.mv为结尾,文件本身也是有一定的格式的,总的来说movebytecode文件格式如图所示:?

首先是macgic,值为A11CEB0B,接下来是版本信息,以及table的数目,之后是tablesheaders,这里可以有很多个tables,tablekinds就是table的类型,总共有0x10种,更多详细信息可以去看move语言文档,接下来是table的偏移,以及table的长度。之后就是table的contents了,最后是SpecificData,有两种,对于module来说就是ModuleSpecificData,对于script类型来说就是ScriptSpecificData。?

构造的恶意文件格式?

这里我们与aptos交互的时候,是以script来完成的,所以我们构造了下图所示的文件格式,就可以造成stack_size_increment溢出:?

首先来解释一下这个字节码文件的格式:?

+0x00-0x03:是macgicword0xA11CEB0B?

+0x04-0x7:文件格式版本,这里为版本4?

+0x8-0x8:为tablecount这里为1?

+0x9-0x9:为tablekind这里是SIGNATURES类型?

+0xa-0xa:为tableoffset,这里为0?

+0xb-0xb:为tablelength,这里为0x10?

+0xc-0x18:为SIGNATURESToken数据?

从0x22开始为scrip的mian函数code代码部分?

通过move-disassembler工具,我们可以看到指令的反汇编代码如下:?

其中0,1,2三条指令对应的代码就是红框,绿框,黄框的数据。?

LdU64与漏洞本身无关,我们这里就不做过多解释,感兴趣的可以自行查看代码。这里重点解释下VecUnpack指令,VecUnpack的作用就是在代码中碰到vector对象的时候,需要将数据全部push到栈上。?

在构造的这个文件中,我们构造了两次VecUnpack,其vector的num分别是3315214543476364830,18394158839224997406,?

当执行函数instruction_effect的时候,实际上执行的是下面第二行代码:?

执行完instruction_effect函数第一次返回(1,3315214543476364830),此时stack_size_increment为0,num_pops为1,num_pushes为3315214543476364830,执行第二次返回(1,18394158839224997406)。当再次执行stack_size_increment+=num_pushes;?

stack_size_increment已经为0x2e020210021e161d(3315214543476364829),?

num_pushes为0xff452e02021e161e(18394158839224997406),当两者相加之后,大于u64的最大值,产生了数据截断,stack_size_increment的值成为了0x12d473012043c2c3b,造成了整数溢出,从而造成了aptos节点崩溃,进而导致节点运行停止的严重影响(由于rust语言的安全特性,并不会向c/c++那样造成更进一步的代码安全影响)。?

4.漏洞影响

本漏洞由于是发生在movevm执行模块,所以对于链上节点,只要执行该字节码代码,就会造成DoS攻击,严重的情况下,可以使得aptos网络完全停止运行,会对其生态造成难以估量的影响,以及对节点的稳定性产生严重影响。?

5.官方修复

当我们发现这个漏洞之后,第一时间报告给了官方,官方也很快修复了漏洞:?

官方的修复也很简单,就是对stack_size_increment的加减分别做了溢出检测。如果有溢出就直接返回异常。?

标签:ETHENSNFTRENCRETH2币ens币最新消息HADO NFTren币未来价格

Polygon热门资讯
区块链:风口背后:第一批 00 后 Web3 创业者 和他们的「人间清醒」_EthereumMax

年轻人其实想得没那么复杂。 采访|苏子华、段宛辰 作者|苏子华编辑?|靖宇当不少80后、90后还在困惑,生怕赶不上这趟所谓的Web3「革命快车」的时候,有一些00后早已「玩得飞起」.

ARK:万字长文窥见牛市的曙光:构建应用层成为以太坊的下一阶段主流叙事_以太坊

前言 以太坊进入后合并时代,PoS顺利取代PoW,对网络的可扩展性进行改进成为下一重点。Bulider终于可以在以太坊上构建面向亿级消费者的Web3应用,L2、ZK等技术将进一步压低使用成本,D.

ETH:金色观察 | 全面比较Aptos和Sui:Aptos已上线 来看看Sui_FRENS价格

文/Cody,GlobalCoinResearch 一、简介 “L1战争”是2020-2021周期中广为人知的故事,主要的竞争性1层区块链与以太坊一起捕获了大量的价值和开发人员人才.

USDT:资讯:合并后近 80% 的以太坊矿工下线_以太坊币今日价格行情人民币

超过80%的以太坊矿工在合并后选择放弃。由于合并后效应,以太坊经典的算力下降了近48%。根据加密矿池2Miners的数据,10个以太坊矿池中有8个在合并后离线.

USDT:金色早报 | 9 月份比特币挖矿收入下降 16.2%_加密货币

头条 ▌呼伦贝尔市“蒙e突击队”抓获泰达币等数字货币团伙,累计扣押涉案赃款100余万元金色财经报道,据平安呼伦贝尔公众号,呼伦贝尔市“蒙e突击队”抓获一个用泰达币等数字货币的跑分团伙.

元宇宙:给钱给户口 各地政府“放大招”抢夺元宇宙人才_btc价格今日行情usdt

进入2022年,全国多地政府纷纷发布元宇宙产业发展规划、建设元宇宙产业园等政策,元宇宙产业发展开始进入竞争阶段.