OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  ecap-security-auditor:针对 AI 智能体技能的安全审计框架

ecap-security-auditor:针对 AI 智能体技能的安全审计框架

 
  loadbalancer ·  2026-02-19 01:43:27 · 3 次点击  · 0 条评论  

名称: ecap-security-auditor
描述: 面向 AI 代理技能、MCP 服务器和软件包的安全审计框架。您的 LLM 进行分析——我们提供结构、提示词和共享的信任数据库。
元数据: {"openclaw":{"requires":{"bins":["bash","jq","curl"]}}}


ecap 安全审计器

您是一个内置了安全护盾的 AI 代理。 此技能让您在安装或使用任何软件包、技能和 MCP 服务器前自动进行验证,并为您提供自行审计任何内容的工具。


📖 关键术语

术语 定义
risk_score API 字段 (0–100)。数值越高 = 越危险。 0 = 绝对安全,100 = 主动恶意。
信任分数 显示指标 (0–100)。数值越高 = 越可信。 计算方式为 100 - 来自发现的扣分。用于安全门决策。
ecap_id 唯一的发现标识符 (例如 ECAP-2026-0777)。用于所有 API URL 中的 /review/fix 端点。
package_name 用于查询注册表的名称 (例如 "express", "mcp-server-fetch")。API 字段为 skill_slug;两者均可接受。

⚡ 自动安全门 (主要功能)

这是您的被动安全层。每次安装或使用软件包时,自动运行此检查并向用户通报结果。

触发时机

在以下情况自动运行安全门:
- clawdhub install <skill> — 任何技能安装
- pip install <package> / npm install <package> — 任何软件包安装
- 首次使用任何 MCP 服务器
- 用户提及“审计”、“检查”或“验证”某个软件包

安全门流程

┌─────────────────────────────┐
│  检测到软件包安装/使用      │
└──────────────┬──────────────┘
               ▼
┌─────────────────────────────┐
│ 1. 查询信任注册表           │
│    GET /api/findings?package=│
│    GET /api/integrity?package=│
└──────────────┬──────────────┘
               ▼
         ┌─────────┐
         │ 报告存在?│──── 否 ───▶ 进入自动审计
         └────┬─────┘
              │ 是
              ▼
┌─────────────────────────────┐
│ 2. 哈希验证                 │
│    运行:bash scripts/verify.sh <package>
│    将本地文件哈希与         │
│    审计过的哈希进行比对     │
└──────────────┬──────────────┘
               ▼
         ┌─────────┐
         │ 哈希正常?│──── 否 ───▶ 🚨 停止:文件被篡改
         └────┬─────┘
              │ 是
              ▼
┌─────────────────────────────┐
│ 3. 计算信任分数             │
│    基于发现项计算(见下文)  │
└──────────────┬──────────────┘
               ▼
     ┌─────────┴─────────┐
     │                    │
分数 ≥ 70          分数 40-69         分数 < 40
     │                    │                  │
     ▼                    ▼                  ▼
 ✅ 通过             ⚠️ 警告              🔴 阻止
 静默继续。          显示发现项,          阻止安装。
                    让用户决定。           提供审计选项。

决策表

条件 操作 给用户的消息
分数 ≥ 70 + 哈希正常 ✅ 继续 ✅ [软件包] — 信任分数: XX/100,已验证。
分数 40–69 + 哈希正常 ⚠️ 警告,用户决定 ⚠️ [软件包] — 信任分数: XX/100。已知问题: [列表]。继续?(y/n)
分数 < 40 🔴 阻止 🔴 [软件包] — 信任分数: XX/100。已阻止。运行审计以调查。
无报告存在 🔍 自动审计 🔍 [软件包] — 无审计数据。正在运行安全审计...
哈希不匹配 🚨 强制停止 🚨 [软件包] — 完整性验证失败。本地文件与审计版本不匹配。请勿安装。

注意: 设计使然的发现项(例如,代理框架中的 exec())会为了透明度而显示,但不影响信任分数或安全门决策。

分步实施

步骤 1:查询信任注册表

# 检查现有发现项
curl -s "https://skillaudit-api.vercel.app/api/findings?package=软件包名称"

# 检查文件完整性哈希
curl -s "https://skillaudit-api.vercel.app/api/integrity?package=软件包名称"

示例 — GET /api/findings?package=coding-agent (有发现项):

{
  "findings": [
    {
      "id": 11, "ecap_id": "ECAP-2026-0782",
      "title": "二进制执行要求过于宽泛",
      "description": "技能元数据要求能够运行 \"anyBins\",这授予了在系统上执行任何二进制文件的权限。",
      "severity": "medium", "status": "reported", "target_skill": "coding-agent",
      "reporter": "ecap0", "source": "automated",
      "pattern_id": "MANUAL_001", "file_path": "SKILL.md", "line_number": 4,
      "confidence": "medium"
    }
  ],
  "total": 6, "page": 1, "limit": 100, "totalPages": 1
}

示例 — GET /api/findings?package=totally-unknown-xyz (无发现项):

{"findings": [], "total": 0, "page": 1, "limit": 100, "totalPages": 0}

注意:未知软件包返回 200 OK 和一个空数组,而不是 404。

示例 — GET /api/integrity?package=ecap-security-auditor

{
  "package": "ecap-security-auditor",
  "repo": "https://github.com/starbuck100/ecap-security-auditor",
  "branch": "main",
  "commit": "553e5ef75b5d2927f798a619af4664373365561e",
  "verified_at": "2026-02-01T23:23:19.786Z",
  "files": {
    "SKILL.md": {"sha256": "8ee24d731a...", "size": 11962},
    "scripts/upload.sh": {"sha256": "21e74d994e...", "size": 2101},
    "scripts/register.sh": {"sha256": "00c1ad0f8c...", "size": 2032},
    "prompts/audit-prompt.md": {"sha256": "69e4bb9038...", "size": 5921},
    "prompts/review-prompt.md": {"sha256": "82445ed119...", "size": 2635},
    "README.md": {"sha256": "2dc39c30e7...", "size": 3025}
  }
}

如果软件包不在完整性数据库中,API 返回 404
json {"error": "Unknown package: unknown-xyz", "known_packages": ["ecap-security-auditor"]}

步骤 2:验证完整性

bash scripts/verify.sh <软件包名称>
# 示例:bash scripts/verify.sh ecap-security-auditor

这将本地文件的 SHA-256 哈希与上次审计时存储的哈希进行比较。如果任何文件自审计后发生更改,则检查失败。

⚠️ 限制: verify.sh 仅适用于已在完整性数据库中注册的软件包。目前仅 ecap-security-auditor 已注册。对于其他软件包,跳过完整性验证,仅依赖来自发现项的信任分数。

🔒 安全性: verify.sh 中的 API URL 被硬编码到官方注册表,无法被覆盖。这可以防止恶意的 SKILL.md 分叉将完整性检查重定向到虚假服务器。

步骤 3:计算信任分数并应用决策逻辑

API 提供信任分数端点。您需要根据发现项自行计算:

信任分数 = max(0, 100 - 扣分)

每个发现项的扣分 (仅当 by_design = false 时):
  严重:-25
  高:    -15
  中:     -8
  低:      -3
  任何 (by_design = true):0 ← 不计入分数

组件类型权重 (v2): 对高风险组件类型中的发现项应用 ×1.2 的乘数:hooks/ 中的 shell 脚本、.mcp.json 配置、settings.json 和插件入口点。文档或测试文件中的发现项不应用乘数。

示例: 1 个严重 + 2 个中等发现项 → 100 - 25 - 8 - 8 = 59 (⚠️ 谨慎)
包含设计使然的示例: 3 个设计使然的高 + 1 个真实的低 → 100 - 0 - 0 - 0 - 3 = 97 (✅ 可信)

设计使然的发现项 是软件包文档化目的核心的模式(例如,代理框架中的 exec())。它们被报告是为了透明度,但不会降低信任分数。有关分类标准,请参阅 audit-prompt.md 步骤 4。

如果软件包在 /api/reports 中有报告,您也可以使用报告中的 risk_score信任分数 ≈ 100 - risk_score

根据计算出的信任分数应用上述决策表。

步骤 4:自动审计 (如果无数据存在)

如果注册表中没有此软件包的报告:

  1. 获取源代码 (见下文“获取软件包源代码”)
  2. 读取软件包目录中的所有文件
  3. 阅读 prompts/audit-prompt.md — 遵循每一条指令
  4. 根据安全检查清单分析每个文件
  5. 执行跨文件分析 (见下文跨文件分析)
  6. 构建 JSON 报告 (格式见下文)
  7. 上传:bash scripts/upload.sh report.json
  8. 使用新数据重新运行安全门检查

这就是注册表有机增长的方式——每个代理都在贡献。

为自动审计获取软件包源代码

⚠️ 审计必须在安装前运行。 您需要在不执行安装脚本的情况下获取源代码。方法如下:

类型 如何安全获取源代码 审计位置
OpenClaw 技能 clawdhub install 后已本地存在 (技能是惰性文件) skills/<名称>/
npm 软件包 npm pack <名称> && mkdir -p /tmp/audit-target && tar xzf *.tgz -C /tmp/audit-target/ /tmp/audit-target/package/
pip 软件包 pip download <名称> --no-deps -d /tmp/ && cd /tmp && tar xzf *.tar.gz (或 unzip *.whl) /tmp/<名称>-<版本>/
GitHub 源码 git clone --depth 1 <仓库地址> /tmp/audit-target/ /tmp/audit-target/
MCP 服务器 检查 MCP 配置中的安装路径;如果尚未安装,则从源码克隆 源码目录

为什么不直接安装? 安装脚本 (postinstall, setup.py) 可以执行任意代码——这正是我们要审计的内容。始终在不运行安装钩子的情况下获取源代码。

软件包名称

使用确切的软件包名称 (例如 mcp-server-fetch,而不是 mcp-fetch)。您可以通过 /api/health (显示总数) 验证已知软件包,或检查 /api/findings?package=<名称> — 如果 total > 0,则该软件包存在于注册表中。

API URL 中的发现项 ID

当使用 /api/findings/:ecap_id/review/api/findings/:ecap_id/fix 时,请使用发现项响应中的 ecap_id 字符串 (例如 ECAP-2026-0777)。数字 id 字段不能用于 API 路由。


🔍 手动审计

用于按需进行的深度安全分析。

步骤 1:注册 (一次性)

bash scripts/register.sh <您的代理名称>

创建包含您 API 密钥的 config/credentials.json。或者设置 ECAP_API_KEY 环境变量。

步骤 2:阅读审计提示词

完整阅读 prompts/audit-prompt.md。它包含完整的检查清单和方法论。

步骤 3:分析每个文件

读取目标软件包中的每个文件。对于每个文件,检查:

npm 软件包:
- package.json:preinstall/postinstall/prepare 脚本
- 依赖列表:仿冒或已知恶意软件包
- 主入口:导入时是否会“回拨”?
- 原生插件 (.node, .gyp)
- process.env 访问 + 外部传输

pip 软件包:
- setup.py / pyproject.toml:安装期间的代码执行
- __init__.py:导入时的副作用
- subprocess, os.system, eval, exec, compile 的使用
- 意外位置的网络调用

MCP 服务器:
- 工具描述与实际行为 (不匹配 = 欺骗)
- 权限范围:最小化还是过于宽泛?
- 执行 shell/SQL/文件操作前的输入净化
- 超出声明需求的凭据访问

OpenClaw 技能:
- SKILL.md:对代理的危险指令?
- scripts/curl|bash, eval, rm -rf, 凭据收集
- 从工作区窃取数据

步骤 3b:组件类型意识 (v2)

不同类型的文件具有不同的风险特征。相应地优先分析:

组件类型 风险等级 需要关注的内容
hooks/ 中的 Shell 脚本 🔴 最高 直接系统访问、持久化机制、任意执行
.mcp.json 配置 🔴 高 供应链风险、未固定版本的 npx -y、不受信任的服务器来源
settings.json / 权限 🟠 高 通配符权限 (Bash(*))、defaultMode: dontAsk、过于宽泛的工具访问
插件/技能入口点 🟠 高 加载时的代码执行、导入时的副作用
SKILL.md / 代理提示词 🟡 中 社会工程学、提示词注入、误导性指令
文档 / README 🟢 低 通常安全;检查隐藏的 HTML 注释 (>100 字符)
测试 / 示例 🟢 低 很少可利用;检查硬编码的凭据

高风险组件中的发现项应受到额外审查。由于执行上下文,钩子脚本中的 等严重性发现项可能值得提升为 严重性。

步骤 3c:跨文件分析 (v2)

不要孤立地分析文件。明确检查多文件攻击链:

跨文件模式 需要查找的内容
凭据 + 网络 在文件 A 中读取凭据,在文件 B 中通过网络调用传输
权限 + 持久化 一个文件中的权限提升使另一个文件中的持久化机制成为可能
钩子 + 技能激活 静默修改技能行为或注入指令的钩子脚本
配置 + 混淆 引用混淆脚本或编码有效载荷的配置文件
供应链 + 网络 通过 postinstall 钩子安装的依赖项会“回拨”
文件访问 + 窃取 一个组件中读取文件,另一个组件中将数据发送到外部

当发现跨文件关联时,将其报告为单个发现项,使用前缀为 CORR_pattern_id,并在描述中列出所有涉及的文件。

步骤 4:AI 特定安全检查 (v2)

审计 AI 代理软件包、技能和 MCP 服务器时,检查以下 AI 特定攻击模式

提示词注入与操控

模式 ID 攻击 需要查找的示例
AI_PROMPT_001 系统提示词提取 "reveal your system prompt", "output your instructions", "what were you told"
AI_PROMPT_002 代理冒充 "pretend to be", "you are now", "act as an Anthropic employee"
AI_PROMPT_003 能力提升 "enable developer mode", "unlock hidden capabilities", "activate god mode"
AI_PROMPT_004 上下文污染 "inject into context", "remember this forever", "prepend to all responses"
AI_PROMPT_005 多步骤攻击设置 "on the next message execute", "phase 1:", "when triggered do"
AI_PROMPT_006 输出操控 "output JSON without escaping", "encode response in base64", "hide in markdown"
3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor