akeemmckenzie/sigmagen

GitHub: akeemmckenzie/sigmagen

这是一个基于 RAG 技术的 AI 驱动工具,能够根据 MITRE ATT&CK 技术 ID 或攻击描述快速生成生产级的 Sigma SIEM 检测规则。

Stars: 0 | Forks: 0

SigmaGen

基于 RAG 驱动,从 MITRE ATT&CK 技术 ID 或原始攻击遥测数据生成生产级 Sigma 检测规则。

快速开始工作原理CLI 参考REST API贡献

## 问题所在 CISA 和各主要威胁情报框架一致认为:企业安全中的首要短板是新技术在野出现与 SIEM 中落地检测规则之间的时间差。大多数 SOC 团队缺乏足够的检测工程师。从零开始编写高质量的 Sigma 规则(包括正确的 logsource、字段映射、误报过滤器和 ATT&CK 标签)每个技术需要 30-60 分钟。 ## 解决方案 SigmaGen 弥补了这一差距。提供一个技术 ID 或描述攻击行为,它会在几秒钟内生成可部署的 Sigma YAML: ``` $ sigmagen generate --technique T1059.001 ``` ``` ──────────────────── SigmaGen Rule Generation ──────────────────── Retrieving context from knowledge base... Retrieved 5 techniques, 5 existing rules Generating rules via anthropic... LLM returned 3 rule(s) ──────────────────────── Rule 1 ──────────────────────────────── title: Suspicious PowerShell Encoded Command Execution id: 7f3a2c1e-84b6-4d9f-a031-5e8c7b2f9d14 status: experimental logsource: category: process_creation product: windows detection: selection_image: Image|endswith: - '\powershell.exe' - '\pwsh.exe' selection_encoded: CommandLine|contains: - ' -EncodedCommand ' - ' -enc ' - ' -EC ' filter_known_tools: ParentImage|endswith: '\msiexec.exe' condition: selection_image and selection_encoded and not filter_known_tools level: medium Validation: PASSED ──────────────────────── Summary ─────────────────────────────── 3 rules generated | 3 passed | 0 failed Output: output/ v suspicious_powershell_encoded_command_execution.yml [medium] v powershell_suspicious_download_cradle_execution.yml [high] v powershell_amsi_bypass_attempt_detected.yml [high] ``` 每个生成的规则都包含带有字段值条件的特定检测逻辑、误报过滤器、ATT&CK 标签和 logsource 映射——绝非通用模板。 ## 工作原理 SigmaGen **不是**一个简单的“帮我写个 Sigma 规则”的包装器。它是一个 RAG pipeline,从本地向量存储检索真实的 ATT&CK 检测指导和现有的 Sigma 规则,然后利用这些上下文让 LLM 的输出基于生产模式。 ``` User Input Knowledge Base (T1059.001 or text) ┌──────────────────┐ │ │ ATT&CK (691) │ ▼ │ Sigma (3110) │ ┌────────────────┐ └────────┬─────────┘ │ Retriever │◄────────────────────┘ │ (ChromaDB) │ cosine similarity └───────┬────────┘ + metadata filter │ ▼ ┌────────────────┐ │ Prompt Builder │ packs ATT&CK context │ │ + 3 best Sigma examples └───────┬────────┘ │ ▼ ┌────────────────┐ │ Claude / GPT │ generates 1-3 rules └───────┬────────┘ │ ▼ ┌────────────────┐ │ Validator │ schema + field checks └───────┬────────┘ │ ▼ .yml files in output/ ``` **摄入** —— ATT&CK STIX bundle(690+ 个包含检测指导、数据源、战术的技术)和 SigmaHQ 的稳定规则(3100+ 个社区规则)被解析,并使用 `all-MiniLM-L6-v2` 嵌入到 ChromaDB 中。 **检索** —— 技术优先命中精确的元数据过滤器,然后对相关上下文进行语义相似性搜索。自由文本查询跨越两个集合使用纯语义搜索。结果经过去重和排序。 **生成** —— 提示词包含 ATT&CK 技术的检测指导、数据源和平台,以及多达 3 个现有 Sigma 规则作为结构示例。系统提示词强制执行特定的检测条件——不允许 `selection: *` 或全匹配模式。 **验证** —— 每个规则都会检查必填字段、有效的级别/状态、UUID 格式、logsource 结构、检测逻辑(必须具有命名的 selections + condition)以及 ATT&CK 标签。 ## 快速开始 ### 安装 ``` git clone https://github.com/sigmagen-project/sigmagen.git cd sigmagen python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -e ".[dev]" ``` ### 配置 配置向导处理一切: ``` $ sigmagen init ``` ``` ╭─ SigmaGen Setup Wizard ─╮ ╰────────────────────────╯ Step 1/3 Checking API key... v ANTHROPIC_API_KEY is set (provider: anthropic) Step 2/3 Checking knowledge base... v ATT&CK techniques: 691 v Sigma rules: 3110 Knowledge base is ready. Step 3/3 Verifying setup... v Everything looks good! ╭─ Next steps ──────────────────────────────────────────╮ │ Ready to generate. │ │ │ │ sigmagen generate --technique T1059.001 │ │ sigmagen generate --description "certutil download" │ ╰───────────────────────────────────────────────────────╯ ``` 或手动操作: ``` cp .env.example .env # add your ANTHROPIC_API_KEY or OPENAI_API_KEY sigmagen ingest all # one-time, ~5 min ``` ### 生成 三种生成规则的方式: ``` # 按 technique ID(支持 tab 补全) sigmagen generate --technique T1059.001 # 按 description sigmagen generate --description "attacker used certutil to download a payload" # 交互式 — 直接运行,按提示操作 sigmagen generate ``` ``` Input type (technique, description, telemetry): technique Technique ID (e.g. T1059.001): T1059.001 How many rules? (1-5) [1]: 3 ``` ### 搜索知识库 查询哪些 ATT&CK 技术和现有的 Sigma 规则与你的输入匹配: ``` $ sigmagen retrieve --query "credential dumping lsass" ``` ``` ATT&CK Techniques ┌───────────┬───────────────────────┬───────────────────┬───────┐ │ ID │ Name │ Tactics │ Score │ ├───────────┼───────────────────────┼───────────────────┼───────┤ │ T1003.001 │ LSASS Memory │ credential-access │ 0.631 │ │ T1003.004 │ LSA Secrets │ credential-access │ 0.607 │ │ T1547.008 │ LSASS Driver │ persistence │ 0.540 │ │ T1003 │ OS Credential Dumping │ credential-access │ 0.512 │ │ T1110.004 │ Credential Stuffing │ credential-access │ 0.480 │ └───────────┴───────────────────────┴───────────────────┴───────┘ Sigma Rules ┌─────────────────────────────────────┬──────────┬───────────┬───────┐ │ Title │ Level │ Technique │ Score │ ├─────────────────────────────────────┼──────────┼───────────┼───────┤ │ Credential Dumping Via LSASS │ medium │ T1003.001 │ 0.787 │ │ LSASS Process Clone │ critical │ T1003 │ 0.765 │ │ Credential Dumping By Python Tool │ high │ T1003.001 │ 0.763 │ │ LSASS SilentProcessExit Technique │ critical │ T1003.001 │ 0.741 │ │ Password Dumper Activity on LSASS │ high │ T1003.001 │ 0.739 │ └─────────────────────────────────────┴──────────┴───────────┴───────┘ ``` ### 验证 ``` $ sigmagen validate output/suspicious_powershell_encoded_command.yml ``` ``` ──── Validating suspicious_powershell_encoded_command.yml ──── Validation PASSED ``` ### 状态仪表板 ``` $ sigmagen status ``` ``` SigmaGen v0.1.0 ─────────────────────────────────────────────────────── Knowledge Base Documents Status attack_techniques 691 v Ready sigma_rules 3110 v Ready LLM Provider anthropic API Key v Set Model claude-sonnet-4-6 Embedding Model all-MiniLM-L6-v2 ─────────────────────────────────────────────────────── Ready to generate. Run: sigmagen generate --technique T1059.001 ``` ### 错误处理 无效输入会被尽早捕获并提供清晰的指导: ``` $ sigmagen generate --technique fdsb x 'fdsb' is not a valid ATT&CK technique ID. Expected format: T1059 or T1059.001 $ sigmagen generate --technique T1059.001 # before running ingest x Knowledge base is not ready. - attack_techniques collection is empty Run: sigmagen ingest all $ sigmagen generate # without an API key x No API key found. Add ANTHROPIC_API_KEY to your .env file. Run: cp .env.example .env ``` ## CLI 参考 ``` sigmagen ├── init First-run setup wizard ├── ingest │ ├── attack Download and embed ATT&CK techniques [--force] │ ├── sigma Clone and embed Sigma rules [--force] [--full-corpus] │ └── all Both [--force] [--full-corpus] ├── generate Generate Sigma rules via RAG + LLM │ ├── -t T1059.001 by technique ID (tab-completable) │ ├── -d "description" by free text │ ├── -T ./log.xml by telemetry file │ ├── -o ./output output directory │ ├── -n 3 number of rules (1-5) │ └── -p openai override LLM provider ├── retrieve Search the knowledge base -q "query" [-n 5] ├── validate Validate a Sigma YAML file ├── status Dashboard: collections + config ├── serve Start REST API server [--host] [--port] └── setup-shell Enable tab completion [bash|zsh|fish|powershell] ``` ## REST API 使用 `sigmagen serve` 启动。Swagger 文档位于 `http://localhost:8000/docs`。 | Method | Path | Description | |--------|------|-------------| | `POST` | `/generate` | 生成 Sigma 规则 | | `GET` | `/retrieve?q=...` | 搜索知识库 | | `GET` | `/status` | 集合统计信息 + 配置 | | `GET` | `/health` | 健康检查 | ``` curl -X POST http://localhost:8000/generate \ -H "Content-Type: application/json" \ -d '{"technique_id": "T1059.001", "n_rules": 2}' ``` ## 技术栈 | Component | Technology | Why | |-----------|-----------|-----| | CLI | Click + Rich | 子命令、Tab 补全、语法高亮输出 | | Vector store | ChromaDB (本地,持久化) | 无需外部数据库 | | Embeddings | sentence-transformers (`all-MiniLM-L6-v2`) | 本地运行、无需 API key、快速 | | LLM | Anthropic Claude / OpenAI GPT | 可通过环境变量切换 | | API | FastAPI + Pydantic | 类型安全、自动生成文档 | | Validation | 纯 Python + 可选 sigma-cli | 核心验证无外部依赖 | 没有 LangChain。没有 LlamaIndex。RAG pipeline 直接构建于 ChromaDB 查询之上。 ## 知识库 | Source | Documents | What's embedded | |--------|-----------|-----------------| | [MITRE ATT&CK Enterprise](https://github.com/mitre/cti) | 691 techniques | ID、名称、战术、平台、数据源、检测指导 | | [SigmaHQ/sigma](https://github.com/SigmaHQ/sigma) | 3110 rules | 标题、描述、logsource、检测逻辑、级别、技术标签 | 两者均在 `sigmagen ingest all` 期间下载并本地嵌入。除生成期间的 LLM API 调用外,没有任何数据离开你的机器。 ## 环境变量 | Variable | Default | Description | |----------|---------|-------------| | `LLM_PROVIDER` | `anthropic` | `anthropic` 或 `openai` | | `ANTHROPIC_API_KEY` | — | 如果 provider 为 anthropic 则必需 | | `ANTHROPIC_MODEL` | `claude-sonnet-4-6` | Claude 模型 ID | | `OPENAI_API_KEY` | — | 如果 provider 为 openai 则必需 | | `OPENAI_MODEL` | `gpt-4o` | OpenAI 模型 ID | | `EMBEDDING_MODEL` | `all-MiniLM-L6-v2` | 本地嵌入模型 | | `SIGMAGEN_DATA_DIR` | `./data` | ATT&CK JSON、Sigma 仓库和 ChromaDB 所在目录 | ## License MIT
标签:AMSI绕过, Anthropic, CIS基准, Cloudflare, Conpot, IPv6, LLM, MITRE ATT&CK, Petitpotam, PowerShell, RAG, REST API, Sigma规则, Unmanaged PE, Windows安全, 威胁情报, 威胁检测, 安全运营, 开发者工具, 扫描框架, 生成式AI, 目标导入, 索引, 网络安全, 网络测绘, 网络调试, 自动化, 逆向工具, 隐私保护