InfoSecJay/sigma-llm-doc
GitHub: InfoSecJay/sigma-llm-doc
基于LLM自动为Sigma检测规则生成结构化调查指南的命令行工具,支持多LLM提供商和CI/CD流水线集成。
Stars: 0 | Forks: 0
# sigma-llm-doc
自动为 Sigma 检测规则生成由 LLM 驱动的调查指南,并将其作为 `note` 字段附加到 YAML 输出中。
## 流程上下文
此工具是 detection-as-code CI/CD 流水线中的**第 1 步**:
```
Mirrored external Sigma repo (SigmaHQ, LOLRMM, custom)
|
v
sigma-llm-doc --> Enriched Sigma rules (with `note` field)
|
v
Sigma-to-TOML converter --> Elastic SIEM-compatible rules
```
## 环境要求
- Python 3.10+
- 至少一个支持的提供商的 API key:
- **OpenAI** (`OPENAI_API_KEY`) -- 默认提供商
- **Anthropic Claude** (`ANTHROPIC_API_KEY`)
- **Google Gemini** (`GEMINI_API_KEY`)
## 安装
```
pip install -e .
```
用于开发(包含 pytest):
```
pip install -e ".[dev]"
```
复制 `.env.example` 到 `.env` 并添加您的 API key(s):
```
cp .env.example .env
# 编辑 .env 并设置你的 provider 的 API key:
# OPENAI_API_KEY=sk-...
# ANTHROPIC_API_KEY=sk-ant-...
# GEMINI_API_KEY=your-gemini-key-here
```
(可选)复制 `config.example.yaml` 到 `sigma-llm-doc.yaml` 以自定义默认设置:
```
cp config.example.yaml sigma-llm-doc.yaml
```
## 使用方法
安装后,即可使用 `sigma-llm-doc` 命令。您也可以将其作为 Python 模块运行:
```
sigma-llm-doc ./rules/
# 或
python -m sigma_llm_doc ./rules/
```
```
usage: sigma-llm-doc [-h] [--config CONFIG] [--prompt PROMPT]
[--output OUTPUT] [--provider {openai,claude,gemini}]
[--model MODEL] [--concurrency N] [--force] [--check]
[--verbose | --quiet]
input
Generate LLM-powered investigation guides for Sigma detection rules.
positional arguments:
input Path to a Sigma rule file (.yml/.yaml) or directory
optional arguments:
-h, --help show this help message and exit
--config CONFIG Path to config file (default: sigma-llm-doc.yaml)
--prompt PROMPT Path to prompt file (default: built-in prompt)
--output OUTPUT Output directory (default: ./output)
--provider {openai,claude,gemini}
LLM provider (default: openai)
--model MODEL LLM model to use (default depends on provider)
--concurrency N Max concurrent API calls (default: 5)
--force Regenerate all guides, ignoring cache
--check Validate existing guides without generating new ones
--verbose Increase log verbosity (debug level)
--quiet Suppress all output except errors and summary
```
### 示例
处理单个规则:
```
sigma-llm-doc rules/windows/process_creation/suspicious_cmd.yml
```
处理整个目录:
```
sigma-llm-doc ./sigma-rules/ --output ./enriched-rules/
```
强制重新生成所有指南:
```
sigma-llm-doc ./sigma-rules/ --force
```
验证现有指南(CI 关卡):
```
sigma-llm-doc ./enriched-rules/ --check
```
使用自定义 prompt 和 model:
```
sigma-llm-doc ./sigma-rules/ --prompt my_prompt.txt --model gpt-4o
```
使用 Claude 作为 LLM provider:
```
sigma-llm-doc ./sigma-rules/ --provider claude
```
使用特定的 Claude model:
```
sigma-llm-doc ./sigma-rules/ --provider claude --model claude-opus-4-6-20250929
```
使用 Google Gemini:
```
sigma-llm-doc ./sigma-rules/ --provider gemini
```
使用特定的 Gemini model:
```
sigma-llm-doc ./sigma-rules/ --provider gemini --model gemini-2.5-pro
```
## 配置
配置解析优先级为:**CLI 参数 > 配置文件 > 默认值**。
### 配置文件
创建 `sigma-llm-doc.yaml`(或使用 `--config` 指定路径):
```
llm:
provider: openai # openai, claude, or gemini
model: gpt-4o-mini # model name (default depends on provider)
api_key_env: OPENAI_API_KEY
processing:
concurrency: 5
max_retries: 3
api_max_retries: 3
output:
directory: ./output
```
### 支持的提供商
| Provider | `--provider` | Default Model | API Key Env Var |
|----------|-------------|---------------|-----------------|
| OpenAI | `openai` | `gpt-4o-mini` | `OPENAI_API_KEY` |
| Anthropic Claude | `claude` | `claude-sonnet-4-5-20250929` | `ANTHROPIC_API_KEY` |
| Google Gemini | `gemini` | `gemini-2.0-flash` | `GEMINI_API_KEY` |
当您使用 `--provider` 切换提供商时,默认 model 和 API key 环境变量会自动解析。您可以通过 `--model` 覆盖 model,或在配置文件中使用 `api_key_env` 覆盖环境变量。
### 环境变量
API key 从所选提供商的环境变量中读取(OpenAI 对应 `OPENAI_API_KEY`,Claude 对应 `ANTHROPIC_API_KEY`,Gemini 对应 `GEMINI_API_KEY`)。您可以通过以下方式设置:
- 项目根目录下的 `.env` 文件(通过 `python-dotenv` 自动加载)
- 系统环境变量
- CI/CD 密钥(例如 GitLab CI 变量)
## 退出代码
| Code | 含义 |
|------|---------|
| 0 | 成功 —— 所有规则已成功处理或跳过 |
| 1 | 错误 —— 不可恢复的错误(配置错误、缺少输入等) |
| 2 | 部分失败 —— 部分规则在重试后失败(参见摘要) |
## 工作原理
1. 从输入路径**加载规则**(文件或目录遍历)
2. **计算每个规则内容的哈希值**(排除 `note` 字段)并与 JSON 缓存进行比对
3. **跳过未更改的规则**,即内容哈希和 prompt 哈希与缓存匹配的规则
4. **将更改的规则发送到 LLM**,使用信号量控制的并发进行批处理
5. 根据必需的节标题、格式规则和最小长度**验证响应**
6. **后处理**响应(去除分隔线、规范空白、附加免责声明)
7. 验证失败时**重试**,最多 `max_retries` 次
8. 将丰富的规则**写入**输出目录,镜像源目录结构
9. **更新缓存**并打印包含 token 使用情况的摘要报告
### 输出验证
每个 LLM 响应在写入前都会经过验证。验证器检查:
- 所有四个必需的 `###` 标题是否存在(Technical Context、Investigation Steps、Prioritization、Blind Spots and Assumptions)
- 无水平分隔线(`---`)
- 无编号列表(必须使用破折号 `-` 项目符号)
- 无 `*` 项目符号,无三重反引号代码块
- 仅允许 `###` 级别的标题(禁止 `#` 或 `##`)
- Investigation Steps 中至少有 3 个项目符号点
- 响应长度至少 200 个字符
- 每个部分内容非空
### YAML 保真度
该工具在所有 YAML 操作中使用 `ruamel.yaml`,以保留键顺序、流式风格、引号和块标量格式。仅添加或修改 `note` 字段 —— 所有其他内容完全保留。`note` 值使用 `LiteralScalarString` 以 YAML 块标量(`|` 风格)写入。
### 变更检测
JSON 缓存文件(`.sigma-llm-doc-cache.json`)存储在输出目录中。仅当以下情况时才跳过规则:
1. prompt 哈希匹配(prompt 未更改)
2. 规则的内容哈希匹配(规则未更改)
3. 输出文件存在且具有非空的 `note` 字段
使用 `--force` 可绕过所有缓存并重新生成每个指南。
### 安全性
- **路径遍历防护**:验证输出文件必须位于输出目录内
- **符号链接保护**:在收集过程中排除解析路径位于输入目录之外的文件
- **响应长度限制**:拒绝超过 50,000 个字符的 LLM 响应
- **配置验证**:在启动时验证 Provider、model、并发和重试值
## CI/CD 集成
请参阅 [docs/gitlab-cicd-guide.md](docs/gitlab-cicd-guide.md) 获取完整的 GitLab CI/CD 集成指南,涵盖:
- 流水线配置(`.gitlab-ci.yml` 模板)
- 使用 CI/CD 变量管理 API key
- Merge request 和夜间富化工作流
- Provider 选择和成本管理
- 故障排除和最佳实践
## 测试
```
pytest
```
测试套件覆盖所有模块:validator、cache、providers、config、processor 和 CLI(67 个测试)。
## 项目结构
```
sigma-llm-doc/
pyproject.toml # PEP 621 project metadata, deps, entry point
.gitignore
.env.example # Example environment file
config.example.yaml # Example config file
README.md
docs/
gitlab-cicd-guide.md # GitLab CI/CD integration guide
src/
sigma_llm_doc/
__init__.py
__main__.py # python -m sigma_llm_doc support
cli.py # CLI entry point (argparse, logging, summary)
llm_provider.py # LLM providers (OpenAI, Claude, Gemini)
processor.py # Core logic: load rules, detect changes, orchestrate
validator.py # Validate generated markdown against required format
cache.py # Content + prompt hashing, cache read/write
config.py # Config file loading, defaults, CLI arg merging
default_prompt.txt # Default investigation guide prompt
tests/
test_validator.py # Validator unit tests
test_cache.py # Cache and hashing unit tests
test_providers.py # Provider registration, mocked API calls, retry logic
test_config.py # Config resolution, validation, provider defaults
test_processor.py # Processing pipeline, clean_markdown, check mode
test_cli.py # Argument parsing tests
prompt_tests/ # Model comparison outputs and cost analysis
cost_analysis.md
model_ranking.md
sample_outputs/ # Per-model investigation guide samples
```
标签:AMSI绕过, Anthropic Claude, Detection-as-Code, DLL 劫持, LLM, OpenAI, Petitpotam, Python, Sigma规则, Unmanaged PE, YAML处理, 人工智能, 内存规避, 大语言模型, 威胁检测, 安全运营, 库, 应急响应, 扫描框架, 无后门, 用户模式Hook绕过, 目标导入, 网络安全, 自动化文档生成, 调查指南, 隐私保护