robrounsavall/ai-agent-audit

GitHub: robrounsavall/ai-agent-audit

一款 Windows 离线扫描工具,用于评估和盘点本机 AI 编程智能体的安全态势与数据暴露风险。

Stars: 1 | Forks: 0

# ai-agent-audit 用于评估 AI 编程智能体安全态势的 Windows 端点离线扫描工具。仅需一条命令即可盘点 Claude Code、Cursor、Codex、GitHub Copilot 和 Grok Build 在机器上被允许执行的操作、本地存储的聊天记录,以及可能遗留机密数据的位置。其输出为一个证据层(绝对不包含原始记录或可识别身份的文件系统路径),外加一份 HTML 格式的执行摘要报告(采用深色排版布局,包含安全态势网格和各工具的 MCP 摘要)。 ``` .\aiscan.ps1 all -OutDir C:\scans\today -Briefing ``` 该命令会运行所有的收集器,并打开一个独立的 HTML 报告。在运行任何操作之前,请先查看[基于合成数据构建的示例报告](https://robrounsavall.github.io/ai-agent-audit/sample-report.html)。 [![简报示例 — 合成数据](https://static.pigsec.cn/wp-content/uploads/repos/cas/02/022728040a2a894d107de75f382e3b4c6668e802d8e13ac1247ba7a7a03ff7da.png)](https://robrounsavall.github.io/ai-agent-audit/sample-report.html) ## 诞生背景 AI 编程智能体是开发者端点上拥有特权的半自治执行者。它们掌握着用于 shell 执行、网络出口和 MCP 工具调用的白名单。它们会将完整的聊天记录(其中会不断累积机密信息)存储在可预测的本地路径中。大多数安全团队对此毫无盘点和感知。该工具旨在回答首要问题:**当前端点上暴露了什么?** ## 信任声明 - **只读。** 收集器绝不会修改工具配置、会话或凭证库。 - **离线。** 无任何网络调用。不会有任何数据离开你的机器。 - **仅检测凭证库,绝不提取其值。** `auth.json` 及同类文件仅用于判断其存在性及授权方式。 - **记录保留在本地。** 原始聊天内容只会存放在本地的 `raw/` 目录中。`evidence/` 证据层仅包含计数、大小、哈希值和脱敏样本——其遵循的契约是 [SCHEMA.md](SCHEMA.md)。 - 标准库优先的 Python:9 个收集器中有 8 个可在原生 Python 3.10+ 上运行,无需 pip install。代码库足够小巧,方便你在运行前进行审计。 ## 采集内容 | 收集器 | 读取内容 | 报告内容 | |---|---|---| | `claude` | `~/.claude` 设置 + 项目设置 | allow/deny/ask 规则、MCP servers、绕过模式 | | `cursor` | Cursor `state.vscdb` + 项目数据 | 权限态势、MCP 配置 | | `codex` | `~/.codex` 会话 + `config.toml` | 批准事件、受信任项目、沙箱/遥测态势 | | `copilot` | VS Code / JetBrains Copilot 设置 | 启用状态、排除项、遥测信息 | | `grok` | `~/.grok/config.toml` + 会话元数据 | 权限模式 (always-approve/yolo)、MCP servers | | `chat-history` | 所有记录源 | 数量、留存时间、机密命中指标(内容仅保留在本地 `raw/` 中) | | `git-posture` | `~/repos`, `~/code`, `~/src`, `~/projects`, `~/source` 下的仓库 | 历史记录中的 `.env`、hooks、忽略策略、超大 blobs | | `secrets-scan` | 聊天语料库 + 仓库根目录 | gitleaks 扫描结果(附带脱敏样本) | | `pii-scan` (可选) | 聊天语料库 | Presidio PII 实体;需要 venv + 约 600MB 的模型 | | `tools/mcp-visibility` | 跨所有工具的 MCP 配置 | server 清单、定义漂移、授权态势(token 始终被脱敏) | ## 前置条件 必需条件: - Windows 10/11,PowerShell 5.1+ - 加入 PATH 的 Python 3.10+ 除 `pii-scan` 外的所有收集器仅凭此即可运行——纯标准库,无需 pip install。两个收集器依赖额外工具,如果缺少这些工具,它们将报告异常发现而不是返回结果: **`secrets-scan`** 会调用 [gitleaks](https://github.com/gitleaks/gitleaks)。 请安装它并确保其已加入 PATH: ``` winget install Gitleaks.Gitleaks # 或:scoop install gitleaks / choco install gitleaks # 或下载 release 二进制文件并将其文件夹添加到 PATH ``` **`pii-scan`** 需要 Microsoft Presidio 以及一个 spaCy 模型(约 600MB)。它是唯一需要 venv 的收集器,且 `aiscan.ps1 all` 默认会跳过它: ``` python -m venv .venv .\.venv\Scripts\Activate.ps1 pip install -r requirements.txt python -m spacy download en_core_web_lg .\aiscan.ps1 pii-scan # run inside the venv ``` 目前暂不支持 macOS/Linux。证据模式和收集器逻辑是可移植的;但路径解析以 Windows 优先。欢迎贡献代码。 ## 用法 ``` # Everything,一次性输出,结果打印到控制台 .\aiscan.ps1 # 单个 collector .\aiscan.ps1 claude # 持久化输出 + HTML 简报 .\aiscan.ps1 all -OutDir C:\scans\2026-07-07 -Briefing # 为您打算分享的输出遮盖用户名/路径/机密 .\aiscan.ps1 all -Redact # 将扫描的内容,不读取任何内容 .\aiscan.ps1 discover ``` 跨这五个工具的 MCP server 清单: ``` python tools\mcp-visibility\mcp_visibility.py --format summary ``` ## 证据模型 每个收集器都会向 `evidence/.json` 写入一个 JSON 封装: `findings`(按严重程度排序)、`rules`(标准化的 allow/deny/ask 清单)、`summary`(仅包含数字/受控词汇)、`raw_pointers`(仅限本地文件引用,绝不可安全共享)。工作区身份会被哈希化(`scope_label_redacted`),完整的文件系统路径绝不会出现在证据中,且记录文本绝不会离开本地的 `raw/` 目录。 [SCHEMA.md](SCHEMA.md) 是一种契约;若收集器违反了该契约,则视为 Bug。 ## 仓库布局(组件) 单一 GitHub 仓库;工具按文件夹划分,便于独立测试: ``` core/ # shared common.py, paths.py, discover.py components/ claude/ # collector + tests + fixtures + README cursor/ codex/ copilot/ grok/ chat-history/ git-posture/ secrets-scan/ pii-scan/ report/ # HTML briefing builder tools/mcp-visibility/ # cross-tool MCP inventory utility scripts/test-component.ps1 aiscan.ps1 # orchestrator (one tool or all) SCHEMA.md # evidence contract (all collectors) ``` ## 开发 / 测试单个工具 ``` # 单个 component .\scripts\test-component.ps1 -Name claude .\scripts\test-component.ps1 -Name codex # Everything(所有 components + 集成 + mcp-visibility) .\scripts\test-component.ps1 -Name all # 在本机对单个工具进行 live scan .\aiscan.ps1 claude ``` CI 会在 `windows-latest` 上为每个组件运行矩阵作业,这样某一个收集器的回归问题只会在其对应的矩阵单元中触发失败。 合成演示证据(无真实机器数据)位于 `samples/synthetic-demo/`;可通过 `python samples\make-synthetic-demo.py` 重新生成。 ## 许可证 MIT。请参阅 [LICENSE](LICENSE) 和 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。 本工具不附属于 Anthropic、OpenAI、Cursor、xAI、Microsoft 或 GitHub。
标签:AI合规, StruQ, 人工智能, 安全态势, 敏感信息发现, 用户模式Hook绕过, 离线扫描, 网络安全审计, 逆向工具, 配置检查