grafana/pySigma-backend-loki
GitHub: grafana/pySigma-backend-loki
pySigma 的 Loki 后端插件,用于将 Sigma 检测规则转换为 LogQL 查询和 Grafana 告警配置。
Stars: 51 | Forks: 4


[](https://coveralls.io/github/grafana/pySigma-backend-loki?branch=main)
# pySigma Loki 后端
这是 pySigma 的 Loki 后端。它提供了包含 `LogQLBackend` 类的 `sigma.backends.loki` 包。
它支持 Sigma 规则的以下输出格式:
* `default`:纯 Loki LogQL 查询
* `ruler`:以 ruler (YAML) 格式创建 Loki LogQL 查询,用于生成告警
* `grafana_alerting`:创建 Grafana Alerting 配置 YAML 格式,用于将告警直接部署到 Grafana
它还支持 [Sigma Correlation rules](https://github.com/SigmaHQ/sigma-specification/blob/version_2/Sigma_meta_rules.md) 的以下查询格式和类别:
* 使用 [LogQL metric queries](https://grafana.com/docs/loki/latest/query/metric_queries/) 的 `default` 格式:
* `event_count`
* `value_count`
它在 `sigma.pipelines.loki` 中包含以下管道转换:
* `SetCustomAttributeTransformation`:向规则添加指定的自定义属性,可用于将 [stream selector](https://grafana.com/docs/loki/latest/logql/log_queries/#log-stream-selector) 或 [parser expression](https://grafana.com/docs/loki/latest/logql/log_queries/#parser-expression) 引入生成的查询中
* `LokiCustomAttributes` 枚举包含后端使用的相关自定义属性名称
此外,它在 `sigma.pipelines.loki` 中包含处理管道:
* `loki_log_parser`:将字段名称转换为 Grafana 使用的 logfmt 标签
* `loki_promtail_sysmon`:解析并调整 promtail 生成的 Windows sysmon 数据的字段名称
* 注意:大多数规则缺少 `sysmon` 服务标签,因此此管道应与 [generic sysmon pipeline](https://github.com/SigmaHQ/pySigma-pipeline-sysmon) 结合使用
* `loki_okta_system_log`:解析 Okta System Log 事件 json,适当调整字段名称
将规则转换为查询时,后端具有以下可选参数:
* `add_line_filters` (布尔值, 默认: `False`):如果为 `True`,尝试推断并向没有行过滤器的查询添加新的行过滤器,以 [improve Loki query performance](https://grafana.com/docs/loki/latest/logql/log_queries/#line-filter-expression)
* `case_sensitive` (布尔值, 默认: `False`):如果为 `True`,默认生成区分大小写的查询过滤器,而不是 [the Sigma specification expects](https://github.com/SigmaHQ/sigma-specification/blob/main/Sigma_specification.md#general) 的不区分大小写的过滤器,这是在 Loki 查询性能与可能遗漏意外大小写的数据之间进行的权衡
* 注意:如果生成的查询将在 Loki v2.8.2 或更旧版本上执行,此参数**应该**设置为 `False`,因为这些版本的 Loki 可能包含区分大小写过滤器的问题,会导致此类查询无法匹配所需数据
使用 `grafana_alerting` 输出格式时,可以使用以下附加选项:
* `grafana_datasource_uid` (字符串, 默认: `loki`):Grafana 中 Loki 数据源的 UID
* `grafana_folder` (字符串, 默认: `sigma`):Grafana 中配置告警的文件夹名称
* `grafana_org_id` (整数, 默认: `1`):Grafana 组织 ID
* `grafana_interval` (字符串, 默认: `1m`):告警规则的计算间隔
* `grafana_contact_point` (字符串, 默认: `default`):用于通知的联系人点
* `loki_group_by_field` (字符串, 默认: 空):用于分组告警的可选字段名称(例如 `hostname`)。如果未指定,则不应用分组。
使用示例:
```
sigma convert -t loki -f grafana_alerting \
-O grafana_datasource_uid=my-loki \
-O grafana_folder=security-alerts \
-O grafana_contact_point=slack-security \
-o alerts.yml \
./rules/
```
此后端目前由以下人员维护:
* [Nick Moore](https://github.com/kelnage)
* [Mostafa Moradian](https://github.com/mostafa)
## 安装
要开始开发/测试 pySigma-backend-loki,以下步骤可以帮助您入门:
1. [Install poetry](https://python-poetry.org/docs/#installation)
2. 克隆此仓库并在顶层目录中打开终端/shell
3. 运行 `poetry install` 以安装 Python 依赖项
4. 运行 `poetry shell` 以激活 poetry 环境
5. 通过运行 `poetry run pytest` 检查一切是否正常
6. (可选)如果您希望使用 sigma\_backend\_tester.py 验证生成的规则,请安装
[LogCLI](https://grafana.com/docs/loki/latest/tools/logcli/)
7. (可选,但建议)要启用 Git hooks,请从仓库的根目录运行以下命令:
```
git config --local core.hooksPath .githooks/
```
## 发布
要发布新版本的 pySigma-backend-loki,我们使用 GitHub Actions 来更新 PyPI。当主分支处于准备好发布的状态时,流程如下:
1. 使用 [Semantic Versioning](https://semver.org/) 方法确定正确的版本号。所有版本号应采用 `\d+\.\d+\.\d+(-[0-9A-Za-z-]+)?` 格式
2. 使用新版本号更新 [pyproject.toml](https://github.com/grafana/pySigma-backend-loki/blob/main/pyproject.toml)
3. 提交并将更改推送到 GitHub,验证 GitHub Actions 测试是否通过,并将 PR 合并到 main
4. 检出 main 并为发布创建签名标签,命名为带有 v 前缀的版本号,例如 `git tag --sign --message="Release vX.X.X" vX.X.X`
5. 将标签推送到 GitHub,例如 `git push --tags`,并验证发布到 PyPI 测试实例是否成功
6. 运行 `poetry build` 以在 `dist/` 中生成可分发版本
7. 在 GitHub 中针对相应的标签创建发布。如果版本号以 `v0` 开头,或以 `-alpha/beta` 等结尾,请将其标记为预发布,并将可分发文件附加到发布中
8. 验证发布到 PyPI 的 GitHub Action 是否成功
9. 如果此版本支持 `pySigma` 的新次要版本或主要版本,请在 [pySigma-plugin-directory](https://github.com/SigmaHQ/pySigma-plugin-directory) 上提交拉取请求以反映这一点
## 进行中的工作
这些功能目前要么是 WIP,要么计划在不久的将来实现。
* 针对其他应用程序和日志源的各种处理管道
* 根据 logsource 生成更准确的日志流选择器
* 使用管道将 Sigma 签名中的字段名称转换为 Loki 的相关标签
## 不会实现(可能)
这些功能不受后端轻易支持,因此不太可能实现。
* 比 AND 和 OR 更复杂的关键字/行过滤器搜索
标签:AMSI绕过, FTP漏洞扫描, Grafana, Grafana Loki, Grafana告警, LogQL, Loki, Promtail, pySigma, Sigma规则, SOC工具, Sysmon, URL发现, YAML配置, 后端转换, 威胁检测, 安全检测, 安全编排, 安全运营, 扫描框架, 日志查询, 漏洞发现, 目标导入, 网络安全, 自动化规则, 规则转换, 逆向工具, 隐私保护