Abhiro0p/SOCBench
GitHub: Abhiro0p/SOCBench
一套完全容器化的蓝队 AI 评测基准,用 55 个真实攻击场景从威胁识别、证据关联、影响评估等五个维度给大模型打分,并内置 RAG、Few-shot 和 LoRA 微调来系统性提升模型表现。
Stars: 0 | Forks: 0
# 蓝队 AI 推理基准测试
一个完全容器化的端到端基准测试,用于评估 AI 模型在真实 SOC 分析师和检测工程任务上的表现。对任意 LLM 运行 55 个精选攻击场景,在 5 个推理维度上对其进行评分,然后通过 Few-shot 提示、RAG 增强和 LoRA 微调对其进行系统性改进。
```
git clone
cp .env.example .env # fill in your API key
./scripts/run_benchmark.sh --model claude-sonnet-4-6 --adapter claude
# 结果位于 http://localhost:8083 和 data/results/benchmark_.json
```
## 此基准测试衡量什么
AI 模型将被作为 1-3 级 SOC 分析师进行评估。每个场景提供原始安全遥测数据(Windows Event Logs、Sysmon、Zeek、CloudTrail)且不带标签。模型必须生成涵盖以下内容的结构化 JSON 调查报告:
- **结论 (Verdict)** — 真阳性事件、误报或良性异常
- **攻击链** — 附带证据引用的 MITRE ATT&CK 技术序列
- **受损资产** — 受影响的账户和主机
- **影响范围 / 爆炸半径** — 如果不进行遏制可能面临的风险
- **遏制步骤** — 有序且具体的补救措施
- **Sigma 检测规则** — 用于在未来捕获此攻击的有效 YAML 规则
- **推理轨迹** — 引用时间戳和事件 ID 的逐步证据链
## 架构
```
┌─────────────────────────────────────────────────────────────────┐
│ EVALUATION HARNESS │
│ load_scenarios → inject_telemetry → build_prompt → query_model │
│ → score_output → persist_results │
└──────────┬───────────────────────────┬──────────────────────────┘
│ │
┌──────▼───────┐ ┌───────▼──────┐
│ Elasticsearch│ │ PostgreSQL │
│ + Kibana │ │ results DB │
│ (SIEM/telemetry) └───────┬──────┘
└──────┬───────┘ │
│ ┌───────▼──────┐
┌──────▼───────┐ │ Dashboard │
│ LocalStack │ │ FastAPI API │
│ AWS sim │ │ React UI │
└──────────────┘ └─────────────┘
AI Adapters: Claude ─── OpenAI ─── Ollama (local)
└── +RAG (Qdrant) ──┘
└── +FewShot ───────┘
```
**基础设施栈:**
| 组件 | 技术 | 用途 |
|-----------|-----------|---------|
| SIEM | Elasticsearch 8.13 + Kibana | 遥测数据存储与搜索 |
| 日志摄取 | Logstash, Winlogbeat, Zeek | 日志管道 |
| AWS 仿真 | LocalStack | CloudTrail / IAM / S3 场景 |
| AD 仿真 | Samba DC | Windows 域场景 |
| 结果数据库 | PostgreSQL 16 | 评分存储、仪表盘查询 |
| 向量存储 | Qdrant | RAG 知识库 |
| 编排 | Docker Compose + Kubernetes | 单节点和规模化运行 |
| IaC | Terraform + Ansible | 可重现环境 |
## 快速开始
### 前置条件
- Docker Engine + Docker Compose v2
- Python 3.11+
- 待测模型的 API 密钥(或本地模型使用的 [Ollama](https://ollama.com))
### 1. 配置环境
```
cp .env.example .env
# 编辑 .env 并设置 ANTHROPIC_API_KEY 或 OPENAI_API_KEY
```
### 2. 运行完整基准测试(云模型)
```
./scripts/run_benchmark.sh --model claude-sonnet-4-6 --adapter claude --parallel 3
```
### 3. 运行本地模型(Ollama)
```
ollama pull llama3.1:70b
./scripts/run_benchmark.sh --local
```
### 4. 使用 RAG 增强运行
```
./scripts/run_benchmark.sh --model claude-sonnet-4-6 --rag
```
### 5. 仅运行特定场景
```
./scripts/run_benchmark.sh --scenarios SCN-001,SCN-004,SCN-005
```
### 6. 跳过基础设施启动(复用现有环境)
```
./scripts/run_benchmark.sh --skip-infra --model gpt-4o --adapter openai
```
### CLI 参数汇总
| 参数 | 默认值 | 描述 |
|------|---------|-------------|
| `--model` | `claude-sonnet-4-6` | 模型标识符 |
| `--adapter` | `claude` | `claude`、`openai` 或 `ollama` |
| `--scenarios` | all | 逗号分隔的场景 ID |
| `--parallel` | `3` | 并发场景 Worker 数量 |
| `--rag` | off | 启用 RAG 知识库 |
| `--local` | off | 使用 Ollama 和 `llama3.1:70b` |
| `--skip-infra` | off | 跳过 Docker Compose 启动 |
| `--cleanup` | off | 运行后拆除 Docker 环境 |
## 基准测试场景
### 手工标注场景(SCN-001 至 SCN-010)
| ID | 标题 | 级别 | 难度 | 关键 TTPs |
|----|-------|------|------------|----------|
| SCN-001 | Kerberoasting + Pass-the-Hash | 2 级 | 中等 | T1558.003, T1550.002 |
| SCN-002 | BEC via OAuth App Consent Grant | 2 级 | 中等 | T1566.002, T1528, T1114.002 |
| SCN-003 | AWS IMDS SSRF + S3 Exfiltration | 3 级 | 困难 | T1552.005, T1530 |
| SCN-004 | DCSync + Golden Ticket Forgery | 3 级 | 困难 | T1003.006, T1558.001 |
| SCN-005 | Ransomware Pre-Deployment | 2 级 | 困难 | T1018, T1135, T1490, T1486 |
| SCN-006 | Malicious npm Package C2 Beacon | 3 级 | 困难 | T1195.001, T1071.001 |
| SCN-007 | LLMNR Poisoning + SMB Relay | 2 级 | 中等 | T1557.001, T1187 |
| SCN-008 | False Positive: Authorized Red Team | 2 级 | 中等 | — |
| SCN-009 | Azure AD Conditional Access Bypass | 2 级 | 中等 | T1078.004, T1556.006 |
| SCN-010 | Linux Systemd + Cron Persistence | 1 级 | 简单 | T1543.002, T1053.003 |
### 生成的场景(SCN-011 至 SCN-055)
由 15 个攻击模板 × 3 个难度变体生成的 45 个额外场景,涵盖:
| 类别 | 场景 |
|----------|-----------|
| 凭证访问 | ASREPRoasting、NTDS.dit 提取、浏览器凭证窃取、Pass-the-Ticket |
| 横向移动 | WMI exec、PSExec (重命名二进制文件)、RDP with PTT、BloodHound DACL abuse |
| 持久化 | Registry Run Key (编码的 PowerShell)、DLL 劫持、计划任务 |
| 防御规避 | 日志清除、AMSI 绕过、进程镂空 |
| 云攻击 | AWS PassRole privilege escalation、Azure token replay、S3 bucket enumeration |
| C2 / 数据窃取 | DNS 隧道、Cobalt Strike HTTPS beacon、ICMP 数据窃取 |
| 误报 | IT 维护、授权渗透测试、旧系统噪音 |
每个生成的场景包括:
- 跨 2-3 个日志源的 5-12 个遥测事件
- 包含攻击链、IOC 和遏制步骤的完整 `ground_truth`
- MITRE ATT&CK 技术映射
- 带有部分权重的评分标准
## 评分系统
每个场景在五个维度上按 0-100 分进行评分:
### 维度权重
| 维度 | 权重 | 衡量内容 |
|-----------|--------|-----------------|
| 威胁识别 | 25% | 正确的结论 (TP/FP/benign) + MITRE 技术召回率/精确率 |
| 证据关联 | 30% | 推理轨迹引用了具体的日志证据(时间戳、事件 ID、字段值) |
| 影响评估 | 20% | 正确识别受损的账户和主机 |
| 补救措施 | 15% | 遏制步骤覆盖率 + 有效的 Sigma 规则 |
| 误报处理 | 10% | 不标记良性事件;正确识别授权活动 |
### MITRE 评分
技术识别使用 T 编号集合的 F1 分数:
- 召回率:识别出的真实技术的比例
- 精确率:对遥测数据中无证据的幻觉技术进行惩罚
- F1:调和平均值 — 在不产生幻觉的情况下奖励完整性
- **父技术部分得分:** `T1558` 视为与真实值 `T1558.003` 匹配。使用基础技术代码正确识别攻击系列的模型不会被惩罚至零分。
### Sigma 规则验证
模型的 Sigma 规则使用真实的 YAML 解析进行验证(`SigmaRuleValidator`):
- 必填键:`title`、`logsource`、`detection`
- `detection` 块必须包含 `condition` 键
- YAML 解析错误将计为 0 分
### 聚合指标
- **F1 分数**: TP/FP 结论分类的宏平均精确率/召回率
- **平均分数 %**: 所有场景的平均标准分数
- **MTTD**: 平均检测时间,以 AI 响应延迟作为代理
- **技能雷达**: 仪表盘中可见的按领域细分
## 项目结构
```
SIEM2/
├── .env.example # Required environment variables template
├── .gitignore
├── pyproject.toml # Package config, test settings
├── requirements.txt
│
├── benchmark/
│ ├── taxonomy/
│ │ └── blue_team_skills.json # 7 skill domains, 35 sub-skills
│ ├── rubrics/
│ │ └── evaluation_rubrics.md # Detailed scoring criteria
│ └── scenarios/
│ ├── scenario_001_kerberoasting.json
│ ├── scenario_002_phishing_o365.json
│ ├── scenario_003_aws_iam_compromise.json
│ ├── scenario_004_dcsync.json
│ ├── scenario_005_ransomware_pre.json
│ ├── scenario_006_to_010.json # Batch file: SCN-006 through SCN-010
│ ├── scn_011.json ... scn_055.json # Generated scenarios
│ ├── scenario_index.json # Title/difficulty index
│ └── generators/
│ └── scenario_generator.py # Deterministic generator (seed=42)
│
├── evaluation/
│ ├── harness/
│ │ ├── harness.py # Main orchestrator
│ │ └── Dockerfile # Container for isolated runs
│ ├── scoring/
│ │ └── scorer.py # BenchmarkScorer + SigmaRuleValidator
│ └── dashboard/
│ ├── app.py # FastAPI backend (12 endpoints)
│ └── src/Dashboard.jsx # React frontend (dark theme)
│
├── ai_models/
│ ├── adapters/
│ │ ├── adapter_base.py # Abstract ModelAdapter interface
│ │ ├── claude_adapter.py # Anthropic Claude with prompt caching
│ │ ├── openai_adapter.py # OpenAI / compatible APIs
│ │ └── ollama_adapter.py # Local models via Ollama
│ ├── baselines/
│ │ └── few_shot_baseline.py # FewShotBaseline wrapper adapter
│ ├── rag/
│ │ └── rag_pipeline.py # RAGPipeline + RAGEnhancedAdapter
│ └── fine_tuning/
│ └── fine_tune_pipeline.py # LoRA/QLoRA training pipeline
│
├── attack_simulation/
│ └── custom_scripts/
│ └── inject_scenario.py # Injects telemetry into Elasticsearch
│
├── infrastructure/
│ ├── terraform/ # AWS resources (LocalStack-compatible)
│ │ ├── main.tf
│ │ └── variables.tf
│ ├── ansible/
│ │ ├── inventory/hosts.yml
│ │ ├── playbook_deploy_environment.yml
│ │ ├── files/
│ │ │ ├── sysmonconfig.xml # Sysmon event capture config
│ │ │ └── local.zeek # Zeek network analysis config
│ │ └── templates/
│ │ ├── winlogbeat.yml.j2 # Winlogbeat per-host config
│ │ ├── es_winlogbeat_template.json
│ │ ├── es_zeek_template.json
│ │ ├── es_cloudtrail_template.json
│ │ └── kibana_dashboards.ndjson
│ ├── docker/
│ │ ├── docker-compose.yml # Full stack (ES, Kibana, Postgres, Qdrant, etc.)
│ │ ├── postgres/init.sql # Results DB schema + views
│ │ ├── logstash/ # Logstash pipeline config
│ │ ├── winlog_simulator/ # Synthetic Windows log injector
│ │ ├── zeek/ # Zeek sensor config
│ │ ├── samba/ # Samba DC for AD simulation
│ │ └── caldera/ # CALDERA adversary simulation
│ └── kubernetes/
│ └── benchmark-deployment.yaml # Parallel runs at scale
│
├── migrations/
│ ├── alembic.ini
│ ├── env.py
│ └── versions/
│ └── 0001_initial_schema.py # Full DB schema migration
│
├── data/
│ ├── benchmark_users.json # AD user accounts for scenarios
│ ├── threat_intel/ # RAG knowledge base (Markdown)
│ │ ├── mitre_attack_techniques.md
│ │ ├── sigma_rules_reference.md
│ │ ├── incident_response_playbooks.md
│ │ └── windows_event_id_reference.md
│ ├── logs/ # Harness logs (auto-created)
│ └── results/ # Benchmark run JSON outputs
│
├── scripts/
│ ├── run_benchmark.sh # One-command runner
│ └── seed_db.py # Populate DB with sample data
│
└── tests/
├── conftest.py
├── test_scorer.py # 13 scorer unit tests
├── test_rag.py # 9 RAG pipeline tests
├── test_dashboard.py # 5 dashboard metadata tests
└── test_few_shot.py # 7 FewShotBaseline tests
```
## AI 模型适配器
### 使用内置适配器
```
# Claude (Anthropic)
export ANTHROPIC_API_KEY=sk-ant-...
./scripts/run_benchmark.sh --model claude-sonnet-4-6 --adapter claude
# OpenAI
export OPENAI_API_KEY=sk-...
./scripts/run_benchmark.sh --model gpt-4o --adapter openai
# Local (Ollama)
ollama pull llama3.1:70b
./scripts/run_benchmark.sh --local
```
### 编写自定义适配器
```
# ai_models/adapters/my_adapter.py
from ai_models.adapters.adapter_base import ModelAdapter, AdapterResponse
from typing import Optional
class MyModelAdapter(ModelAdapter):
def __init__(self, model_name: str = "my-model-v1"):
self._model_name = model_name
@property
def model_name(self) -> str:
return self._model_name
@property
def model_version(self) -> str:
return "1.0"
@property
def adapter_type(self) -> str:
return "custom"
async def query(
self,
prompt: str,
scenario_id: str,
run_id: str,
system_prompt: Optional[str] = None,
temperature: float = 0.0,
max_tokens: int = 4096,
) -> AdapterResponse:
sys = system_prompt or self.default_system_prompt()
response = await your_model_api(prompt, system=sys)
return AdapterResponse(
content=response.text,
tokens_used=response.usage.total,
model=self._model_name,
)
```
然后直接在 Python 中使用:
```
from evaluation.harness.harness import EvaluationHarness
from ai_models.adapters.my_adapter import MyModelAdapter
import asyncio
harness = EvaluationHarness(adapter=MyModelAdapter())
run = asyncio.run(harness.run_benchmark(parallel=3))
print(f"F1: {run.f1_score():.3f} Mean: {run.mean_score_pct():.1f}%")
```
## RAG 增强
RAG 在查询时检索相关的威胁情报,并将其作为上下文注入到分析师提示中。知识库以 Markdown 文件的形式存放在 `data/threat_intel/` 中。
### 知识库内容
| 文件 | 内容 |
|------|----------|
| `mitre_attack_techniques.md` | 15+ 种 MITRE 技术的检测说明和指标 |
| `sigma_rules_reference.md` | 6 个经过验证的 Sigma 规则模板(DCSync、Kerberoasting、LSASS 等) |
| `incident_response_playbooks.md` | 5 种攻击类型的有序遏制演练方案 |
| `windows_event_id_reference.md` | 30+ 个 Windows 安全事件的事件 ID 查找表 |
### 分块工作原理
RAG 管道按标题拆分 Markdown,然后在 800 个字符的边界上进行硬拆分,确保没有任何分块超过 OpenAI 的嵌入上下文。每个分块以标题作为元数据存储在 Qdrant 中,以便进行过滤检索。
### 启用 RAG
在使用 `--rag` 之前,必须对 Qdrant 知识库进行一次索引。向量持久化在 `qdrant_data` Docker 卷中,因此这是一次性操作:
```
# Index knowledge base (运行一次)
source .env && python3 -c "
import asyncio, sys; sys.path.insert(0,'.')
from pathlib import Path
from ai_models.rag.rag_pipeline import RAGPipeline
async def main():
rag = RAGPipeline()
await rag.index_knowledge_base(Path('data/threat_intel'))
print(rag.qdrant.get_collection('blueteam_knowledge').points_count, 'vectors indexed')
asyncio.run(main())
"
# 使用 RAG 的完整运行
./scripts/run_benchmark.sh --rag --model claude-sonnet-4-6
# 编程式使用
from ai_models.rag.rag_pipeline import RAGPipeline, RAGEnhancedAdapter
from ai_models.adapters.claude_adapter import ClaudeAdapter
rag = RAGPipeline()
await rag.index_knowledge_base(Path("data/threat_intel"))
adapter = RAGEnhancedAdapter(ClaudeAdapter(), rag)
# 像往常一样将 adapter 传递给 EvaluationHarness
```
## Few-shot 基线
在初始基准测试运行之后,提取得分最高的轨迹,并将其作为演示注入到后续的每个查询中。此过程不改变模型权重。
```
from ai_models.baselines.few_shot_baseline import FewShotBaseline
from ai_models.adapters.claude_adapter import ClaudeAdapter
from pathlib import Path
base = ClaudeAdapter()
# 基于先前的 benchmark 运行构建(使用得分 >= 75% 的 traces)
fs_adapter = FewShotBaseline.from_benchmark_results(
base,
results_path=Path("data/results/baseline.json"),
min_score=75.0,
max_examples=3,
)
# 在 EvaluationHarness 中使用 fs_adapter — 接口一致
```
Few-shot 系统提示最多包含 3 个截断的示例轨迹(输入上下文 + 模型输出),并按分数降序排列。
## 微调管道
对于开源权重模型(Llama-3、DeepSeek、Mistral),完整的 LoRA/QLoRA 管道可将高分基准轨迹转换为监督微调数据。
### 第 1 步:提取训练数据
```
python3 ai_models/fine_tuning/fine_tune_pipeline.py extract \
--results data/results/baseline.json \
--min-score 70 \
--output training_data.json
```
### 第 2 步:使用 LoRA 进行微调
```
# 首先安装 fine-tuning 依赖项
pip install transformers peft trl bitsandbytes accelerate datasets
python3 ai_models/fine_tuning/fine_tune_pipeline.py train \
--results training_data.json \
--model meta-llama/Meta-Llama-3-8B-Instruct
# 保存到 ./checkpoints/blueteam-ft/
```
LoRA 配置:
- 秩 `r=16`,alpha `32`
- 目标模块:`q_proj`、`v_proj`、`k_proj`、`o_proj`
- 4-bit QLoRA (NF4),显存占用约 10GB VRAM
- 3 个 epoch,余弦调度,学习率 2e-4
### 第 3 步:评估与比较
```
./scripts/run_benchmark.sh --local --model blueteam-ft \
--output data/results/improved.json
python3 ai_models/fine_tuning/fine_tune_pipeline.py delta \
--results data/results/baseline.json \
--improved-results data/results/improved.json
```
输出:
```
{
"baseline": {"f1": 0.61, "avg_score": 58.2, "avg_latency_ms": 4200},
"improved": {"f1": 0.84, "avg_score": 77.1, "avg_latency_ms": 3100},
"delta_f1": 0.23,
"delta_f1_pct": 23.0,
"delta_avg_score_pct": 18.9,
"delta_mttd_pct": 26.2,
"meets_f1_threshold": false,
"meets_mttd_threshold": false
}
```
项目成功的目标阈值:**ΔF1 ≥ 30%**,**ΔMTTD ≥ 50%**。
### 第 4 步:记录改进周期
```
harness.record_improvement_cycle(
cycle_number=1,
base_run_id="",
improved_run_id="",
improvement_type="fine_tune", # few_shot | rag | fine_tune | combined
delta_f1=0.23,
delta_mttd_pct=26.2,
notes="LoRA r=16, 3 epochs, 500 training examples",
)
```
这将填充仪表盘中的改进时间线。
## 仪表盘
基准测试运行后,可通过 **http://localhost:8083** 访问仪表盘 API。
### 端点
| 端点 | 描述 |
|----------|-------------|
| `GET /api/runs` | 列出所有带有汇总统计的基准运行 |
| `GET /api/runs/{run_id}/scenarios` | 某次运行的各场景得分 |
| `GET /api/runs/{run_id}/skills` | 某次运行的技能领域细分 |
| `GET /api/compare?run_ids=a&run_ids=b` | 模型并排比较 |
| `GET /api/improvements` | 改进周期时间线 |
| `GET /api/scenarios/difficulty_breakdown` | 按简单/中等/困难划分的得分 |
| `GET /api/scenarios/attack_stage_breakdown` | 薄弱的 MITRE 技术 |
| `GET /api/error_analysis/{run_id}` | 失败模式聚类 |
| `GET /health` | 存活检查 |
### 仪表盘视图
- **模型选择器** — 在不同运行之间切换;按钮中显示平均分数
- **统计行** — 平均分数、结论准确率、场景数、平均延迟
- **技能雷达** — 跨 5 个评分维度的蜘蛛图
- **结论条** — 正确与错误的结论计数
- **场景表** — 带有颜色编码的各场景得分(绿色 ≥70%,黄色 ≥40%,红色 <40%)
- **失败模式面板** — 统计 `missed_false_positive`、`false_positive_overcall`、`poor_evidence_correlation`等计数
- **改进时间线** — 每次微调周期的 F1 增量和 MTTD 降低情况
## 数据库模式
PostgreSQL 模式(同样位于 `infrastructure/docker/postgres/init.sql` 和 `migrations/versions/0001_initial_schema.py` 中):
```
benchmark_runs -- One row per model evaluation run
scenario_results -- One row per scenario per run; includes all sub-scores
skill_scores -- Normalized per-skill scores for radar chart
improvement_cycles -- Delta metrics between baseline and improved runs
model_performance_summary -- Aggregate VIEW for dashboard queries
```
### 运行迁移
```
# 将 migrations 应用到现有 DB
cd SIEM2
alembic -c migrations/alembic.ini upgrade head
# 填充 sample data(适用于在没有真实运行的情况下测试 dashboard)
python3 scripts/seed_db.py
```
## 可重现性
所有基准测试运行均使用 `BENCHMARK_SEED=42`(可通过环境变量配置)用于:
- 场景排序
- 背景噪音事件生成
- 遥测时间戳抖动
要精确重现任何一次运行:
```
BENCHMARK_SEED=42 ./scripts/run_benchmark.sh --model --adapter
```
结果通过运行 UUID、种子、模型名称和完整的 AI 输出持久化在 PostgreSQL 中,从而能够在不同运行和模型之间进行精确比较。
## 运行测试
```
# 所有 34 个单元测试(无需外部服务)
python3 -m pytest tests/ -v
# 包含覆盖率
python3 -m pytest tests/ --cov=evaluation --cov=ai_models --cov-report=term-missing
```
测试覆盖范围:
- `test_scorer.py` — 13 个测试:威胁识别、FP 处理、影响评估、Sigma 验证、场景加载
- `test_rag.py` — 9 个测试:Markdown 分块、RAGEnhancedAdapter 接口、知识库文件
- `test_dashboard.py` — 5 个测试:场景元数据加载、难度聚合
- `test_few_shot.py` — 7 个测试:示例加载、阈值过滤、系统提示注入、异步查询
## 环境变量
有关所有变量,请参见 `.env.example`。关键变量:
| 变量 | 默认值 | 是否必填 |
|----------|---------|----------|
| `ANTHROPIC_API_KEY` | — | 如果使用 Claude |
| `OPENAI_API_KEY` | — | 如果使用 OpenAI 或 RAG embeddings |
| `RESULTS_DB_URL` | `postgresql://benchmark:benchmark@localhost:5433/benchmark_results` | 始终必填 |
| `ELASTICSEARCH_URL` | `http://localhost:9200` | 始终必填 |
| `BENCHMARK_SEED` | `42` | 可选 |
| `SCENARIOS_DIR` | `benchmark/scenarios` | 可选 |
## Kubernetes 部署(规模化)
用于跨多个场景的并行运行:
```
# 创建 namespace 和 secrets
kubectl apply -f infrastructure/kubernetes/benchmark-deployment.yaml
# 使用真实值修补 secret
kubectl patch secret benchmark-secrets -n blueteam-benchmark \
--type='json' \
-p='[{"op":"replace","path":"/stringData/anthropic-api-key","value":"sk-ant-..."}]'
```
Kubernetes Job 使用索引并行执行——每个 Pod 处理由 `SCENARIO_INDEX` 确定的子集场景。
## 安全说明
本项目出于基准测试目的包含**故意设置的易受攻击配置**:
- Terraform 中的 IAM 角色 `WebAppRole-BenchmarkVulnerable` 拥有过于宽泛的 S3 权限——这是为 SCN-003 专门设计的
- 本地环境中的 Elasticsearch 未启用身份验证运行——请勿将其公开暴露
- Samba DC 使用来自 `.env` 的固定密码——在任何可网络访问的部署之前请更改此密码
- `data/benchmark_users.json` 账户使用共享密码——这些仅是合成的实验室账户
**请勿将此技术栈部署在生产环境或任何可公开访问的网络中。**
## 添加新场景
### 场景 JSON 模式
```
{
"scenario_id": "SCN-056",
"title": "Short descriptive title",
"description": "One paragraph attack narrative for the analyst.",
"soc_tier": "tier1 | tier2 | tier3",
"difficulty": "easy | medium | hard",
"attack_duration_minutes": 30,
"dwell_time_minutes": 120,
"mitre_techniques": ["T1003.006", "T1558.001"],
"primary_skills_tested": ["EC-01", "LA-01"],
"log_sources_present": ["windows_event_logs", "sysmon"],
"environment": {
"domain": "corp.local",
"dc": "DC01.corp.local",
"attacker_host": "WS-IT-03.corp.local",
"attacker_user": "a.patel"
},
"telemetry": {
"windows_event_logs": [
{
"timestamp": "2026-04-18T14:22:01.334Z",
"host": "DC01",
"event_id": 4662,
"description": "Operation Performed on Object",
"fields": { "SubjectUserName": "a.patel", "AccessList": "%%7689" },
"ground_truth_label": "malicious",
"analyst_note": "DCSync pattern — non-DC account requesting replication rights."
}
]
},
"ground_truth": {
"verdict": "TRUE_POSITIVE_INCIDENT",
"attack_chain": ["T1003.006: DCSync at 14:22 via a.patel"],
"compromised_accounts": ["a.patel@corp.local", "krbtgt"],
"compromised_hosts": ["WS-IT-03", "DC01"],
"root_cause": "...",
"blast_radius": "...",
"indicators_of_compromise": ["..."],
"containment_steps": ["Rotate krbtgt password twice (24h apart)"],
"detection_improvements": ["Alert on Event 4662 from non-DC accounts"]
},
"scoring_rubric": {
"max_score": 100,
"sections": {
"threat_identification": {"weight": 25, "criteria": ["..."]},
"evidence_correlation": {"weight": 30, "criteria": ["..."]},
"impact_assessment": {"weight": 20, "criteria": ["..."]},
"remediation": {"weight": 15, "criteria": ["..."]},
"false_positive_handling": {"weight": 10, "criteria": ["..."]}
}
}
}
```
将文件放入 `benchmark/scenarios/` 目录中——它会在运行时被自动发现。
### 以编程方式生成场景
```
python3 benchmark/scenarios/generators/scenario_generator.py \
--start 56 --end 70 --output benchmark/scenarios/
```
生成器使用带有种子的随机过程来实现可重现的场景变体。
## 技能分类法
`primary_skills_tested` 字段中使用的技能代码:
| 代码 | 领域 | 描述 |
|------|--------|-------------|
| HG-01 | 假设生成 | 从稀疏的工件中形成调查假设 |
| HG-02 | 假设生成 | 根据日志源的可能性对假设进行优先级排序 |
| EC-01 | 证据关联 | 跨源攻击链构建 |
| EC-04 | 证据关联 | 跨日志源的时间线重建 |
| LA-01 | 日志分析 | Windows Security Event Log 解释 |
| LA-02 | 日志分析 | Sysmon 事件解释 |
| IA-03 | 影响评估 | 识别域级别的爆炸半径 |
| IA-05 | 影响评估 | 执行前风险评估 |
| RR-01 | 补救措施 | 有序的遏制步骤 |
| FP-01 | 误报辨别 | 区分授权管理员与攻击者 |
完整分类法位于 `benchmark/taxonomy/blue_team_skills.json` 中。
## 许可证
Apache 2.0 — 详情请参阅 [LICENSE](LICENSE)。
*包含出于基准测试目的而故意设置的易受攻击配置。请勿部署在生产环境中。*
标签:AI安全基准测试, AI风险缓解, AMSI绕过, Claude, Cloudflare, CVE检测, IP 地址批量处理, LLM, LLM评估, LoRA微调, MITRE ATT&CK, NIDS, Ollama, OpenAI, RAG, Sigma规则, SOC分析师, Unmanaged PE, 内存规避, 内容过滤, 大模型评估, 威胁检测, 子域名变形, 子域名突变, 安全大模型, 安全运营, 安全遥测, 容器化, 扫描框架, 攻击场景, 无线安全, 测试用例, 目标导入, 端到端测试, 系统提示词, 网络安全, 误报分析, 请求拦截, 越狱测试, 逆向工具, 隐私保护