自8月以来,Sui生态系统的发展迅速。根据DefiLlama的数据,Sui的TVL已超过10亿美元,在过去两个月增长了200%,目前基于Sui构建的去中心化交易所(Dex)Cetus的日交易量已超过1.6亿美元。
10月9日,Sui的原生USDC正式上线主网,这将继续吸引更多资金流入Sui生态系统。作为Move生态系统的重要成员,Sui致力于为多种区块链应用场景提供快速且安全的交易服务。本文将结合Beosin多年的安全审计经验,帮助您了解Sui生态系统用户和开发者面临的安全挑战。
合约安全Sui使用Move作为其智能合约的编程语言。Move被设计为一种可执行字节码语言,内置安全算法和字节码验证器,并在调用合约时使用静态调用。
这种设计使得Move能够解决智能合约中的常见漏洞问题,如重入攻击、整数溢出、双重支付和潜在的编译器问题,但开发者在合约开发过程中仍有可能无意中引入漏洞。对此,Beosin在2023年推出了Move Lint工具,这是一款静态检测工具,能够自动化检测合约中的潜在安全风险并定位漏洞。
除了检测工具外,以下是开发者在开发Move合约时需要额外注意的安全问题,以提高合约的安全性:
1) 整数溢出与其他智能合约语言相比,Move在执行整数数学运算时默认会自动检查溢出问题,这可以防止大量的溢出问题。然而,仍然有两个需要注意的点:
Move语言中的位运算不会自动执行溢出检查,因为位运算本质上是对数据进行位级操作,其行为与整数运算有所不同。当Move的自动溢出检查生效时,函数执行会抛出异常。如果设计不当,可能导致项目业务无法按预期执行,从而引发DoS(拒绝服务)攻击。
2) 权限与访问控制在传递特权对象和特权函数调用时,必须小心进行身份验证,因为这些函数和对象涉及资金安全。此外,需要检查对象的类型,判断其是否是私有对象或共享对象。如果一个对象错误地从私有对象转换为共享对象,未经授权的用户可能能够访问该对象,构成潜在的安全风险。
开发者可以使用Move Prover来验证程序是否执行了明确的访问控制策略。例如,在std::offer中,我们可以看到,当接收者不在白名单中时,函数会终止:
3) 交易顺序依赖问题交易顺序依赖(TOD)指的是合约的行为可能会根据交易执行的顺序产生不同的结果,尤其是在去中心化环境中,矿工或验证者可以选择交易的执行顺序。这可能带来如前置攻击(front-running)等风险。
在Sui中,仍然由区块生产者决定交易的执行顺序,因此,如果MOVE合约的设计依赖于交易顺序进行状态变化,则仍可能受到此问题的影响。
4) Gas消耗问题在Sui链上,Move智能合约的Gas问题主要体现在合约执行所需的计算和存储成本上。随着合约复杂性和状态变化的增加,Gas消耗也随之上升。开发者需要关注优化合约逻辑,减少不必要的计算和状态更新,从而降低用户的交易成本,特别是要避免合约中的不可控迭代问题,这可能由于Gas不足而导致业务无法正常执行。
5) 计算精度目前,Move支持的数值类型是无符号整数,并不支持浮动小数,因此在除法操作中,分数部分会被截断并向下舍入,这会导致计算结果不准确,可能影响一些关键政策,导致收益损失,甚至成为安全漏洞。
针对这个问题,通常的缓解措施是提高精度,但需要注意的是,最终结果获得时需要恢复精度。
6) 对象管理在Sui区块链的Move智能合约中,对象管理是一个关键挑战,涉及对象生命周期、所有权、并发访问、序列化和存储成本等多个方面。开发者需要精确管理对象的创建、更新和销毁,以防止资源浪费和状态不一致。同时,合理设计合约逻辑,控制对象的所有权和访问权限,以及处理多个用户并发访问同一对象,都是确保智能合约安全高效运行的重要因素。
7) 业务逻辑设计与实现问题例如,在Sui DeFi项目中实施闪电贷时,攻击者可以利用闪电贷进行大额资金攻击,如价格操纵等。
在常见的AMM代币交换功能中,开发者可以使用Move Prover来验证代币数量是否正确变化:
例如,借贷协议在经历一系列存款、借款和提现操作后,应始终确保完全安全。在链上永续合约交易协议的订单簿被取消后,已下单的内容应不会导致账本发生变化等,这些都需要开发者进行检查和验证。
Sui生态系统的挑战目前,Sui的DeFi和Memecoins正在蓬勃发展,交易量和TVL(总锁仓价值)吸引了爆炸性的增长。随后,越来越多种类的诈骗和垃圾交易出现,用户需要小心避开。
网络钓鱼攻击今年,Sui生态中出现了一种名为”Suisses”的空投骗局,导致许多用户资产被盗。当用户连接钱包到Suisses网站并点击Claim时,会弹出一个交易请求,要求转移用户的资产。如果用户签署了该交易,他们会发现钱包中的所有资产已被转移。
由于Sui的特性:一切都是对象,不仅仅是用户钱包中的代币,NFT也是对象,甚至用户参与DeFi挖矿、流动性质押等活动所获得的凭证也都是对象。如果发生网络钓鱼攻击,黑客可能一次性转移用户在Sui生态系统中的所有资产。
代币诈骗在Sui生态系统中,存在大量假冒代币和诱饵池(honeypots)。尤其是在用户交易Sui生态系统中的memecoin时,他们可能会不小心陷入骗局。
在Sui创建代币时,如下所示,黑客可以使用与流行或主流代币相同的图标和名称,使得普通用户难以分辨。因此,用户在购买代币时,需要仔细检查代币的数据格式是否正确。
此外,黑客还可以在代币合约中添加一个DenyList功能,使得购买该代币的用户无法出售,从而导致用户损失。
MEV挑战MEV指的是最大可提取价值(Maximum Extractable Value)。MEV最初指的是矿工可提取价值(Miner Extractable Value),在比特币网络中,矿工通过重新排序区块中的交易,赚取超过区块奖励和网络手续费的额外收益。MEV与区块链网络的类型无关,所有区块链中都存在MEV,Sui也不例外。
Sui使用Narwhal作为内存池,将未完成的交易分配给节点,并使用Bullshark算法作为共识引擎对交易进行排序。
Sui的交易排序规则基于Gas费用。此外,由于Sui采用了结合并行和顺序的交易执行方案,共享相同AMM交易池状态的交易只能按顺序执行。因此,三明治攻击(sandwich attack)和前置交易(frontrunning)是可行的。攻击者可以通过提高Gas费用发起三明治攻击,从而导致参与DeFi交易的用户遭受损失。
免责声明:
本文转载自【beosin】,所有版权归原作者【beosin】所有。如果对转载有异议,请联系 Gate Learn 团队,他们会及时处理。责任声明:本文中表达的观点仅代表作者个人观点,不构成任何投资建议。文章的其他语言翻译由 Gate Learn 团队进行。除非另有说明,禁止复制、分发或抄袭翻译文章。