JacobRHess/splunk-sigma
GitHub: JacobRHess/splunk-sigma
在 Splunk 中原生运行 Sigma 检测规则的插件,通过自定义 | sigma 搜索命令实时评估 Sigma YAML 规则,避免传统静态转换带来的规则偏差问题。
Stars: 0 | Forks: 0
# splunk-sigma
[](https://github.com/JacobRHess/splunk-sigma/actions/workflows/ci.yml)
[](app/LICENSE)
[](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 用户希望拥有 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, 凭证访问, 威胁检测, 安全库, 安全检测, 安全运营, 扫描框架, 攻击映射, 无后门, 横向移动, 流式命令, 私有化部署, 编程规范, 网络安全, 自定义搜索命令, 逆向工具, 防御规避, 隐私保护