mx-klr/sentinel

GitHub: mx-klr/sentinel

Sentinel 是一款专为 AI 编程助手设计的安全技能插件,用于防止恶意软件、供应链攻击及提示注入风险。

Stars: 1 | Forks: 0

# 🛡️ Sentinel — 您的代码安全卫士 **Sentinel 在您使用 Claude Code 或 Pi 等 AI 编程助手时为您保驾护航。** 每当您要求 AI 助手安装包、克隆仓库或编写代码时,恶意代码都有可能趁虚而入——隐藏的木马、被盗的凭据,或伪装成有用工具的后门。Sentinel 会自动监控这些威胁,让您无需操心。 ## Sentinel 能防范什么? ### 1. 恶意包 当您的 AI 安装包时(例如 `npm install something` 或 `pip install something`),Sentinel 会在安装**之前**进行检查: - **名称是否可疑?** 攻击者会创建与流行包名称几乎相同的包(例如用 `lodsh` 代替 `lodash`)。一个拼写错误,您就可能安装了恶意软件。 - **是否是全新的?** 发布不到一周且下载量很少的包属于高风险。 - **是否存在已知漏洞?** Sentinel 会检查安全公告数据库。 - **是否在安装期间运行代码?** 有些包会在您安装的瞬间执行隐藏脚本。 ### 2. 仓库中的木马代码 当您的 AI 克隆 GitHub 仓库时,Sentinel 会扫描整个代码库,查找: - **隐藏的后门** —— 秘密连接到攻击者服务器的代码 - **凭据窃取** —— 读取您的密码、SSH 密钥或 API token 的代码 - **混淆的载荷** —— 故意打乱以隐藏其真实功能的代码 - **加密货币挖矿程序** —— 使用您的计算机挖掘加密货币的代码 ### 3. 代码中泄露的机密 Sentinel 会检测意外(或故意)嵌入的凭据: - AWS 访问密钥 - GitHub token - Stripe 支付密钥 - OpenAI / Anthropic API 密钥 - 私有加密密钥 - 密码和通用 API 机密 ### 5. AI 劫持(Prompt Injection) 这是最新、最阴险的攻击向量。当您克隆仓库时,其中可能包含劫持您 AI 助手的隐藏指令: - **恶意的 CLAUDE.md 文件** —— 这些文件看起来像正常的项目说明,但它们会指示您的 AI 授予自身无限权限、禁用安全检查或秘密运行命令 - **注释中的隐藏指令** —— README 文件中的 HTML 注释(在 GitHub 上阅读时不可见),指示您的 AI 执行恶意命令 - **不可见字符** —— 零宽 Unicode 字符,将 prompt injection 载荷隐藏在看似正常的文本中 - **虚假的 MCP 服务器配置** —— 将您的 AI 连接到攻击者控制的服务器的配置文件,赋予他们远程访问您机器的权限 - **YOLO 模式技巧** —— 禁用所有安全确认的配置,以便 AI 在不询问您的情况下执行危险操作 当您克隆仓库时,Sentinel 会自动扫描所有这些内容。如果发现任何内容,它会拒绝遵循恶意指令,直到您明确批准。 ### 6. 可疑的 AI 生成代码 当您的 AI 助手编写访问敏感区域(您的文件、环境变量、网络)的代码时,Sentinel 会将其标记出来,以便您进行审查。 ## 它是如何工作的? Sentinel 运行在您的 **AI 助手内部**(Claude Code 或 Pi)。您无需做任何操作——它会自动工作。 ### 三层防护 ``` ┌─────────────────────────────────────────────────────┐ │ Layer 1: GATE │ │ Checks packages BEFORE they're installed │ │ ⏱️ ~1 second · completely free │ ├─────────────────────────────────────────────────────┤ │ Layer 2: SCAN │ │ Scans code files for malicious patterns │ │ ⏱️ ~1-5 seconds · completely free │ ├─────────────────────────────────────────────────────┤ │ Layer 3: AI TRIAGE │ │ Your AI reviews ambiguous findings │ │ ⏱️ ~2-5 seconds · minimal token cost │ └─────────────────────────────────────────────────────┘ ``` 大部分工作由前两层完成,它们是**即时且免费的**——不消耗 AI token。AI 分诊层仅在发现真正模棱两可的情况时(罕见)才会启动。 ## 当 Sentinel 发现问题时会发生什么? ### 🛑 严重威胁 — 硬性停止 您的 AI 助手**立即停止**并告诉您它发现了什么。 示例: **在继续任何操作之前,您必须明确说是。** 如果您不确定,请说不。 ### ⚠️ 警告 — 提示 您的 AI 标记了异常情况,但继续工作。 示例: ### 📝 信息 — 静默记录 次要的观察结果会被记录,但不会打断您的工作。您可以随时询问 "sentinel status" 来查看它们。 ## 设置指南 ### 步骤 1:安装技能 **对于 Claude Code 用户:** 将 `sentinel` 文件夹复制到您的 Claude Code 技能目录中: ``` ~/.claude/skills/sentinel/ ``` **对于 Pi 用户:** 将 `sentinel` 文件夹复制到您的 Pi 技能目录中: ``` ~/.pi/skills/sentinel/ ``` 或者,如果您是通过 git 仓库收到的: ``` # Claude Code ln -s /path/to/sentinel ~/.claude/skills/sentinel # Pi ln -s /path/to/sentinel ~/.pi/skills/sentinel ``` ### 步骤 2:首次对话 下次您与 AI 助手开始对话时,Sentinel 将自动激活并询问您几个设置问题: **问题 1:知识库连接** - 如果您使用 Obsidian、Notion 或类似工具:说是并提供详细信息 - 如果您不知道这意味着什么:**直接说不** —— Sentinel 在没有它的情况下也能完美运行 - 您随时可以通过说 "sentinel settings" 来连接一个 **问题 2:自动记录(仅当您连接了知识库时)** 选择一项: - **所有发现** —— 记录所有内容,包括次要的观察结果 - **警告及以上** —— 记录警告和严重威胁(推荐) - **仅严重** —— 仅记录硬性停止 - **无自动记录** —— 您手动决定保存什么 ### 步骤 3:完成 就是这样。Sentinel 现在自动运行。您无需记住命令或检查任何内容。它静默监控,仅在重要时发声。 ## 您可以向 AI 询问的内容 您无需记住命令。只需自然交谈: | 您想要什么 | 该说什么 | |---------------|-------------| | 扫描您当前的项目 | "Can you scan this project for security issues?" | | 检查包是否安全 | "Is lodash safe to install?" | | 查看扫描结果 | "What did sentinel find?" | | 将结果保存到您的笔记 | "Save that scan to my brain" | | 更改设置 | "Update sentinel settings" | | 暂时关闭 | "Turn off sentinel for now" | | 重新打开 | "Turn sentinel back on" | ## 了解严重性级别 ### 🛑 严重 — “这几乎肯定很危险” 这些发现代表了**与恶意软件 overwhelmingly 相关**的模式: - 解码隐藏载荷并执行它们的代码 - 通过管道直接传输到 shell 命令的下载 - 连接到可疑 IP 地址 - 旨在窃取您凭据的包 - 包中的已知安全漏洞 **该怎么做:** 除非您绝对确定这是安全的,否则不要继续。请您的 AI 详细解释。如果有疑问,请说不。 ### ⚠️ 警告 — “这值得您关注” 这些发现**可疑但可能是合法的**: - 下载量很少的新包(可能是新的但合法的) - 访问系统命令的代码(可能是构建工具) - 看起来经过混淆的代码(可能只是被压缩的) - 硬编码的 IP 地址(可能是合法的服务器) **该怎么做:** 阅读解释。如果它对您正在构建的内容有意义,那可能没问题。如果说不通,请您的 AI 进一步调查。 ### 📝 信息 — “了解一下很好” 这些是**次要的观察结果**,并不表示危险: - 锁定文件中没有完整性哈希的包 - 相对较新的包上的单个维护者 - 看起来良性的安装脚本 **该怎么做:** 无需操作。这些已记录供您参考。如果您好奇,可以查看它们。 ## 常见问题 **Q: Sentinel 会减慢我的 AI 助手的速度吗?** 不会。门禁检查耗时不到 1 秒。代码扫描耗时 1-5 秒。您不会注意到它。 **Q: Sentinel 需要花钱或使用我的 AI token 吗?** 前两层(门禁和扫描)是完全免费的——它们使用模式匹配,而不是 AI。AI 分诊层仅在罕见的模棱两可的情况下触发,使用最少的 token(相当于一条短消息)。 **Q: Sentinel 能捕获所有内容吗?** 没有任何安全工具能捕获所有内容。Sentinel 捕获最常见和最危险的攻击模式。它比没有保护要好得多,而大多数开发者目前正是处于无保护状态。把它想象成烟雾探测器——它无法预防每场火灾,但它会向您发出最明显危险的警报。 **Q: 我有一些我自己编写的文件(笔记、文档、草稿),我会将它们带入项目中。Sentinel 会标记它们吗?** 可能会,因为 Sentinel 无法判断文件是您编写的还是从攻击者那里下载的。但这很容易解决——您只需告诉 Sentinel 哪些文件夹包含您自己的内容。 **三种将文件夹标记为受信任的方法(选择最简单的一种):** **选项 A — 文件夹选择器(推荐给非技术用户):** 只需说 "sentinel trust",就会打开一个普通的 Finder 窗口。浏览到您的文件夹,点击选择,完成。Sentinel 会确认它找到的内容并要求您批准。 **选项 B — 拖放:** 在聊天窗口旁边打开 Finder。抓住一个文件夹并将其直接拖入聊天中。文件夹路径将显示为文本。Sentinel 会识别它并询问:“Want to trust this folder?” **选项 C — 输入路径:** 如果您知道路径,只需说 "sentinel trust /path/to/my/folder"。 **常见的受信任文件夹:** - 您的笔记或草稿文件夹 - 手机文件同步到的文件夹 - 您的个人工作文档目录 - 您保存给自己发送内容的文件夹 一旦受信任,这些文件夹内的内容对 Sentinel 来说是完全不可见的——从不扫描,从不警告。您可以随时添加更多文件夹,并使用 "sentinel untrust" 删除它们。 您还可以在任何项目内创建一个 `.sentinel-trust.json` 文件,以将该项目内的特定文件夹标记为您自己的内容。 **Q: Sentinel 标记了我自己的代码!我该怎么办?** 当您编写的代码看起来与攻击模式相似时,就会发生这种情况——例如,如果您正在编写安全工具、记录攻击或出于合法目的使用 eval/exec。只需告诉您的 AI: - "That is my code, it is fine" —— AI 将在本次会话中接受它 - "Add this to the allowlist" —— AI 将永久抑制该特定发现 - "I write security tools, disable the prompt injection rules" —— AI 将关闭整个规则类别 Sentinel 会在您的项目中创建一个 `.sentinel-allow.json` 文件来记住您的覆盖设置。您也可以直接编辑此文件。 **Q: 如果 Sentinel 标记了实际上是安全的内容怎么办?** 这种情况可能会发生,尤其是对于警告。阅读解释,如果您确信它是安全的,请告诉您的 AI 继续。Sentinel 宁可谨慎行事——虚惊一场总比漏掉威胁好。 **Q: 我可以与朋友分享 Sentinel 吗?** 可以!只需分享 sentinel 文件夹。他们将其复制到他们的技能目录中,下次对话时就会受到保护。 **Q: Sentinel 向外部发送什么数据?** Sentinel 会查询公共包注册表(npmjs.org、pypi.org)以检查包信誉——这与您安装任何内容时包管理器所做的操作相同。它**不会**将您的代码、文件或任何个人信息发送到任何地方。 ## 文件结构 ``` sentinel/ ├── SKILL.md ← Instructions for your AI (don't edit) ├── README.md ← This file (for humans) ├── config.json ← Your preferences (created during setup) ├── config.template.json ← Default config template ├── scripts/ │ ├── gate.sh ← Package reputation checker │ ├── gate_check.py ← Gate logic (Python) │ ├── scan.sh ← Code scanner launcher │ ├── scan_engine.py ← Scan logic (43 detection rules) │ └── monitor.sh ← Runtime process watcher └── tests/ ├── run-tests.sh ← Test suite (39 tests) └── fixtures/ ← Test files for validation ``` ## 版本 **Sentinel v3** —— 52 条检测规则,39 项测试,零依赖。 用心构建。注意安全。🛡️
标签:AI助手, AI安全, AMSI绕过, API密钥检测, Chat Copilot, CISA项目, Claude Code, DevSecOps, Homebrew安装, NPM安全, PyPI安全, 上游代理, 云安全监控, 代码安全, 依赖扫描, 加密货币挖矿, 包管理安全, 后门检测, 威胁检测, 提示注入, 模型提供商, 混淆代码, 漏洞枚举, 结构化查询, 自动化安全, 输入验证, 逆向工具, 集群管理, 零依赖, 静态分析