nirxnjxnCodeS/contract-gaurd
GitHub: nirxnjxnCodeS/contract-gaurd
面向 SUI Move 智能合约的静态安全分析器,结合 Claude AI 增强提供漏洞检测与修复建议,支持 MCP 服务器和 VS Code 扩展两种使用方式。
Stars: 0 | Forks: 0
# move-guard
**SUI Move 智能合约安全分析器** — 静态分析 + Claude AI 增强,以面向 AI 助手的 MCP 服务器和面向本地开发的 VS Code 扩展形式提供。
能够捕获 capability 泄露、缺失的访问控制、未检查的 coin 数量、共享对象生命周期缺陷以及升级回归问题 — 然后会解释*确切*的修复方法。
## 它的功能
```
analyze_move_file vulnerable.move
→ Found 6 issues: 2 critical, 2 high, 1 medium, 1 low
→ Claude: "Remove AdminCap from return type; transfer directly in init() …"
```
```
diff_move_files v1.move v2.move
→ risk_verdict: breaking
→ "Any address can now drain funds — no authentication required."
→ "DO NOT deploy."
```
## 两种使用方式
| 模式 | 适用对象 | 方式 |
| --- | --- | --- |
| **MCP 服务器** | 使用 Claude Code 或任何 MCP 客户端进行 AI 辅助开发 | `npx move-guard` |
| **VS Code 扩展** | 内联分析、升级差异对比、pre-commit 钩子 | 从 VSIX 构建 |
## 快速开始 — MCP 服务器
**1. 设置您的 API 密钥:**
```
cp .env.example .env
# 编辑 .env → ANTHROPIC_API_KEY=sk-ant-...
```
**2. 添加到 Claude Code** (`~/.claude/settings.json` 或 Claude Desktop 配置中):
```
{
"mcpServers": {
"move-guard": {
"command": "npx",
"args": ["-y", "move-guard"],
"env": { "ANTHROPIC_API_KEY": "" }
}
}
}
```
**3. 询问 Claude:**
## 快速开始 — VS Code 扩展
```
cd vscode-extension && npm install && npm run build
npx vsce package --no-dependencies
code --install-extension move-guard-vscode-0.1.0.vsix
```
在“设置”中搜索 **Move Guard** 以设置您的 API 密钥。
## MCP 工具(共 9 个)
### 静态分析
| 工具 | 功能 |
| --- | --- |
| `analyze_move_file` | 按路径分析 `.move` 文件 |
| `analyze_move_source` | 将原始 Move 源码作为字符串进行分析 |
| `check_package` | 扫描包目录中的每个 `.move` 文件 |
### 升级差异对比
| 工具 | 功能 |
| --- | --- |
| `diff_move_files` | 安全差异对比:旧 `.move` 与新 `.move` 文件 |
| `diff_move_sources` | 功能同上,接收原始源码字符串 |
| `diff_package_upgrade` | 对比整个包目录的差异 |
### 提交时智能分析
| 工具 | 功能 |
| --- | --- |
| `analyze_git_diff` | 针对指定 git 引用范围的安全报告 |
| `analyze_staged_changes` | 分析暂存区的更改(pre-commit 钩子) |
| `generate_pre_deploy_report` | 完整的差异对比 + 静态分析组合 |
**MCP 资源:** `move-guard://docs/checks` — 包含所有检查项及其原理的完整 Markdown 参考文档。
## 静态分析检查
| ID | 严重级别 | 捕获内容 |
| --- | --- | --- |
| `capability_leak` | **critical** | 返回 `AdminCap`、`TreasuryCap`、`UpgradeCap` 等的公共函数 — 任何调用者都可获得提升的权限 |
| `missing_access_control` | **high** | 调用 `borrow_mut` 但没有 capability 参数或发送者检查的 `public entry` 函数 |
| `unchecked_coin_value` | **high** | 使用 `coin::split` / `coin::take` 时附近没有 `assert!` 或边界检查 — 易受粉尘攻击和资金池耗尽影响 |
| `shared_object_deletion` | **critical** | 对共享对象执行 `freeze_object` 或 `object::delete` — 在 SUI 主网上是不可逆的 |
| `clock_dependency` | **medium** | 存在 `&Clock` 参数但未提供合理性说明 — 验证者有 ±2 秒的影响力 |
| `public_transfer_misuse` | **medium** | 对没有 `store` ability 的对象使用 `transfer::public_transfer` — 导致运行时中止 |
## 升级差异检查
| 检查项 | 风险 | 捕获内容 |
| --- | --- | --- |
| 可见性降级 | **breaking** | 函数从 private / `public(friend)` 扩大到了 `public entry` |
| 移除访问控制 | **breaking** | 从现有函数中移除了 `assert!` / capability 参数 |
| 新增未受保护的修改操作 | **high_risk** | 新增了没有身份验证的 `borrow_mut` 调用 |
| 结构体字段变更 | **high_risk** | 增加/删除/重排字段会破坏链上对象布局 |
| 函数被删除 | **high_risk** | 公共函数被删除 — 会导致所有调用方中断 |
| 新增返回 capability 的函数 | **high** | 新增的提权路径 |
| 事件发送被移除 | **medium** | 静默状态更改 — 增加审计难度 |
| 新增访问控制 | **improvement** | 标记为审计追溯的积极安全变更 |
## 提交智能检查
| 检查项 | 捕获内容 |
| --- | --- |
| 引入新风险 | 仅针对新增行的静态发现 — 过滤掉原有问题 |
| 风险已解决 | 在此次提交中被移除的发现 — 追踪安全债务的偿还 |
| Gas:新增循环 | `while`/`loop`/`for..in` — 可能引发 gas 消耗爆炸 |
| Gas:向量增长 | 热路径中的 `vector::push_back` / `vector::append` |
| Gas:动态存储写入 | `dynamic_field::add` / `table::add` — 每次写入的存储成本 |
| 对象模型:共享自有对象 | 对非新创建的对象执行 `share_object` — 属于永久性操作 |
| 对象模型:修改冻结对象 | 在 freeze 附近调用 `borrow_mut` — 必定导致运行时中止 |
| 对象模型:所有权混乱 | 从共享状态中提取后执行 `transfer` |
| 测试覆盖盲区 | 新增了没有关联 `#[test]` 的 `public entry fun` |
## 示例输出
**静态分析 (`analyze_move_file`):**
```
{
"summary": "Found 6 issues: 2 critical, 2 high, 1 medium, 1 low, 0 info.",
"risk_level": "critical",
"findings": [
{
"id": "CAP-LEAK-29",
"title": "Capability leak in public function 'get_admin_cap'",
"severity": "critical",
"category": "capability_leak",
"line_hint": 29,
"recommendation": "Remove AdminCap from return type. Transfer it to a trusted address inside init() using transfer::transfer(cap, tx_context::sender(ctx)). Gate all admin operations behind a &AdminCap parameter instead."
}
]
}
```
**升级差异对比 (`diff_move_files`):**
```
{
"risk_verdict": "breaking",
"plain_english": {
"what_broke": "All treasury protection was removed — anyone can now drain funds, create unlimited storage objects, and manipulate balances.",
"should_you_deploy": "Absolutely not. Revert all changes immediately."
}
}
```
## VS Code 扩展
### 命令
| 命令 | 触发方式 |
| --- | --- |
| **Move Guard: Analyze File** | 右键点击 `.move` · 编辑器上下文菜单 · 点击状态栏 |
| **Move Guard: Analyze Package** | 右键点击文件夹 · 命令面板 |
| **Move Guard: Diff Upgrade** | 命令面板 — 先选择旧 `.move`,再选择新 `.move` |
| **Move Guard: Analyze Staged Changes** | 命令面板 — `git diff --cached` |
| **Move Guard: Install Pre-commit Hook** | 命令面板 — 写入 `.git/hooks/pre-commit` |
| **Move Guard: Uninstall Pre-commit Hook** | 命令面板 |
### 状态栏
- `$(shield) Move Guard` — 尚未分析
- `$(shield-check) Move Guard` — 安全 / 低严重级别
- `$(shield-x) Move Guard` *(红色)* — 存在 critical 或 high 级别发现
### 设置
| 设置项 | 默认值 | 描述 |
| --- | --- | --- |
| `moveGuard.anthropicApiKey` | `""` | API 密钥(依次回退到 `ANTHROPIC_API_KEY` 环境变量和 `.env` 文件) |
| `moveGuard.autoAnalyzeOnSave` | `false` | 保存时自动分析 |
| `moveGuard.blockCommitOnCritical` | `true` | 当安装了钩子时,阻止存在 critical 级别发现的提交 |
## Pre-commit 钩子(手动设置)
```
#!/bin/sh
REPORT=$(echo "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"analyze_staged_changes\",\"arguments\":{\"repo_path\":\"$(pwd)\"}}}" \
| npx move-guard 2>/dev/null)
VERDICT=$(echo "$REPORT" | node -e \
"const d=require('fs').readFileSync('/dev/stdin','utf8');
const r=JSON.parse(d.trim().split('\n').pop());
console.log(JSON.parse(r.result.content[0].text).deploy_recommendation)")
if [ "$VERDICT" = "DO_NOT_DEPLOY" ]; then
echo "[move-guard] BLOCKED: critical security issues in staged .move changes."
exit 1
fi
```
或者通过 VS Code 命令面板使用 **Move Guard: Install Pre-commit Hook**。
## 仓库结构
```
move-guard-workspace/
├── packages/
│ ├── core/ @move-guard/core — shared analyzer (CJS)
│ └── mcp/ move-guard — MCP server (ESM, npx-runnable)
├── vscode-extension/ VS Code extension (CJS)
├── .env.example API key template
└── demo.sh Smoke-test all three tool groups
```
## API 密钥加载顺序
1. `moveGuard.anthropicApiKey` VS Code 设置项 *(仅限扩展)*
2. 工作区根目录中的 `.env`
3. 主目录 (`~/`) 中的 `.env`
4. Shell 环境中已存在的 `ANTHROPIC_API_KEY`
当未找到密钥时,静态分析仍会运行 — AI 增强将被跳过,并在每个发现的 `recommendation` 字段中添加说明。
## 环境变量
| 变量 | 描述 |
| --- | --- |
| `ANTHROPIC_API_KEY` | 用于 Claude AI 增强的 Anthropic API 密钥。完整分析时必需;仅静态分析模式下可选。 |
标签:AI辅助开发, CISA项目, Claude AI, DevSecOps, Git预提交钩子, MCP服务器, MITM代理, Move智能合约, SUI区块链, Web3安全, 上游代理, 云安全监控, 代码安全, 代码差异分析, 共享对象生命周期, 升级回归测试, 威胁情报, 开发者工具, 智能合约审计, 漏洞枚举, 能力泄露, 自动化攻击, 访问控制缺失, 静态分析