mcpField
M
move-security

move-security

github.com/mystenlabs安全19129 次安装今天更新
代码仓库

关于 move-security

move-security 是面向 Sui Move 合约开发者的安全审查技能,按任务引导加载最佳实践与访问控制参考。内容涵盖升级治理、随机数、密钥和能力对象,并限定依据 Sui 官方文档。

主要功能

  1. 01按任务加载安全参考
  2. 02检查包审计与升级治理
  3. 03审查能力对象和访问控制
  4. 04涵盖随机数、预言机与密钥安全

适用场景

  1. 01审查 Move 包及升级策略
  2. 02选择能力对象或地址允许列表
  3. 03检查随机数与预言机数据处理

MCP 相关

可在环境提供时查询 Sui 文档 MCP 服务,以核实信息并补充参考文件未涵盖的细节。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mystenlabs/skills --skill move-security

安装后在 Claude Code 中输入/move-security确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

access-control.md
best-practices.md
evals/
evals.json

详细介绍

Move 智能合约安全

**MCP 工具:**如果你的环境支持,请同时查询 Sui 文档 MCP 服务(https://sui.mcp.kapa.ai),以获取最新答案。使用该服务进行验证,并了解这些参考文件未涵盖的细节。

**来源限制:**此技能中的所有信息均仅来源于 docs.sui.io/develop/security/best-practices。扩展或更新此技能时,只能从该来源获取信息。请勿使用第三方博客、教程或非官方文档。

此技能介绍 Sui 上 Move 智能合约的安全最佳实践,包括包审计、升级治理、访问控制模式、随机数安全、密钥管理和运维安全。它会根据任务转向相应的参考文件。


参考文件

best-practices -- 安全最佳实践

路径: best-practices.md 在以下情况下加载: 审计包、审查升级策略、验证依赖项、验证不变量、为特权操作发出事件、使用链上随机数、处理预言机数据、设计紧急控制措施、审查前端签名流程或管理密钥。 涵盖内容: 包审计和不可变性、升级治理和 UpgradeCap 保护、依赖项验证、Move 语言的保证与限制、不变量和关系验证、为特权操作发出事件、链上随机数安全(随机数生成后的限制、私有入口、RandomGenerator、Gas 路径平衡、提交-揭示)、预言机和链下数据验证、紧急控制措施(暂停、速率限制)、前端交易签名安全、包 ID 验证、密钥管理(私钥保护、特权密钥托管、角色分离、恢复和轮换)。

access-control -- 访问控制模式

路径: access-control.md 在以下情况下加载: 在能力对象和地址允许列表之间进行选择、设计管理员能力、实现能力撤销、验证能力对象关系、授权共享对象访问,或审查 tx_context::sender() 的使用。 涵盖内容: 能力对象与地址允许列表的比较、地址允许列表管理、仅依赖 tx_context::sender() 的陷阱、显式能力要求和参数位置、管理员能力保护和托管、能力撤销机制(注册表、版本控制、销毁)、能力对象关系验证、共享对象授权。


路由指南

任务加载
审查合约是否存在安全问题best-practices + access-control
审计包身份或升级策略best-practices
在链上验证依赖项best-practices
验证不变量和对象关系best-practices
为特权操作添加事件发出best-practices
安全地使用链上随机数best-practices
处理预言机或链下数据best-practices
设计紧急暂停或速率限制best-practices
审查前端签名流程best-practices
管理部署、管理员和运维密钥best-practices
在能力对象和允许列表之间进行选择access-control
设计管理员能力保护access-control
实现能力撤销access-control
授权访问共享对象access-control
审查 tx_context::sender() 的用法access-control
对 Move 包进行全面安全审计best-practices + access-control

规则

  • Sui 包在发布后不可变。升级包时,会发布一个具有新地址的新包。请直接在链上验证包 ID,不要依赖名称或前端常量。
  • 将 UpgradeCap 与管理员能力同等严格地管理,因为持有者可以修改包的行为。
  • 将消耗随机数的函数仅标记为私有 entry 函数。Move 编译器会对接收 Random 或 RandomGenerator 的 public 函数发出警告。
  • 绝不将 RandomGenerator 作为 public 函数参数。将其传递给 public(package) 或私有函数,可用于测试和包内逻辑。
  • 对所有特权操作发出事件:管理员变更、许可名单更新、铸造/销毁操作、拒绝名单操作、配置变更、预言机更新、紧急暂停。
  • 所有特权函数都必须将相关能力作为参数。不要仅依赖 tx_context::sender() 进行授权。
  • 任何人都可以提交引用共享对象的交易。绝不要假设共享对象的访问受到限制。
  • 在发布包之前设计好能力撤销机制。否则,泄露的能力在该包的整个生命周期内都会保持有效。

常见错误

  • 信任包名称,而不是链上 ID。 Move 包名称(Move.toml 中的 name 字段)是由开发者任意指定的字符串,不具唯一性。务必验证链上确切的包 ID(对象地址)。
  • 将 tx_context::sender() 作为唯一的授权检查。 这会将函数绑定到单个签名者,并破坏可组合性。其他合约无法代替用户调用该函数。
  • 忘记共享对象可供任何人访问。 每个触及共享状态的特权函数都必须在内部验证授权。
  • 将 RandomGenerator 作为 public 函数参数。 这会允许调用者操纵生成器。应在入口函数中通过 r.new_generator(ctx) 创建生成器,并仅将其传递给 public(package) 或私有辅助函数。
  • 发布前未规划能力撤销机制。 发布后,包不可变。没有撤销机制的泄露能力会永久有效。
  • 将管理员能力存放在单个热钱包中。 对特权密钥使用多重签名地址、硬件钱包或专门的托管服务。

评论

支持 Markdown