Akk525/trustGraph

GitHub: Akk525/trustGraph

TrustGraph 是一款基于确定性谓词分析 Solidity 智能合约信任边界漏洞并生成可执行 Foundry 利用证明的工具。

Stars: 0 | Forks: 0

# TrustGraph **检测具有确定性**:四元谓词规则集 (E ∧ P ∧ V ∧ ¬G) 决定每项发现与严重性评定。可选的 Gemini 2.5 Flash 会在发现完成后添加通俗易懂的解释——它无法创建、修改或抑制任何发现。 ## 快速演示 ``` trustgraph audit examples/vulnerable-crosschain/src \ --generate-test \ --run-foundry \ --report-format both \ --output-dir .trustgraph ``` ``` Critical → receiveMessage VulnerableReceiver.sol:27 Medium → mint MockToken.sol:18 [PASS] test_directInvocationExploit() (gas: 67996) ``` ``` .trustgraph/ ├── report.md ├── report.json └── tests/ └── VulnerableReceiverExploit.t.sol ``` ## TrustGraph 存在的意义 跨链桥接收函数是反复出现的攻击面:一个 `external` 函数接受任意负载且不检查 `msg.sender`,因此任何地址都可能直接触发特权状态变更。2024 年 8 月的 CrossCurve 桥接漏洞(损失约 500 万美元)就是具体案例;相同模式也出现在 LayerZero 接收器、Axelar 网关以及自定义桥接集成中。 TrustGraph 通过三项工程保障应对此类问题: - **可审计的发现** —— 每个结果都追溯至基于函数源码评估的固定谓词 (E ∧ P ∧ V ∧ ¬G)。没有模型置信度分数,没有采样方差。 - **可执行的概念验证** —— 每个严重或中等发现都会生成一个 Foundry 测试。若 `forge test` 通过,则确认特定的漏洞利用路径有效。若测试失败,仍会报告该发现并附上测试以供人工审查。 - **决策路径中不依赖 LLM** —— Gemini 是在严重性评定后添加的可选解释层。传入 `--no-ai` 参数后,扫描器、漏洞利用生成器和报告均保持不变。 ## 设计原则 **基于确定性分析而非概率评分。** 发现结果由显式且固定的谓词产生。相同的函数源码在每次运行中都会产生相同的结果。无需调整、采样或依赖模型。 **可复现的漏洞利用验证。** 每个发现都由生成的 Foundry 测试支持。所生成路径的可利用性是一个二元结果——`forge test` 通过或不通过。 **人类可审计的证据。** 每个发现都暴露匹配的谓词条件和触发它们的函数源码。不存在黑箱推理。 **可选的 AI 增强,永不依赖 AI。** Gemini 会在发现完成后添加通俗易懂的解释。使用 `--no-ai` 禁用后,工具功能完全相同。 **集成开发者工作流。** 发现结果作为诊断信息出现在编辑器中,而不仅仅是报告文件。调查路径为:行内高亮 → 发现侧边栏 → 详情面板 → 漏洞利用测试 → 补丁模板。 ## 非目标范围 TrustGraph 的范围限于特定漏洞类别。它明确不尝试以下操作: - **符号执行** —— 不使用 SMT 求解器,不进行路径探索,不提供形式化验证 - **全面合约审计** —— 不分析重入、整数溢出、调用者守卫之外的访问控制模式或其他任意漏洞类别 - **跨文件或跨合约分析** —— 每个函数在其源文件内评估 - **自动打补丁** —— 补丁模板仅为人工审查建议;不会自动修改代码 - **替代审计** —— TrustGraph 呈现的是潜在的信任边界,并非专业审计的替代品 - **生产就绪性认证** —— 通过的概念验证仅确认所生成的漏洞利用路径可执行;对其他攻击面不作任何声明 ## 功能特性 - 对所有外部可调用函数进行四元谓词静态分析 (E/P/V/G) - 跨链接收器漏洞检测 - 自动生成 Foundry 漏洞利用概念验证测试,通过 `forge test` 执行 - 可选 Gemini 2.5 Flash 解释层——检测和严重性不受影响 - 当 Gemini 缺失或出错时自动回退至纯确定性模式 - Markdown + JSON 报告输出 - VS Code 扩展:行内诊断、发现侧边栏、漏洞利用测试查看器、补丁模板 - 包含 GitHub Actions CI/CD 工作流 ## 安装说明 **要求:** Python ≥ 3.10,[Foundry](https://book.getfoundry.sh/getting-started/installation)(运行 `--run-foundry` 时必需) ``` git clone https://github.com/your-org/trustgraph cd trustgraph pip install -e . ``` **包含可选 Gemini 解释:** ``` pip install -e ".[gemini]" export GEMINI_API_KEY="your_key_here" export GEMINI_MODEL="gemini-2.5-flash" # optional, this is the default ``` 若无 Gemini API 密钥,TrustGraph 会自动以纯确定性模式运行。密钥也可存储在 `.env` 文件中(该文件已被 gitignore): ``` GEMINI_API_KEY=your_key_here ``` ## 使用方法 ``` # 基础审计 trustgraph audit path/to/contracts/src # 生成 Foundry 漏洞利用 PoC 测试 trustgraph audit path/to/src --generate-test # 生成测试并运行 forge test trustgraph audit path/to/src --generate-test --run-foundry # Markdown + JSON 报告 trustgraph audit path/to/src --report-format both # 仅确定性(无 LLM 调用) trustgraph audit path/to/src --no-ai ``` **所有选项:** ``` Arguments: PATH .sol file or directory [required] Options: --generate-test / --no-generate-test Generate Foundry exploit PoC [default: generate-test] --run-foundry / --no-run-foundry Execute forge test [default: no-run-foundry] --report-format TEXT markdown | json | both [default: markdown] --output-dir TEXT Output directory [default: trustgraph-output] --no-ai Disable LLM calls ``` ## VS Code 调查工作流 TrustGraph 附带一个用于交互式调查的本地 VS Code 扩展。 **设置:** ``` cd vscode-extension npm install npm run compile ``` 1. 在 VS Code 中打开 `vscode-extension/` 并按 **F5** 启动扩展开发主机。 2. 在新窗口中打开主 TrustGraph 仓库。 3. 在命令面板中运行 `TrustGraph: Run Audit`。 **推荐的 `.vscode/settings.json`:** ``` { "trustgraph.cliPath": "/path/to/trustgraph", "trustgraph.contractPath": "examples/vulnerable-crosschain/src", "trustgraph.outputDir": ".trustgraph", "trustgraph.runFoundry": true } ``` 报告和漏洞利用测试将写入 `.trustgraph/` 目录(已被 gitignore)。 **扩展功能:** | 功能 | 描述 | |---|---| | 行内诊断 | 漏洞函数上的红色/黄色波浪线 | | 发现侧边栏 | 按严重性分组的树状图,附带扫描摘要 | | 详情网页视图 | 谓词证据、守卫判定、Gemini 解释、Foundry 结果、补丁模板 | | 跳转到源码 | 跳转到标记的行 | | 打开漏洞利用测试 | 打开生成的 `.t.sol` 文件 | | 复制补丁 | 将推荐的修复方案复制到剪贴板 | **行内诊断 —— 编辑器中高亮显示的漏洞函数及“问题”面板条目:** ![行内诊断](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/795a8df3cd104625.png) **发现侧边栏 —— 按严重性分组的树状图,扫描后填充:** ![发现侧边栏](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/de9cf71281104626.png) **严重发现详情面板 —— 谓词证据、信任假设分析、Foundry 结果:** ![严重发现面板](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/cea8e0d16a104627.png) ## 漏洞模型 当所有四个谓词条件均满足时,函数将被标记: ``` Vulnerable(f) = E(f) ∧ P(f) ∧ V(f) ∧ ¬G(f) ``` | 谓词 | 含义 | 检测方式 | |---|---|---| | `E(f)` | `external` 或 `public` 可见性 | 函数签名中的可见性关键字匹配 | | `P(f)` | 接受攻击者控制的负载 | `bytes calldata`、`abi.decode`、参数名包含 `payload`/`data`/`message` | | `V(f)` | 主体中的关键状态变更 | `.mint(`、`.transfer(`、`.withdraw(`、`balances[` | | `G(f)` | 主体中存在调用者守卫 | `require(msg.sender ==`、`onlyOwner`、`onlyBridge`、`trustedBridge` | **严重性评定:** | 条件 | 严重性 | |---|---| | E + P + V + 无守卫 | **严重** | | E + V + 无守卫 | **中等** | | 其他情况 | 信息性 | ## 架构 ``` flowchart TD A[Solidity Contracts] --> B[TrustGraph CLI] B --> C[Static Scanner\nE / P / V / G predicate scoring] C --> D[Trust Assumption Inference\ndeterministic + optional Gemini explanation] D --> E[Guard Validation\nconfirm guard absence in function body] E --> F[Exploit Generator\nFoundry PoC template rendering] F --> G[Foundry Runner\nforge test subprocess] G --> H[Reports\nMarkdown + JSON] G --> I[VS Code Extension\ndiagnostics + investigation] ``` 该流水线作为一个 8 阶段有向无环图 (DAG) 运行,使用 [LangGraph](https://github.com/langchain-ai/langgraph) 作为执行框架。每个阶段是类型化状态对象上的纯函数;LangGraph 未用于智能体规划或 LLM 路由——它仅处理 DAG 连线和状态传递。 **项目布局:** ``` trustgraph/ ├── cli.py — Typer CLI entry point ├── graph.py — 8-stage pipeline DAG ├── models.py — Pydantic models + WorkflowState ├── scanners/ │ └── solidity.py — Function extractor + E/P/V/G scorer ├── agents/ │ ├── trust_assumption.py — Deterministic classifier + optional Gemini call │ ├── exploit_generator.py — Foundry PoC template engine │ └── patch_recommender.py — Patch suggestion templates ├── runners/ │ └── foundry.py — forge test subprocess wrapper └── reports/ ├── markdown.py — Markdown report generator └── json_report.py — JSON report generator ``` ## 漏洞利用生命周期 ``` flowchart LR A["External Entry Point\npublic / external"] --> B["Attacker-Controlled Payload\nbytes calldata / abi.decode"] B --> C["Missing Guard\nno require(msg.sender == trusted)"] C --> D["Critical State Mutation\n.mint / .transfer / .withdraw"] D --> E["Generated Foundry PoC\n.t.sol"] E --> F["forge test\npass = exploit path confirmed"] ``` **生成的漏洞利用测试 —— TrustGraph 为附带示例生成的 Foundry 概念验证:** ![生成的漏洞利用测试](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/9d90fecf9c104629.png) ## 确定性优先设计 ``` flowchart LR subgraph det["Deterministic Scanner — sole source of truth"] direction TB A[Exposure Detection E] B[Payload Detection P] C[State Mutation Detection V] D[Guard Detection G] E[Severity Assignment] F[Exploit Generation] end subgraph gem["Gemini 2.5 Flash — explanation only"] direction TB G[Trust Assumption Explanation] H[Natural-Language Reasoning] end det --> R[Findings + Reports + PoC] gem -. enriches explanation .-> R ``` Gemini 在严重性已评定后,针对每个发现仅被调用一次。它接收函数源码和谓词判定作为上下文。其输出填充报告和 VS Code 详情面板中的 `ai_analysis` 字段。它无法更改 `severity`、`is_vulnerable` 或漏洞利用生成。 **Gemini 回退行为:** | 条件 | 行为 | |---|---| | 传入 `--no-ai` | 仅确定性模式——不进行 API 调用 | | 无 `GEMINI_API_KEY` | 确定性回退,仍报告发现 | | API 错误或配额超限 | 确定性回退,仍报告发现 | | 无效或无法解析的响应 | 确定性回退,仍报告发现 | | 成功 | 发现被补充自然语言解释 | ## CI/CD TrustGraph 包含一个 GitHub Actions 工作流 (`.github/workflows/trustgraph.yml`),其功能如下: 1. 检出仓库(含子模块 forge-std) 2. 安装 TrustGraph 和 Foundry 3. 对附带的示例合约运行审计 4. 断言检测到一个严重的 `receiveMessage` 发现 5. 将报告作为构建产物上传 ## 局限性 检测通过关键字模式匹配对各个函数主体进行操作。当前范围界限: - **不检测仅修饰符守卫** —— 函数签名上的 `onlyOwner` 不被评估;仅检查函数体内的 `require(...)` - **无继承解析** —— 父合约中定义的守卫不会追溯到子合约 - **无跨函数守卫传播** —— 包装器或调用函数中的守卫不会归功于被调用函数 - **单文件范围** —— 跨多个 `.sol` 文件的数据流不被追踪 - **模式敏感** —— 非标准命名约定可能导致假阴性;异常模式可能导致假阳性 ## 未来工作 - 通过 `solc --ast-compact-json` 进行 AST 级别解析以替代关键字提取 - 修饰符和继承解析 - 跨函数和跨合约调用图分析 - 集成 Slither 作为补充分析通道 - 从已确认的发现中导出 Semgrep 规则 ## 安全声明 TrustGraph 是一个早期阶段工具,其本身尚未经过安全审计。 通过的 Foundry 测试确认生成的概念验证漏洞利用在生成的测试环境中成功执行。它并不能证明不存在其他攻击路径,也不能证明合约在其他方面是安全的。所有发现在得出生产结论前都需要人工审查。TrustGraph 不能替代专业的智能合约审计。 ## 致谢 受到 2024 年 8 月 CrossCurve 桥接漏洞以及跨链接收器架构中更广泛的信任边界故障类别的启发。
标签:DeFi 安全, exploit 生成, Foundry, Solidity, Subfinder, VSCode 扩展, Web3 安全, 云安全监控, 以太坊安全, 信任边界分析, 区块链安全, 可执行验证, 审计工具, 智能合约安全, 杀软绕过, 桥接漏洞, 确定性分析, 跨链桥安全, 逆向工具, 静态分析