Lukentony/AI-guardian-lab

GitHub: Lukentony/AI-guardian-lab

AI 安全中间件,通过确定性多层流水线阻止恶意或意图冲突的 Shell 命令。

Stars: 7 | Forks: 0

# AI Guardian Lab ![Status](https://img.shields.io/badge/status-experimental-orange) ![Version](https://img.shields.io/badge/version-1.2.0-blue) ![License](https://img.shields.io/badge/license-MIT-green) ![Benchmark](https://img.shields.io/badge/benchmark-synthetic--dataset-yellow) AI agents 可以在你的机器上运行 shell 命令。Guardian 决定哪些命令真正执行。 AI 代理框架通常为 LLM 提供直接的 shell 访问权限以完成任务。在大多数实现中,安全性完全依赖于模型遵循系统指令的意愿。但模型合规性并不等同于安全强制。 ## 快速入门(适合初学者)🚀 体验 60 秒内的防护: 1. **部署:** `docker-compose up -d` 2. **攻击:** `./demo.sh` 观察 Guardian 如何实时拦截混淆载荷与意图冲突的命令。 ## 防御流水线(适合资深用户)🛡️ Guardian 实现了一个确定性的多层安全中间件。它**不**仅仅依赖 LLM 的“良好行为”。 ### L1 — 二进制允许列表 严格限制允许的二进制文件。如果不在允许列表(例如 `nc`、`nmap`),则在调用 LLM 之前就被阻断。 ### L2 — 正则引擎 检测混淆技术(shell 中的 base64 解码)、危险标志(`--no-preserve-root`)和已知利用模式。 ### L3 — 意图一致性 交叉引用高级别的**任务意图**(用户所问)与**命令动作**(代码实际执行)。 - *任务:* “列出文件” → *命令:* `rm -rf /` = **BLOCKED**(意图冲突)。 ### L4 — LLM 语义检查 对复杂或模糊命令进行深度语义分析。采用**失败关闭**逻辑:如果 LLM 不可用或响应异常,则阻断命令。 ### 取证完整性 审计日志由**链式哈希**(SHA-256)保护。每个日志条目都通过密码学方式链接到前一个,确保“证据链”并使篡改可检测。 ## 为何存在此项目 AI 生态存在执行缺口。尽管我们有监控输入输出的工具,但主流代理框架并未内置原生的、预工具执行的访问控制。提示工程常被用作防御手段,但这只是建议而非安全边界。Guardian 通过提供一个确定性的中间层,消除了对 LLM 系统级动作的最终决策权。 ## 工作原理 Guardian 运行一个 4 层验证流水线。它是“失败关闭”式设计:如果某层存在疑虑,命令将被阻断。 ``` Agent Request │ ▼ ┌─────────────────────────┐ │ L1: Binary Allowlist │──► BLOCK (unknown or red-zone binary) └───────────┬─────────────┘ │ ▼ ┌─────────────────────────┐ │ L2: Regex Engine │──► BLOCK (obfuscation / destruction pattern) └───────────┬─────────────┘ │ ▼ ┌─────────────────────────┐ │ L3: Intent Coherence │──► BLOCK (task intent ≠ command action) └───────────┬─────────────┘ │ ▼ ┌─────────────────────────┐ │ L4: LLM Semantic Check │──► BLOCK / ALLOW (ambiguous cases only) └───────────┬─────────────┘ │ ▼ EXECUTE ``` 1. **L1: 二进制允许列表**:基于风险区域(绿、黄、红)的即时过滤。如果二进制在当前上下文中未被明确允许,执行在此终止。 2. **L2: 正则模式匹配**:一个 ReDoS 安全的双路径引擎,对原始命令与规范化命令同时检查混淆、渗出与破坏模式。 3. **L3: 意图一致性映射**:这是差异化所在。它使用静态关键词分类法将 `task` 字段与命令映射到四类意图 —— `read`、`write`、`delete`、`network`,然后检查冲突。该分类法故意保持最小化以确保规则可审计且可预测。 | 任务意图 | 命令意图 | 结果 | |----------|----------|-------| | read | delete | BLOCKED | | read | network | BLOCKED | | write | delete | BLOCKED | | write | read | ALLOWED | | delete | delete | ALLOWED | 示例:`task="分析磁盘使用"` + `command="rm -rf /tmp"` → 任务映射为 `read`,命令映射为 `delete` → **BLOCKED**。 4. **L4: LLM 语义检查**:LLM 作为最后手段。仅对确定性层无法解析的模糊情况咨询 LLM,提供额外的语义理解。 ## 为何优先确定性 我将确定性检查置于基于 LLM 的验证之上,原因有三: - **透明性**:你可以审计正则表达式与映射表。清楚知道命令为何被阻断。 - **速度**:确定性检查以毫秒计,且无需消耗令牌。 - **可靠性**:逻辑不会“幻觉”。它提供刚性边界,无法通过提示注入跨越。 **关于 L4**:LLM 层并非作为确定性层“无法处理”情况的备用方案,而是明确的边界定义。L1–L3 覆盖已知攻击面:已知恶意二进制、已知模式、以及具有明确映射的意图冲突。L4 处理残余情况:结构合法、未匹配任何模式、且任务与命令关系在设计上模糊的命令。实践中,L4 触发的请求不到 5%。LLM 无法覆盖 L1–L3 发出的阻断;执行层级严格单向。 ## 基准测试 在包含 100 条标记命令的合成数据集上评估(50 条正常,50 条恶意),旨在覆盖当前策略配置的已知攻击面。 | 指标 | 得分 | |---------------|------------------------| | 精确率 | 100%(合成数据集) | | 召回率 | 100%(合成数据集) | | 误报 | 0 | | 漏报 | 0 | 数据集与测试套件: [`tests/`](tests/) ## 与 Guardian 的对比 | 功能 | AI Guardian Lab | LLM Guard | Guardrails AI | |-----------------------------|-----------------|-----------|---------------| | 确定性强制执行 | ✅ | Partial | ❌ | | 意图一致性检查 | ✅ | ❌ | ❌ | | 框架无关(REST API) | ✅ | ❌ | Partial | | 默认失败关闭 | ✅ | ❌ | ❌ | | LLM 仅作为最后手段 | ✅ | ❌ | ❌ | | 审计日志 | ✅ | Partial | Partial | 对比基于截至 2026 年 3 月的公开文档。LLM Guard 与 Guardrails AI 是输入/输出扫描器,而非命令级执行层——设计目标不同但有部分重叠。本表仅聚焦命令级强制能力。 ## 集成壁垒 代理框架出于 SSRF 防护会默认阻止对私有 IP 的调用。这是有意且正确的选择,但副作用是:Guardian 的执行目前依赖模型合规性(必须被指示调用中间件),而非框架内置的硬钩子。这是整个生态的开放问题:真正的、无可突破的自动强制执行,只有当框架实现原生的预工具钩子时才能实现。 ## 取证:会话后分析 Guardian 还提供一个事后分析模块。虽然验证流水线实时拦截命令,但取证模块分析已完成的代理会话以发现事后行为异常。 它适用于任何产生结构化日志的代理框架——不仅限于内置 Guardian 的代理。 **它能检测到:** - **工具升级**:会话中风险从安全命令逐步演变为危险命令 - **意图漂移**:行为偏离声明的任务 - **提示注入信号**:工具输出中嵌入的指令 **试用:** ``` bash demo_forensics.sh ``` **API:** ``` curl -s -X POST http://localhost:5000/forensics/analyze \ -H "Content-Type: application/json" \ -H "X-API-Key: your-api-key" \ -d '{"jsonl": "{\"role\": \"user\", \"content\": \"list files\"}\n..."}' ``` 响应包含异常分数(0–100)、各标志的置信度分析以及可读摘要。 ## 快速开始 #### 1. 安装 ``` git clone https://github.com/Lukentony/AI-guardian-lab.git cd ai-guardian-lab ./install.sh ``` #### 2. 启动 ``` docker-compose up -d ``` ### 3. 试用 ``` # 阻止危险命令 curl -s -X POST http://localhost:5000/validate \ -H "Content-Type: application/json" \ -H "X-API-Key: your-api-key" \ -d '{"command": "rm -rf /tmp", "task": "analyze disk usage"}' ``` ``` { "approved": false, "layer": "L3", "reason": "Intent conflict: task maps to 'read', command maps to 'delete'.", "command": "rm -rf /tmp", "task": "analyze disk usage" } ``` ``` # 允许安全命令 curl -s -X POST http://localhost:5000/validate \ -H "Content-Type: application/json" \ -H "X-API-Key: your-api-key" \ -d '{"command": "df -h", "task": "analyze disk usage"}' ``` ``` { "approved": true, "layer": null, "reason": null, "command": "df -h", "task": "analyze disk usage" } ``` ## 使用场景 - **本地测试**:在给予完全访问权限前,测试 AI 代理的意图 - **审计与合规**:需要记录代理尝试执行的每条命令(包括被拒绝的) - **硬 chokepoint**:在 LLM 与 Shell 之间放置真实过滤器,而非依赖模型“良好行为” ## 威胁模型与限制 **攻击者模型**:Guardian 假设攻击者: - 通过用户可控输入字段注入恶意指令(提示注入) - 对命令进行混淆以逃避模式匹配(编码、变量展开、链式调用) - 尝试利用任务描述与执行命令之间的差距 - 控制 LLM 输出但无法直接修改 Guardian 的配置或策略文件 Guardian 是一个盾牌,而非奇迹: 1 **正则限制**:极其复杂的混淆理论上可能绕过静态模式。 2. **规范化**:Shell 语法多样性是持续战场;某些边界情况可能需要更新规范化规则。 3. **沙箱依赖**:Guardian 阻断命令,但最终安全还取决于代理运行时的环境隔离(沙箱/Docker)。 ## 文档 - [架构与层级](ARCHITECTURE.md) - [贡献指南](CONTRIBUTING.md) - [安全策略](SECURITY_POLICY.md) ## 📄 许可证 MIT 许可证。详见 [LICENSE](LICENSE)。
标签:AI代理, AI安全, C2, Chain Hashing, Chat Copilot, Cutter, Fail-Closed, FTP漏洞扫描, LLM语义检查, OBFUSCATION, Shell命令拦截, 二进制白名单, 任务意图分析, 命令注入防护, 多层防御, 安全中间件, 安全编排, 实验性, 审计日志, 意图一致性映射, 日志完整性, 权限控制, 正则模式, 确定性安全, 请求拦截, 运行时保护, 逆向工具, 链哈希