从8月开始,Sui生态发展迅速,接力Solana成为市场最备受关注的公链。据 DefiLlama 数据,Sui TVL已超过10亿美元,过去2个月上涨200%,当前其链上Dex协议Cetus日交易量超过1.6亿美元。
https://defillama.com/chain/Sui
10月9日,Sui链的原生USDC上线主网,将继续吸引更多资金进入Sui生态。作为Move系的重要一员,Sui致力于为各种区块链应用场景提供快速、安全的交易服务。本篇文章,Beosin安全研究团队将通过技术视角,结合多年的安全审计经验,帮助大家了解Sui生态用户和开发者面对的安全挑战。
合约安全
Sui 使用 Move 作为智能合约的编程语言。Move在设计之初就是一种可执行的字节码语言,其具有内置的安全算法和字节码验证器(Bytecode verifier),在合约调用时采用静态调用。
这种设计让 Move 解决了智能合约中常见的漏洞问题,如重入攻击、整数溢出、双花和编译器的潜在问题,但开发者依然有可能在合约开发中因为疏忽引入漏洞。针对此,Beosin于2023年推出Move Lint静态检测工具,可自动化发现合约中的潜在安全隐患,定位漏洞产生的位置。
除检测工具外,以下是开发者在Move合约开发中需要额外注意的安全问题,以提高合约安全性:
1) 整型溢出
相较于其它智能合约语言,Move语言在进行整数数学运算时,会默认自动检查溢出问题,这能防范大量的溢出问题,但仍有两点需要注意:
● Move语言中的位运算不会自动进行溢出检查,这是因为位运算本质上是对数据的位级别操作,其行为与整数运算的逻辑不同。
● Move的自动溢出检查生效时会导致函数执行抛出异常,如果设计不当,可能导致项目业务无法按预期执行,造成DoS攻击。
2) 权限与访问问题
对于特权函数调用的权限和特权对象的传入要仔细进行鉴权,因为这些函数和对象涉及到资金安全。此外,对象的类型也需要进行检查,以确认它们是私有还是共享对象(shared object)。如果有对象被错误地从私有对象转换为共享对象,这样可能导致未经授权的用户访问这些对象,带来潜在的安全风险。
开发者可使用Move Prover验证程序是否有执行明确的访问控制策略,例如,在std::offer中,我们可以看到,当接收者不在白名单中,该函数会被终止:
3)交易顺序依赖问题
交易顺序依赖性问题(Transaction Ordering Dependence, TOD)是指合约的行为可能会因为交易执行顺序的不同而产生不同的结果,尤其是在去中心化环境中,矿工或验证者可以选择交易的排序方式,可能带来前跑攻击(front-running)等风险。
在Sui中,仍是由区块生产者来交易的执行顺序,因此,MOVE合约如果在设计上对状态变化依赖交易的顺序,仍可能会受到这种问题的影响。
4) gas消耗问题
在 Sui 链上,Move 智能合约的 Gas 问题主要体现在合约执行时所需的计算和存储成本,随着合约复杂性和状态变化的增加,Gas 消耗也相应上升。开发者需要关注优化合约逻辑,减少不必要的计算和状态更新,以降低用户的交易费用,尤其要避免合约中出现不可控迭代次数的情况,因为这很有可能应为gas不足而无法正常执行业务。
5)计算准确度
目前Move所支持的数值类型是无符号整型,并不支持浮点型,所以在进行除法运算时会截断小数部分,进行向下舍入处理,这会导致计算结果不准确,可能会影响某些关键策略,导致收入损失,甚至成为安全漏洞。
对于此问题,通常的缓解措施是进行精度扩展,但需要注意的是在最终结果获取时需要进行精度还原。
6) 对象管理
在 Sui 区块链上的 Move 智能合约中,对象管理是一个关键挑战,涵盖对象的生命周期、所有权、并发访问、序列化和存储成本等多个方面。开发者需要精确管理对象的创建、更新和销毁,以防止资源浪费和状态不一致。同时,合理设计合约逻辑以控制对象的所有权和访问权限,以及应对多个用户并发访问同一对象的情况,都是确保智能合约安全和高效运行的重要因素。
7) 业务逻辑设计与实现问题
如Sui生态DeFi项目关于闪电贷的实现,攻击者可利用闪电贷进行价格操控等大资金攻击。此前Beosin对Move版本的闪电贷进行了研究,详情可查看《Web3技术研究 | Solidity闪电贷实现方式与Move以及Rust闪电贷实现方式有何不同?》。
在常见的AMM代币兑换功能中,开发者可使用Move Prover去验证代币数量变化是否正确:
再比如借贷协议应该在一系列的存款、借款和取款指令后,始终有充分的抵押;链上永续合约交易协议的订单簿在订单下达后又被取消的情况下,不应该出现账本变化等等,都需要开发者去检查验证。
Beosin安全团队在2022年已推出针对Move智能合约的安全审计服务,并与Sui官方开展合作,已帮助Sui发现并修复由于内存炸弹引起的拒绝服务漏洞,该漏洞可导致Sui网络中的节点因内存耗尽而崩溃。
Beosin的安全审计服务旨在提前发现并协助项目方修复项目中的安全风险,保障用户与项目方的资产安全。其主要安全审计项包括:
•溢出漏洞
•重放攻击
•不安全的随机数
•交易顺序依赖
•拒绝服务
•访问控制
•权限不当
•业务设计
•业务实现
•可操纵的代币价格
•套利攻击
•Gas优化
•第三方模块安全
•能力安全
•资源安全
•升级安全
•中心化风险
Beosin Move智能合约安全审计服务的详细信息可查看《Beosin | 正式推出针对Move智能合约的安全审计服务,从安全角度看Move语言(下)》。
生态挑战
当前,Sui的 DeFi 生态和 Meme 生态呈现出百花齐放的迹象,交易量和TVL引来了爆发式的增长。随之而来的是越来越多针对Sui生态用户的各类骗局,垃圾交易与激烈的交易竞争。
钓鱼问题
今年Sui生态出现了一个名为Suisses的空投骗局,让许多Sui生态用户的资产被盗。用户在其网站链接钱包,点击Claim后即会出现一个转移用户资产的交易请求。如果用户签署了交易,则会发现其钱包的资产被全部转走。
由于Sui的特点:一切皆对象,不仅是用户钱包里的代币、NFT是对象,用户参与DeFi挖矿、流动性质押等凭证也是对象。如果被钓鱼攻击,用户在Sui生态内的所有资产都可能会被黑客一次性转走。
代币骗局
Sui生态与其它区块链生态类似,都有假冒的代币和貔貅盘。特别是用户在Sui生态交易meme代币时,一不小心就可能中招。
如下图所示,在Sui创建代币,黑客可以定义与热门代币或是主流代币一样的图标和名字,让普通用户难以区分。因此,用户在购买代币时需检查代币的数据格式是否正确。
此外,黑客还可以在代币合约中加入黑名单(DenyList)功能,让购买该代币的用户无法卖出,造成用户的损失。
MEV挑战
MEV全称为Maximal Extractable Value,译为最大可提取价值。最初MEV指的是Miner Extractable Value(矿工可提取价值),在BTC网络中矿工通过对区块中的交易进行重新排序获得超出区块和网络手续费的奖励。但实际上 MEV 与区块链网络的种类无关。所有的公链网络实际上都存在MEV,Sui也不例外。
Sui 使用 Narwhal 作为内存池,将未完成排序和执行的交易分配给节点,使用 Bullshark 算法作为共识引擎,对交易进行排序。
Sui对于交易的排序规则是以最常见的Gas Fees进行的,又因为Sui采用并行与顺序相结合的交易执行方案,对于共享同一AMM交易池状态的交易,只能进行顺序执行。因此,Sui生态的三明治攻击/抢跑交易是存在可行性的,攻击者可通过更高的gas fee发起三明治攻击,让参与DeFi交易的用户蒙受损失。
总结
Sui在2024年持续发力,注重生态发展成为其打法之一,Sui的总锁定价值(TVL)已超过10亿美元,达到了一个新的高峰。原生稳定币的引入不仅让资金更加方便地进入Sui生态,也为Sui的PayFi赛道提供了基础。此外,Move编程语言的安全性让Sui的合约更加可靠,为用户提供了更好的资金保障。用户方面需了解Sui的特性,避免相关的钓鱼和骗局;开发者需要更好地理解Sui 智能合约,打造更为安全可靠的智能合约,推动Sui生态的健康发展。
Beosin作为全球最早一批从事形式化验证的区块链安全公司,主打”安全+合规“全生态业务,在全球10多个国家和地区设立了分部,业务涵盖项目上线前的代码安全审计、项目运行时的安全风险监控与阻断、被盗追回、虚拟资产反洗钱(AML)以及符合各地监管要求的合规评估等“一站式”区块链合规产品+安全服务。欢迎点击公众号留言框,与我们联系。