Halino/Wazuh-Plex
GitHub: Halino/Wazuh-Plex
为 Wazuh 提供 Plex Media Server 日志的解析器与检测规则,在过滤大量 DEBUG 噪声的同时精准识别访问拒绝、暴力破解、账户安全事件和服务器崩溃。
Stars: 0 | Forks: 0
# 用于 Wazuh 的 Plex Media Server 解析器
**Decoders** 和 **rules**,让 Wazuh 能够摄入并分析 **Plex Media Server**
日志(`Plex Media Server.log`)—— 包括 HTTP 访问控制、账户安全和
稳定性 —— 而不会被 Plex 极其冗长的 DEBUG 输出淹没。
## 包含内容
| 文件 | 用途 |
|------|--------|
| `wazuh/decoders/plex_decoders.xml` | 解析 `Plex Media Server.log` 行(`[0x...] LEVEL - ...`),包括 HTTP 请求/响应行 |
| `wazuh/rules/plex_rules.xml` | HTTP 访问拒绝、暴力破解突发、账户安全、登录、严重错误 |
| `wazuh/ossec-plex.conf.snippet` | 用于读取 Plex 日志的 `localfile` 配置示例 |
| `tests/sample_logs.txt` | 用于 `wazuh-logtest` 的示例行 |
## 日志格式
Plex Media Server 将每个事件按行写入 `Plex Media Server.log`:
```
[0x7f3a1c] INFO - Completed: [203.0.113.10:52012 (WAN)] 403 GET /library/sections
[0x7f3a1c] INFO - Account signed in: user alice
[0x7f3a1c] ERROR - Database is locked, retrying
```
每一行都以十六进制线程 ID(`[0x...]`)、日志 **LEVEL**
(INFO / WARN / ERROR / DEBUG / VERBOSE / FATAL)和一段自由文本消息开始。HTTP
请求行(`Request:` / `Completed:`)还包含客户端 IP、
网络端(**WAN**/**LAN**)、HTTP 状态码、方法以及 URL。
提取的字段:
- HTTP 行:`srcip`、`plex_network`(WAN/LAN)、`plex_status`(HTTP 码)、
`plex_method`、`plex_url`
- 常规行:`plex_level`(INFO/ERROR/...)、`plex_message`
## 规则
| 规则 ID | 级别 | 检测内容 | MITRE |
|---------|-------|---------|-------|
| 110300 | 0 | 分组(任何 Plex 日志行)- 默认静默 | — |
| 110301 | 3 | HTTP 访问拒绝(401 / 403) | — |
| 110302 | 0 | 来自 localhost 的 401/403(transcoder/应用自身请求)- 已静默 | — |
| 110303 | 8 | 拒绝访问突发(12 次 / 120 秒,相同 IP)- 暴力破解 / 扫描 | T1110 |
| 110304 | 8 | 账户安全事件(新设备、token 无效/过期、认证失败、账户被锁定) | — |
| 110305 | 5 | 账户登录(审计) | — |
| 110306 | 4 | **严重错误**(损坏 / 崩溃 / panic / OOM / DB 锁定) | — |
| 110307 | 0 | 操作性转码/请求错误 - 已静默 | — |
规则 ID 使用了专用的 **110300-110307** 段。
### 为什么基础规则是静默的(DEBUG 噪声)
Plex 默认以 **DEBUG** 级别记录日志,并且**极其冗长** —— 它每小时会写入
数千行日志:每一个 HTTP 请求、每一个转码步骤、每一次
时间线更新。如果对所有这些内容进行告警,会掩盖真正的信号,因此:
- **基础分组规则 `110300` 为级别 0**(静默)。真正的检测建立在
其之上 —— 只有 HTTP 访问拒绝、账户安全和真正的崩溃才会
被呈现出来。
- **`110307` 静默了转码/请求错误噪声。** Plex 经常为良性的情况记录
`ERROR`/`FATAL` 日志行(`[Req#...]`、转码 session
故障、`ClientProfile`、`EventSource`、`pubsub`、元数据类型不匹配)。
这些已被静默,因此它们不会淹没真正的 `110306` 崩溃
(损坏、panic、死锁、内存溢出、数据库锁定、segmentation)。
- **`110302` 静默了 localhost 自身请求。** transcoder 和本地应用
在正常运行过程中会访问服务器上的 `127.0.0.1` 并收到 401/403 —— 这不是
安全事件,因此将其静默(而 `110301` 仍然会
显示来自 LAN/WAN 客户端的真实 401/403,并且 `110303` 会关联突发访问)。
您也可以直接从源头减少日志量 —— 请参阅
`wazuh/ossec-plex.conf.snippet` 中关于关闭 Plex debug/verbose 日志记录的提示。
## 部署
```
sudo cp wazuh/decoders/plex_decoders.xml /var/ossec/etc/decoders/
sudo cp wazuh/rules/plex_rules.xml /var/ossec/etc/rules/
sudo systemctl restart wazuh-manager
```
然后将 Wazuh agent 指向 Plex 日志文件(它位于 Plex 主机上)。请参阅
`wazuh/ossec-plex.conf.snippet` 以获取 `` 块以及 Linux、NAS 和 Docker 上的典型日志
路径。
## 测试
```
/var/ossec/bin/wazuh-logtest
```
例如,粘贴以下内容(无需 syslog 头部 —— 解码器是基于内容的):
```
[0x7f3a1c] INFO - Completed: [203.0.113.10:52012 (WAN)] 403 GET /library/sections
```
预期结果:解码器 `plex`,规则 **110301**(access_denied,来自
`203.0.113.10` 的 HTTP 403)。
完整集合请参见 `tests/sample_logs.txt`。
## 兼容性
- Wazuh 4.x(使用 `pcre2`)。
- 写入 `Plex Media Server.log` 的 Plex Media Server(任何近期版本)。
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:Plex, Wazuh, 日志解析, 规则配置, 证书伪造