kboykov/wazuh-infoblox-ruleset
GitHub: kboykov/wazuh-infoblox-ruleset
为 Wazuh 提供 Infoblox BloxOne 和 Universal DDI 的 CEF Syslog 解码器与安全检测规则集,覆盖 DNS、RPZ、DHCP 等事件并映射至 MITRE ATT&CK。
Stars: 0 | Forks: 0
# 用于 Infoblox Data Connector (BloxOne Threat Defense / Universal DDI) 的 Wazuh 规则集
用于将 **Infoblox Data Connector** CEF syslog 接入 [Wazuh](https://wazuh.com) 的解码器和规则。涵盖 DNS 解析遥测、DNS Firewall / RPZ 威胁事件、DHCP 租约活动和 BloxOne 服务日志,并提供针对 DGA、DNS 隧道/数据泄露、DHCP 饥饿和 RPZ 策略命中的安全检测 — 已映射至 MITRE ATT&CK。
字段映射派生自 Infoblox 官方文档,并已通过实际的 2.1.3 Data Connector 捕获数据进行验证。
- [DNS 查询/响应日志消息映射](https://docs.infoblox.com/space/BloxOneThreatDefense/35406922)
- [DNS 安全策略命中和 RPZ 命中日志消息映射](https://docs.infoblox.com/space/BloxOneThreatDefense/35438586)
- [DHCP 消息映射](https://docs.infoblox.com/space/BloxOneThreatDefense/35472716)
- [事件字段日志](https://docs.infoblox.com/space/BloxOneThreatDefense/770048012)
## 日志源格式
Data Connector 发出 RFC5424 syslog,并在消息体中包含 CEF payload:
```
<134>1 2026-06-08T18:20:08Z host dataconnector - RPZ-QNAME-REDIRECT - CEF:0|Infoblox|Data Connector|2.1.3|RPZ-QNAME-REDIRECT|RPZ EVENT QNAME REDIRECT|8|key=value key=value ...
```
CEF header 的 `NAME` 字段(第 5 个以 `|` 分隔的字段)编码了事件系列,对于 RPZ,还包含触发器类型 + 策略动作(例如 `RPZ-QNAME-NXDOMAIN`)。
解码器锚定在 CEF header 而非 syslog app-name 上,因为 app-name 的提取在不同的 syslog 收集器之间并不一致。
将您的 Data Connector 指向 Wazuh manager/worker 的 syslog 监听器:
```
syslog
514
udp
0.0.0.0/0
```
## 涵盖范围
| 事件系列 | CEF NAME header | 已解码 | 规则 |
|-------------------------|--------------------------|---------|-------|
| DNS Response | `DNS Response` | ✅ | 118001–118007 |
| DNS Firewall / RPZ | `RPZ-*` (所有触发器类型) | ✅ | 118010–118017 |
| DHCP 租约 | `DHCP-LEASE-*` | ✅ | 118020–118022 |
| BloxOne 服务日志 | `BloxOne-Service-Log` | ✅ | 118030–118031 |
| 审计日志 | _(预置,已注释)_ | ⏸️ | 118040–118041 |
| SOC Insights | _(预置,已注释)_ | ⏸️ | 118050 |
## 规则参考
ID 占用 `118000–118099` 区块。`118000` 是静默的基础规则;所有其他规则均链接自它。
### DNS
| ID | Level | 触发条件 | MITRE |
|--------|-------|----------|-------|
| 118000 | 0 | 任意 Infoblox CEF 事件 (基础) | — |
| 118001 | 0 | DNS NOERROR (遥测) | — |
| 118002 | 3 | DNS NXDOMAIN | — |
| 118003 | 10 | 60秒内来自同一客户端的 20+ 次 NXDOMAIN — **DGA 恶意软件** | T1568.002 |
| 118004 | 5 | DNS SERVFAIL / REFUSED | — |
| 118005 | 8 | 60秒内来自同一客户端的 15+ 次 SERVFAIL/REFUSED | — |
| 118006 | 0 | 成功的 TXT/NULL 查询 (遥测) | — |
| 118007 | 11 | 60秒内来自同一客户端的 40+ 次 TXT/NULL — **DNS 隧道/数据泄露** | T1048.003, T1071.004 |
### RPZ / DNS Firewall
| ID | Level | 触发条件 | MITRE |
|--------|-------|----------|-------|
| 118010 | 8 | 任意 RPZ 命中 (存在策略动作) | T1071.004 |
| 118014 | 9 | RPZ 命中,威胁等级 **30–79 (Medium)** | T1071.004 |
| 118011 | 12 | RPZ 命中,威胁等级 **80–100 (High)** | T1071.004 |
| 118012 | 12 | RPZ 威胁属性 = malware / C2 / phishing / botnet | T1071.004, T1568.001 |
| 118013 | 10 | 120秒内来自同一客户端的 10+ 次 RPZ 命中 — 受感染主机 | T1071.004, T1568.001 |
| 118016 | 10 | RPZ 动作 = Block / NXDOMAIN / NODATA | T1071.004 |
| 118017 | 6 | RPZ 动作 = Passthru / Log (覆盖允许名单) | — |
### DHCP
| ID | Level | 触发条件 | MITRE |
|--------|-------|----------|-------|
| 118020 | 3 | DHCP 租约操作 (Create / Update / Delete) | — |
| 118021 | 7 | DHCP 租约 **Abandon** (冲突 / 饥饿 / rogue) | T1498 |
| 118022 | 10 | 120秒内同一子网上的 10+ 次 abandons — **DHCP 饥饿** | T1498 |
### 服务 / 预置
| ID | Level | 触发条件 |
|--------|-------|----------|
| 118030 | 0 | BloxOne 服务日志 (遥测) |
| 118031 | 5 | 服务日志 WARN / ERROR / FATAL / CRITICAL |
| 118040–118041 | 5 / 10 | _(预置)_ 审计日志活动 / 失败的管理员操作 |
| 118050 | 12 | _(预置)_ SOC Insight (服务端 Threat Insight) |
## 威胁等级映射
`InfobloxThreatLevel` 是一个 **0–100 分的评分**,而不是小的序号。官方分类(以及本规则集如何映射它们)如下:
| 评分 | Infoblox severity | Wazuh 规则 | Wazuh level |
|---------|-------------------|------------|-------------|
| 0–29 | Low | 118010 | 8 |
| 30–79 | Medium | 118014 | 9 |
| 80–100 | High | 118011 | 12 |
## 解码器设计
```
infoblox-cef (parent — prematch on CEF:0|Infoblox|Data Connector)
├── infoblox-cef-dns-v2 DNS Response — enriched (tags/host/network/conn-type/dst/proto)
├── infoblox-cef-dns DNS Response (cloud field order) — fallback
├── infoblox-cef-dns-niosx DNS Response (NIOS-X field order) — fallback
├── infoblox-cef-rpz-v2 RPZ — enriched superset (identity/site/policy/zone/IOC)
├── infoblox-cef-rpz-rich RPZ + feed name + threat confidence/level/property — fallback
├── infoblox-cef-rpz RPZ + threat level/property (no feed) — fallback
├── infoblox-cef-rpz-min RPZ minimal (action/src/domain) — fallback
├── infoblox-cef-dhcp-v2 DHCP lease — enriched (hostname/clientid/lifetime)
├── infoblox-cef-dhcp DHCP lease — fallback
└── infoblox-cef-service-v2 BloxOne service log — enriched (error text + service id)
```
**顺序很重要。** Wazuh 会应用其 regex 匹配的*第一个*同级解码器。`-v2` 解码器被放置在**最前面**,并且是规则所需每个字段的严格**超集**,外加完整的上下文。如果 `-v2` 的 regex 不匹配(例如意外的字段顺序),解码会回退到旧版 rich → full → min 解码器,因此规则仍会触发 — 富集信息会平滑降级且绝不会破坏检测。
### 捕获的字段
**核心(所有事件系列):** `srcip`, `dns_domain`, `dns_type`,
`dns_response`, `rpz_action`, `rpz_feed`, `threat_confidence`, `threat_level`,
`threat_property`, `dhcp_ip`, `dhcp_mac`, `dhcp_subnet`, `dhcp_leaseop`,
`service_name`.
**富集(v2 解码器):**
| 字段 | 源 CEF key | 适用位置 | 备注 |
|-------|----------------|-------|-------|
| `srcuser` | `suser` | RPZ | 用户身份 — 在 endpoint / `remote_client` 事件上填充 |
| `src_os` | `InfobloxB1SrcOSVersion` | RPZ | Endpoint OS,例如 `macOS 26.3.1` |
| `hostname` | `dvchost` / `shost` | DNS, RPZ, DHCP | 设备主机名 (DHCP `shost` = IP↔主机映射) |
| `infoblox_network` | `InfobloxB1Network` | DNS, RPZ | 网络 / 站点名称 |
| `infoblox_ophost` | `InfobloxB1OPHName` | DNS, RPZ | DFP / 本地主机 (站点) |
| `infoblox_conn_type` | `InfobloxB1ConnectionType` | DNS, RPZ | `dfp` / `remote_office` / `remote_client` |
| `infoblox_dns_tags` | `InfobloxB1DNSTags` | DNS, RPZ | 应用 / 类别分类 |
| `dstip` | `dst` | DNS, RPZ | 解析器 / Sinkhole / 重定向目标 |
| `srcport` | `spt` | DNS, RPZ | 源端口 |
| `protocol` | `proto` | DNS | UDP / TCP |
| `threat_indicator` | `InfobloxB1ThreatIndicator` | RPZ | 匹配的 IOC |
| `rpz_zone` | `InfobloxRPZ` | RPZ | 触发的 RPZ 区域 |
| `rpz_rule` | `InfobloxRPZRule` | RPZ | 完整重写规则 |
| `rpz_policy` | `InfobloxB1PolicyName` | RPZ | 安全策略名称 |
| `rpz_feedtype` | `InfobloxB1FeedType` | RPZ | Feed 类型 (FQDN / IP) |
| `srcmac` | `smac` | RPZ | 客户端 MAC |
| `dhcp_clientid` | `InfobloxClientID` | DHCP | DHCP 客户端标识符 |
| `dhcp_lifetime` | `InfobloxLifetime` | DHCP | 租约生存时间 (s) |
| `infoblox_msg` | `msg` | Service | 实际的服务日志 / 错误行 |
| `infoblox_service_id` | `InfobloxServiceId` | Service | BloxOne 服务 ID |
### 实现说明
- **带引号 / 空值。** v2 解码器使用单个 PCRE2 branch-reset 组捕获可能带引号、包含空格或为空的值:
`(?|"([^"]*)"|(\S+))?`。空值会被忽略(索引中没有空字符串字段),而不是存储为 `""`。
- **CEF 字段顺序是按位置的。** 2.1.3 发射器是稳定的,但 Infoblox 可能会在不同 pipeline 版本之间更改顺序。如果未来的版本重新排序 keys,`-v2` 的 regex 可能会停止匹配,解码将回退到旧版解码器(规则会继续触发,但富集信息会减少)。
- **`suser` (用户身份)** 在 `dfp` / `remote_office` 流程上为空,而在 `remote_client` / BloxOne Endpoint 事件上填充;它在 RPZ 事件上作为 `srcuser` 被捕获,为空时则忽略。(它故意*不*在 DNS Response 事件上捕获,因为在实际中它总是空的。)
- 纯 IPv6/DUID 的 DHCP 租约(无 `smac`)不会被 DHCP 解码器匹配。
## 安装
### 单节点 / manager
```
# 1. 复制文件
cp decoders/112-infoblox-decoders.xml /var/ossec/etc/decoders/
cp rules/112-infoblox-rules.xml /var/ossec/etc/rules/
# 2. 所有权 + 权限(analysisd 以 'wazuh' 用户身份运行)
chown wazuh:wazuh /var/ossec/etc/decoders/112-infoblox-decoders.xml \
/var/ossec/etc/rules/112-infoblox-rules.xml
chmod 660 /var/ossec/etc/decoders/112-infoblox-decoders.xml
chmod 640 /var/ossec/etc/rules/112-infoblox-rules.xml
# 3. 重启
systemctl restart wazuh-manager
```
### Cluster
仅将文件放置在 **master** 节点上。Wazuh 的 cluster 完整性同步会自动将 `etc/rules` 和 `etc/decoders` 分发给所有 worker。重启 master(`systemctl restart wazuh-manager`);worker 会在同步时重新加载。
## 测试
使用 `wazuh-logtest` 验证解码和规则匹配(写入 stderr):
```
# 单个事件
printf '%s\n' "$(grep -m1 RPZ-QNAME-REDIRECT samples/infoblox-cef-samples.log)" \
| /var/ossec/bin/wazuh-logtest
# 所有样本
grep -v '^#' samples/infoblox-cef-samples.log | /var/ossec/bin/wazuh-logtest
```
对于 level-80 的 RPZ 示例的预期输出:
```
**Phase 2: Completed decoding.
name: 'infoblox-cef'
rpz_feed: 'Infoblox_High_Risk'
threat_confidence: '100'
threat_level: '80'
threat_property: 'Suspicious_Nameserver'
**Phase 3: Completed filtering (rules).
id: '118011'
level: '12'
description: 'Infoblox RPZ: HIGH threat (level 80) ...'
```
## 调优
相关性的阈值是保守的起点 — 请根据您的基线进行调整:
| 规则 | 阈值 | 调整条件… |
|--------|------------------|----------|
| 118003 | 20 NXDOMAIN / 60s | 存在大量合法的 NXDOMAIN (搜索域后缀,k8s) |
| 118005 | 15 SERVFAIL / 60s | 不稳定的上游导致噪音 |
| 118007 | 40 TXT/NULL / 60s | 邮件服务器进行 SPF/DKIM/DMARC 查询时触发 |
| 118022 | 10 abandons / 120s | 受限的地址池经常正常 abandon |
## Roadmap
- 一旦获得实际样本,验证并启用 **Audit log** 和 **SOC Insights** 解码器/规则。
- 添加利用富集字段的检测:用户/主机归因的 RPZ屡犯者(`srcuser` / `hostname`),以及基于 `infoblox_dns_tags` 的类别规则 (DoH、匿名器、个人存储)。
- 如果启用了这些触发器类型,则添加特定于 RPZ-IP / RPZ-CLIENT-IP 的处理(prematch 已经对它们进行了解码;专用规则可以进一步完善)。
## License
MIT — 见 [LICENSE](LICENSE)。
不隶属于 Infoblox 或 Wazuh,也未获得其认可。"Infoblox", "BloxOne" 和
"NIOS" 是 Infoblox 的商标;"Wazuh" 是 Wazuh Inc. 的商标。
标签:AMSI绕过, Infoblox, IP 地址批量处理, Syslog, Wazuh, 威胁检测, 日志解析, 规则集, 证书伪造, 配置错误