mcpField
A
agent-owasp-compliance

agent-owasp-compliance

github.com/github安全40.5k1.5k 次安装今天更新
代码仓库

关于 agent-owasp-compliance

用于评估 AI Agent 系统是否覆盖 OWASP Agentic Security Initiative(ASI)Top 10 风险的安全审查技能,面向构建或审计 Agent 的开发者。按十项风险检查代码中的控制措施,并提供合规报告结构与快速评估问题。

主要功能

  1. 01检查 ASI Top 10 安全风险
  2. 02审查输入与工具调用控制
  3. 03评估权限、身份与信任边界
  4. 04检查审计日志和策略执行
  5. 05评估供应链及异常行为防护

适用场景

  1. 01审查 Agent 项目的安全控制
  2. 02定位工具调用与权限管理缺口
  3. 03评估多 Agent 系统的信任验证
  4. 04整理 OWASP ASI 合规报告

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/github/awesome-copilot --skill agent-owasp-compliance

安装后在 Claude Code 中输入/agent-owasp-compliance确认已加载。

详细介绍

Agent OWASP ASI 合规检查

依据 OWASP Agentic Security Initiative (ASI) Top 10 评估 AI Agent 系统——这是 Agent 安全态势的行业标准。

概述

OWASP ASI Top 10 定义了自主 AI Agent 特有的关键安全风险——不是大模型,不是聊天机器人,而是会调用工具、访问系统并代表用户采取行动的 Agent。本技能检查你的 Agent 实现是否应对了每一项风险。

Codebase → Scan for each ASI control:
  ASI-01: Prompt Injection Protection
  ASI-02: Tool Use Governance
  ASI-03: Agency Boundaries
  ASI-04: Escalation Controls
  ASI-05: Trust Boundary Enforcement
  ASI-06: Logging & Audit
  ASI-07: Identity Management
  ASI-08: Policy Integrity
  ASI-09: Supply Chain Verification
  ASI-10: Behavioral Monitoring
→ Generate Compliance Report (X/10 covered)

10 项风险

风险名称应关注什么
ASI-01提示词注入工具调用前的输入验证,而不仅仅是 LLM 输出过滤
ASI-02不安全的工具使用工具允许列表、参数验证、禁止原始 shell 执行
ASI-03过度的自主权能力边界、范围限制、最小权限原则
ASI-04未经授权的提权敏感操作前的权限检查、禁止自我提升
ASI-05信任边界违规Agent 之间的信任验证、签名凭证、拒绝盲目信任
ASI-06日志记录不足所有工具调用的结构化审计轨迹、防篡改日志
ASI-07不安全的身份加密的 Agent 身份,而不仅仅是字符串名称
ASI-08策略绕过确定性的策略执行,禁止基于 LLM 的权限检查
ASI-09供应链完整性签名的插件/工具、完整性验证、依赖审计
ASI-10行为异常漂移检测、熔断器、终止开关能力

检查 ASI-01:提示词注入防护

查找在工具执行之前运行的输入验证,而不是在 LLM 生成之后。

import re
from pathlib import Path

def check_asi_01(project_path: str) -> dict:
    """ASI-01: Is user input validated before reaching tool execution?"""
    positive_patterns = [
        "input_validation", "validate_input", "sanitize",
        "classify_intent", "prompt_injection", "threat_detect",
        "PolicyEvaluator", "PolicyEngine", "check_content",
    ]
    negative_patterns = [
        r"eval\(", r"exec\(", r"subprocess\.run\(.*shell=True",
        r"os\.system\(",
    ]

    # Scan Python files for signals
    root = Path(project_path)
    positive_matches = []
    negative_matches = []

    for py_file in root.rglob("*.py"):
        content = py_file.read_text(errors="ignore")
        for pattern in positive_patterns:
            if pattern in content:
                positive_matches.append(f"{py_file.name}: {pattern}")
        for pattern in negative_patterns:
            if re.search(pattern, content):
                negative_matches.append(f"{py_file.name}: {pattern}")

    positive_found = len(positive_matches) > 0
    negative_found = len(negative_matches) > 0

    return {
        "risk": "ASI-01",
        "name": "Prompt Injection",
        "status": "pass" if positive_found and not negative_found else "fail",
        "controls_found": positive_matches,
        "vulnerabilities": negative_matches,
        "recommendation": "Add input validation before tool execution, not just output filtering"
    }

通过的样子:

# GOOD: Validate before tool execution
result = policy_engine.evaluate(user_input)
if result.action == "deny":
    return "Request blocked by policy"
tool_result = await execute_tool(validated_input)

失败的样子:

# BAD: User input goes directly to tool
tool_result = await execute_tool(user_input)  # No validation

检查 ASI-02:不安全的工具使用

验证工具具有允许列表、参数验证,且没有不受限制的执行。

应搜索什么:

  • 带显式允许列表的工具注册(而非开放式)
  • 工具执行前的参数验证
  • 没有对用户可控输入使用 subprocess.run(shell=True)
  • 没有在无沙箱的情况下对 Agent 生成的代码使用 eval() 或 exec()

通过示例:

ALLOWED_TOOLS = {"search", "read_file", "create_ticket"}

def execute_tool(name: str, args: dict):
    if name not in ALLOWED_TOOLS:
        raise PermissionError(f"Tool '{name}' not in allowlist")
    # validate args...
    return tools[name](**validated_args)

检查 ASI-03:过度的自主权

验证 Agent 能力是有边界的——而非开放式的。

应搜索什么:

  • 显式的能力列表或执行环
  • 对 Agent 可访问范围的范围限制
  • 对工具访问应用最小权限原则

失败: Agent 默认可以访问所有工具。 通过: Agent 能力定义为固定的允许列表,未知工具一律拒绝。


检查 ASI-04:未经授权的提权

验证 Agent 无法提升自己的权限。

应搜索什么:

  • 敏感操作前的权限级别检查
  • 没有自我提升模式(Agent 更改自己的信任分数或角色)
  • 提权需要外部证明(人工或 SRE 见证)

失败: Agent 可以修改自己的配置或权限。 通过: 权限变更需要带外批准(例如,Ring 0 需要 SRE 证明)。


检查 ASI-05:信任边界违规

在多 Agent 系统中,验证 Agent 在接受指令前会验证彼此的身份。

应搜索什么:

  • Agent 身份验证(DID、签名令牌、API 密钥)
  • 接受委派任务前的信任分数检查
  • 不盲目信任 Agent 间消息
  • 委派收窄(子范围 <= 父范围)

通过示例:

def accept_task(sender_id: str, task: dict):
    trust = trust_registry.get_trust(sender_id)
    if not trust.meets_threshold(0.7):
        raise PermissionError(f"Agent {sender_id} trust too low: {trust.current()}")
    if not verify_signature(task, sender_id):
        raise SecurityError("Task signature verification failed")
    return process_task(task)

检查 ASI-06:日志记录不足

验证所有 Agent 操作都会生成结构化、防篡改的审计条目。

应搜索的内容:

  • 每次工具调用都有结构化日志记录(而不仅仅是 print 语句)
  • 审计条目包含:时间戳、Agent ID、工具名称、参数、结果、策略决策
  • 仅追加或哈希链式日志格式
  • 日志存储在 Agent 可写目录之外

不合格: Agent 操作通过 print() 记录或完全没有记录。 合格: 带有链哈希的结构化 JSONL 审计追踪,导出到安全存储。


检查 ASI-07:身份不安全

验证 Agent 拥有加密身份,而不仅仅是字符串名称。

不合格指标:

  • Agent 通过 agent_name = "my-agent" 标识(仅字符串)
  • Agent 之间没有身份验证
  • 多个 Agent 共享凭据

合格指标:

  • 基于 DID 的身份(did:web:、did:key:)
  • Ed25519 或类似的加密签名
  • 每个 Agent 独立凭据并支持轮换
  • 身份绑定到特定能力

检查 ASI-08:策略绕过

验证策略执行是确定性的——而非基于大模型。

应搜索的内容:

  • 策略评估使用确定性逻辑(YAML 规则、代码谓词)
  • 执行路径中没有大模型调用
  • 策略检查不能被 Agent 跳过或覆盖
  • 失败关闭行为(如果策略检查出错,操作被拒绝)

不合格: Agent 通过提示词自行决定其权限(“我是否被允许……?”)。 合格: PolicyEvaluator.evaluate() 在 <0.1ms 内返回允许/拒绝,不涉及大模型。


检查 ASI-09:供应链完整性

验证 Agent 插件和工具具有完整性验证。

应搜索的内容:

  • INTEGRITY.json 或带 SHA-256 哈希的清单文件
  • 插件安装时的签名验证
  • 依赖固定(不使用 @latest、>= 且无上界)
  • SBOM 生成

检查 ASI-10:行为异常

验证系统能够检测并响应 Agent 行为漂移。

应搜索的内容:

  • 在反复失败时触发的熔断器
  • 信任分数随时间衰减(时间衰减)
  • 终止开关或紧急停止能力
  • 对工具调用模式的异常检测(频率、目标、时机)

不合格: 没有机制自动停止行为异常的 Agent。 合格: 熔断器在 N 次失败后触发,信任在无活动时衰减,终止开关可用。


合规报告格式

# OWASP ASI Compliance Report
Generated: 2026-04-01
Project: my-agent-system

## Summary: 7/10 Controls Covered

| Risk | Status | Finding |
|------|--------|---------|
| ASI-01 Prompt Injection | PASS | PolicyEngine validates input before tool calls |
| ASI-02 Insecure Tool Use | PASS | Tool allowlist enforced in governance.py |
| ASI-03 Excessive Agency | PASS | Execution rings limit capabilities |
| ASI-04 Unauthorized Escalation | PASS | Ring promotion requires attestation |
| ASI-05 Trust Boundary | FAIL | No identity verification between agents |
| ASI-06 Insufficient Logging | PASS | AuditChain with SHA-256 chain hashes |
| ASI-07 Insecure Identity | FAIL | Agents use string names, no crypto identity |
| ASI-08 Policy Bypass | PASS | Deterministic PolicyEvaluator, no LLM in path |
| ASI-09 Supply Chain | FAIL | No integrity manifests or plugin signing |
| ASI-10 Behavioral Anomaly | PASS | Circuit breakers and trust decay active |

## Critical Gaps
- ASI-05: Add agent identity verification using DIDs or signed tokens
- ASI-07: Replace string agent names with cryptographic identity
- ASI-09: Generate INTEGRITY.json manifests for all plugins

## Recommendation
Install agent-governance-toolkit for reference implementations of all 10 controls:
pip install agent-governance-toolkit

快速评估问题

使用这些问题快速评估 Agent 系统:

  1. 用户输入在到达任何工具之前是否经过验证?(ASI-01)
  2. 是否存在 Agent 可调用工具的明确列表?(ASI-02)
  3. Agent 可以做任何事,还是其能力有边界?(ASI-03)
  4. Agent 能否提升自己的权限?(ASI-04)
  5. Agent 在接受任务之前是否验证彼此的身份?(ASI-05)
  6. 每次工具调用是否记录了足够重放的详细信息?(ASI-06)
  7. 每个 Agent 是否拥有唯一的加密身份?(ASI-07)
  8. 策略执行是否是确定性的(而非基于大模型)?(ASI-08)
  9. 插件/工具在使用前是否经过完整性验证?(ASI-09)
  10. 是否存在熔断器或终止开关?(ASI-10)

如果你对其中任何一个回答“否”,那就是需要解决的缺口。


相关资源

评论

支持 Markdown