cherryswlo/vulconcern

GitHub: cherryswlo/vulconcern

一款零依赖的离线只读扫描器,用于在 AI 编码工具相关供应链安全事件后审查开发者本地配置和凭据是否遭到篡改或滥用。

Stars: 0 | Forks: 0

# vulconcern `vulconcern` 是一个本地、只读的事件分流审计工具,用于审查开发者机器上围绕 AI 编码工具的信任链是否存在篡改和滥用行为。 它所围绕的核心问题比“我的 AI agent 是否安全?”更窄:在发生受损的 package、编辑器扩展、MCP config 或 AI 工具事件后,本地的 AI 编码工具 config、shell 启动文件、shell history 和凭据面是否显示出开发者机器或其 AI CLI 遭到滥用的迹象? 信号最明显的目标是隐蔽的账户使用:wrapper、relay 和后台任务,它们试图仅在开发人员工作时消耗其 AI 计划或重用其 AI session,从而使提供商的使用图表看起来不那么明显异常。 它不是 EDR。v0.1 是一个带有基线差异比对功能的、基于时间点的审计工具。它不会进行拦截,不会常驻运行,不会回连,不会启动 MCP server,也无法捕捉到已经拥有任意代码执行能力并选择隐藏自己的攻击者。 ## 当前状态 目前的实现涵盖: - AI 工具 config 文件和 MCP endpoint 字符串 - 对 JSON config 进行语义检查,以发现可疑的命令目标和 provider base URL 覆盖 - 包含隐藏/控制 Unicode 字符的指令文件 - 凭据文件模式和零散的凭据副本 - 尽最大努力对 macOS 上 Claude Code keychain 的存在进行追踪 - 引用 AI 凭据、source 可疑脚本或包装 AI CLI 的 shell profile 模式 - 针对 AI CLI 绕过权限和凭据侦察用途的 shell history 模式 - 已知的本地入侵指标,例如 `/tmp/inventory.txt` 和 `/tmp/inventory.txt.bak` - 位于常见用户/项目 bin 目录中、触及认证材料的 AI CLI wrapper/shim 文件 - 引用 AI 凭据、AI CLI、可疑路径或 relay 的用户自启动任务 - 有边界的编辑器扩展 manifest 和常见的扩展 bundle,用于检测 AI 认证 relay 行为 - 包含建议后续操作的顶级可疑行为摘要 - TOFU 基线接受和漂移报告 - 规范化的 JSON 和简单的 TOML config 哈希,用于检测基线漂移 ## 安装 使用 Go 1.22+ 在本地构建: ``` go build ./cmd/vulconcern ``` ## 主要来源锚点 下表仅包含有主要来源支持的锚点。来自规划笔记但尚未得到主要来源支持的说法被有意省略,而不是在此重复。 | 规则族 | 主要来源 | 锚点 | |---|---|---| | `VC-CMD-001`, `VC-CMD-002`, `VC-CMD-003`, `VC-CMD-004`, `VC-CMD-005`, `VC-CMD-007`, `VC-CMD-008`, `VC-CRED-001`, `VC-CRED-002`, `VC-CRED-003`, `VC-CRED-004`, `VC-CRED-005`, `VC-CRED-006` | [Nx GitHub 安全公告 GHSA-cxm3-wv7p-598c](https://github.com/nrwl/nx/security/advisories/GHSA-cxm3-wv7p-598c), [StepSecurity 事件分析](https://www.stepsecurity.io/blog/supply-chain-security-alert-popular-nx-build-system-package-compromised-with-data-stealing-malware) | 官方的 Nx 公告称,恶意 package 扫描了文件系统,收集了凭据,并将其发布到受害者账户下的 GitHub repository 中。StepSecurity 的事件分析记录了同一个攻击活动使用本地 AI CLI(`claude`, `gemini`, `q`)配合危险的权限 flag,将清单写入 `/tmp/inventory.txt`,并将 `sudo shutdown -h 0` 追加到 shell rc 文件中。在 `vulconcern` 中,这些来源为命令内容、可疑命令目标、凭据面和 shell profile 规则族提供了锚点。 | | `VC-IR-001`, `VC-IR-002`, `VC-IR-003`, `VC-IR-004` | [Nx GitHub 安全公告 GHSA-cxm3-wv7p-598c](https://github.com/nrwl/nx/security/advisories/GHSA-cxm3-wv7p-598c), [StepSecurity 事件分析](https://www.stepsecurity.io/blog/supply-chain-security-alert-popular-nx-build-system-package-compromised-with-data-stealing-malware) | Nx 和 StepSecurity 报告记录了本地入侵指标,包括 `s1ngularity-repository`、`results.b64`、`/tmp/inventory.txt`、`/tmp/inventory.txt.bak`,以及使用 `--dangerously-skip-permissions`、`--yolo` 和 `--trust-all-tools` 的危险 AI CLI 调用。在 `vulconcern` 中,这些为本地清单 artifact 和 shell history 证据的事件分流规则提供了锚点。Shell history 的发现仅报告模式类别和行号,而不报告命令文本。 | | `VC-MCP-001`, `VC-MCP-002`, `VC-MCP-003` | [NVD CVE-2025-6514](https://nvd.nist.gov/vuln/detail/CVE-2025-6514) | NVD 描述了 `mcp-remote` 在通过精心设计的授权 endpoint 输入连接到不受信任的 MCP server 时,容易受到 OS 命令注入的攻击。这直接为远程 MCP URL 和信任边界的离线审查提供了锚点。 | | `VC-CMD-003`, `VC-CONFIG-001`, 更广泛的 config 信任链警告 | [AWS 安全公告 AWS-2025-015](https://aws.amazon.com/security/security-bulletins/AWS-2025-015/), [NVD CVE-2025-8217](https://nvd.nist.gov/vuln/detail/CVE-2025-8217) | AWS 声明 `1.84.0` 版本的 Amazon Q Developer VS Code 扩展包含被注入的代码,这些代码旨在调用 Q Developer CLI,并通过扩展发布路径进行分发。在 `vulconcern` 中,这被用作更广泛主张的锚点,即 AI 工具 config 和扩展信任路径可能带有被注入的命令行为。 | | `VC-INSTR-001` | [Trojan Source 论文](https://trojansource.codes/trojan-source.pdf), [CERT VU#999008](https://www.kb.cert.org/vuls/id/999008), [关于双向 Unicode 文本的 GitHub 警告](https://github.blog/changelog/2021-10-31-warning-about-bidirectional-unicode-text/) | 这些来源记录了隐藏的 Unicode 和双向(bidi)控制字符攻击,这些攻击可以使代码或指令在审查者看来与消费它们的机器看到的内容不同。这直接为检测指令文件中隐藏/控制 Unicode 提供了锚点。 | 这里有意没有夸大一些内置的启发式规则。特别是,长 base64 样的 blob 规则(`VC-CMD-006`, `VC-INSTR-002`)和用量窃取规则(`VC-SIPHON-*`)在 `v0.1` 中仍然是基于模式的信号,而不是本 README 中针对特定事件的主张。摘要结论是一个事件分流指南,而不是 provider 账户被滥用的证明。 ## 用法 ``` vulconcern scan [--project DIR] [--home DIR] [--json] [--baseline PATH] vulconcern baseline accept [--project DIR] [--home DIR] [--baseline PATH] vulconcern rules list vulconcern version ``` 默认基线路径: ``` ~/.config/vulconcern/baseline.json ``` 首次扫描仅应用绝对规则。在接受基线之前请审查输出;在已经受损的机器上接受基线可能会将受损状态保留为受信任状态。 尝试使用一个内置的 fixture,而不扫描你真实的 home 目录: ``` go run ./cmd/vulconcern scan \ --home testdata/fixtures/singularity-like/home \ --project testdata/fixtures/singularity-like/project \ --baseline /tmp/vulconcern-demo-baseline.json ``` 该 fixture 意外地以 `1` 退出,因为它包含 `HIGH` 和 `CRITICAL` 级别的发现。 ## 误报与局限性 `v0.1` 有意偏向于更少、更精准的 `HIGH` 和 `CRITICAL` 发现。 单纯的漂移比不上漂移加上危险命令内容、可疑的 MCP 目标,或可疑的 shell/profile/自启动更改那么有说服力。 一些规则被刻意标记为启发式规则。特别是,长 base64 样的 blob 检查(`VC-CMD-006`, `VC-INSTR-002`)是基于模式的信号,而不是针对特定事件的证明。用量窃取规则也是启发式的:当 wrapper 或自启动任务将 AI 认证材料与网络 relay 行为、可疑路径、编辑器扩展执行或 AI CLI 调用结合在一起时,才最令人担忧。 这仍然是一个带有 TOFU 基线功能的基于时间点的只读扫描。如果在接受第一个基线之前机器已经受损,该基线可能会将该状态保留为受信任状态。拥有任意代码执行能力的定向攻击者也可以逃避用户态检查。其预期价值在于对机会主义的、大规模攻击活动的技术手法进行快速的本地分流,而近期的开发者工具事件在使用这些手法时并没有进行太多掩饰。 ## 离线姿态 `v0.1` 不执行任何网络 I/O。收集和评估保持在本地,发现结果仅根据本地 artifact 进行渲染。当前的模块图仅包含 stdlib。 ## 开发 预期的工具链是 Go 1.22+。 ``` go test ./... go build ./cmd/vulconcern ``` v0.1 默认应保持离线和最小依赖。任何依赖项或网络接触点都需要有明确的安全和维护理由。
标签:AI安全, API接口, Chat Copilot, EVTX分析, StruQ, 库, 应急响应, 文档结构分析, 日志审计, 网络信息收集, 配置审查