查看原文
其他

Beosin | 正式推出针对Move智能合约的安全审计服务,从安全角度看Move语言(下)

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

在上一篇中从安全角度看Move语言(上),我们深入探讨了Move语言的特性,从安全角度介绍了Move的设计,在本文中我们将通过Move与solidity的比较来进一步加深大家对Move的理解,然后将介绍我们研究团队总结的Move项目可能出现的安全漏洞点和对应的审计点,为使用 Move 的项目方保驾护航。

1. Move 与 Solidity 的比较


1.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

1.2 代码存储


Solidity: 

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

MOVE:
在基于 MoveVM 的链中,代码存储在Account resource的code module里面。
 

1.3 安全隔离


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

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

 

1.4 合约升级


Solidity:

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

如下图,代码存储字段指定的是代理能合约被调用时做delegate call的合约代码,合约升级本质上是部署一个新的逻辑合约,并改变code字段以重定向delegate call。
 
Move:
Move 语言中对于合约升级,其实现是在系统模块code.move中执行升级逻辑,在代码部署前检查升级策略和兼容性。在兼容性检查后,写在resource中的代码通过一个原生函数调用被替换,并将执行新的逻辑。
 
图片截取自:
https://github.com/aptos-labs/aptos-core/blob/main/aptos-move/framework/aptos-framework/sources/code.move#L132

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


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

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

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

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

•根据合约升级政策,代码的所有者对升级权限有完全的控制权。
•代码的 owner 在初始部署后是不可改变的。
•部署者的地址在部署后永远拥有升级权限。

3Move 审计服务与Move审计项


Beosin安全团队正式推出针对Move智能合约的安全审计服务,旨在提前发现并协助项目方修复项目中的安全风险,保障用户与项目方的资产安全。其主要安全审计项包括:

•溢出漏洞
•重放攻击
•不安全的随机数
•交易顺序依赖
•拒绝服务
•访问控制
•权限不当
•变量覆盖
•业务设计
•业务实现
•可操纵的代币价格
•套利攻击
•Gas优化
•第三方模块安全
•能力安全
•资源安全
•升级安全
•中心化风险

Beosin作为一家总部位于新加坡的区块链安全公司,业务涵盖项目上线前的代码安全审计、项目运行时的安全风险监控、预警与阻断、虚拟货币被盗资产追回、安全合规KYT/AML等“一站式”区块链安全产品+服务,目前已为全球2000多个区块链企业提供安全技术服务,审计智能合约超过2500份,保护客户资产高达5000多亿美元。欢迎点击公众号留言框,与我们联系。

参考文献:
https://developers.diem.com/docs/technical-papers/move-paper/
https://mirror.xyz/asmp.eth/xUzqdBXewRPhLKLAYekiwU5S9uFiTnJ3f56KbkcOz-M
https://mirror.xyz/jolestar.eth/sQ0nMCO3eNig6gCzqQO7xew1mn8oUi1-rKtfZKmGlNI
https://medium.com/@kklas/smart-contract-development-move-vs-rust-4d8f84754a8f


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存