bigdevxrd/scrypto-audit-kit

GitHub: bigdevxrd/scrypto-audit-kit

针对 Radix Scrypto 智能合约的 LLM 驱动型审前分析工具集,结合静态规则与 AI 检查自动输出结构化审计报告。

Stars: 0 | Forks: 0

# scrypto-audit-kit [![lint](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/1d28adc0c2082813.svg)](https://github.com/bigdevxrd/scrypto-audit-kit/actions/workflows/lint.yml) [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) [![Scrypto · Radix](https://img.shields.io/badge/Scrypto-Radix-052CC0)](https://docs.radixdlt.com/docs/scrypto-1) [![status: alpha](https://img.shields.io/badge/status-alpha-orange.svg)](#limitations--read-this-before-relying-on-the-output) [![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md) 针对 Radix 网络上 [Scrypto](https://docs.radixdlt.com/docs/scrypto-1) blueprints 的审前测试工具集。它运行 **混合分析** —— 确定性的静态规则加上基于精选检查清单和参考模式的 LLM 检查 —— 并生成可供人类审计员使用的审计报告(markdown + JSON)(或用于自行修复问题)。仅静态检查是免费的,且不需要 API key。 这是一个**审前**工具,而不是正式的审计。它捕获的是细心的审查者在初次阅读时会发现的问题,以便让付费的审计员把时间花在更难、需要二次阅读的发现上。**在主网部署之前,它不能代替人工审计。** ## 它的功能 对于你指定的每个 scrypto package,该工具集会: 1. 运行 **确定性的静态检查**(免费,无需 API) —— 一套精选的高精度 Scrypto 规则(无限制抽取、无 owner 的 globalize、自轮换角色、浮点数、硬编码地址等)。 2. 将 package 的源代码(`Cargo.toml` 以及 `src/` 和 `tests/` 下的所有内容)加载到 [aider](https://aider.chat) 会话中。 3. 将漏洞**检查清单**(11 个类别 —— 授权、重入、小数位、资源处理、时间、状态机、外部调用、升级、预言机、滑点、配额)和**参考模式**目录(Ignition、CaviarNine HyperStake、subintents、策略金库威胁模型、常规 scrypto 知识)作为只读上下文加载。 4. 要求 Claude Sonnet 4.6 生成一份结构化的审计报告 —— 总结、发现(Critical → Info)、检查清单覆盖情况检查、模式一致性检查、测试覆盖率缺口,以及留给人类审计员的疑问。 5. 合并这两个步骤的结果,并将 markdown 报告写入 `audit-reports/--.md`,**同时**生成一个可供机器读取的 `report.json`([schema](schema/audit-report.schema.json)),供 agent 和 CI 检测关卡使用。 该工具集在**设计上是只读的**。它只生成报告;不会编辑你的 blueprint。对审计级代码的修改必须通过单独的、人工监督的会话进行。 ## 快速开始 ``` pip install scrypto-audit-kit # the deterministic toolkit + MCP server, no API key needed # ...或 clone 完整的 LLM audit harness (audit.sh): git clone https://github.com/bigdevxrd/scrypto-audit-kit ``` pip 包为你提供免费的静态分析、测试脚手架生成、attestation bridge 以及 MCP 服务器 —— 它们可以被导入,也可作为 `sak-*` 命令使用。完整的 `./audit.sh`(LLM 检查清单检查)包含在克隆的代码库中。**[docs/quickstart.md](docs/quickstart.md)** 详细介绍了这三个层级的端到端流程。 ### 环境要求(适用于完整的 `./audit.sh` 审计) - [aider](https://aider.chat)(`pip install aider-chat` —— 0.86 或更高版本) - 一个 Anthropic API key(该工具集默认使用 Claude Sonnet 4.6 —— 可在 获取) - bash, awk, find(macOS / Linux 标准配置) - `python3` —— 可选;仅在需要生成可供机器读取的 `report.json` 时需要(没有它,markdown 报告也能正常运行) 可以通过以下三种方式之一提供该 key: ``` # 1. 在你的 shell 中 export(推荐用于 CI) export ANTHROPIC_API_KEY=sk-ant-... # 2. 将 AIDER_ENV_FILE 指向现有的 env 文件 AIDER_ENV_FILE=~/some/.env ./audit.sh /path/to/package # 3. 在 kit 目录中放置一个 .env 文件(gitignored) echo "ANTHROPIC_API_KEY=sk-ant-..." > .env ``` 使用以下命令验证: ``` make check-deps ``` ### 运行审计 ``` git clone https://github.com/bigdevxrd/scrypto-audit-kit cd scrypto-audit-kit chmod +x audit.sh ./audit.sh /path/to/your/scrypto/package # 或: make audit TARGET=/path/to/your/scrypto/package ``` 目标必须是一个 scrypto package 目录(包含 `Cargo.toml` 和 `src/lib.rs`)。该工具集将读取 `src/` 和 `tests/` 下的所有内容。 报告会存放在 `audit-reports/--.md` 中。报告已被 gitignore 忽略 —— 请通过其他方式分享它们,不要提交它们。 ### 示例 ``` ./audit.sh ~/scrypto/my-vault [pre-flight] cargo check (release wasm)... [pre-flight] compile OK ==> scrypto-audit-kit target: scrypto / my-vault path: /home/me/scrypto/my-vault model: claude sources: 3 files refs: 6 files (read-only) report -> audit-reports/scrypto-my-vault-2026-05-11.md [aider runs ...] ==> done. report: audit-reports/scrypto-my-vault-2026-05-11.md ``` ### 选择模型 默认模型是 Claude Sonnet 4.6。可以使用 `--model` 标志来选择分析模型: ``` ./audit.sh --model claude # default — Sonnet 4.6, best pattern depth ./audit.sh --model deepseek # cheaper broad scan (needs DEEPSEEK_API_KEY) ./audit.sh --model both # DeepSeek broad pass, then Claude deep pass, # with a cross-model confidence summary ``` `both` 会优先运行 DeepSeek 以扩大覆盖范围,然后将其发现作为上下文提供给 Claude,并将两个模型都认同的发现标记为 HIGH(高)置信度。当你需要对高风险的 blueprint 提供双重确认时,请使用此选项。 ### 免费层级:确定性静态分析 每次审计都会运行静态检查,你也可以*单独*运行它,**无需 API key、无需 aider、也无需工具链**: ``` ./audit.sh --static-only # free, instant, deterministic ``` 它应用了一套精选的高精度 Scrypto 规则 —— 具有注释/字符串感知能力,因此代码规则不会匹配注释或字符串字面量 —— 并会写入相同的 `report.json`。可以使用 `// sak:allow ` 注释来忽略某项发现;在全量运行时添加 `--no-static` 可以跳过此检查。请参阅 [docs/static-analysis.md](docs/static-analysis.md) 了解规则列表以及如何添加新规则。 ### 在内置示例上尝试 该代码库附带了一个故意包含漏洞的 blueprint,因此你无需编写任何代码即可看到真实的输出 —— 静态层级不需要 API key: ``` ./audit.sh --static-only examples/vulnerable-vault # free; drop --static-only for the full hybrid run ``` 预期的结果已提交在其旁边 —— [`examples/vulnerable-vault.pre-audit.md`](examples/vulnerable-vault.pre-audit.md)(供人类阅读)和 [`.json`](examples/vulnerable-vault.pre-audit.json)(供机器读取)。其中的每一个 `file:line` 都是准确的,因为这些 bug 是刻意植入的。 ### 机器可读输出 除了 markdown 之外,该工具集还会写入符合 [`schema/audit-report.schema.json`](schema/audit-report.schema.json) 的 `report.json` —— 包含稳定的 ID(来自 LLM 的 `F-###`,来自静态检查的 `S-###`,每个 ID 都标有其 `source`)、严重程度、完整的检查清单覆盖情况,以及来源信息块(工具集版本、模型、检查清单版本以及所分析源代码的 sha256)。这是供 agent、CI 关卡以及(未来的)链上 attestation 使用的;markdown 只是它的一种渲染形式。 ### 持续集成与徽章 在每个 PR 上运行审前检查并显示状态徽章 —— 完整设置请见 [docs/ci.md](docs/ci.md)。简而言之,调用可重用的工作流即可: ``` jobs: scrypto-pre-audit: uses: bigdevxrd/scrypto-audit-kit/.github/workflows/pre-audit.yml@main with: package: packages/my-blueprint fail-on: high secrets: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} ``` 它会进行编译、审计、上传报告,并在发现 High/Critical 问题时判定失败 —— 这是一个诚实的“审前检查通过”的信号,而不是安全保证。 ### 在 agent 中使用它(MCP + Claude Code) 该工具集附带了一个 **MCP 服务器**,因此 agent 可以将审前检查作为工具运行,并指导你完成 **审计 → 修复 → 重新验证** 流程: ``` pip install "mcp[cli]" claude mcp add --transport stdio scrypto-audit-kit -- python3 "$PWD/bin/mcp_server.py" ``` 工具包括:`static_scan`(免费)、`audit_package`、`propose_tests`、`attestation_payload`、`get_findings`、`show_finding_source`、`reaudit_diff`、`gate`、`get_checklist`。此外还有一个 Claude Code 技能(`/scrypto-pre-audit`)和一份适用于任何 agent 的 [AGENTS.md](AGENTS.md) 指南。完整设置 —— 包括审计→修复→验证循环 —— 请见 [docs/agents.md](docs/agents.md);这九个工具及其正式契约请见 [docs/mcp-tools.md](docs/mcp-tools.md)。 ### 在此基础上构建 —— Python SDK `pip install scrypto-audit-kit` 使得确定性核心代码可被导入,且没有任何必需的 依赖项: ``` from scrypto_audit_kit import static_analysis, sak_lib findings = static_analysis.analyze_package("path/to/package") # free, no API key verdict = sak_lib.gate_verdict(sak_lib.build_report(findings), "high") ``` 完整的 API、进程内的九个工具以及 `sak-*` 控制台脚本请见 [docs/sdk.md](docs/sdk.md)。三个可运行的示例 agent —— 免费层级的 CI 关卡、 审计→修复→验证循环,以及 MCP 客户端 —— 位于 [examples/agents/](examples/agents/)。 ### 生成测试,在链上 attest - **属性测试。** `propose_tests`(或 `python3 bin/gen_tests.py `)会为覆盖率缺口生成可编译的 `#[ignore]` `scrypto-test` 脚手架 —— 授权的异常路径、正常执行路径、数值不变式 —— 因此填补这些缺口就如同填空一样简单。 - **链上 attestation (L3)。** `attestation_payload`(或 `python3 bin/attest.py `)将报告转换为 Radix 交易清单,通过 [attestation/](attestation/) registry blueprint 在账本上记录 attestation —— 绑定到你确切的源代码哈希(确定性锚点)。这是一种覆盖率记录,而非安全保证,并且对于 LLM 层级来说,其字节不具备可复现性(参见 [attestation/README.md](attestation/README.md))。 ## 工具集内容 ``` scrypto-audit-kit/ ├── audit.sh The harness — wraps aider with the right flags + context. ├── Makefile Convenience targets (audit, lint, test, check-deps). ├── pyproject.toml Pip packaging — importable SDK + sak-* console scripts. ├── VERSION Kit version, stamped into every report. ├── VISION.md / ROADMAP.md The trust-ladder strategy + the live phase checklist. ├── AGENTS.md How an agent should drive the kit (audit → fix → verify). ├── .mcp.json MCP server config (auto-wires the tools in Claude Code). ├── .aider.conf.yml Tuned config: model=Sonnet 4.6, no editor/commits, cache on. ├── prompts/ │ ├── audit.md Auditor-role prompt + report structure (incl. the JSON appendix). │ └── checklist.md Eleven vulnerability classes with concrete questions per class. ├── references/ Read-only context — production patterns + threat models (5 files). ├── schema/ JSON Schemas — the report + the MCP tool contracts. ├── bin/ engine + tools: static_analysis.py, gen_tests.py, attest.py, mcp_server.py, … ├── tests/ Stdlib unit tests for the tooling (`make test`). ├── docs/ The docs suite (quickstart · sdk · mcp-tools · architecture · …). ├── attestation/ On-chain attestation registry blueprint (Scrypto, L3). ├── .claude/skills/ The scrypto-pre-audit Claude Code skill. ├── audit-reports/ Output dir, gitignored. └── examples/ ├── vulnerable-vault/ Deliberately-vulnerable fixture + its committed report. ├── agents/ Runnable example agents (CI gate, audit→fix→verify, MCP client). └── ci/ Drop-in pre-audit workflow for your repo. ``` ## 文档 所有内容都在 **[docs/](docs/README.md)** 中;简要列表如下: - [quickstart.md](docs/quickstart.md) —— 安装与运行,包含全部三个层级 - [static-analysis.md](docs/static-analysis.md) —— 确定性规则(以及如何添加规则) - [agents.md](docs/agents.md) · [mcp-tools.md](docs/mcp-tools.md) —— 通过 agent / 经由 MCP 进行操作 - [sdk.md](docs/sdk.md) —— Python API + 控制台脚本 - [ci.md](docs/ci.md) —— CI 关卡 + 徽章 - [architecture.md](docs/architecture.md) —— 各个组件是如何组合在一起的 - [VISION.md](VISION.md) · [ROADMAP.md](ROADMAP.md) · [CHANGELOG.md](CHANGELOG.md) —— 策略、状态与历史记录 ## 限制 —— 在依赖输出结果之前请阅读此内容 该工具集对其自身定位非常坦诚。以下是它明确**不做**的事情: - **它不是形式化验证工具。** 没有定理证明、没有符号执行、也没有模糊测试。审计发现是由 LLM 通过对照检查清单进行模式匹配而得出的。 - **它不会运行 `cargo build` 或 `cargo test`。** 编译问题、依赖项漏洞和测试失败不在范围之内。请单独运行这些检查。 - **它无法捕捉新型的攻击类别。** 它能可靠地呈现已知的常见陷阱,并将新型隐患作为低置信度的开放性问题提出。新型攻击的发现是人类审计员的工作。 - **LLM 可能会产生幻觉(虚构)出 file:line 引用。** 每一项发现都会引用一个位置;在采取行动之前,你必须验证这些引用。审计提示明确要求模型进行引用,但验证的责任在于读者。 - **它不是部署关卡。** 不要仅凭一份干净的报告就阻止部署。该工具集是一个辅助工具,而不是批准印章。 如果这些限制对你的用例有重大影响,请不要将此工具集作为付费审计的替代品。 ## 成本 使用默认配置(Sonnet 4.6,开启 prompt 缓存,跨运行缓存引用): - 会话的首次审计:约 50k 输入 token(引用) + 5–20k 输入 token(目标源码) + 约 5–15k 输出 token → 每次运行大约 $0.20–$0.40。 - 同一 prompt 缓存窗口中的后续审计:缓存引用可降低约 70% 的成本 → 每次运行大约 $0.10。 这些数据是 2026 年时的估算值。请查看当前的 [Anthropic 定价](https://www.anthropic.com/pricing) 以获取准确数字。该工具集故意*不*使用 architect/editor 分割(这会增加第二次模型调用),因为我们需要的是分析,而不是代码修改。 ## 许可证 [Apache 2.0](LICENSE) —— 与大部分上游 Radix 生态系统使用的许可证相同。欢迎 Fork、二次开发和商业使用;根据许可证保留署名。 ## 相关链接 - [Radix Scrypto 文档](https://docs.radixdlt.com/docs/scrypto-1) - [radixdlt/Ignition](https://github.com/radixdlt/Ignition) —— 由 Radix 团队维护的权威参考代码库(我们的 `references/ignition-patterns.md` 大部分内容提取于此) - [caviarnine/caviarnine-scrypto](https://github.com/caviarnine/caviarnine-scrypto) —— 基于 Apache 许可证的 CaviarNine 生产级 blueprints - [aider](https://aider.chat) —— 该工具集所封装的 LLM 编码 agent
标签:LLM, LNA, Radix, Rust, Unmanaged PE, 区块链, 可视化界面, 应用安全, 智能合约审计, 网络流量审计, 逆向工具, 错误基检测, 静态代码分析