allsmog/Kuzushi

GitHub: allsmog/Kuzushi

Kuzushi 是一款融合传统 SAST 与 AI Agent 的智能代码安全扫描器,通过 AI 深度分诊大幅降低误报率,并可自动生成 PoC 漏洞利用以证明漏洞的真实可利用性。

Stars: 1 | Forks: 0

Kuzushi # Kuzushi — AI 安全扫描器,只展示真实的漏洞 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/1f0e74c5ed033501.svg)](https://github.com/allsmog/Kuzushi/actions/workflows/ci.yml) [![npm](https://img.shields.io/npm/v/kuzushi)](https://www.npmjs.com/package/kuzushi) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) SAST 工具经常“狼来了”。Semgrep 在你的代码库中发现了 500 个问题。其中 480 个是误报。你花费数小时对这一堵噪音墙进行分诊,却依然错过了第 247 行真正的漏洞。 Kuzushi 运行相同的扫描器,然后发送一个 AI Agent 去调查每一个发现 —— 阅读实际的代码,追踪数据流,检查是否经过净化。它会告诉你哪些发现是真的,哪些是噪音,并可选地通过构造可工作的 PoC 来证明可利用性。 ``` npx kuzushi /path/to/your/repo ``` 无需安装。无需配置文件。只需指向一个代码仓库。 ## 快速开始 前置条件:Node 22+,以及 API 密钥或 Claude Code OAuth 登录。 ``` # 使用 Claude Code OAuth(无需 API key — 使用您的 Claude 登录) npx kuzushi /path/to/your/repo # 使用 Anthropic API key export ANTHROPIC_API_KEY=sk-ant-... npx kuzushi /path/to/your/repo # 使用 OpenAI export OPENAI_API_KEY=sk-... npx kuzushi /path/to/repo --model openai:gpt-4o # 使用 Google、Groq、Mistral 或 15+ 其他提供商 npx kuzushi /path/to/repo --model google:gemini-2.0-flash ``` 如果你没有安装扫描器,Kuzushi 会自动下载 Opengrep。零依赖管理。 ## 问题所在 **仅使用 SAST 扫描器** 召回率高但精确度极差 —— 它们标记所有*可能*是漏洞的东西,让你淹没在误报中。团队花费数小时进行分诊,产生告警疲劳,最终停止查看。 **仅使用 LLM** 能够推理代码,但在从头扫描时会产生幻觉 —— 当你问“在这个仓库中查找漏洞”时,误报率高达 95% 以上。 **Kuzushi 结合了两者。** SAST 信号缩小了搜索空间。AI 推理消除了误报。结果:在漏洞分类上接近人类研究人员的符合率。 ## 你将获得什么 对于每一个发现,Kuzushi 会生成: - **判定** — `true_positive`(真阳性),`false_positive`(假阳性),或 `needs_review`(需审查) - **置信度** — 0.0 到 1.0 - **理由** — 为什么 Agent 得出该判定,引用特定的代码行 - **验证步骤** — 人工审查者可遵循的 2-6 个可操作步骤 - **修复建议** — 适用时的建议补丁 - **PoC 漏洞利用**(带 `--verify`)— 证明漏洞可被利用的具体概念验证 Payload - **成本** — 每次发现分诊和验证的美元成本 终端报告首先显示真阳性,然后是需审查的项目。假阳性被计数但隐藏。你只看到重要的内容。 ## 工作原理 ``` ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ ┌─────────┐ ┌──────────┐ │ Scanners │────▶│ AI Triage │────▶│ Verification │────▶│ Patch │────▶│ Report │ │ Semgrep │ │ Investigate │ │ Construct │ │ Generate │ │ TP only │ │ CodeQL │ │ each finding │ │ PoC exploits │ │ & verify │ │ + export │ │ Agentic │ │ with context │ │ (optional) │ │ (opt-in) │ │ + stream │ └─────────────┘ └──────────────┘ └──────────────┘ └─────────┘ └──────────┘ ``` 1. **上下文收集** — 自动检测你的技术栈、框架、认证模式、ORM 和净化库 2. **代码图** — 通过静态分析 + LLM 填充空白构建持久的入口点到汇点图,用于感知可达性的分诊 3. **威胁建模** — Randori PASTA 插件(作为 `@kuzushi/randori-plugin` 发布)执行 4 阶段威胁分析:业务目标、技术范围、DFD 分解,以及带有 ATT&CK/CAPEC/OWASP 映射和 5 因子概率评分的 STRIDE 威胁场景。所有威胁线索都会注入到每个检测器的提示词中。 4. **威胁知情狩猎** — 为每个 DFD 外部实体(用户、服务、攻击者)生成一个对抗性 Claude Agent,以 CTF 风格从每个参与者的角度搜寻漏洞 5. **扫描** — 并发运行 Semgrep、CodeQL 和/或 Agentic 扫描器;13+ 个专用检测器(SSRF、SQLi、XSS、命令注入、XXE、反序列化、NoSQL 注入、模板注入、原型污染、竞态条件、供应链、GraphQL、机密/加密、认证逻辑、边缘情况);多策略模式对每个漏洞类别运行 2-4 种分析方法 6. **分类漏斗** — 廉价的单 Token 预过滤器在昂贵的分诊之前移除约 80% 的噪音 7. **去重** — 跨扫描器对等效发现进行指纹识别和合并 8. **增量跳过** — 在先前运行中已分诊的发现会被自动跳过 9. **AI 分诊** — 一个 Agent 调查每个发现,带有预加载的源上下文、代码图路径、证据链和特定 CWE 知识模块;批量丢弃的发现自动升级为单独分诊 10. **变体分析** — 确认的 TP 触发在代码库中自动搜索相似模式 11. **验证**(可选)— 为真阳性构造具体的 PoC 漏洞利用 Payload 12. **PoC Harness 生成**(可选)— 生成可运行的漏洞利用脚本,带有迭代执行反馈 13. **动态分析**(可选)— 在 Docker Sandbox 中执行 Harness 以确认可利用性 14. **自动补丁**(可选)— 在一次性 Git Worktree 中生成、验证和重新验证补丁 15. **报告** — 终端显示 + 导出为 SARIF、Markdown、JSON、CSV 或 JSONL;可选的 SSE 实时流 ## CI 集成 ### GitHub Actions ``` name: Security Scan on: [push, pull_request] jobs: kuzushi: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 - run: npx kuzushi . --sarif results.sarif --quality-gate --fail-on-tp env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} - uses: github/codeql-action/upload-sarif@v3 if: always() with: sarif_file: results.sarif ``` ### 质量门禁 ``` kuzushi --quality-gate # fail CI on threshold violations kuzushi --fail-on-tp # fail if any high/critical TP is found kuzushi --sarif results.sarif # export SARIF for GitHub Code Scanning ``` ## 核心特性 **供应商无关的 LLM 运行时** — 支持 Anthropic、OpenAI、Google、Groq、Mistral 和其他 15+ 个提供商。使用 `--model provider:modelId` 在运行时切换模型。分诊使用更便宜的模型,验证使用高级模型。 **漏洞利用验证** — 超越分类。构造具体的 PoC Payload(SQL 注入字符串、XSS 向量等),证明一个发现是可利用的,而不仅仅是理论上可能的。 **加密行为测试** — 在 Docker Sandbox 中为加密误用发现生成并执行行为测试 Harness。检测时序侧信道、ECB 模式、弱哈希、弱 PRNG 等。 **IRIS 风格污点分析** — 受 IRIS 论文(ICLR 2025)启发的 LLM 驱动 CodeQL 污点分析。LLM 为项目选择相关的 CWE 类别,动态编写 CodeQL 提取查询(与语言、框架无关),标记候选项,生成 TaintTracking 配置,并在编译失败时迭代优化查询。无需模板,无硬编码框架检测。 **Randori PASTA 威胁建模** — 内置 `@kuzushi/randori-plugin` 作为依赖。通过 Claude Code 插件运行 4 阶段 PASTA 分析(目标、范围、DFD 分解、STRIDE 威胁)。威胁线索被注入到所有检测器提示词中以进行威胁知情扫描。包含 ATT&CK、CAPEC 和 OWASP 映射。 **威胁知情狩猎** — 为威胁模型识别的每个 DFD 外部实体生成对抗性 Claude Agent。每个 Agent 作为该参与者(最终用户、管理员、外部服务、LLM Agent)探索代码库,寻找可利用的路径。发现被去重并输入分诊/验证。 **自动规则生成** — 已验证的可利用发现自动生成自定义 Semgrep 规则。规则持久化到 `.kuzushi/custom-rules/` 并在后续扫描中自动加载,创建一个反馈循环,使扫描器随着时间的推移变得更聪明。规则会根据原始发现进行验证,如果不匹配则移除。 **差异感知污点分析** — 将分析范围缩小到自基础分支以来更改的文件。在 CI 中运行 `--taint-diff-base main`,仅分析 PR 中的新内容。 **可恢复运行** — 将管道状态保存到 SQLite。扫描被中断?`--resume` 从中断的地方准确继续。 **补丁合成** — `kuzushi patch --fingerprint ` 在一次性 Git Worktree 中生成并验证安全补丁,而不触碰你的工作副本。 **15+ 个专用检测器** — 用于命令注入、XXE、不安全反序列化、SSRF、NoSQL 注入、模板注入、原型污染、竞态条件、供应链、GraphQL 安全、机密/加密、代码配置、认证逻辑、边缘情况和加密行为测试的专用检测任务。每个都有特定漏洞类别的提示词、反幻觉约束和多视角分析。所有检测器都接收威胁模型线索以进行威胁知情扫描。 **分类漏斗** — 使用廉价模型的单 Token LLM 预过滤器在昂贵的分诊之前移除约 80% 的误报,大幅降低每次扫描成本。 **源代码预读** — 分诊 Agent 接收预加载的已标记源文件(发现周围 50 行),消除了冷启动工具调用并提高了推理准确性。 **LLM 代码图** — 构建一个持久的代码图,通过中间件、控制器、服务和数据访问层追踪入口点。来自导入分析的静态骨架 + 用于动态调度、DI 和回调模式的 LLM 辅助填充。将图上下文输入分诊以获得更好的推理。 **多策略分析** — 对每个漏洞类别运行 2-4 种不同的分析方法(语法模式匹配、数据流追踪、第一性原理推理、基于执行的证明),并在策略一致时合并结果并提升置信度。从确认的多策略发现中自动生成可重用的 Semgrep 规则。 **13 个 CWE 知识模块** — SQL 注入、XSS、SSRF、命令注入、路径遍历、认证绕过、反序列化、竞态条件、加密、XXE、文件上传、IDOR 和 NoSQL 注入的领域特定知识 —— 包括危险模式、安全模式、绕过技术和修复示例。 **增量扫描** — 跨运行跳过未更改发现的重新分诊。跟踪上次扫描的提交,计算文件差异,并通过导入图的依赖感知失效来扩展重新扫描范围。 **带有闭环验证的自动补丁** — 确认漏洞后,在一次性 Git Worktree 中自动生成补丁,验证它(应用、构建、测试),然后在修补后的代码上重新运行扫描器以确认漏洞已消失。 **实时流** — SSE 服务器实时流式传输管道事件(`--stream`)。使用 `curl`、`EventSource` 或任何 SSE 客户端连接,以在发现被分诊时查看它们。 **审计日志** — 可选的 JSONL 审计跟踪,记录每个 Agent 决策,用于调试、问责和合规记录。 ## 扫描器插件 | Scanner | Description | Auto-download | |---------|-------------|---------------| | `semgrep` (默认) | 通过 Opengrep/Semgrep 的传统 SAST | Yes | | `codeql` | 通过 GitHub CodeQL CLI 的语义数据流/污点分析 | No (opt-in) | | `agentic` | AI 驱动扫描器 — 带有只读代码仓库工具的 LLM | N/A | | `taint-analysis` | IRIS 风格 LLM 驱动 CodeQL 污点分析 — 动态 CWE 选择、LLM 生成的查询、迭代优化 | No (opt-in) | ``` kuzushi --scanners semgrep,codeql # run multiple scanners kuzushi --scanners agentic # AI-only scan ```
所有命令 ### Scan(扫描,默认) ``` kuzushi # scan with defaults kuzushi --scanners codeql kuzushi --scanners semgrep,codeql kuzushi --scanners semgrep,agentic kuzushi --severity ERROR # only ERROR-level findings kuzushi --max 20 # triage top 20 findings only kuzushi --model anthropic:claude-sonnet-4-6 # use a different model kuzushi --triage-model openai:gpt-4o # separate model for triage kuzushi --triage-max-turns 15 # triage agent turn budget kuzushi --api-key sk-ant-... --base-url https://api.example.com/ # custom API endpoint kuzushi --fresh # clear prior results, re-triage everything kuzushi --db ./my.sqlite3 # custom database path kuzushi --resume # resume the most recent interrupted run kuzushi --resume # resume a specific run by ID ``` ### Verification(验证) ``` kuzushi --verify # enable exploit verification for TPs kuzushi --verify --verify-model openai:gpt-4o-mini # cheaper model for verification kuzushi --verify --verify-max-turns 20 kuzushi --verify --verify-concurrency 3 kuzushi --verify --verify-min-confidence 0.7 # skip low-confidence TPs ``` ### PoC Harness Generation(PoC Harness 生成) ``` kuzushi --verify --poc-harness # generate exploit scripts for verified findings kuzushi --verify --poc-harness --poc-harness-model openai:gpt-4o-mini kuzushi --verify --poc-harness --poc-harness-max-turns 25 kuzushi --verify --poc-harness --poc-harness-concurrency 2 ``` ### Dynamic Analysis(动态分析) ``` kuzushi --verify --poc-harness --dynamic-analysis # execute harnesses to confirm/reject findings kuzushi --verify --dynamic-analysis --dynamic-max-candidates 10 kuzushi --verify --dynamic-analysis --dynamic-min-score 8 ``` ### Patch Synthesis(补丁合成) ``` kuzushi patch --fingerprint # synthesize and validate a patch kuzushi patch --fingerprint --build-cmd "npm run build" kuzushi patch --fingerprint --test-cmd "npm test" --max-iterations 5 ``` ### Code Graph(代码图) ``` kuzushi --code-graph # enable LLM-powered code graph (entry-point-to-sink tracing) ``` ### Multi-Strategy Analysis(多策略分析) ``` kuzushi --multi-strategy # adaptive mode: run cheapest strategy first, exit early if confident kuzushi --multi-strategy-full # run all strategies in parallel for maximum coverage kuzushi --multi-strategy-budget 3.0 # per-finding budget across all strategies (USD) kuzushi --multi-strategy-auto-rules # generate Semgrep rules from confirmed multi-strategy findings ``` ### Auto-Patch (Closed-Loop)(自动补丁-闭环) ``` kuzushi --verify --auto-patch # patch exploitable findings, re-verify kuzushi --verify --auto-patch --auto-patch-after triage # patch any TP (broadest trigger) kuzushi --verify --auto-patch --auto-patch-after poc # patch only after PoC proves it kuzushi --auto-patch --patch-verify-depth triage # re-run scanner + triage on patched code kuzushi --auto-patch --patch-verify-depth full # full pipeline re-verify (most thorough) kuzushi --auto-patch --patch-concurrency 3 # parallel patch synthesis tasks ``` ### Streaming(流式传输) ``` kuzushi --stream # start SSE server on auto-assigned port kuzushi --stream --stream-port 3001 # start SSE server on specific port # 然后在另一个终端中: curl -N http://localhost:3001/events # watch live pipeline events ``` ### Crypto Behavioral Testing(加密行为测试) ``` kuzushi --crypto-behavioral-test # generate & run behavioral tests for crypto misuse findings ``` ### Diff-Aware Taint(差异感知污点分析) ``` kuzushi --taint-diff-base main # only taint-analyze files changed since main kuzushi --taint-diff-base main --taint-diff-mode delta # emit only findings intersecting the diff kuzushi --taint-diff-base main --taint-diff-mode baseline # merge cached + rerun for full baseline ``` ### Output & Observability(输出与可观测性) ``` kuzushi --output report.md # export markdown report kuzushi --sarif results.sarif # export SARIF v2.1.0 kuzushi --json results.json # export JSON report kuzushi --csv results.csv # export CSV report kuzushi --jsonl results.jsonl # export JSONL report kuzushi --audit-log # write agent activity to .kuzushi/runs/{runId}/ kuzushi --verbose # show debug-level runtime diagnostics kuzushi --no-context # disable repo context gathering ``` ### Retry(重试) ``` kuzushi --max-triage-retries 3 # retry failed triage calls (default: 2) kuzushi --max-verify-retries 3 # retry failed verification calls (default: 2) kuzushi --retry-backoff-ms 10000 # initial backoff delay (default: 5000) ``` ### Config(配置) ``` kuzushi config get # show all config kuzushi config get model # show one key kuzushi config set model anthropic:claude-sonnet-4-6 kuzushi config set scanners semgrep,agentic kuzushi config set scannerConfig.codeql.dbPath ./codeql-db kuzushi config set scannerConfig.codeql.suite javascript-security-extended kuzushi config set scannerConfig.semgrep.binary opengrep kuzushi config set scannerConfig.semgrep.configFlag auto kuzushi config set scannerConfig.agentic.model anthropic:claude-sonnet-4-6 kuzushi config set scannerConfig.agentic.maxFindings 25 kuzushi config set severity ERROR,WARNING,INFO kuzushi config set verify true kuzushi config set verifyMinConfidence 0.7 kuzushi config set auditLog true kuzushi config validate --repo . # validate the effective config for this repo kuzushi config unset model # reset to default kuzushi config path # print config file location ``` 全局配置位于 `~/.kuzushi/config.json`。可选的项目覆盖可以位于 `/.kuzushi/config.json`。CLI 标志覆盖配置值。 **仓库本地配置沙箱:** 默认情况下,项目级配置文件(`/.kuzushi/config.json`)是沙箱化的 —— 可能执行代码或访问外部系统的键(例如 `hooks`、`externalTasks`、`pocExecute`、扫描器二进制路径)会被静默剥离。这可以防止克隆的代码库更改你的运行时行为。当你信任代码仓库时,传递 `--trust-repo-config` 以选择加入完整的项目配置。 安全说明:`agentRuntimeConfig.apiKey` 以明文形式存储在配置文件中。对于一次性运行,建议使用 `--api-key`,或从你的 Shell/Secrets Manager 中使用 `ANTHROPIC_API_KEY`。
配置参考 | Key | Default | Description | | --- | --- | --- | | `model` | `anthropic:claude-sonnet-4-6` | 用于器和默认分诊模型的 LLM 模型 | | `triageModel` | _(uses `model`)_ | 覆盖分诊 Agent 使用的模型 | | `triageBatchModel` | `anthropic:claude-haiku-4-5` | 用于批量分诊的模型(回退到 `triageModel`,然后是 `model`) | | `triageMaxTurns` | `null` (uses runtime default: `10`) | 每次分诊调用的最大 Agentic 轮次 | | `scanners` | `["semgrep"]` | 要运行的扫描器插件,按顺序 | | `severity` | `["ERROR","WARNING"]` | Semgrep 严重性过滤器 | | `excludePatterns` | `["test","tests","node_modules",...]` | 要跳过的目录/Glob | | `scannerConfig` | `{ semgrep: {...}, agentic: {...}, codeql: {...} }` | 按扫描器 ID 键入的每个扫描器配置块 | | `busBackend` | `"in-process"` | 消息总线传输(`in-process`) | | `triageConcurrency` | `5` | 并行 LLM 分诊调用 | | `scanMode` | `"concurrent"` | 扫描器执行模式(`sequential` 或 `concurrent`) | | `enabledTasks` | `["context-gatherer", "context-enricher", "app-model-build", "threat-scenario-build", "secrets-crypto-detect", "crypto-behavioral-test", "code-config-detect", ...]` | 除了扫描器之外要启用的 Agent 任务 | | `agentRuntimeBackend` | `"claude"` | Agent 运行时后端(`claude` 或 `pi-ai`) | | `verify` | `false` | 启用可利用性验证 | | `verifyModel` | _(uses `triageModel` or `model`)_ | 覆盖验证 Agent 的模型 | | `verifyMaxTurns` | `15` | 验证 Agent 的最大轮次 | | `verifyConcurrency` | `3` | 并行验证调用 | | `verifyVerdicts` | `["tp"]` | 要验证的分诊判定 | | `verifyMinConfidence` | `0` | 触发验证的最小分诊置信度 (0-1) | | `pocHarness` | `false` | 启用验证后的 PoC Harness 生成(需要 `--verify`) | | `pocHarnessModel` | _(uses `triageModel` or `model`)_ | 覆盖 PoC Harness Agent 的模型 | | `pocHarnessMaxTurns` | `20` | PoC Harness Agent 的最大轮次 | | `pocHarnessConcurrency` | `2` | 并行 PoC Harness 生成调用 | | `cryptoBehavioralTestEnabled` | `false` | 为加密误用发现启用加密行为测试 | | `cryptoBehavioralMaxFindings` | `10` | 每次运行为其生成行为测试的最大发现数 | | `cryptoBehavioralTimeoutMs` | `120000` | 每个 Harness 的执行超时(毫秒) | | `cryptoBehavioralPerFindingBudgetUsd` | `1` | 每个 Harness 发现生成的成本预算(美元) | | `codeGraphEnabled` | `true` | 启用 LLM 驱动的代码图构建和丰富 | | `multiStrategyMode` | `"off"` | 多策略分析模式(`off`、`adaptive`、`full`) | | `multiStrategyBudgetUsd` | `2.0` | 跨所有策略的每个发现预算(USD) | | `autoPatchEnabled` | `false` | 在管道中启用自动补丁生成 | | `autoPatchAfter` | `"verify"` | 自动补丁的触发阈值(`verify`、`poc`、`triage`) | | `patchVerifyDepth` | `"scanner"` | 打补丁后的重新验证深度(`scanner`、`triage`、`full`) | | `patchConcurrency` | `2` | 最大并发补丁合成任务 | | `incrementalCache` | `true` | 启用增量扫描(跨运行跳过未更改的发现) | | `incrementalDepTracking` | `true` | 在重新扫描范围中包含已更改文件的导入者 | | `streamingEnabled` | `false` | 为实时管道事件启用 SSE 流式服务器 | | `streamingPort` | `0` (auto) | SSE 流式服务器的端口 | | `enableContextGathering` | `true` | 在分诊前运行代码仓库上下文分析 | | `auditLog` | `false` | 将 Agent 活动写入 JSONL 审计文件 | | `reportOutput` | _(unset)_ | 将 Markdown 报告输出写入此路径 | | `sarifOutput` | _(unset)_ | 将 SARIF v2.1.0 输出写入此路径 | | `jsonOutput` | _(unset)_ | 将 JSON 报告写入此路径 | | `csvOutput` | _(unset)_ | 将 CSV 报告写入此路径 | | `jsonlOutput` | _(unset)_ | 将 JSONL 报告写入此路径 | | `maxTriageRetries` | `2` | 重试失败的分诊调用 | | `maxVerifyRetries` | `2` | 重试失败的验证调用 | | `maxPocHarnessRetries` | `2` | 重试失败的 PoC Harness 生成调用 | | `retryBackoffMs` | `5000` | 初始重试退避延迟(毫秒) | | `retryBackoffMultiplier` | `2` | 指数退避乘数 | 配置示例: ``` { "scanners": ["semgrep", "codeql", "agentic"], "scanMode": "concurrent", "triageConcurrency": 3, "verify": true, "verifyMinConfidence": 0.7, "auditLog": true, "cryptoBehavioralTestEnabled": false, "enabledTasks": ["context-gatherer", "context-enricher", "app-model-build", "threat-scenario-build", "secrets-crypto-detect", "crypto-behavioral-test", "code-config-detect"], "scannerConfig": { "codeql": { "dbPath": "./codeql-db", "suite": "javascript-security-extended" }, "semgrep": { "binary": "opengrep", "configFlag": "auto" }, "agentic": { "model": "anthropic:claude-sonnet-4-6", "maxFindings": 20 } } } ``` ### 环境变量 | Variable | Required | Description | | --- | --- | --- | | `ANTHROPIC_API_KEY` | 当使用 `anthropic:*` 模型时 | 用于 pi-ai 后端的 Anthropic API 密钥 | | `OPENAI_API_KEY` | 当使用 `openai:*` 模型时 | 用于 pi-ai 后端的 OpenAI API 密钥 | | `GEMINI_API_KEY` / `GOOGLE_API_KEY` | 当使用 `google:*` 模型时 | 用于 pi-ai 后端的 Google API 密钥 |
CodeQL 设置 `codeql` 扫描器需要单独安装 [CodeQL CLI](https://github.com/github/codeql-cli-binaries/releases)。与 Semgrep 不同,它**不会自动下载**(CLI 约 500 MB,且需要接受 GitHub 的许可)。 安装它: ``` # 通过 GitHub CLI(推荐): gh extension install github/gh-codeql && gh codeql install-stub # 或直接从以下地址下载: # https://github.com/github/codeql-cli-binaries/releases ``` Kuzushi 按以下顺序查找 CodeQL 二进制文件: 1. 你 PATH 上的 `codeql` 2. 之前放置在 `~/.kuzushi/bin/codeql` 的二进制文件 3. 如果未找到,则失败并显示安装说明 CodeQL 是**可选的** —— 默认扫描器列表是 `["semgrep"]`。要启用它: ``` kuzushi --scanners codeql # CodeQL only kuzushi --scanners semgrep,codeql # both scanners kuzushi config set scanners semgrep,codeql # persist as default ``` CodeQL 在运行查询之前从你的源代码构建数据库。你可以通过指向预构建的数据库来跳过此步骤: ``` kuzushi config set scannerConfig.codeql.dbPath ./codeql-db ```
污点分析设置 `taint-analysis` 扫描器是一个基于 CodeQL 的多通道管道,使用 LLM 辅助分类来标记源、汇、净化器和摘要。它需要: 1. **CodeQL CLI** — 与 `codeql` 扫描器的要求相同 2. **Python 3** — 污点分析脚本用于查询生成 污点分析模板、引用和脚本作为 [`@kuzushi/augur`](https://www.npmjs.com/package/@kuzushi/augur) npm 包捆绑,并随 `pnpm install` 自动安装。无需手动克隆或 `TAINT_ANALYSIS_PATH` 设置。 ``` kuzushi --scanners taint-analysis kuzushi config set scannerConfig["taint-analysis"].labelingModel anthropic:claude-sonnet-4-6 kuzushi config set scannerConfig["taint-analysis"].passes "[1,2,3,4,5,6]" ``` 要覆盖捆绑的污点分析资产(例如,用于本地开发),设置 `TAINT_ANALYSIS_PATH` 或 `scannerConfig["taint-analysis"].taintAnalysisPath`: ``` export TAINT_ANALYSIS_PATH=/path/to/local/taint-analysis kuzushi config set scannerConfig["taint-analysis"].taintAnalysisPath /path/to/local/taint-analysis ``` 污点分析按 DAG 顺序运行三个阶段:**预检**(数据库创建、候选项提取)、**标记**(LLM 分类)和**分析**(库生成、查询执行、发现提取)。 ### 污点分析 TI + 产物输出 每次污点分析运行都会在工作空间(`scannerConfig["taint-analysis"].workspaceDir`,默认 `./iris`)和运行目录下发出互操作性产物: - `iris/exploration/TI_PRIOR.md` 和 `iris/exploration/ti_prior.json` — 实时 TI 先验(CISA KEV + NVD),带有获取失败时的降级模式元数据 - `iris/labels/TAINT_MODEL.json` — 每个 CWE 的污点模型(`sources/sinks/sanitizers/propagators`),带有 TI 加权基础 - `iris/results/findings.raw.json` — 来自污点分析通道 SARIF 输出的规范化原始发现聚合 - `.kuzushi/runs//findings.triaged.json` — 分诊后的发现导出,包括可选的污点分析源/汇分诊详细信息 相关的 `scannerConfig["taint-analysis"]` 选项: - `tiMode`: `"live-required"` (默认) - `tiFailurePolicy`: `"continue_without_ti"` (默认) - `tiTimeoutMs`: 实时 TI 获取超时(毫秒) - `refinementEnabled`: 启用一次分诊后优化循环(默认 `false`) - `refinementIterations`: 启用时的最大优化轮次(默认 `1`) - `refinementDeltaOnly`: 优化后仅对更改的发现进行分诊(默认 `true`) - `refinementModel`: 用于优化阶段连接的可选模型覆盖
Agent 运行时后端 Kuzushi 支持两种 Agent 运行时后端: **Claude(默认)** — 使用 `@anthropic-ai/claude-agent-sdk` 生成带有内置工具实现(Read、Glob、Grep、Bash 等)的 Claude Code 子进程。支持会话重用:批量操作通过 SDK 的流式输入 API 在多个轮次中保持单个子进程存活,将子进程生成减少约 99%。需要 `ANTHROPIC_API_KEY`。 **Pi-AI** — 使用 `@mariozechner/pi-ai` 提供供应商无关的 LLM 访问。它通过单一接口支持 15+ 个提供商(Anthropic、OpenAI、Google、Groq、Mistral 等)。所有 LLM 调用都在进程内运行(无子进程)。 Kuzushi 在 pi-ai 之上实现了一个内部 Agentic 循环: 1. **工具调用循环** — 调用模型,解析工具调用,执行工具,反馈结果,重复直到停止或达到最大轮次 2. **本地工具实现** — Read(带行号的文件读取器),Glob(Node 22+ `globSync`),Grep(跨文件正则搜索) 3. **结构化输出** — 系统提示词注入 + 从围栏代码块或原始文本中进行事后 JSON 提取 4. **安全控制** — 最大轮次、预算强制、中止信号、通过 `canUseTool` 的权限门控 ``` # 配合任何支持的 provider 使用: OPENAI_API_KEY=... kuzushi --model openai:gpt-4o GEMINI_API_KEY=... kuzushi --model google:gemini-2.0-flash ANTHROPIC_API_KEY=... kuzushi --model anthropic:claude-sonnet-4-6 ```
架构 Kuzushi 构建在三个核心抽象之上: **消息总线** — 一个传输无关的 `MessageBus` 接口(`publish`、`subscribe`、`waitFor`),用于解耦管道阶段。当前稳定版本支持进程内 `EventEmitter` 传输。 **AgentTask + DAG** — 每个工作单元(上下文收集器、扫描器、未来的威胁建模器等)都实现了 `AgentTask` 接口:一个 `id`、`dependsOn` 列表、`outputKind` 和一个 `run()` 方法。`TaskRegistry` 将启用的任务解析为 DAG,将它们分组为并行阶段,检测循环,并将执行移交给 `PipelineOrchestrator`。上游任务输出会自动转发给依赖项。 **管道阶段** — DAG 完成后,编排器驱动顺序阶段:分诊(分类发现)、验证(构造 PoC 漏洞利用)、补丁合成(自动生成并重新验证修复)和报告(显示结果 + 可选的 SSE 流)。每个阶段都有自己的并发控制、成本跟踪和检查点支持。 **策略框架** — 多策略系统用多种分析方法(语法、数据流、推理、执行)包装检测任务,这些方法并行或自适应运行,并通过基于确证的置信度提升合并结果。 **代码图** — 一个由 SQLite 支持的持久代码路径图,从入口点到汇点,由静态导入分析和 LLM 辅助追踪构建。注入到分诊提示词中,以进行关于可达性和净化的更深入推理。 **会话重用** — Claude 运行时使用 Agent SDK 的 `AsyncIterable` 提示,在多个轮次中保持单个子进程存活。批量操作(污点标记、分诊、验证、重新评分、PoC 生成、补丁合成)将每批数据写入 `.kuzushi/batches/`件,并向子进程发送提示以 `Read` 每个文件。这将每次管道运行的最坏情况子进程生成从约 3,100 个减少到约 24 个。不支持 `createSession` 的运行时(pi-ai)会自动回退到每次调用一个子进程。 现有的 `ScannerPlugin` 实现(Semgrep、Agentic)通过 `adaptScannerPlugin()` 适配为 `AgentTask`,因此扫描器插件 API 保持稳定。 有关添加新 Agent 任务的完整开发人员指南,请参见 [AGENTS.md](AGENTS.md)。 ### 包表面 Kuzushi 作为 CLI 优先的包发布。支持的 npm 表面是可执行文件加上根包导出;`dist/*` 和 `src/*` 下的内部模块不是稳定的 API 契约,可能会在版本之间更改。 发布构建预期来自对 `dist/` 的干净编译。`pnpm build` 现在首先清理 `dist/`,`prepack` 自动重建,`pnpm verify:pack` 运行 `npm pack --dry-run`,因此不会发布过时的产物。
## 输出 结果存储在 `/.kuzushi/findings.sqlite3` 的 SQLite 中。导出为任何格式: ``` kuzushi --output report.md # Markdown kuzushi --sarif results.sarif # SARIF v2.1.0 (GitHub Code Scanning compatible) kuzushi --json results.json # JSON kuzushi --csv results.csv # CSV kuzushi --jsonl results.jsonl # JSONL ``` ## 开发 ``` pnpm install # install deps pnpm dev -- /path/to/repo # run in dev mode pnpm check:types # typecheck app + benchmark tooling pnpm typecheck # type check pnpm test # run tests pnpm test:e2e # deterministic smoke scan against fixture app pnpm test:coverage # tests + coverage (70% threshold) pnpm build # compile to dist/ pnpm verify:pack # verify published tarball contents pnpm benchmark # run benchmark suite against govwa dataset pnpm benchmark:freeze # freeze current benchmark results as baseline pnpm benchmark:diff # diff current results against frozen baseline pnpm benchmark:regression # CI regression check against baseline ``` ## 故障排除 - **"Error: missing API credentials for selected model provider(s)."**: 为你选择的模型设置提供商环境变量(例如 `ANTHROPIC_API_KEY`、`OPENAI_API_KEY` 或 `GEMINI_API_KEY`) - **"No findings from scanner. Code looks clean."**: 你的代码是干净的,或者尝试 `--severity ERROR,WARNING,INFO` 以包含较低严重性的规则 - **Scan interrupted**: 重新运行相同的命令(已分诊的发现会被跳过),或使用 `--resume` 从确切的检查点继续 - **Wrong model**: `kuzushi config set model anthropic:claude-sonnet-4-6` 或每次扫描传递 `--model` - **Scanner download fails**: 手动安装 Opengrep 或 Semgrep,确保它在你的 PATH 上 - **High triage cost**: 使用 `--triage-model openai:gpt-4o-mini` 进行更便宜的分诊,或使用 `--max 10` 限制发现 - **Verification too expensive**: 使用 `--verify-min-confidence 0.8` 仅验证高置信度的 TP,或使用 `--verify-model openai:gpt-4o-mini` - **pi-ai model not found**: 确保模型字符串使用 `provider:modelId` 格式(例如 `openai:gpt-4o`,而不仅仅是 `gpt-4o`) ## 贡献 有关开发设置和指南,请参见 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 许可证 [MIT](LICENSE)
标签:AI 代理, Claude, CVE检测, DevSecOps, DLL 劫持, GNU通用公共许可证, LNA, Maven, MITM代理, Node.js, OpenAI, Opengrep, PoC 生成, SAST, Semgrep, WordPress安全扫描, 上游代理, 代码安全, 内存规避, 大语言模型, 漏洞枚举, 漏洞验证, 盲注攻击, 自动分类, 自动化攻击, 误报过滤, 请求拦截, 软件供应链安全, 远程方法调用, 错误基检测, 静态代码分析