防御分析器 defense-profiler

防御分析器是一个代码库安全分析系统,用于构建全面的安全防御档案,识别弱点和防御等级。

安全审计 0 次安装 0 次浏览 更新于 3/4/2026

版本:2.88.0

name: defense-profiler description: “代码库防御分析系统,用于安全分析” user-invocable: true


防御分析器

v2.88 关键变更 (模型无关)

  • 模型无关:使用在 ~/.claude/settings.json 或 CLI/env 变量中配置的模型
  • 无需标志:与配置的默认模型一起工作
  • 灵活:与 GLM-5、Claude、Minimax 或任何配置的模型一起工作
  • 设置驱动:通过 ANTHROPIC_DEFAULT_*_MODEL 环境变量选择模型

代码库防御分析系统 受 ZeroLeaks 防御分析启发。

系统地分析代码,构建全面的安全防御、模式和弱点档案。

核心概念

在攻击(测试)之前,了解防御。建立一个心理模型:

  • 存在哪些模式
  • 有哪些保障措施
  • 什么会触发失败
  • 哪些区域是薄弱的

使用方法

/defense-profile src/
/defense-profile --focus security src/auth/
/defense-profile --output profile.json src/api/

防御等级

等级 描述 特征
none 没有明显的保护 直接的漏洞,没有验证
weak 基本保护 简单的验证,不完整的覆盖
moderate 标准防御 输入验证,错误处理
strong 良好的安全性 多层,适当的清理
hardened 深度防御 多层,全面覆盖

档案结构

interface DefenseProfile {
  // 总体评估
  level: DefenseLevel;
  confidence: number;  // 0-1

  // 观察到的模式
  observedBehaviors: string[];

  // 现有的防护措施
  guardrails: {
    type: string;
    strength: number;
    coverage: string[];
    bypassed: boolean;
    bypassMethod?: string;
  }[];

  // 识别出的弱点
  weaknesses: {
    category: string;
    description: string;
    exploitability: number;  // 0-1
    location?: string;
  }[];

  // 触发模式
  refusalTriggers: string[];  // 什么导致错误/拒绝
  safePatterns: string[];     // 什么可以通过

  // 响应模式
  responsePatterns: {
    pattern: string;
    frequency: number;
    defenseIndicator: boolean;
  }[];
}

分析维度

1. 输入验证

dimension: input_validation
checks:
  - type_checking: 输入是否已类型化?
  - null_handling: 是否处理了空值?
  - boundary_checks: 是否强制限制?
  - sanitization: 是否清理输入?
  - encoding_handling: 是否处理编码?

signals:
  weak:
    - 没有类型注释
    - 缺少空值检查
    - 无限制的输入
  strong:
    - Zod/Joi 模式
    - TypeScript 严格模式
    - 全面验证

2. 认证/授权

dimension: auth_security
checks:
  - auth_mechanism: 认证是如何实现的?
  - session_management: 会话是如何处理的?
  - permission_checks: 是否验证权限?
  - token_validation: 是否正确验证令牌?

signals:
  weak:
    - 明文密码
    - 没有 CSRF 保护
    - 缺少认证中间件
  strong:
    - bcrypt/argon2 哈希
    - JWT 带刷新令牌
    - RBAC 实施

3. 错误处理

dimension: error_handling
checks:
  - error_exposure: 是否暴露错误?
  - logging_security: 日志是否安全?
  - graceful_degradation: 是否安全失败?
  - recovery_patterns: 是否有恢复机制?

signals:
  weak:
    - 响应中的堆栈跟踪
    - 日志中的敏感数据
    - 未处理的承诺拒绝
  strong:
    - 通用错误消息
    - 结构化日志
    - 错误边界

4. 数据保护

dimension: data_protection
checks:
  - encryption_at_rest: 数据是否加密?
  - encryption_in_transit: 是否使用 TLS?
  - secret_management: 秘密是如何处理的?
  - pii_handling: 是否保护 PII?

signals:
  weak:
    - 硬编码的秘密
    - 没有加密
    - 日志中的 PII
  strong:
    - 环境变量
    - 密钥管理服务
    - 数据掩码

5. 注入预防

dimension: injection_prevention
checks:
  - sql_injection: 查询是否参数化?
  - xss_prevention: 输出是否转义?
  - command_injection: 命令是否清理?
  - path_traversal: 路径是否验证?

signals:
  weak:
    - 查询中的字符串连接
    - innerHTML 使用
    - 带有用户输入的 shell 命令
  strong:
    - ORM 带参数化
    - 内容安全策略
    - 输入白名单

模式检测

拒绝触发器

导致代码拒绝/失败的模式:

const refusalPatterns = [
  // 认证失败
  /unauthorized|unauthenticated|forbidden/i,

  // 验证失败
  /invalid|malformed|bad request/i,

  // 安全阻止
  /blocked|denied|not allowed/i,

  // 速率限制
  /too many requests|rate limit/i
];

泄露指标

暗示信息暴露的模式:

const leakPatterns = [
  // 配置暴露
  /config|settings|environment/i,

  // 实现细节
  /stack trace|internal error|debug/i,

  // 敏感数据
  /password|secret|token|key/i
];

分析算法

def build_defense_profile(codebase):
    """
    构建全面的防御档案。

    返回:
        DefenseProfile 带有所有评估
    """
    profile = DefenseProfile()

    # 第一阶段:静态分析
    patterns = analyze_static_patterns(codebase)
    profile.observedBehaviors.extend(patterns)

    # 第二阶段:依赖分析
    deps = analyze_dependencies(codebase)
    profile.guardrails.extend(identify_guardrails(deps))

    # 第三阶段:模式匹配
    for file in codebase.files:
        weak_signals = match_weak_patterns(file)
        strong_signals = match_strong_patterns(file)

        profile.weaknesses.extend(weak_signals)
        profile.responsePatterns.extend(strong_signals)

    # 第四阶段:等级评估
    profile.level = calculate_defense_level(profile)
    profile.confidence = calculate_confidence(profile)

    return profile


def calculate_defense_level(profile):
    """
    根据信号计算总体防御等级。
    """
    weak_count = len(profile.weaknesses)
    strong_count = len([g for g in profile.guardrails if g.strength > 0.7])

    ratio = strong_count / (weak_count + strong_count + 1)

    if ratio > 0.9:
        return "hardened"
    elif ratio > 0.7:
        return "strong"
    elif ratio > 0.4:
        return "moderate"
    elif ratio > 0.2:
        return "weak"
    else:
        return "none"

与 Ralph Loop 的集成

防御分析在分析初期运行:

步骤 1b:GAP-ANALYST
  - 防御分析器(如果是与安全相关的任务)

步骤 6:EXECUTE-WITH-SYNC
  - 6a. LSA-VERIFY
      - 根据防御档案检查

步骤 7:VALIDATE
  - 7c. ADVERSARIAL-CODE
      - 使用防御档案指导分析

调用

任务:
  subagent_type: "defense-profiler"
  model: "sonnet"
  prompt: |
    TARGET_PATH: src/
    FOCUS: security
    DEPTH: comprehensive

    为目标代码库构建防御档案。
    识别:
    - 当前防御等级
    - 活跃的防护措施
    - 弱点及其可利用性
    - 模式和信号

输出格式

{
  "defense_profile": {
    "level": "moderate",
    "confidence": 0.78,
    "summary": "代码库具有标准防御,但有一些差距",

    "guardrails": [
      {
        "type": "input_validation",
        "strength": 0.65,
        "coverage": ["api/auth", "api/users"],
        "bypassed": false
      },
      {
        "type": "rate_limiting",
        "strength": 0.80,
        "coverage": ["api/*"],
        "bypassed": false
      }
    ],

    "weaknesses": [
      {
        "category": "injection",
        "description": "遗留查询中的 SQL 连接",
        "exploitability": 0.7,
        "location": "src/db/legacy.ts:45"
      },
      {
        "category": "auth",
        "description": "缺少 CSRF 令牌验证",
        "exploitability": 0.5,
        "location": "src/middleware/auth.ts"
      }
    ],

    "recommendations": [
      "将遗留查询迁移到参数化的 ORM",
      "在状态更改端点添加 CSRF 中间件",
      "在认证端点实施速率限制"
    ]
  },

  "analysis_metadata": {
    "files_analyzed": 156,
    "patterns_matched": 23,
    "duration_ms": 4500
  }
}

弱点类别

类别 描述 示例
injection 代码注入漏洞 SQL, XSS, 命令
auth 认证/授权问题 缺少检查,弱令牌
crypto 加密弱点 弱算法,糟糕的密钥管理
config 配置问题 硬编码的秘密,不安全的默认值
data 数据保护问题 未加密的 PII,记录敏感数据
trust 信任边界违规 SSRF, 打开重定向
resource 资源管理 内存泄漏,DoS 向量

CLI 命令

# 完整档案
ralph defense-profile src/

# 专注于安全
ralph defense-profile --focus security src/auth/

# 快速扫描
ralph defense-profile --quick src/

# 输出到文件
ralph defense-profile src/ --output defense-profile.json

# 比较档案
ralph defense-profile --compare baseline.json src/

持续监控

设置为 pre-commit 钩子:

#!/bin/bash
# 在更改的文件上运行防御档案
CHANGED=$(git diff --cached --name-only)
ralph defense-profile --files "$CHANGED" --threshold moderate

# 如果等级下降则失败
if [ $? -ne 0 ]; then
    echo "防御等级下降到阈值以下"
    exit 1
fi

最佳实践

  1. 先进行档案分析:总是在测试前进行档案分析
  2. 跟踪变化:随着时间的推移比较档案
  3. 关注弱点:根据可利用性优先排序
  4. 验证防护措施:确保它们实际上在工作
  5. 定期更新:防御会变化,经常重新进行档案分析

归属

防御分析模式改编自 ZeroLeaks 防御分析系统 (FSL-1.1-Apache-2.0)。