anoop04singh/veraAudit

GitHub: anoop04singh/veraAudit

VeraAudit 是一个全栈 Sui Move 智能合约审计系统,旨在自动化和优化审计流程。

Stars: 0 | Forks: 0

# VeraAudit VeraAudit 是一个全栈 Sui Move 智能合约审计系统,它结合了以下功能: - Tatum 用于 Sui RPC 访问和 Walrus 上传编排 - Gemini 用于结构化合约安全分析 - RAG 用于 Sui/Move 特定的安全基础 - Walrus 用于不可变审计工件存储 - Sui 主网锚定以实现公共可验证性 结果是面向证明的审计工作流程,其中每个审计都可以: 1. 从真实的链上包状态生成 2. 通过目标安全上下文丰富 3. 作为不可变证据存储 4. 在 Sui 主网上锚定 5. 在仪表板上重新打开和验证 ## 项目功能 给定一个 Sui 包 ID,VeraAudit: 1. 通过 Tatum 从 Sui 获取标准化 Move 模块 2. 收集最近的交易和事件上下文 3. 通过 RAG 获取相关的 Sui/Move 安全知识 4. 要求 Gemini 生成结构化审计结果 5. 通过 Tatum 的存储 API 在 Walrus 上存储完整的审计 blob 6. 在 Sui 主网上锚定生成的 Walrus quilt/blob 引用 7. 通过 React 前端公开审计历史、报告和验证流程 这不仅仅是一个 LLM 包装器。系统设计得如此,以至于审计记录可以在以下方面进行追踪: - 源包 ID - 分析期间使用的链上下文 - 获取的安全参考 - 不可变的 Walrus 工件 - 链上锚定事件 ## 架构摘要 ### 核心组件 - `frontend/` React + Vite UI 用于着陆页、审计工作区、审计历史和证明验证 - `server/` Express API 服务器,用于协调 Tatum、Gemini、Walrus、RAG 和 Sui 锚定 - `contracts/` Sui Move 注册合约,用于在链上存储审计锚定元数据 ### 高级职责 - 前端 收集包 ID、渲染指标、流式传输管道进度、显示存储的审计和验证证明 - 后端 获取包和交易上下文、运行 RAG + Gemini、上传 Walrus 工件、在 Sui 上锚定结果 - 合约 发出可审计的链上事件,这些事件引用 Walrus 工件和审计哈希 ## Sui 主网上运行时合约地址 当前 `.env` 中的运行时配置将应用程序指向以下实时 Sui 对象: | 项目 | 地址 | | --- | --- | | 注册包 ID | `0xdd47918fec65c24ad41115782ab780d7f234e163d6c75cf1b39622ed6bd20a21` | | 注册共享对象 ID | `0xe5fc0c83fd0331bdc3c924d83cbd9a121cde440283ae58b37f8205e0124ca530` | | 管理能力对象 ID | `0xb77fe7f28a3e8d35271e6b1a26024d0de48f22b245bb9e01a3b2f68076d1e9a9` | | 时钟对象 ID | `0x6` | ## Move 合约 Sui 注册合约位于 [contracts/sources/registry.move](/C:/Users/singa/Downloads/veraAudit/contracts/sources/registry.move). 它存储审计元数据并为每个锚定的审计发出 `AuditSubmitted` 事件。 ### 主要数据结构 - `AuditRegistry` 共享链上注册表,包含: - 管理员地址 - 总审计计数 - 从审计包地址到 `vector` 的映射 - `AuditEntry` 存储: - Walrus blob/quilt ID - 审计哈希 - 审计员地址 - 埃波克 - 严重性 - 时间戳 - `AuditSubmitted` 事件发出以进行链下索引和审计历史重建 ### 主要入口点 - `submit_audit` 将新的审计条目写入注册表并发出相应的事件 ## 完整审计管道 管道实现位于 [server/src/auditPipeline.js](/C:/Users/singa/Downloads/veraAudit/server/src/auditPipeline.js). ### 步骤流程 1. 获取包模块 - 调用 `sui_getNormalizedMoveModulesByPackage` - 接收目标包的标准化 Move 模块 ABI/数据 2. 构建交易和事件上下文 - 从标准化模块中枚举公开函数 - 使用 `suix_queryTransactionBlocks` 查询交易块 - 压缩和限制链上下文以供模型输入 - 当需要时回退到受保护的 `suix_queryEvents` 查询 3. 获取 RAG 上下文 - 从以下内容生成面向安全的检索查询: - 模块名称 - 公开函数名称 - 结构名称 - 字段/类型信号 - 近期事件类型 - 当启用时使用嵌入 - 当嵌入调用不可用时回退到词汇检索 4. 运行 Gemini 审计 - 构建包含以下内容的结构化提示: - 标准化模块 - 近期交易上下文 - 近期事件上下文 - 获取的 RAG 指导 - 强制 Gemini 返回与审计模式匹配的严格 JSON 5. 组装不可变审计工件 - 在单个 JSON blob 中存储完整的审计有效负载、链快照和检索元数据 6. 上传到 Walrus - 通过 Tatum 的 Walrus 上传 API 发送审计 JSON - 轮询直到上传得到认证 - 提取最终的 quilt/blob 标识符 7. 在 Sui 主网上锚定 - 计算审计 blob 的 SHA-256 哈希 - 在注册合约上提交 `submit_audit` - 存储: - 审计的合约/包 ID - Walrus quilt/blob ID - 审计哈希 - 严重性 - 时间戳 8. 将结果公开给 UI - 在运行期间发出结构化 SSE 步骤事件 - 通过 Sui 事件和 Walrus 存储保持可发现性 ## 详细 ASCII 图表 ``` V E R A A U D I T ======================================================================================== User / Frontend | | 1. submit package id v POST /api/audit -------------------------------------------------------------+ | | v | +----------------------+ | | Express Audit Server | | +----------------------+ | | | | 2. fetch normalized modules | | 3. fetch tx/event context | v | +---------------------------+ | | Tatum Sui RPC Gateway | | | https://sui-mainnet... | | +---------------------------+ | | | | returns package ABI, tx blocks, events | v | +---------------------------+ | | Pipeline Context Builder | | | - exposed function scan | | | - tx compaction | | | - event extraction | | +---------------------------+ | | | | 4. build RAG queries | v | +---------------------------+ 5a. embedding retrieval (optional) | | RAG Retriever | ------------------------------------------+ | | - local knowledge base | | | | - lexical ranking | | | | - embedding ranking | v | +---------------------------+ +--------------------------+ | | Gemini Embeddings API | | 5b. top security chunks | gemini-embedding-001 | v +--------------------------+ +---------------------------+ | | Prompt Assembler | | | - modules | | | - tx context | | | - event context | | | - RAG guidance | | +---------------------------+ | | | | 6. structured audit request | v | +---------------------------+ | | Gemini Audit Model | | | generates JSON findings | | +---------------------------+ | | | | 7. full audit artifact JSON | v | +---------------------------+ | | Walrus Upload via Tatum | --> POST /v4/data/storage/upload | | certification polling | --> GET /v4/data/storage/upload/:jobId | +---------------------------+ | | | | returns quilt/blob id | v | +---------------------------+ | | Hash + Anchor Builder | | | sha256(auditBlob) | | +---------------------------+ | | | | 8. submit_audit move call | v | +---------------------------+ | | Sui Mainnet Registry | | | AuditSubmitted event | | +---------------------------+ | | | +--------------------> 9. UI reads /api/check, /api/metrics, /api/blob --+ and reconstructs history from: - Sui events - Walrus blob - stored audit report ``` ## Tatum 集成 Tatum 是链和 Walrus 交互的操作骨干。 ### Tatum 的使用位置 1. Sui JSON-RPC 访问 - 包内省 - 交易查找 - 事件查询 - 锚定交易提交 2. Walrus 上传编排 - 审计 blob 上传 - 认证轮询 3. 请求节流和重试处理 - 外部 Tatum 请求通过 [server/src/tatumTransport.js](/C:/Users/singa/Downloads/veraAudit/server/src/tatumTransport.js)序列化 - `TATUM_MIN_INTERVAL_MS` 空间请求以减少速率限制问题 ### Tatum 使用的端点 #### Tatum Sui RPC 基础 URL - `https://sui-mainnet.gateway.tatum.io` #### 通过 Tatum 使用的 JSON-RPC 方法 - `sui_getNormalizedMoveModulesByPackage` - `suix_queryTransactionBlocks` - `suix_queryEvents` - `sui_executeTransactionBlock` - `sui_getLatestCheckpointSequenceNumber` #### Tatum Walrus 端点使用 - `POST https://api.tatum.io/v4/data/storage/upload` 排队 Walrus 上传 - `GET https://api.tatum.io/v4/data/storage/upload/:jobId` 轮询认证状态直到 `CERTIFIED` ### Tatum 回退行为 锚定首先尝试配置的 Tatum Sui RPC 端点。如果失败,后端回退到: - `https://fullnode.mainnet.sui.io:443` 此回退仅用于交易锚定,不用于 Walrus 上传。 ## Walrus 集成 Walrus 集成在 [server/src/walrus.js](/C:/Users/singa/Downloads/veraAudit/server/src/walrus.js)中实现。 ### 存储内容 每个审计 blob 包括: - 目标包 ID - 审计时间戳 - Gemini 模型信息 - 模块快照 - 交易快照 - 事件快照 - RAG 检索元数据 - 摘要 - 严重性 - 安全交互结论 - 发现 - 置信度 ### 上传行为 1. 后端将审计有效负载序列化为 JSON 2. 它计算一个确定性的文件名 3. 它通过 Tatum 的 Walrus 上传端点上传文件 4. 它轮询直到上传成为 `CERTIFIED` 5. 它返回 `quiltPatchId` 或 `blobId` ### 读取行为 存储的审计工件通过 Walrus 主网聚合器读取: - `https://aggregator.walrus-mainnet.walrus.space/v1/blobs/by-quilt-patch-id/:quiltId` ### 为什么使用 Walrus Walrus 作为不可变证据层。而不是在链上存储完整的审计有效负载,VeraAudit 在 Walrus 上存储: - 完整报告离线但不可变 - 紧凑的引用和哈希在链上 这使得验证更便宜且更实际,同时保留审计可追踪性。 ## Gemini 集成 Gemini 集成在 [server/src/gemini.js](/C:/Users/singa/Downloads/veraAudit/server/src/gemini.js)中实现。 ### 使用的模型 - 审计生成模型 - 默认配置:`gemini-2.5-flash` - RAG 的嵌入模型 - `gemini-embedding-001` 实际的运行时值来自 `.env`. ### Gemini 收到的内容 Gemini 获取一个包含以下内容的提示: - 标准化模块快照 - 近期紧凑的交易上下文 - 近期事件上下文 - 获取的 RAG 上下文 - 明确的安全说明 - 严格的 JSON 模式 ### Gemini 返回的内容 模型必须返回以下内容的 JSON: - `summary` - `severity` - `safe_to_interact` - `safe_to_interact_rationale` - `findings` - `positive_patterns` - `confidence` 这通过 `responseMimeType: "application/json"` 和响应模式强制执行。 ## RAG 集成 RAG 集成在 [server/src/rag.js](/C:/Users/singa/Downloads/veraAudit/server/src/rag.js)中实现。 ### 为什么 RAG 存在于此项目 通用 LLM 审计对于 Sui Move 来说不够,因为许多重要风险是特定领域的: - 对象所有权滥用 - 共享对象安全性 - 能力泄露 - 传输语义 - 升级性假设 - Sui-和 Move 特定的授权模式 RAG 在 Gemini 评估包之前注入了目标安全知识。 ### 检索如何工作 1. 从标准化模块中提取信号 - 模块名称 - 公开函数名称 - 结构名称 - 字段名称/类型 2. 推断类别 - 访问控制 - 能力 - 对象管理 - 算术 - 传输 - 闪电贷款 - 输入验证 - 升级性 3. 从以下内容构建检索查询: - 合约/包 ID - 函数签名 - 结构签名 - 近期事件类型 4. 对本地知识库进行评分 - 当启用时使用嵌入相似度 - 词汇相似度作为基线/回退 5. 返回 top-k 块 - 默认为 `RAG_TOP_K` ### RAG 回退行为 如果 Gemini 嵌入调用失败,系统不会中止。它回退到词汇检索并继续审计。 ## API 接口 后端服务器位于 [server/src/index.js](/C:/Users/singa/Downloads/veraAudit/server/src/index.js)。 ### 公共后端端点 #### `GET /api/health` 返回: - 服务健康 - 网络标签 - 配置的 Tatum RPC URL - 配置的 Walrus 聚合器 - 标志显示是否存在关键配置 #### `GET /api/test-tatum` 通过请求最新的 Sui 检查点测试 Tatum RPC 连接。 #### `GET /api/check/:contractId` 从 Sui 加载先前锚定的审计事件,并为合约/包返回排序的审计历史。 #### `GET /api/blob/:blobId` 从 Walrus 获取不可变的审计工件。 #### `GET /api/verify/:blobId` 通过以下方式验证 Walrus blob 与链上数据: - 获取 blob - 查找匹配的 Sui 审计事件 - 重新计算 SHA-256 - 将其与锚定的链上哈希进行比较 返回证明是否验证。 #### `POST /api/audit` 启动新的审计运行并通过 SSE 流式传输进度。 请求体: ``` { "contractId": "0x..." } ``` SSE 事件类型: - `progress` - `step_log` - `step_output` - `complete` - `error` #### `GET /api/metrics` 返回仪表板指标: - 总审计 - 唯一合约 - 严重性分布 - 近期审计 ## 前端页面 ### 着陆页 - 项目定位 - 来自 `/api/metrics` 的真实审计指标 - 架构解释 - RAG/Gemini/Tatum/Walrus 解释 ### 审计工作区 - 接受 Sui 包 ID - 开始或检查审计 - 渲染最近的审计卡片 - 显示管道状态和历史记录 ### 审计详情页 - 列出先前的锚定审计事件 - 链接合约、tx 和 blob 引用 - 渲染存储的审计报告 ### 验证页面 - 从 Walrus 加载审计 blob - 将其计算出的哈希与链上审计事件进行比较 ## 项目结构 ``` veraAudit/ |-- contracts/ | |-- sources/registry.move | |-- Move.toml | `-- Published.toml |-- frontend/ | |-- public/ | |-- src/ | | |-- components/ | | |-- pages/ | | |-- utils/ | | |-- App.jsx | | |-- main.jsx | | `-- styles.css | |-- index.html | `-- vite.config.js |-- server/ | |-- src/ | | |-- index.js | | |-- auditPipeline.js | | |-- anchor.js | | |-- gemini.js | | |-- rag.js | | |-- ragKnowledge.js | | |-- tatum.js | | |-- tatumTransport.js | | |-- walrus.js | | `-- ... | `-- test/ |-- .env.example |-- package.json `-- README.md ``` ## 设置和安装 ### 先决条件 - Node.js 18+ 推荐使用 - npm - Tatum API 密钥 - Gemini API 密钥 - Sui 私钥用于实时锚定 ### 1. 克隆和安装 ``` git clone cd veraAudit npm install ``` ### 2. 配置环境 复制示例文件: ``` cp .env.example .env ``` 在 Windows PowerShell 中: ``` Copy-Item .env.example .env ``` 然后填写所需值。 ### 3. 必要的环境变量 #### 服务器 - `PORT` - `NODE_ENV` #### Tatum RPC + Walrus - `TATUM_API_KEY` - `TATUM_SUI_RPC` - `TATUM_WALRUS_UPLOAD_URL` - `TATUM_WALRUS_STATUS_POLL_MS` - `TATUM_WALRUS_STATUS_MAX_ATTEMPTS` - `TATUM_MIN_INTERVAL_MS` #### Gemini - `GEMINI_API_KEY` - `GEMINI_MODEL` - `GEMINI_EMBEDDING_MODEL` - `GEMINI_EMBEDDING_DIMENSIONS` #### Sui 锚定配置 - `REGISTRY_PACKAGE_ID` - `REGISTRY_OBJECT_ID` - `ADMIN_CAP_OBJECT_ID` - `SUI_CLOCK_OBJECT_ID` - `SUI_PRIVATE_KEY` - `UI_ANCHOR_RPC_FALLBACK` #### 管道调整 - `RETRY_MAX_ATTEMPTS` - `RETRY_BASE_DELAY_MS` - `RETRY_MAX_DELAY_MS` - `CONTEXT_MODULE_QUERY_CONCURRENCY` - `MAX_CONTEXT_FUNCTION_QUERIES` - `CONTEXT_TRANSACTIONS_PER_FUNCTION` - `MAX_CONTEXT_TRANSACTIONS` - `MAX_CONTEXT_EVENTS` - `MAX_MODULE_CHARS_FOR_AUDIT` - `MAX_TRANSACTION_CHARS_FOR_AUDIT` - `MAX_EVENT_CHARS_FOR_AUDIT` - `MAX_RAG_CHARS_FOR_AUDIT` - `RAG_ENABLED` - `RAG_USE_EMBEDDINGS` - `RAG_TOP_K` ### 4. 启动应用程序 同时运行前端和后端: ``` npm run dev ``` 默认本地 URL: - 前端:`http://localhost:5173` - 后端
标签:日志审计, 自定义脚本, 逆向工具