mddotcodes/auditor
GitHub: mddotcodes/auditor
Auditor 是一个将 Foundry 编译、Slither 静态扫描与可选 LLM 测试生成整合于单 Docker 镜像中的 Solidity 智能合约自动化审计引擎,输出结构化的机器可读审计产物。
Stars: 0 | Forks: 0
# Auditor
**Auditor** 是一个自包含的引擎,用于审计 Solidity 智能合约,并以结构化的技术输出形式流式传输结果。
将其指向你的合约(或一个小型 Foundry 项目),它将:
1. 使用 Foundry **编译**
2. 使用 [Slither](https://github.com/crytic/slither) **扫描**已知的漏洞类别
3. 使用 LLM **生成**模糊测试和不变量测试(可选 — 使用你的 API 密钥)
4. 在 Foundry 下**运行**这些测试
5. **生成**机器可读的产物:发现的 JSON 结果、生成的 `.t.sol` 文件、覆盖率,以及用于后续链上匹配的字节码指纹
所有操作都在一个 Docker 镜像内运行,因此工具链是固定的,并且你的主机保持干净。
## 你能得到什么
| 输出 | 描述 |
|--------|-------------|
| 静态发现 | 标准化的 Slither 结果(重入、访问控制等)加上原始工具日志 |
| 生成的测试 | 针对状态更改函数的 Foundry 模糊/不变量测试 |
| 测试报告 | 通过/失败摘要、失败时的输入(如果有)、启用时的覆盖率 |
| 字节码指纹 | 编译器设置 + 字节码/元数据哈希,用于部署后的精确匹配验证 |
| 实时进度 | 任务运行期间通过 HTTP + WebSocket 进行阶段更新 |
## 适用人群
- 希望获得**本地、可重复**审计流水线,而无需手动组装 Foundry + Slither + 脚本的开发者
- 希望获得**原始技术产物**,以便将其接入 CI、自定义 UI 或他们自己的审查流程的团队
- 任何想要**可选的 LLM 辅助测试生成**,而不必将特定供应商硬编码到核心扫描器中的人
## 快速开始
```
make build-image # needs Docker; tags auditor:local
./scripts/run-local.sh # hardened run → versions (default)
# 或:
docker compose run --rm auditor versions
docker compose run --rm auditor forge --version
```
强化的标志(只读 root、丢弃 cap、network none、cgroup 限制)与 [`docs/security/runtime-defaults.md`](docs/security/runtime-defaults.md) 相匹配。可选的 LLM 密钥:复制 [`.env.example`](.env.example) → `.env`,并使用 `./scripts/run-local.sh --llm …` 或 Compose profile `llm`(以便稍后需要供应商出口流量时使用)。
示例合约和草拟的产物清单位于 [`examples/`](examples/) 中。
### 预期的 API 用户体验(尚未实现)
```
docker run --rm -p 8080:8080 \
-e OPENROUTER_API_KEY=sk-… \ # optional; omit for static-only
ghcr.io//auditor:latest
```
```
curl -s -X POST http://localhost:8080/v1/audit \
-H 'Content-Type: application/json' \
-d '{
"sources": {
"src/Token.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n..."
}
}'
# → { "job_id": "…" }
```
```
WS /v1/ws/jobs/{job_id}
GET /v1/jobs/{job_id}
```
### CLI(计划中)
```
auditor-cli run ./src/Token.sol
auditor-cli run ./my-foundry-project
auditor-cli metrics ./src/Token.sol # quick size / complexity estimate
```
## 模式
| 模式 | 需要 | 行为 |
|------|--------|----------|
| **静态** | 仅 Docker | 编译 + Slither + 指纹 |
| **完整** | Docker + LLM API 密钥 | 静态路径,然后生成并运行模糊/不变量测试 |
| **指标** | 仅 Docker | 快速预检:LOC、复杂度估算、粗略的 token 估算 — 不进行完整审计 |
支持的 LLM 提供商(通过环境变量):OpenAI、Anthropic、OpenRouter。
## 流水线
```
input (sources | project | gist)
│
▼
materialize Foundry project
│
▼
forge build ──fail──► optional LLM auto-fix (≤3) ──or──► fail job
│
▼
Slither (JSON findings)
│
▼
[if API key] LLM writes .t.sol ──compile feedback loop ≤3──► forge test / fuzz
│
▼
artifacts + bytecode fingerprint
```
每个任务都有硬性的实际耗时限制,因此失控的模糊测试或糟糕的测试不会永远挂起。
## 配置
| 变量 | 默认值 | 用途 |
|----------|---------|---------|
| `OPENAI_API_KEY` | — | 用于测试生成/自动修复的 OpenAI |
| `ANTHROPIC_API_KEY` | — | Anthropic |
| `OPENROUTER_API_KEY` | — | OpenRouter |
| `AUDIT_TIMEOUT_SECONDS` | `300` | 在此秒数后终止任务 |
| `AUTO_FIX_COMPILE` | `false` | 让 LLM 尝试修复编译错误(最多 3 次) |
使用本地 `.env` 存放密钥;切勿提交它们。请参阅 [`.env.example`](.env.example)。
## 安全默认值
合约和生成的测试是不可信代码。容器构建为在约束条件下运行它们:
- 非 root 用户
- 每个任务独立的工作目录(并发任务之间不共享)
- 通过常规 Docker 标志配置 CPU/内存限制
- 默认情况下编译/测试时关闭网络;仅当你提供密钥时才进行 LLM 调用
建议的本地运行方式(阶段 1 — 仅工具链;完整标志列表见 [`docs/security/runtime-defaults.md`](docs/security/runtime-defaults.md)):
```
./scripts/run-local.sh versions
# 等价的 compose:
docker compose run --rm auditor versions
```
## 开发
```
git clone https://github.com//auditor.git
cd auditor
make lint # format + static checks
make test # unit / integration
make build-image # local Docker image
```
工具链和布局将随首批实现 PR 一起发布。
## 路线图(宏观)
- [ ] 可运行的 Docker 镜像 + `POST /v1/audit`
- [ ] Slither 发现 + 产物清单
- [ ] WebSocket 任务流
- [ ] LLM 测试生成 + 模糊执行
- [ ] CLI
- [ ] 发布的 GHCR 镜像和 semver 标签
## 贡献
欢迎提交 Bug 报告和 PR。对于较大的设计更改,请先开启一个 issue,以便我们在公开 API 和产物 schema 上达成一致。
## 许可证
[MIT](LICENSE)
标签:Docker, Foundry, Petitpotam, Solidity, Web报告查看器, 代码安全扫描, 区块链安全, 安全防御评估, 对称加密, 智能合约审计, 自动化审计, 请求拦截