版本: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
最佳实践
- 先进行档案分析:总是在测试前进行档案分析
- 跟踪变化:随着时间的推移比较档案
- 关注弱点:根据可利用性优先排序
- 验证防护措施:确保它们实际上在工作
- 定期更新:防御会变化,经常重新进行档案分析
归属
防御分析模式改编自 ZeroLeaks 防御分析系统 (FSL-1.1-Apache-2.0)。