JacobRHess/splunk-sigma

GitHub: JacobRHess/splunk-sigma

在 Splunk 中原生运行 Sigma 检测规则的插件,通过自定义 | sigma 搜索命令实时评估 Sigma YAML 规则,避免传统静态转换带来的规则偏差问题。

Stars: 0 | Forks: 0

# splunk-sigma [![ci](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/7ebef17bef114549.svg)](https://github.com/JacobRHess/splunk-sigma/actions/workflows/ci.yml) [![license: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](app/LICENSE) [![python](https://img.shields.io/badge/python-3.7%2B-blue.svg)](pyproject.toml) **通过自定义 `| sigma` 搜索命令,在 Splunk 内部原生运行 [Sigma](https://github.com/SigmaHQ/sigma) 检测规则**。内置内容映射至 [MITRE ATT&CK](https://attack.mitre.org/),并附带覆盖率仪表板。 ``` index=sysmon EventCode=1 | sigma rules="attack:T1059.001" ``` ![Splunk 搜索结果显示了涵盖 7 种 ATT&CK 技术的 8 项检测结果](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/4267a4accd114551.png) ## 存在的原因 Splunk 用户希望拥有 Sigma —— 供应商中立、可共享的检测规则 —— 但标准做法(将 Sigma 转换为静态 SPL)会生成脆弱的搜索字符串,这些字符串容易与上游规则产生偏差。`splunk-sigma` 采用了另一种方法:它作为 StreamingCommand **在 Splunk 内部**运行 Sigma 规则评估器。一个规则文件,始终保持同步。 ## 功能 - **`| sigma` StreamingCommand** —— 针对任何管道传输的事件评估 Sigma YAML 规则 - **7 条内置规则** 映射至 MITRE ATT&CK(凭证访问、持久化、横向移动、LOLBins、防御规避) - **ATT&CK 覆盖率仪表板** 按技术/严重级别显示告警 - **预配置保存的搜索** 适用于常见的 Sysmon/Security 日志源 - **零外部运行时依赖**,仅使用 Splunk 自带环境 - **GitHub Actions CI** —— 对规则进行代码检查,运行评估器测试套件,构建应用程序 tarball ## 架构 ``` ┌─────────────────┐ ┌──────────────────┐ ┌────────────────┐ │ Splunk search │ │ | sigma command │ │ Enriched events│ │ (any index) │ ──▶ │ (StreamingCmd) │ ──▶ │ back to SPL │ └─────────────────┘ └──────────────────┘ └────────────────┘ │ ▼ ┌──────────────────┐ │ Sigma engine │ (bundled in app/bin/) │ rules + eval │ └──────────────────┘ ``` ## 快速开始(无需 Splunk) 引擎可独立运行 —— 适用于 CI、演示以及无需启动 Splunk 即可测试规则。 ``` git clone https://github.com//splunk-sigma cd splunk-sigma pip install .[dev] python3 scripts/demo.py samples/attack_samples.jsonl ``` 示例输出: ``` Loaded 7 rule(s). Scanned 11 event(s). [HIGH] PowerShell Encoded Command Execution rule: t1059_001_pwsh_encoded ATT&CK: T1059.001 time: 2026-04-22T14:03:11Z user: CORP\alice evidence: powershell.exe -nop -w hidden -enc JABzAD0ATgBlAHcALQBPAGIAagBlAGMAdAA= [CRITICAL] LSASS Credential Dump Indicators rule: t1003_001_lsass_dump ATT&CK: T1003.001 time: 2026-04-22T14:05:02Z user: CORP\attacker evidence: mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit [HIGH] RDP Logon from External Source rule: t1021_001_rdp_external ATT&CK: T1021.001 time: 2026-04-22T14:11:03Z user: alice evidence: 203.0.113.42 ... 8 alert(s) across 7 rule(s). ``` 运行测试: ``` PYTHONPATH=app/bin pytest -v ``` ## 安装至 Splunk Enterprise 完整分步安装指南(包括账户创建、样例数据加载及相关截图)请参见 [`docs/SPLUNK_INSTALL.md`](docs/SPLUNK_INSTALL.md)。 简略版: ``` export SPLUNK_HOME=/Applications/Splunk bash scripts/install_local.sh $SPLUNK_HOME/bin/splunk restart $SPLUNK_HOME/bin/splunk add oneshot samples/attack_samples.jsonl -sourcetype _json -index main # 然后在 Splunk Web 中:index=main | sigma rules="*" ``` ## 两种模式:Splunk 内部命令 vs 外部服务 `splunk-sigma` 提供两种运行 Sigma 规则的方式,共享相同的规则文件和评估器: | 模式 | 运行方式 | 适用场景 | |---|---|---| | **`\| sigma`** | 在 Splunk 内部作为 StreamingCommand 运行 | 交互式 SPL、仪表板、临时事件分类 | | **`sigma_watch`** | 外部 Python 服务,调用 Splunk 的 REST API | 常驻检测服务、多实例监控、CI | ``` # 模式 2 — 针对 Splunk 的 REST API(端口 8089)在外部运行检测 export SPLUNK_USERNAME=admin SPLUNK_PASSWORD='' python3 scripts/sigma_watch.py --once python3 scripts/sigma_watch.py --interval 60 --output-index sigma_alerts # 或者运行完整的闭环演示(清除之前的 alerts,写入新的 alerts, # 通过 SPL 验证它们已成功写入——适合现场演示): bash scripts/demo_api.sh ``` 有关完整的 API 模式指南,请参见 [`docs/API_MODE.md`](docs/API_MODE.md)。 ## 内置检测规则 | 规则 | ATT&CK | 严重级别 | |------|--------|----------| | PowerShell Encoded Command Execution | T1059.001 | high | | LSASS Credential Dump Indicators | T1003.001 | critical | | Scheduled Task Creation via schtasks.exe | T1053.005 | medium | | Registry Run Key Persistence via reg.exe | T1547.001 | high | | RDP Logon from External Source | T1021.001 | high | | Suspicious Download via certutil.exe | T1105 | high | | Secure File Deletion via cipher.exe | T1070.004 | high | ## 命令参考 ``` | sigma [rules=] [rules_dir=] ``` - `rules` —— 选择器。示例: - `"*"`(默认)—— 所有已加载的规则 - `"attack:T1059.001"` —— 标记有特定 ATT&CK 技术的规则 - `"id:t1053*"` —— 规则 ID 的 glob 匹配 - `rules_dir` —— 覆盖内置规则目录(绝对路径) 每个匹配的事件都会附加输出以下额外字段: `sigma_rule_id`、`sigma_rule_title`、`sigma_level`、`sigma_attack`、`sigma_matched_selections`。 ## 支持的 Sigma 特性 (v1) - 多个 selections,`and`/`or`/`not`,括号 - `1 of selection_*`、`all of selection_*` 量词 - 修饰符:`contains`、`startswith`、`endswith`、`re` - 字段列表值(OR 语义) **v1 不支持**:聚合(`count()`)、跨事件关联、时间范围。 ## 仓库布局 ``` splunk-sigma/ ├── app/ Splunk app (what gets packaged) │ ├── default/ app.conf, commands.conf, dashboards, saved searches │ ├── bin/ │ │ ├── sigma_command.py StreamingCommand entrypoint │ │ ├── sigma_engine/ rule loader + evaluator │ │ └── rules/ bundled Sigma YAML │ └── metadata/ ├── samples/ attack log fixtures ├── scripts/ install_local.sh, package.sh ├── tests/ pytest suite └── .github/workflows/ci.yml ``` ## 许可证 MIT —— 详见 [`app/LICENSE`](app/LICENSE)。
标签:AMSI绕过, Cloudflare, LOLBins, MITRE ATT&CK, OpenCanary, Python, SPL, Splunk App, Sysmon, URL发现, YAML, 凭证访问, 威胁检测, 安全库, 安全检测, 安全运营, 扫描框架, 攻击映射, 无后门, 横向移动, 流式命令, 私有化部署, 编程规范, 网络安全, 自定义搜索命令, 逆向工具, 防御规避, 隐私保护