researchartifact-oss/Evolution-of-Log-Based-Detection-Rules

GitHub: researchartifact-oss/Evolution-of-Log-Based-Detection-Rules

该研究工件提供了一套完整的 pipeline,用于分析 Sigma 和 Splunk Security Content 检测规则的历史演进过程,通过中间表示、结构对齐和 LLM 标注揭示规则变更模式与意图。

Stars: 0 | Forks: 0

# 基于日志的检测规则的演进 双盲评审的研究工件 ## 环境 - Python: 3.14.2 - OS: 在 macOS 上经过测试 - 包管理器: pip ## 数据 大文件(规则仓库包和生成的 pipeline 输出)托管在 Google Drive 上: **[https://drive.google.com/drive/folders/1jdDMVvuRV3cT0WwRK91-R-AHfpUxXvzU?usp=sharing](https://drive.google.com/drive/folders/1jdDMVvuRV3cT0WwRK91-R-AHfpUxXvzU?usp=sharing)** 对于工件评审,我们建议使用 Google Drive 上预先构建的 pipeline 输出,而不是重新运行 `data_prep/build_src/`。特别是: - 使用上传的 `build_data/` 作为复现的起点。 - 同时下载后续阶段的输出 `ir_data/`、`align_data/` 和 `llm_data/`。 - 仅当您特别想要检查或部分重建原始谱系构建 pipeline 时,才运行 `build_src/`。 ## 设置说明 ### 1. Python 环境 ``` python -m venv venv source venv/bin/activate pip install -r requirements.txt ``` ### 2. 下载预先构建的 pipeline 数据(推荐) 为了最清晰的工件评审路径,请从 [Google Drive 文件夹](https://drive.google.com/drive/folders/1jdDMVvuRV3cT0WwRK91-R-AHfpUxXvzU?usp=sharing)下载以下文件夹并将它们放置在 `data_prep/` 下: | Google Drive 文件夹 | 本地路径 | 评审是否必需? | 备注 | |---|---|---|---| | `build_data/` | `data_prep/build_data/` | 是 | 推荐的起点 | | `ir_data/` | `data_prep/ir_data/` | 是 | 后续 pipeline 输出 | | `align_data/` | `data_prep/align_data/` | 是 | 后续 pipeline 输出 | | `llm_data/` | `data_prep/llm_data/` | 是 | 必须下载;请勿重新生成 | 有了这些文件夹,您可以直接进入 `analysis/scripts/` 中的 notebooks 并复现论文输出,而无需重新构建 data-prep pipeline。 ### 3. 运行 IR pipeline (`ir_src/`) 将每个规则版本中的 SPL 解析为 Predicate-Graph IR (PG-IR),供所有下游分析使用。 **输入:** `data_prep/build_data/rule_versions_{repo}.jsonl` ``` cd data_prep/ir_src ./run_pipeline.sh # both repos ./run_pipeline.sh sigma # sigma only ./run_pipeline.sh ssc # ssc only ``` 输出结果位于 `data_prep/ir_data/` 中: | 阶段 | 脚本 | 输出 | |---|---|---| | 1 | `build_unified_ir` | `unified_ir_{repo}.jsonl` — SPL 被解析为 Unified IR | | 2 | `build_pgir_from_ir` | `pgir_{repo}.jsonl` — Unified IR 提升为 Predicate-Graph IR | | 3 | `split_pgir_by_predicate_graph` | `pgir_{repo}_empty.jsonl` / `pgir_{repo}_nonempty.jsonl` | ### 4. 运行对齐 pipeline (`align_src/`) 计算连续规则版本之间的成对对齐和编辑距离轨迹。 **输入:** `data_prep/ir_data/pgir_{repo}_nonempty.jsonl` ``` cd data_prep/align_src ./run_pipeline.sh # both repos ./run_pipeline.sh sigma # sigma only ./run_pipeline.sh ssc # ssc only ``` 输出结果位于 `data_prep/align_data/` 中: | 输出 | 描述 | |---|---| | `all_steps_{repo}.jsonl` | 每个相邻版本对占一行 — 对齐、距离细分、更改计数 | | `all_trajectories_{repo}.jsonl` | 每个谱系占一行 — 累积距离、冲击率、还原计数、端点相似度 | ### 5. LLM 标注 (`llm_src/`) 为连续的规则版本对生成提示,并收集用于意图标注的结构化 LLM 响应。 **输入:** `data_prep/build_data/rule_versions_{repo}.jsonl` | 脚本 | 目的 | |---|---| | `prepare_llm_prompts.py` | 为所有非 noop 对生成提示 → `llm_data/{repo}/prompts.jsonl` | | `prepare_llm_prompts_from_pair_manifest.py` | 为明确策划的配对列表生成提示 | | `run_llm.py` | 将提示发送到兼容 OpenAI 的 API → `llm_data/{repo}/results.jsonl` | | `make_entries_from_audit.py` | 从审计结果构建配对清单,用于定向重新运行 | | `structural_test_labels.py` | 辅助工具:在不使用 LLM 的情况下派生结构化真值标签(在分析中使用) | ### 6. 可选:恢复规则快照并运行构建 pipeline (`build_src/`) 正常的工件评审不需要此步骤。我们建议评审者使用 Google Drive 上传的 `data_prep/build_data/`,并将 `build_src/` 视为可选的检查或重建路径。 上游规则仓库(SigmaHQ/sigma 和 splunk/security_content)未存储在此仓库中。它们以 git bundle 文件的形式在 Google Drive 上提供,保留了截至本研究中使用的 2026 年 4 月 10 日快照的完整提交历史。 **从 [Google Drive 文件夹](https://drive.google.com/drive/folders/1jdDMVvuRV3cT0WwRK91-R-AHfpUxXvzU?usp=sharing)下载 bundle** 并将它们放置在 `rules_repo/` 中: ``` rules_repo/sigma.bundle rules_repo/splunk_sc.bundle ``` 然后从 bundle 克隆: ``` git clone rules_repo/sigma.bundle rules_repo/sigma -b snapshot git clone rules_repo/splunk_sc.bundle rules_repo/splunk_sc -b snapshot ``` 这将为您提供两个本地 git 仓库,其中包含 pipeline 运行所依据的确切提交历史: | 仓库 | 快照提交 | 日期 | |---|---|---| | `rules_repo/sigma` | `d4d12bdd` | 2026-04-01 (截至 2026-04-10 的 HEAD + 17 个分支) | | `rules_repo/splunk_sc` | `aa672c674` | 2026-04-09 (截至 2026-04-10 的 HEAD + 678 个分支) | ``` cd data_prep/build_src ./run_pipeline.sh # run both repositories ./run_pipeline.sh sigma # sigma only ./run_pipeline.sh ssc # splunk security content only ``` 输出结果位于 `data_prep/build_data/` 中。这五个阶段分别是: 1. `build_rename_metadata` -> `lineage_metadata_raw_{repo}.json` 2. `build_semantic_lineage_metadata` -> `lineage_metadata_{repo}.json` 3. `merge_non_head_lineages` -> `lineage_metadata_final_{repo}.json` 4. `build_lineage_spl_per_rule` -> `rule_lineages_{repo}/` 5. `build_rule_versions` -> `rule_versions_{repo}.jsonl` ## 复现论文结果 Google Drive 文件夹包含所有 pipeline 阶段的预先构建输出。为了忠实地 1:1 复现论文中报告的结果,**请从 Google Drive 下载预先构建的数据**,并在运行任何分析之前将文件放置在相应的目录下: | Google Drive 文件夹 | 本地路径 | 可以从头复现吗? | |---|---|---| | `build_data/` | `data_prep/build_data/` | 基本可以 — 参见下文说明 | | `ir_data/` | `data_prep/ir_data/` | 是,可从提供的 `build_data/` 复现 | | `align_data/` | `data_prep/align_data/` | 是,可从提供的 `build_data/` 复现 | | `llm_data/` | `data_prep/llm_data/` | 否 — 请使用提供的文件 | 对于工件评审,这是推荐的路径:直接使用提供的 `build_data/`、`ir_data/`、`align_data/` 和 `llm_data/`。 如果您希望自己重新运行 `ir_src/` 和 `align_src/`,请从提供的 `build_data/` 开始,结果将与论文中报告的一致。 **为什么如果从头开始重新运行,`build_data/` 可能会略有不同:** 这些 bundle 是于 2026 年 4 月 30 日(即原始 4 月 10 日子模块快照之后的 20 天)从全新的 GitHub 克隆创建的。在该窗口期间,GitHub 上的 `splunk/security_content` 仓库中删除了 9 个短暂的修复/功能分支。这些分支为原始 pipeline 运行贡献了 9 个独特的提交(总计 1,722 条提交-规则记录,由一次广泛的格式化提交主导),这些提交现已无法恢复。结构性谱系输出(`lineage_metadata_final_ssc.json`,3,956 个条目)未受影响;只有 `rule_versions_ssc.jsonl` 的版本记录出现了小幅减少(约 0.8%)。 ## 分析 论文中报告的所有图表均可通过 `analysis/scripts/` 中的 Jupyter notebooks 进行复现。每个 notebook 都是独立的,可直接从上述预构建的数据目录中读取。 | Notebook | 论文输出 | |---|---| | `dataset.ipynb` | 表 1 — 数据集概览(谱系计数、活跃/已删除、提交统计) | | `temporal.ipynb` | 图 2、图 3、表 2 — 季度规则创建与修订量、队列堆叠 | | `structural.ipynb` | 图 4、图 5、表 4、表 5 — 结构操作频率与共现 | | `llm.ipynb` | 表 9、7、8 - LLM 标注针对 PG-IR 结构信号的验证及意图分布 |
标签:AMSI绕过, Cutter, DLL 劫持, LLM, NoSQL, Petitpotam, pip, Predicate-Graph IR, Python, SPL, Unmanaged PE, 代码分析, 代码示例, 凭证管理, 大语言模型, 威胁检测, 学术研究, 安全信息与事件管理, 安全规则演化, 序列对齐, 搜索引擎爬取, 数据分析, 数据管道, 无后门, 日志检测, 检测规则, 网络安全, 网络安全研究, 网络资产发现, 规则生命周期管理, 规则评估, 软件工程, 逆向工具, 隐私保护