月亮链 月亮链
Ctrl+D收藏月亮链
首页 > BNB > 正文

MOVE:从安全角度看 Move 语言特性与可能存在的漏洞_ikecoin

作者:

时间:1900/1/1 0:00:00

图片来源:由无界版图AI工具生成

此前,Beosin宣布了全新升级的安全审计服务,而现在,Beosin安全团队正式宣布推出针对Move智能合约的安全审计服务,旨在提前发现并协助项目方修复项目中的安全风险,保障用户与项目方的资产安全。

1、基础概念

Move语言最初是由Facebook团队为Diem区块链而设计开发的一门新语言。而Libra的使命是打造一个简单的全球货币和金融基础设施,为数十亿人提供支持。Move语言旨在提供一个安全、可编程的基础,可以在此基础上构建这一愿景。Move必须能够以精确、可理解和可验证的方式表达Diem货币和治理规则。从长远来看,Move必须能够对构成金融基础设施的各种资产和相应的业务逻辑进行编码。

那么,如何实现这一愿景呢?在Move的白皮书中提出了设计时考虑的四个关键目标:first-class资产、灵活性、安全性和可验证性。其中first-class资产是实现这一愿景的基础。要理解first-class资产,我们先来介绍Move语言中的几个比较重要的基础概念。

1.1结构体

和其他很多语言一样,Move语言中的结构体也是使用struct定义。它是自定义类型,也是Move中创建自定义类型的唯一方法。结构体可以包含复杂数据,也可以不包含任何数据,但不允许定义递归结构体。结构体由字段组成,可以简单地理解成「key-value」存储,其中key是字段的名称,而value是存储的内容。

1.2能力

Move的类型系统非常灵活,每种类型都可以被四种限制符所修饰。这四种限制符我们称之为abilities,它们的功能分别是:

区块链百科全书IQ.wiki启动基于ChatGPT技术的搜索引擎:金色财经报道,据周四的新闻稿称,区块链百科全书IQ.wiki已经启动了一个基于OpenAI的ChatGPT技术的搜索引擎,使加密货币用户能够搜索各种来源。IQ.wiki于2014年成立,最初名为Everipedia,旨在成为一个更加开放的基于区块链的维基百科。2018年,它获得了Galaxy Digital的3000万美元资金。[2023/8/10 16:18:37]

Copy-被修饰的值可以被复制。

Drop-被修饰的值在作用域结束时可以被丢弃。

Key-被修饰的值可以作为键值对全局状态进行访问。

Store-被修饰的值可以被存储到全局状态。

而Move的基本类型缺省具有store,copy和drop限制,自定义类型缺省情况下结构体不带任何限制符。

1.3资源

介绍完了结构体和能力,接下来就是Move语言中的核心概念:资源。

如果定义的结构体不能复制也不能丢弃,我们就将它们称为资源。默认情况下,结构体是线性和短暂的。它们不能复制,不能丢弃,不能存储在全局存储中。这意味着所有值都必须拥有被转移的所有权,并且值必须在程序执行结束时处理。我们可以通过赋予结构体能力来简化这种行为,允许值被复制或删除,以及存储在全局存储中或定义全局存储的模式。

Move语言中的这个属性对于现实世界中资源的建模非常有用,因为货币在理论上是不希望在流通过程中被复制或丢失的。

1.4模块

Move语言中,代码都是以模块的形式进行组织的。如何理解模块呢?抽象的理解,Move语言中的模块/资源/方法之间的交互与传统的面向对象语言中的类/对象/方法之间的关系非常相似。

而与其他区块链语言相比,Move中的模块类似于其他区块链中的智能合约。开发者在模块中声明资源类型和方法,这些类型和方法定义了创建、销毁和更新已声明资源的规则。

游戏公司雷蛇被黑,黑客索要10万美元的加密货币:金色财经报道,游戏硬件公司雷蛇(Razer)据称遭遇数据泄露,黑客在一个论坛寻求以10万美元(合134,898新元)加密货币的价格出售被盗数据,其中包括标记为“zVault”的文件夹(Razer的数字钱包,于2018年12月被Razer Gold取代)以及与其奖励系统相关的加密密钥。攻击者声称已访问超过400,000个Razer Gold账户,并指定任何交易都必须使用注重隐私的加密货币门罗币进行。

Razer表示,它已经意识到潜在的违规行为,并且正在开展调查。该公司尚未确认客户的信用卡详细信息是否也被泄露。[2023/7/10 10:46:07]

1.5泛型

Move因为是静态语言,所以为了保证扩展性,Move选择了泛型编程的范式。

以Aptos为例,只要查看你持有的资产是0x1::coin::CoinStore?这样的类型,就可以知道该资产是由标准模组0x1::coin所定义。比如说Aptos的原生币AptosCoin的类型是0x1::aptos_coin::AptosCoin,意思是0x1帐号之下的aptos_coin模块所定义的AptosCoin类型,不过这个类型并没有赋予key能力,所以不能成为资源,他只提供一个种类,而这个类型可以作为泛型来使用,像是被0x1::coin::CoinStore使用。

那么,0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>?就是0x1帐号下coin模块所定义的CoinStore类型,记录地址下某种coin的资产状态。所以你的地址下任何0x1::coin::CoinStore?的资产都通用相同逻辑、有一样的行为,都是定义在0x1::coin这个模块里。

2.安全性

2.1设计安全

Move在白皮书中明确表示,Move必须拒绝不满足关键属性的程序,例如Resource安全、类型安全和内存安全。我们如何选择一个可执行的表示,以确保在区块链上执行的每个程序都满足这些属性?两种可能的方法是:

Casper Labs扩大与Google Cloud的合作关系,允许开发者在Casper上构建和扩展应用:金色财经报道,Casper Labs 宣布扩大与 Google Cloud 的合作关系,包括将其部分基础设施和企业应用程序迁移到 Google Cloud,并为 Casper Association 捐赠接收者提供访问 Google Cloud 技术的机会,帮助其在 Casper 协议上构建和扩展区块链项目和解决方案。

Google Cloud 将为 Casper Labs 的团队提供所需的基础架构,以部署和管理能够从私有和混合角度满足客户需求的区块链解决方案[2023/3/1 12:35:10]

(a)使用带有检查这些属性的编译器的高级编程语言

(b)使用低级无类型汇编并在运行时执行这些安全检查。

Move采取了介于这两个极端之间的方法。Move的可执行格式是一种类型化的字节码,它比汇编高级,但比源语言低。字节码由字节码验证器在链上检查Resource、类型和内存安全性,然后由字节码解释器直接执行。这种选择允许Move提供通常与源语言相关的安全保证,但无需将源编译器添加到受信任的计算库或将编译成本添加到交易执行的关键路径中。

除此之外,Move在设计时内置了很多安全特性,例如算数溢出、默认可见性导致的权限泄露等等。

2.2底层安全

2.2.1资源

在现实社会中,资产有两个属性难以用数字表示:

1)稀缺性。必须控制系统中资产发行的数量。必须禁止复制现有资产,而创建新资产是一项特权操作。

2)访问控制。系统参与者必须能够使用访问控制策略保护资产。

因此,Move引入了资源来表示资产。而在区块链应用中,代币就是一种资源,资源必须要存储在账户下面,且在交易过程中,资产必须要流向一个地方,要么转移到另一个地址,要么被销毁,代币不可被复制或被使用多次或被「悬挂」。此处可以把资源的操作类比成c++中的唯一指针。

BitKeep:大部分被盗资金已转至BSC上地址,呼吁用户向BNB Chain官方求助:12月26日消息,Web3多链钱包BitKeep发布公告称:“本次大规模黑客攻击事件已查明原因,是一起极其恶劣的群体盗窃事件,部分用户使用的BitKeep APK包下载被黑客劫持,即使用的钱包已不是官方发布的版本。现黑客已将大部分资金转移至BSC上的钱包地址,希望大家能在推特和社交媒体上向何一和赵长鹏以及BNB CHAIN官方寻求帮助,请大家在推特上向@heyibinance,@cz_binance传达本信息,尽快冻结黑客地址与被盗资金。”

此外,官方公布了14个BSC黑客地址。

金色财经此前报道,BitKeep发布公告称,经过团队初步排查,疑似部分APK包下载被黑客劫持,安装了被黑客植入代码的包,如用户的资金出现被盗情况,下载或者更新的应用或许是被劫持的不明版本(非官方发布版本)。[2022/12/26 22:08:11]

2.2.2先字节验证,后合约执行

Move在设计时就设计为一种可执行的字节码语言,其具有内置的安全算法和字节码验证器,可以防止许多常见错误。即Move中的合约代码要能被执行,必须先被验证,这使得合约可以免受编译器的潜在故障和可能遭遇到的攻击。Kre?imirKlas在其《SmartContractDevelopment—Movevs.Rust》中表示:「Move?的显著特征是可执行的字节码表示,为所有程序提供了资源安全保证。考虑到合约的开放部署模型,这一点至关重要——回想一下,任何合约都必须容忍与不可信代码进行任意交互。如果源码级线性可以被可执行级别上不受信任的代码违反,那么其价值就很有限。」

2.2.3静态调用

在区块链中,合约的调用方式可以分为静态调用和动态调用。若程序调用必须在运行时才能确定被调用的目标,则称该调用为动态调用;反之,在运行前即可确定被调用目标,且在运行时无法变更该目标,则称该调用为静态调用。

Move采用静态调用方式。即Move实现的合约在部署时,其执行逻辑已经被确定。那么我们可以通过静态分析字节码,得到合约所有可能路径上操作的状态,在区块浏览器或钱包里提示给用户。

印度央行将在试点基础上推出有限使用的数字货币:10月7日消息,印度储备银行 (RBI) 发布了一份50页的概念说明,用于在该国引入中央银行数字货币 (CBDC)。该文件由印度储备银行的金融科技部门准备,该部门于2022年1月创建,负责制定加密货币法规并创建中央银行数字货币 (CBDC)。

印度储备银行创建CBDC的动机包括降低实物现金管理的运营成本、促进金融包容性、提高支付系统的弹性、效率和创新能力、促进跨境支付领域的创新、向公众提供任何私人虚拟货币可以提供的用途,而不存在相关风险,在偏远地区没有电力或移动网络时,提供可用性和弹性优势。

BRI表示,在印度测试数字货币时,将很快开始针对特定用例试行电子卢比(e-rupee)。随着此类试点的范围和范围不断扩大,印度储备银行将不时继续就电子卢比的具体特点和好处进行沟通。(CoinDesk)[2022/10/7 18:42:01]

因此,钱包提供商可以在钱包设计中,在预执行合约时把合约执行后的状态变更提示给用户,让用户可以知道这个交易操作了自己的哪些重要资产,以及执行后的结果。如下图,在StarMask中的实现效果:

图源自jolestar.eth

3.Move与Solidity的比较

3.1账户模型

Solidity:

在大多数以太坊ERC-20合约中,每个地址的余额都存储在一个类型的状态变量mapping(address=>uint256)中,该状态变量存储在特定智能合约的全局存储中。其结构如下图所示:

图源:https://github.com/move-language/move/tree/main/language/documentation/tutorial

Move:

Move中,类比solidity智能合约的模块瑟吉欧没有自己存储空间的。相反,Move的「全局存储」是由地址索引的,每个地址下存储了Move模块和Move资源,而资源存储是类型到值的映射。其结构如下图所示:

图源:https://github.com/move-language/move/tree/main/language/documentation/tutorial

3.2代码存储

Solidity:?

在基于EVM的链中,所有智能合约都有一个独特的地址,称为「合约拥有地址」。合约账户与部署者账户存在于在同一级别,代码hash存储在合约账户地址中,合约部署后不与部署者地址绑定。

Move:

在基于MoveVM的链中,代码存储在Accountresource的codemodule里面。

3.3安全隔离

Solidity:

智能合约的运行环境是链的节点给构造出的沙箱环境,多个合约程序是运行在同一个进程内的不同的虚拟机沙箱。智能合约之间的调用是同一个进程内不同的智能合约虚拟机之间的调用,安全完全依赖于智能合约虚拟机之间的隔离。

Move:

Move的做法则是通过MoveVM让采用Move语言的区块链具备确定性,将合约调用放在同一个虚拟机沙盒中,通过编程语言内部的安全性对智能合约的状态进行隔离,而非依赖虚拟机进行隔离。

3.4合约升级

Solidity:

EVM中合约升级的方法是将合约数据和逻辑分析:代理合约负责转发交易到逻辑合约,并保存合约数据;逻辑合约负责实现功能逻辑。升级时,只需要重新部署新版本的逻辑合约,并将代理合约中的逻辑合约实例指向新版本逻辑合约实例即可。此时,逻辑合约升级并不会影响合约原来已有的数据。?

如下图,代码存储字段指定的是代理能合约被调用时做delegatecall的合约代码,合约升级本质上是部署一个新的逻辑合约,并改变code字段以重定向delegatecall。

Move:

Move语言中对于合约升级,其实现是在系统模块code.move中执行升级逻辑,在代码部署前检查升级策略和兼容性。在兼容性检查后,写在resource中的代码通过一个原生函数调用被替换,并将执行新的逻辑。

图片截取自:https://github.com/aptos-labs/aptos-core/blob/main/aptos-move/framework/aptos-framework/sources/code.move#L132

4.Move程序可能出现的漏洞点

1)开发者在使用Aptos、Sui,或者其他基于Move的blockchain中独特的Framework进行开发时,应保持一定程度的安全意识,确保供应链安全。

2)函数权限问题。对于一些函数调用的权限要仔细划分,因为一些关键函数会涉及到治理,严重的会影响到资金安全,针对这种函数调用需要对调用者进行鉴权。

3)业务逻辑在设计和代码实现时,均需注意其中的逻辑问题。

4)关于Move系项目,在模块升级时需要注意的点:

根据合约升级政策,代码的所有者对升级权限有完全的控制权。

代码的owner在初始部署后是不可改变的。

部署者的地址在部署后永远拥有升级权限。

原文标题:《Beosin|正式推出针对Move智能合约的安全审计服务,从安全角度看Move语言》

撰文:Beosin

来源:DeFi之道

标签:MOVEMOVOINCOImovez币归零MOVI价格TomTom Coinikecoin

BNB热门资讯
DEFI:对话地下团伙「KYC」演员 揭开伪造KYC产业链面纱_Dives Defi

一些不良的项目开发团队正利用KYC演员在Web3.0社区进行。此篇文章中,CertiK将揭露雇佣KYC演员的地下团伙是如何运作的.

1900/1/1 0:00:00
MEV:一文详解以太坊的两个基础:区块提议和MEV-Boost_onekeyghost

原文来源:@SalomonCrypto原文作者:Haym以太坊的两个基础:区块提议和MEV-Boost什么是区块提议者?什么是MEV-Boost.

1900/1/1 0:00:00
ETH:“第一大难题”:ETH 主网能否实现隐私转账_Bitcoin and Ethereum Standard Token

吴说作者:吴卓铖此前,ETH开发者TimBeiko发文称希望ETHL1能够实现隐私功能,而非依托TornadoCash等第三方应用或zkMoney等L2应用.

1900/1/1 0:00:00
GPT:如何以最有效的方式使用 GPT-3_opendao币最新价格

GPT-3,即GenerativePretrainedTransformer3,是OpenAI开发的一款强大的语言处理工具。它可用于生成类似人类的文本、回答问题以及执行各种其他与语言相关的任务.

1900/1/1 0:00:00
加密货币:金色早报 | Coinbase:2022年的收入将较2021年减少50%以上_PPL

头条▌Coinbase:2022年的收入将较2021年减少50%以上金色财经报道,加密货币交易所Coinbase表示,2022年的收入将较2021年减少50%以上.

1900/1/1 0:00:00
FTX:FTX 创始人 SBF 与 DCG 创始人 Barry 内部信全文_GENES

翻译?|?GaryMa吴说区块链FTX/SBF大家好,我对所发生的事深感抱歉。我对你们所有人的遭遇感到遗憾。我对发生在用户身上的事感到遗憾。你为FTX付出了一切,支持公司和我.

1900/1/1 0:00:00