AshutoshVJTI/auditquant
GitHub: AshutoshVJTI/auditquant
一个混合智能合约审计系统,并行运行多个静态与符号分析工具并交叉验证结果,同时利用微调 CodeBERT 模型进行漏洞分类和 DeFi 业务风险评估。
Stars: 0 | Forks: 0
# AuditQuant
AuditQuant 是我为 Sacramento State 硕士项目构建的一个混合智能合约审计系统。它并行运行四个静态/符号分析工具,对结果进行交叉验证,运行一个微调的 CodeBERT 模型进行漏洞分类,并计算一个感知 DeFi 的业务风险评分。
## 功能介绍
- 通过 Docker 运行 **Slither**、**Slitherin**、**Semgrep** 和 **Mythril**
- 将所有工具的输出标准化为统一的发现格式
- 根据漏洞类型 + 位置对发现进行交叉验证,并在多个工具达成一致时提升置信度
- 运行微调过的 **CodeBERT** 分类器,以捕获工具遗漏的漏洞类型
- 计算风险评分:R_SAST(静态)、R_DAST(动态/符号)、R_COMP(复杂度)、综合评分
- 按 DeFi 类别对合约进行分类,并计算业务风险标准
- 可选通过 OpenAI 生成执行摘要,并根据工具发现验证声明
## 技术栈
- **后端:** Python 3.11+, FastAPI, Pydantic v2
- **工具:** Slither, Slitherin, Semgrep, Mythril (Docker Compose)
- **ML 模型:** 微调的 CodeBERT(多标签漏洞分类器)
- **前端:** React 19, TypeScript, Vite, Tailwind CSS
## 前置条件
- Python 3.11+
- Node.js 18+
- Docker Desktop(分析时必须处于运行状态)
## 设置
从仓库根目录开始:
### 1. Python 环境
```
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r backend/requirements.txt
```
### 2. 环境变量
```
cp .env.example .env
# 编辑 .env 并添加你的 API keys
```
| 变量 | 是否必需 | 描述 |
|----------|----------|-------------|
| `OPENAI_API_KEY` | 否 | 如果设置,将启用 LLM 执行摘要 + 声明验证 |
| `OPENAI_MODEL` | 否 | 默认:`gpt-4o-mini` |
| `OPENAI_BASE_URL` | 否 | 自定义 OpenAI 兼容端点 |
| `CODEBERT_CHECKPOINT_PATH` | 否 | 微调检查点路径。默认:`evaluation/llm_training/checkpoints/checkpoint_best.pt` |
| `DOCKER_COMPOSE_PATH` | 否 | 默认:`docker/docker-compose.yml` |
| `ANALYSIS_STORAGE_PATH` | 否 | 默认:`backend/.analysis` |
### 3. 构建 Docker 镜像
```
docker compose -f docker/docker-compose.yml build slither slitherin semgrep mythril
```
### 4. 启动后端
```
uvicorn app.main:app --reload --app-dir backend
```
API:`http://localhost:8000` — Swagger 文档:`http://localhost:8000/docs`
### 5. 启动前端
```
cd frontend
npm install
npm run dev
```
前端:`http://localhost:5173`
### 6. 运行分析
从仪表板上传 `.sol` 文件。前端将轮询 `/api/analysis/{id}` 直到分析完成。
## API
| 方法 | 路径 | 描述 |
|--------|------|-------------|
| `GET` | `/api/health` | 健康检查 |
| `POST` | `/api/analyze` | 上传 `.sol` 文件,返回 `analysis_id` |
| `GET` | `/api/analysis/{id}` | 获取结果(等待中返回 `202`) |
| `GET` | `/api/analysis/{id}/business-risk` | 业务风险报告 |
分析响应包含 `scores`、`findings`、`tool_results`、`model_prediction`、`business_risk`,以及可选的 `summary` + `verification`。
## 示例合约
`contracts/` 目录下提供了一些测试合约:`VulnerableBank.sol`、`VulnerableVault.sol`、`UncheckedCall.sol`、`SimpleStorage.sol`。
## 评估
重新运行 5 系统对比(AuditQuant 工具,AuditQuant+CodeBERT,GPT-4o,Claude,Gemini):
```
python evaluation/scripts/run_test_split_comparison.py
```
重新生成对比图表:
```
python evaluation/scripts/generate_comparison_graphs.py
```
从 SmartBugs 重建训练数据集:
```
python evaluation/scripts/prepare_dataset_v2.py
```
结果写入 `evaluation/results/`,图表写入 `evaluation/graphs/`。
## 模型检查点
微调的 CodeBERT 检查点(约 476 MB)不包含在此仓库中。请从 Google Drive 下载并将其放置在 `evaluation/llm_training/checkpoints/checkpoint_best.pt` 路径下:
**[下载 checkpoint_best.pt](https://drive.google.com/file/d/1Oh9_lOm8JwzZ66kRSwjoU4DZxWvVNMlO/view?usp=sharing)**
或者在 `.env` 中设置 `CODEBERT_CHECKPOINT_PATH` 指向您保存它的任何位置。
## 故障排除
- **分析卡住:** 确保 Docker Desktop 正在运行且镜像已构建
- **工具失败:** 检查 `DOCKER_COMPOSE_PATH` 是否正确
- **无 CodeBERT 预测:** 缺少检查点文件 —— 检查 `CODEBERT_CHECKPOINT_PATH`
- **无 LLM 摘要:** 未设置 `OPENAI_API_KEY` 时属于预期情况
- **重启后结果消失:** 分析状态保存在内存中,未持久化到磁盘
标签:Apex, AV绕过, CISA项目, CodeBERT, DeFi风险评估, Docker, FastAPI, LLM, Mythril, OpenAI, Python, React, Semgrep, Slither, Solidity, Syscalls, TypeScript, Unmanaged PE, Vite, Web3安全, WordPress安全扫描, 云安全监控, 代码安全, 内存规避, 区块链安全, 安全插件, 安全防御评估, 对称加密, 微调模型, 无后门, 智能合约审计, 机器学习, 毕业设计, 漏洞枚举, 符号执行, 自动化审计, 请求拦截, 跨验证, 逆向工具, 静态分析, 风险评分