TorpedoD/claude-sentinel

GitHub: TorpedoD/claude-sentinel

一款为 Claude Code 提供并行安全审计与隔离防护的外置命令工具。

Stars: 2 | Forks: 0

# claude-sentinel ![许可证](https://img.shields.io/github/license/TorpedoD/claude-sentinel) ![最后提交](https://img.shields.io/github/last-commit/TorpedoD/claude-sentinel) ![发布](https://img.shields.io/github/v/release/TorpedoD/claude-sentinel) 专为 Claude Code 设计的 12 工具安全审计 skill。只需一个斜杠命令即可并行运行 trivy、gitleaks、semgrep、osv-scanner、npm audit、pip-audit、syft、grype、snyk-agent-scan、skill-scanner 和 tirith —— 内置严格的只读沙箱机制和防 prompt 注入防护。 ## 安装 ``` npx skill add TorpedoD/claude-sentinel ``` 这会将 `security-scan` skill 安装到 `~/.claude/skills/security-scan/`。 ## 用法 **claude-sentinel 必须在*被审计的* repo 之外运行。** 创建一个项目文件夹,在其中克隆目标 repo,然后从该项目文件夹中打开 Claude —— 而不是从克隆的目录内部打开: ``` mkdir ~/audits/acme-audit && cd ~/audits/acme-audit git clone https://github.com/acme/api-server.git claude ``` 然后在 Claude 中: ``` /security-scan ``` 该命令会自动检测唯一的 `.git` 子目录(在此例中为 `api-server/`)作为扫描目标。如果当前目录本身就是一个 git repo,它将拒绝运行 —— 因为这会使 Claude 的 shell 处于*被审计的*代码内部,而这正是隔离模型所要阻止的情况。 **为什么要在克隆之外运行?** 扫描工具会将目标视为数据。如果 Claude 的 shell 位于目标内部,任何被篡改的文件(hook、pre-commit、dotfile、深藏在 README 中的脚本)只需一条额外的命令就可能被执行。将 shell 保留在一个干净的外部文件夹中,意味着目标 repo 永远不会成为 Claude 的 CWD —— 它只会作为路径参数传递给受信任的扫描程序二进制文件。 **扫描多个 repo:** 每次扫描使用一个全新的项目文件夹,每个文件夹只包含一个克隆。如果自动检测程序发现零个或多个 `.git` 子目录,将会报错。 ## 必需的二进制文件 在运行之前安装扫描工具: ``` # Core brew install trivy gitleaks semgrep osv-scanner syft grype # Python dep auditing pip install pip-audit # or: pipx install pip-audit # 可选 — AI agent / MCP 安全(需要 SNYK_TOKEN env var) # brew install snyk/tap/snyk-agent-scan # 可选 — Claude Code skill 安全(Cisco AI Defense) # 按照它们各自的 docs 安装 skill-scanner 和 tirith ``` ## 扫描内容 | # | 工具 | 类别 | |---|------|----------| | 1 | [trivy fs](https://github.com/aquasecurity/trivy) | CVE 漏洞 (高危/严重) | | 2 | [gitleaks](https://github.com/gitleaks/gitleaks) | 文件及 git 历史记录中的机密信息与凭证 | | 3 | [semgrep](https://github.com/semgrep/semgrep) | SAST — 代码级安全问题 | | 4 | [osv-scanner](https://github.com/google/osv-scanner) | 开源依赖漏洞 (OSV DB) | | 5 | [npm audit](https://docs.npmjs.com/cli/v10/commands/npm-audit) | Node.js 依赖漏洞 | | 6 | [pip-audit](https://github.com/pypa/pip-audit) | Python 依赖漏洞 | | 7 | [syft](https://github.com/anchore/syft) | SBOM 生成 | | 8 | [grype](https://github.com/anchore/grype) | SBOM 漏洞扫描 (第二阶段,在 syft 之后运行) | | 9 | [trivy config](https://github.com/aquasecurity/trivy) | IaC / 基础设施配置错误 | | 10 | [snyk-agent-scan](https://github.com/snyk/agent-scan) | AI agent / MCP 服务器安全 | | 11 | [skill-scanner](https://github.com/cisco-ai-defense/skill-scanner) | Claude Code skill 包安全性 (Cisco AI Defense) | | 12 | [tirith](https://github.com/sheeki03/tirith) | 隐藏内容、双向覆盖、配置投毒 | ## 安全模型 claude-sentinel 强制执行三重隔离边界: 1. **Shell 边界** —— Claude 的工作目录始终保留在外部项目文件夹中。扫描程序永远不会 `cd` 进入克隆的 repo。带有路径参数的工具会将 `$SCAN_TARGET` 作为显式参数传入;没有路径参数的工具(npm audit、pip-audit、snyk-agent-scan)会在限定的 `bash -c "cd && tool"` 子 shell 中运行,因此只有该子进程才会触及 repo。 2. **执行边界** —— 受信任的扫描程序二进制文件会在启动时通过 `command -v` 解析为绝对路径。扫描程序将 repo 文件作为数据读取,并将 JSON 输出写入一个全新的临时目录(`/tmp/security-scan-/`)。Bash 代码块绝不会运行 `npm install`,不会执行来自 repo 的脚本,也不会遵循 repo 文件中发现的指令。 3. **解释边界** —— Claude 仅读取临时目录中的扫描程序 JSON 输出。Repo 文件内容永远不会被作为上下文引入对话中,因此被审计代码内部的任何内容都无法通过 prompt 注入来操控 Claude 的行为。 ## 报告输出 扫描会将单一的 Markdown 报告写入**项目文件夹**(位于克隆目录的上一级): ``` /security-report--.md ``` 根据设计,报告位于克隆的 repo 之外 —— 无需修改 `.gitignore`,并且重新克隆目标也绝不会覆盖或泄露审计历史记录。扫描完成后,摘要表格也会立即打印在 Claude 的回复中。 ## 卸载 删除该 skill 目录: ``` rm -rf ~/.claude/skills/security-scan ``` ## 许可证 MIT — © 2026 TorpedoD
标签:AI安全, Chat Copilot, SCA, SOC Prime, 安全审计, 密钥检测, 开发工具, 自定义脚本, 错误基检测, 静态代码分析