WiTTPs/Wazuh-tools-etc
GitHub: WiTTPs/Wazuh-tools-etc
针对 Wazuh SIEM 的工具集合,核心功能是将 Windows DNS 调试日志规范化后接入 Wazuh 进行安全分析和告警。
Stars: 0 | Forks: 0
# Wazuh-tools-etc
用于 Wazuh SIEM 部署的工具、脚本和配置集合。
## 1. `/wazuh_win_dns_debug` — Windows DNS Debug Log 集成
此模块收集并规范化 Windows DNS 调试日志,并将其转发给 Wazuh agent 进行分析。
Wazuh 目前不支持通过 Microsoft-Windows-DNSServer/Analytical ETW 日志通道进行记录。
因此,这是一个变通方案,经证实足以满足我的需求。
从技术上讲,在轮换日志文件期间,DNS 调试日志会短暂停用,因此在此期间的 DNS 查询不会被记录。
好在这只是几秒钟的时间,对于我的使用场景来说是可以接受的。
也许未来会有更优雅的方式。
### 概述
Windows DNS 调试日志以线格式(wire format)写入 DNS 查询和响应,这种格式无法直接被人类阅读或被 Wazuh 解析。
此工具集:
1. 每 15 分钟轮换一次活动的 DNS 调试日志文件
2. 将 DNS 线格式标签规范化为可读的 FQDN(例如 `(5)ctldl(13)windowsupdate(3)com(0)` → `ctldl.windowsupdate.com`)
3. 通过通配符 localfile 配置将规范化后的日志转发给 Wazuh
4. 在 Wazuh 中使用自定义 decoder 和 rules 解码并创建告警
### 系统要求
- 安装了 DNS Server 角色的 Windows Server
- PowerShell 5.1 或更高版本
- DNS 服务器上安装了 Wazuh Agent
- Wazuh Manager 具有部署自定义 decoder 和 rules 的权限
### 目录结构
```
wazuh_win_dns_debug/
├── Rotate-DnsLog.ps1 # Rotates the active DNS debug log file
├── Normalize-DnsLog.ps1 # Normalizes wire format to readable FQDNs
├── Register-DnsTasks.ps1 # Registers both scripts as Scheduled Tasks
├── 0001_windows_dns_debug_decoder.xml # Wazuh custom decoder (deploy on Manager)
└── custom_dns_rules.xml # Wazuh custom rules (deploy on Manager)
```
### 工作原理
```
DNS Service
│
│ writes dns_TIMESTAMP.log
▼
Rotate-DnsLog.ps1 (every 15 min)
│
│ copies active log to dns_TIMESTAMP_done.log
│ restarts DNS logging with new filename
▼
Normalize-DnsLog.ps1 (every 15 min, 2 min offset)
│
│ converts wire format → FQDN
│ writes dns_normalized_TIMESTAMP.log to output\
│ deletes raw _done.log
▼
Wazuh Agent
│
│ reads output\dns_normalized_*.log
▼
Wazuh Manager
│
│ decodes and applies rules
▼
Wazuh Dashboard
```
### 安装说明
#### 1. 准备 DNS 服务器
创建工作目录:
```
New-Item -ItemType Directory -Path "C:\dns_debug\output" -Force
```
将以下脚本复制到 `C:\dns_debug\`:
- `Rotate-DnsLog.ps1`
- `Normalize-DnsLog.ps1`
- `Register-DnsTasks.ps1`
#### 2. 启用 DNS Debug Logging
通过 PowerShell 或 DNS 管理器启用 DNS 调试日志。脚本要求日志记录处于活动状态,并且至少启用 **Queries**、**Answers**、**TCP** 和 **UDP**:
```
Set-DnsServerDiagnostics -ComputerName $env:COMPUTERNAME `
-LogFilePath "C:\dns_debug\dns_initial.log" `
-EnableLoggingToFile $true `
-Queries $true `
-Answers $true `
-ReceivePackets $true `
-SendPackets $true `
-TcpPackets $true `
-UdpPackets $true `
-MaxMBFileSize 10000000
```
#### 3. 注册计划任务
以管理员身份运行以下命令:
```
powershell.exe -ExecutionPolicy Bypass -File "C:\dns_debug\Register-DnsTasks.ps1"
```
这会在任务计划程序的 `\DNS\` 下注册两个任务:
| 任务 | 计划 |
|------|----------|
| DNS Log Rotate | 每 15 分钟(:00, :15, :30, :45) |
| DNS Log Normalize | 每 15 分钟(:02, :17, :32, :47) |
两个任务均以 `SYSTEM` 身份运行。
#### 4. 配置 Wazuh Agent
将以下内容添加到 Wazuh agent 配置(`ossec.conf`)中:
```
syslog
C:\dns_debug\output\dns_normalized_*.log
```
重启 Wazuh agent:
```
Restart-Service -Name "Wazuh"
```
#### 5. 在 Wazuh Manager 上部署 Decoder 和 Rules
将 decoder 和 rules 复制到 Wazuh Manager:
```
cp 0001_windows_dns_debug_decoder.xml /var/ossec/etc/decoders/
cp custom_dns_rules.xml /var/ossec/etc/rules/
```
重启 Wazuh Manager:
```
systemctl restart wazuh-manager
```
### 日志文件生命周期
| 文件 | 描述 |
|------|-------------|
| `C:\dns_debug\dns_TIMESTAMP.log` | DNS 服务正在写入的活动文件 |
| `C:\dns_debug\dns_TIMESTAMP_done.log` | 已复制并准备好进行规范化的文件 |
| `C:\dns_debug\output\dns_normalized_TIMESTAMP.log` | Wazuh agent 读取的规范化输出文件 |
规范化输出文件将在 **60 分钟**后自动删除(可通过 `-KeepMinutes` 参数配置)。
### 脚本参数
**Rotate-DnsLog.ps1**
| 参数 | 默认值 | 描述 |
|-----------|---------|-------------|
| `-LogDir` | `C:\dns_debug` | DNS 日志文件的目录 |
| `-MaxSize` | `10000000` | DNS 日志文件的最大大小(字节) |
**Normalize-DnsLog.ps1**
| 参数 | 默认值 | 描述 |
|-----------|---------|-------------|
| `-InputDir` | `C:\dns_debug` | 包含原始日志文件的目录 |
| `-OutputDir` | `C:\dns_debug\output` | 规范化输出文件的目录 |
| `-KeepMinutes` | `60` | 删除前保留规范化文件的时长 |
### 待办事项:
域名白名单。有几种选择方案,但我仍在测试哪种最高效。
标签:AI合规, AMSI绕过, Decoder, DNS 监控, DNS 调试日志, ETW 替代方案, FQDN 解析, IPv6, IP 地址批量处理, Libemu, PB级数据处理, PowerShell, Sysmon, Wazuh, Windows DNS, 威胁检测, 安全脚本, 安全运维, 日志收集, 日志规范化, 日志解析, 日志轮转, 规则配置, 证书伪造