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, 内存规避, 内容过滤, 大模型评估, 威胁检测, 子域名变形, 子域名突变, 安全大模型, 安全运营, 安全遥测, 容器化, 扫描框架, 攻击场景, 无线安全, 测试用例, 目标导入, 端到端测试, 系统提示词, 网络安全, 误报分析, 请求拦截, 越狱测试, 逆向工具, 隐私保护