近日,由 Sui 基金会,Tencent Cloud,Numen Cyber 联合主办,Suiet,Somis,Souffl3 提供支持的 Sui 生态工作坊及交流会顺利于香港举行。
Numen Cyber 联合创始人兼首席安全研究员 Nolan Wang 参与交流会,并以 Move 安全性为主题,从现有智能合约语言与 Move 语言对比,Move 语言的特点与优势,Move 智能合约漏洞类型分析梳理等角度进行了分享。

智能合约是保障区块链安全运行的重要组件之一,一般有两种实现形式。
一是使用既有编程语言并通过虚拟机运行,二是通过从头构建新的编程语言和虚拟机实现。但又因智能合约与传统项目有着截然不同特点,即智能合约是一个狭窄的任务集,需要的是少量且趋于完美的代码,以保证背后资金的安全性,传统语言(JavaScript,Python,Rust,WASM 等)与智能合约的适配性并不是很好。
那什么优良的智能合约该是什么样子的呢?Nolan 给出了他的答案:智能合约语言需要自定义资产、所有权、访问控制的安全抽象等功能,不需要超越数字资产变成范围之外的功能。Move 虽然是较为年轻的编程语言,但也是目前最适用于智能合约的语言之一。Nolan 将行业内同样流行的 Solidity 语言和 Move 语言进行了对比。可以看出 Solidity 的对象抽象能力有限(由于并不丰富的原始数据类型,以及对结构体对象没有良好的支持),更多时候是面向过程来去编写合约功能。而 Move 是专注于资产和权限控制的区块链编程语言,并且对象抽象能力强,强调安全性和正确性,采用资源导向的设计,资产可以作为对象来相互转移,并不像 Solidity 的资产,必须是与账户强绑定的关系。如果回顾 Move 的历史,可知 Move 最早是为 Meta(Facebook)的 Diem 项目开发,据说当时没有一种语言具备稀缺性、确定性和可验证性的特性,于是 Move 诞生了。
作为基于 Rust 的编程语言,Move 是最早的关于如何设计语言以适应类型系统、静态类型和编译时检查等问题的语言。
又因 Diem 的项目定位,Move 着重强调安全性,能够提供是代码验证器和 VM 级别的保护。
Nolan 表示,通过字节码验证,Move prover,资源抽象,线性类型系统等设置,Move 语言获得了大幅度安全性的提升。

同时,Nolan 在研究中得出了关于 Move 语言的 7 个特点,分别是:
1.没有动态调用(no re-entrancy);
2.不会混淆变量别名和可变 / 不可变性(借鉴 Rust 语言特性);
3.强制类型 / 内存 / 资源安全(通过字节码校验);
4.不存在整数溢出漏洞;
5.Move Prover 形式化验证确保合约的安全;
6.没有 modifier;
7.通过线性逻辑语义来自定义资源类型:资源永远不能被复制或式删除,只能移动。
在 Nolan 看来,Move 是真正的 Game Changer,是面向真实数字资产的程序语言(RDAO Real Digital Assets Oriented Program Language)。
在分享了 Move 语言的特点与优势后,Nolan 分享了两个由 Numen 检测到的关于 Aptos MoveVM 的整数溢出漏洞。
MoveVM 和 EVM 虚拟机一样,都是把源代码编译成字节码,然后在虚拟机中执行。
其中一个漏洞出现在 Move 执行模块中,对于链上节点而言,如果执行字节码代码,将引发 DoS 攻击,严重时可导致 Aptos 网络完全停止,窃取资产,造成不可估量的损失,严重影响节点的稳定性(点击查看)。
第二个漏洞发生在 reference_safety,Move 语言在执行字节码之前会验证代码单元的 4 个步骤之中(点击查看)。
Numen 在发现两个漏洞后第一时间报告给了官方,目前两个漏洞皆已修复。

Nolan 列举的 Move 合约部分漏洞
Nolan 总结道,“综合上述漏洞的客观存在,我们可以看到在今天的数字世界中,并不存在绝对安全的语言。每个创新技术都伴随着新的安全威胁,在 Web3 世界尤甚。我们必须做更多的安全打算来保护我们的数字资产和隐私。"
Numen Cyber 联合创始人兼首席安全研究员,曾任职华为、奇虎 360 做安全研究,在 ISC2018、腾讯 CSS2019 等安全大会担任分享嘉宾。善于漏洞挖掘,安全技术研究,发现过 Windows,iOS/macOS 等系统漏洞,浏览器 以及 L1,smartcontract 等 web3 漏洞在内的众多漏洞。https://github.com/NumenCyberhttps://twitter.com/@numencyberhttps://medium.com/@numencyberlabshttps://www.linkedin.com/company/numencyber/