SuperAPI AI 工具集

security-audit

安全与审计

查看项目

更新于 10-15 13:58

技能介绍

用途

该技能用于在部署前对 Move 合约执行系统性安全审计,采用覆盖七大类别的检查清单,要求每一项都通过后才能部署。其核心前提是:安全不可妥协,用户资金依赖正确的实现。

主要能力

审计按顺序覆盖以下类别:

  1. 访问控制——谁可以调用函数?
  2. 输入校验——输入是否被检查?
  3. 对象安全——对象模型是否正确使用?
  4. 引用安全——是否暴露了危险的引用?
  5. 算术安全——是否防止了溢出/下溢?
  6. 泛型类型安全——phantom 类型是否正确使用?
  7. 测试——是否达到 100% 覆盖率?

各分类的具体核查点包括:

  • 访问控制:所有 entry 函数验证 signer 权限;使用 object::owner() 检查对象所有权;管理员函数检查调用者为管理员;函数可见性遵循最小权限;无未经检查就修改状态的 public 函数。
  • 输入校验:数值输入检查为零、检查上限;向量长度校验;字符串长度检查;地址校验;类枚举值范围检查。
  • 对象安全:ConstructorRef 绝不从 public 函数返回;所有引用(TransferRef、DeleteRef、ExtendRef)在构造函数中生成;对象 signer 仅在构造期间或配合 ExtendRef 使用;除非明确需要,否则禁用无门控转移;DeleteRef 仅为真正可销毁的对象生成。
  • 引用安全:public 函数签名中不暴露 &mut 引用;关键字段防止 mem::swap;最小化可变借用的作用域。
  • 算术安全:加法检查溢出;减法检查下溢;防止除零;乘法检查溢出。
  • 泛型类型安全:使用 phantom 类型作为类型见证,如 struct Vault<phantom CoinType>;泛型约束恰当,如 <T: copy + drop>;不可能发生类型混淆。
  • 测试:达到 100% 行覆盖率;所有错误路径用 #[expected_failure] 测试;访问控制用多个 signer 测试;输入校验用无效输入测试;覆盖边界情况(最大值、空向量等)。

使用方式

按步骤执行:先运行安全清单,逐类审查;然后依次进行访问控制、输入校验、对象安全、引用安全、算术安全、泛型类型安全与测试审计。

自动化检查命令:

aptos move compile
aptos move test
aptos move test --coverage
aptos move coverage summary

预期覆盖率为 100.0%。

人工检查包括:搜索 entry fun 验证 signer 检查;搜索 borrow_global_mut 验证使用前授权;搜索函数参数验证校验;搜索 ConstructorRef 验证从不返回;搜索 create_object 验证引用正确生成;搜索 +、-、/ 验证溢出、下溢与除零检查。

审计完成后按模板生成报告,包含摘要、各分类结果、建议与结论。

适用场景

适用于 Move 合约部署前的安全审查,尤其是涉及用户资金、对象所有权、管理员权限与算术运算的合约。相关技能包括 generate-tests、write-contracts、deploy-contracts。

限制

审计过程中绝不读取 ~/.aptos/config.yaml 或 .env 文件(含私钥),绝不显示或重复审计中发现的私钥值。绝不跳过部署前安全审计,绝不忽略失败的安全检查,绝不在测试覆盖率低于 100% 时部署,绝不批准存在严重漏洞的代码,绝不仓促进行安全审查。