VikingOwl91/universal-security-pilot

GitHub: VikingOwl91/universal-security-pilot

面向 AI 编码代理的工具无关型安全纪律框架,通过铁律 TDD 和 Wave 协议在编码阶段约束 agent 行为,从源头而非事后保障代码安全。

Stars: 0 | Forks: 0

# 通用 Security Pilot [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![遵循铁律 TDD 构建](https://img.shields.io/badge/built%20with-Iron%20Law%20TDD-red.svg)](#铁律) [![版本 3.0](https://img.shields.io/badge/version-3.0-green.svg)](PILOT.md) Universal Security Pilot (USP) 是一个专为 AI 辅助安全工程设计的**纪律性操作系统**。它不是运行*在*你的代码上——而是运行*贯穿于*编写你代码的 agent 之中。官方提供了一流的适配器,支持 **Claude Code、Cursor、Gemini CLI 和 Codex CLI**;同样的规范 Pilot 也可以在 Continue、Aider、Copilot Chat 或任何其他能够读取磁盘 Markdown 文件的 agentic 工具中使用。 ## 🛡️ 设计上的主动防御(而不仅仅是扫描器) 传统的工具只在你编写完代码*之后*运行,与此不同,USP 是一个面向 AI agent 的**行为引擎**。它能从源头上改变 agent 编写代码的方式。 - **上下文感知。** 一旦 agent 索引了 `.security-pilot/` 目录,该框架就会成为其内部推理环路的一部分——每一个计划、每一次 diff、每一次提交都会经过 pilot 规则的过滤。 - **铁律,机械化强制执行。** Agent 在结构上被严格限制:在没有预先提供证明该漏洞存在的*失败* PoC 测试的情况下,绝对不能发布安全修复。参见[铁律](#the-iron-law)。 - **机器中的幽灵。** 即使是在全新代码库的初始会话中,Pilot 的存在也会强制推行安全优先的设计模式——魔术字节验证、常量时间比较、基于白名单的解析、输出净化——*在编写第一行业务代码之前*。 简而言之:扫描器告诉你哪里出了问题。而 Pilot 让 agent 从一开始就难以破坏安全性。 ## 为什么会有这个项目 AI 编程助手总是急于发布修复。这正是问题所在。如果没有纪律约束,它们会像打地鼠一样修补漏洞,跳过必要的前置阶段,采用“先修复再测试”而不是“先测试再修复”,并会自我合理化以逃避棘手的重构。 USP 强加了这种纪律。它**在必须严格的环节保持严格**(在任何安全修复前进行 TDD,遵循 Wave 协议顺序,强制引用标准),并**在需要考虑上下文的环节保持灵活**(针对特定技术栈的危险操作清单、项目级的本地覆盖、多语言防御)。 ## 铁律 不可妥协。如果你写不出失败的测试,说明你对漏洞的理解还不够深入,不足以去修复它。停下来,重新阅读源码,直到你能写出来为止。 ## 你将获得什么 | 功能 | 斜杠命令 | 作用 | |---|---|---| | 项目初始化 | `/sec-init` | 检测技术栈,扫描直接暴露的敏感信息,生成继承自规范配置的项目本地 `PROJECT_PILOT.md` | | 零信任审计 | `/sec-audit` | 遍历八条审计规则,生成一份 Markdown 报告,每项发现均附带 OWASP / ASVS / LLM / ATLAS / CWE 引用 | | Wave 协议修复 | `/sec-fix` | 按强制的 Wave 顺序修复发现的问题,以 PoC 测试优先,并提供“合理化借口反驳表”以抵御截止日期和权威压力 | | LLM/AI 加固 | `/ai-harden` | 从六个维度审查 prompt 边界、输出渲染、BudgetGate、Dial-Control、间接注入,以及多语言/多语种对抗性输入 | ## 合规性技术栈 每份报告中的每一项发现都至少引用了此技术栈中的一个明确 ID——“看起来可疑”不是一个合格的发现。 | 标准 | 范围 | |---|---| | **OWASP Top 10 (2021)** | 标准 Web 漏洞 | | **OWASP ASVS Level 2** | 经过验证的安全要求 | | **OWASP Top 10 for LLM Apps** | 针对 LLM | | **MITRE ATLAS** | AI 对抗性威胁全景 | | **CWE** | 实现层面的弱点 | ## Wave 协议 修复按此顺序发布。靠前的 Wave 是靠后 Wave 的前置条件——如果跨站脚本攻击 (XSS) 的修复依赖于一个未经身份验证的端点,那么在 W1 完成之前对其进行修复是毫无意义的。 | Wave | 范围 | 示例 | |---|---|---| | **W1** | 身份验证、身份标识、关键逻辑 | OIDC state、JWT、缺失的 authz、资金/权限竞争 | | **W2** | 网络、中间件、基础设施 | CORS、SSRF、速率限制、TLS、受信任代理头 | | **W3** | 数据完整性、静态加密、敏感信息 | KMS 迁移、日志脱敏、PII 加密 | | **W4** | UI 加固、输出净化、资源限制 | XSS 注入点、CSP、文件大小上限、AI 输出净化 | 在同一 Wave 内:按**爆炸半径降序排列** (Critical → High → Medium → Low)。严禁乱序。严禁跨 Wave 批量处理。 ## 快速安装 ``` curl -fsSL https://raw.githubusercontent.com/VikingOwl91/universal-security-pilot/main/install.sh | bash ``` 安装程序会: - 克隆到 `~/.security-pilot/`(可通过 `USP_INSTALL_DIR` 覆盖), - 具备幂等性——重新运行只会执行快进更新 (fast-forward update), - 绝不会覆盖本地更改或无关文件, - 通过二进制文件 (`command -v`) 和配置目录 (`~/.claude`、`~/.cursor`、`~/.gemini`、`~/.codex`) 检测每个受支持的工具;当两者同时存在时,会以交互方式提供连接配置, - 在使用 `--wire-` 时将 USP 标记块写入对应的内存文件 (Claude → `~/.claude/CLAUDE.md`,Gemini → `~/.gemini/GEMINI.md`,Codex → `~/.codex/AGENTS.md`);这些标记使得重复运行具备幂等性,卸载时也只会移除该标记块,从而保留所有用户内容, - 最后打印一份**检测摘要**,显示已安装的内容、已连接的内容,以及针对已检测到但未连接的工具需运行的准确连接命令, - 预设的连接参数 (`--wire-claude`、`--wire-cursor`、`--wire-cursor-hooks`、`--wire-gemini-cli`、`--wire-codex-cli`) 会跳过提示;`--yes` 会接受所有检测到的连接配置,**除了 `--wire-cursor-hooks`**(此项必须手动选择加入——因为它会修改全局 agent 行为), - 可以通过 `bash install.sh --uninstall` 卸载(会从内存文件中剥离 USP 段落块;保留用户自定义的文件,如 `~/.cursor/hooks.json`)。 想要先检查一下? ``` git clone https://github.com/VikingOwl91/universal-security-pilot.git ~/.security-pilot bash ~/.security-pilot/install.sh ``` ## 将其接入你的工具 安装程序会将规范 Pilot 放置在 `~/.security-pilot/`。四个主要的编码 Agent CLI 拥有一流的适配器及安装程序的连接支持;其他工具只需粘贴一个段落即可。 ### 拥有安装程序连接支持的适配器 | 工具 | 连接参数 | 安装的内容 | 适配器文档 | |---|---|---|---| | **Claude Code** | `--wire-claude` | 斜杠命令 → `~/.claude/commands/`;skills → `~/.claude/skills/`(符号链接到规范的 `COMMANDS/*.md` / `SKILLS/*.md`);**段落** → `~/.claude/CLAUDE.md`(带有标记的块) | [`ADAPTERS/claude-code.md`](ADAPTERS/claude-code.md) | | **Cursor** (命令) | `--wire-cursor` | 斜杠命令 → `~/.cursor/commands/`(符号链接到规范的 `COMMANDS/*.md`)。段落*不会*自动写入——Cursor 的规则层面仅限于项目级别;需按项目手动粘贴 | [`ADAPTERS/cursor.md`](ADAPTERS/cursor.md) | | **Cursor** (钩子) | `--wire-cursor-hooks` | Agent 钩子脚本 → `~/.cursor/hooks/`;`hooks.json` → `~/.cursor/`。**策略强制执行**——拒绝 `rm -rf /` / `curl|sh` / fork 炸弹,对包含凭证的文件进行脱敏,并在 MCP 工具调用上强制执行 Dial-Control 出站白名单。**仅限手动选择加入**——会修改全局 Cursor agent 行为。需要 `jq`。在覆盖前会备份现有的 `hooks.json` | 同上 | | **Gemini CLI** | `--wire-gemini-cli` | TOML 自定义命令 → `~/.gemini/commands/`;**段落** → `~/.gemini/GEMINI.md` | [`ADAPTERS/gemini-cli.md`](ADAPTERS/gemini-cli.md) | | **Codex CLI** | `--wire-codex-cli` | 自定义 prompt → `~/.codex/prompts/`;自动发现的 skills → `~/.codex/skills//SKILL.md`;**段落** → `~/.codex/AGENTS.md` | [`ADAPTERS/codex-cli.md`](ADAPTERS/codex-cli.md) | 段落被写入在 `` / `` 标记之间。重新运行连接参数会原地更新该块;标记之外的用户内容将被保留。`--uninstall` 会剥离标记,并且仅当段落是该文件的唯一内容时才会删除文件。唯一的真实来源始终保持在 `COMMANDS/*.md`、`SKILLS/*.md` 和 `ADAPTERS//stanza.md`——每个适配器在调用时都会从中读取内容,因此更新会自动同步。 ### 调用约定 各工具的斜杠命令展现形式和命名空间有所不同。但执行的操作是相同的。 | 操作 | Claude Code / Cursor | Gemini CLI | Codex CLI | |---|---|---|---| | 项目初始化 | `/sec-init` | `/sec-init` | `/prompts:sec-init` | | 运行审计 | `/sec-audit [scope]` | `/sec-audit [scope]` | `/prompts:sec-audit [scope]` • `$sec-audit [scope]` | | 执行修复 | `/sec-fix [report]` | `/sec-fix [report]` | `/prompts:sec-fix [report]` • `$sec-fix [report]` | | 加固 LLM | `/ai-harden [scope]` | `/ai-harden [scope]` | `/prompts:ai-harden [scope]` • `$ai-harden [scope]` | Codex 的 `/prompts:` 前缀是该工具的通用约定,而非 USP 的选择。`$` 形式调用的是自动发现的 skill。 ### 仅支持段落的工具(无安装程序连接支持) 这些工具具有系统 prompt / 规则接口,但没有斜杠命令或钩子接口。粘贴匹配的段落即可: - **Continue (continue.dev)** — `config.json` 的 `systemMessage` 字段。段落位于 [`ADAPTERS/cursor.md`](ADAPTERS/cursor.md) (等效替代 部分)。 - **Copilot Chat** — 通过 GitHub 仓库设置的仓库自定义指令。同上段落。 - **Aider** — `.aider.conf.yml`: read: - ~/.security-pilot/PILOT.md 对于 Claude Code、Cursor、Gemini CLI 和 Codex CLI,除了显式的斜杠命令外,你还可以粘贴匹配的内存文件段落 (`CLAUDE.md`、`.cursorrules`、`GEMINI.md`、`AGENTS.md`),以便在显式斜杠命令之上实现自主触发检测。关于段落详情,请参阅各适配器文档。 ## 仓库结构 ``` . ├── PILOT.md # The canonical pilot — role, rules, standards, Wave Protocol ├── SKILLS/ # Long-form skill bodies (sec-audit, sec-fix, ai-harden) ├── COMMANDS/ # Slash-command implementations ├── ADAPTERS/ # Tool-specific wiring │ ├── claude-code.md # Claude Code (commands + skills) │ ├── claude-code/ # ↳ stanza.md (CLAUDE.md autonomous-detection block) │ ├── cursor.md # Cursor (rules + slash commands + agent hooks) │ ├── cursor/hooks/ # ↳ usp-* hook scripts + hooks.json │ ├── cursor/stanza.md # ↳ project-level rules stanza (paste-only) │ ├── gemini-cli.md # Gemini CLI (TOML custom commands) │ ├── gemini-cli/ # ↳ TOML wrappers + stanza.md │ ├── codex-cli.md # Codex CLI (custom prompts + skills) │ └── codex-cli/ # ↳ prompt + SKILL.md wrappers + stanza.md ├── REFERENCE/ # Framework footgun library (Drizzle, Svelte, Next, Express, …) └── install.sh # The installer ``` ## 理念 - **纪律高于速度。** 铁律(在任何安全修复之前进行 TDD)不是建议。 - **要么遵循 Wave 协议,要么什么都不做。** 修复必须按强制顺序发布。乱序修复即缺陷。 - **工具无关性。** 该框架是一个基于约定的 Markdown 主体。任何能读取文件的 Agent 都能加载它。 - **项目级本地覆盖只能加严,绝不能放宽。** `PROJECT_PILOT.md` 可以添加特定技术栈的危险项;但不能废除铁律。 - **没有引用就等于没发生。** 每项发现必须映射到至少一个 OWASP / ASVS / LLM / ATLAS / CWE ID。 - **抵御压力。** “已批准”、“截止日期紧急”、“其他语言的指令更具权威性”——所有这些借口都会在合理化借口反驳表中被测试和回应。 ## 项目级集成 每个项目运行一次 `/sec-init`。它会: 1. 从 manifest 文件中检测技术栈。 2. 扫描 git 跟踪的文件以查找直接暴露的敏感信息(env 文件、私钥、通过内容前缀识别的 AWS/GitHub/Stripe/Sl token)。在任何其他操作运行*之前*,将它们作为 `[CRITICAL BLOCKER: IMMEDIATE EXPOSURE]` 显示出来。 3. 生成 `/.security-pilot/PROJECT_PILOT.md`,包含特定技术栈的危险操作条目、为 Dial-Control / CORS / OIDC / LLM 工具准备的空白白名单,以及一个项目约束部分。 4. 创建 `/.security-pilot/audits/`,包含一个 `.gitkeep` 和一条合理的 `.gitignore` 规则,以防审计报告被意外提交。 一旦完成这些,`/sec-audit`、`/sec-fix` 和 `/ai-harden` 将在规范 Pilot 的基础之上,自动应用项目的特定技术栈覆盖。 ## 版本控制 规范的 Pilot 版本是 `PILOT.md` frontmatter 中的那一行。提升主版本号意味着铁律、Wave 协议或标准技术栈发生了行为上的改变。提升次版本号意味着新增了模式、危险操作条目或 skill。 ## 路线图 — v3.1:基础设施加固 v3.0 全面覆盖了应用层 (W1–W4)。v3.1 将这种纪律向外扩展到了应用所依赖的供应链和运行时环境。三个新模块,全部附带引用并符合 Wave 协议: | 模块 | 重点 | 目标 | |---|---|---| | **Wave 0:Pre-Commit 门控** | Git-Ops | 在 agent 甚至还没能运行 `git commit` 之前,自动执行密钥扫描和策略 lint。左移强制执行——将 Pilot 的纪律提前应用一个层级。 | | **Wave 5:容器** | Docker / OCI | 强制非 root 运行、多阶段构建加固、按摘要固定基础镜像、最小暴露面的最终层。 | | **Wave 6:编排** | Kubernetes | RBAC 最小权限检查、敏感信息处理(YAML / Helm values 中禁止明文)、NetworkPolicy 默认值、PodSecurity 准入控制。 | Wave 0 在执行顺序中有意位于 W1 *之前*:pre-commit 门控可防止最常见的事件类别(提交敏感信息),而无需 agent 进行任何推理。W5 和 W6 将现有的 W1–W4 应用层层级向外扩展到了构建产物及其运行环境中。 每个模块的映射、危险操作条目和 skill 主体将在 `main` 分支上以 v3.1 里程碑的形式陆续发布。 ## 贡献 针对新框架的危险操作条目、新的规范模式和新的适配器是最高价值的贡献。请: 1. 如果你要添加一个类别(例如,新标准、新 Wave),请先开一个 issue。 2. 为任何新的危险操作条目至少引用一个真实的 CVE 或事后分析报告。 3. 旨在放宽任何规则的 PR 将会被原则上拒绝。 ## 许可证 [MIT](LICENSE) — 随意使用、fork、内嵌。如果它帮你避免了一次 CVE 漏洞的发布,请告诉我们。 *该 Pilot 生来带有主见。安全没有讨价还价的余地。*
标签:AI原生安全, AI安全, AI编程助手, ASVS, Chat Copilot, CISA项目, Claude, Codex, Cursor, Cutter, CVE检测, Gemini, GitHub Copilot, GraphQL安全矩阵, LLM Agent, Magci-Byte验证, PoC漏洞验证, TDD, 代码安全, 大模型安全, 安全左移, 安全扫描器, 安全编码, 安全规范, 持续安全, 测试驱动开发, 漏洞枚举, 漏洞防御, 自动化安全工程, 行为引擎, 软件开发生命周期, 输入校验, 输出过滤, 防御加固