NucleiAv/wazuh-caddy-ruleset
GitHub: NucleiAv/wazuh-caddy-ruleset
为 Wazuh 提供解析 Caddy Web 服务器 JSON 访问日志并检测各类 Web 攻击行为的解码器与规则集。
Stars: 1 | Forks: 0
# wazuh-caddy-ruleset
适用于 Caddy web 服务器的 Wazuh 解码器和检测规则。
Caddy 是一款现代化的开源 web 服务器,支持自动 HTTPS。此规则集用于解析其结构化的 JSON 访问日志,并检测常见的 web 攻击、侦察活动和异常行为。
## 检测内容
| 规则 ID | 描述 | 级别 |
|---------|-------------|-------|
| 996000 | Caddy 访问日志(基础规则) | 0 |
| 996003 | 路径遍历尝试 | 10 |
| 996004 | SQL 注入尝试 | 10 |
| 996005 | 敏感路径探测 | 8 |
| 996008 | URI 中的 XSS 尝试 | 10 |
| 996009 | 命令注入尝试 | 10 |
| 996010 | 已知扫描工具(sqlmap、nikto、gobuster 等) | 8 |
| 996011 | HTTP TRACE/TRACK 方法 | 6 |
| 996012 | Log4Shell JNDI 注入尝试 | 15 |
| 996013 | 敏感文件访问(wp-config、htaccess 等) | 8 |
| 996014 | 凭据或私钥文件访问(.env、id_rsa 等) | 12 |
| 996015 | 备份或数据库转储文件访问(.sql、.bak 等) | 10 |
| 996016 | 源代码控制产物访问(.git、.svn 等) | 10 |
| 996017 | 应用程序日志文件访问 | 8 |
| 996018 | 目录枚举(重复的敏感路径探测) | 14 |
| 996019 | 激进扫描(重复的路径遍历尝试) | 14 |
| 996020 | 请求可疑文件名(password、secret、token 等) | 8 |
| 996021 | 身份验证端点访问 | 3 |
| 996022 | 认证端点上的可能暴力破解 | 10 |
| 996023 | 编码规避 / WAF 绕过尝试 | 10 |
| 996024 | LFI/RFI 文件包含尝试 | 12 |
| 996025 | 针对内部资源的 SSRF 尝试 | 12 |
| 996026 | GraphQL 自省或 API schema 探测 | 8 |
| 996027 | 异常或危险的 HTTP 方法(DEBUG、CONNECT、FUZZ 等) | 8 |
| 996028 | 可疑的 User-Agent(为空或超大) | 6 |
| 996029 | 危险文件上传(web shell、脚本文件) | 12 |
| 996030 | 超大 URI(可能的模糊测试) | 8 |
| 996031 | 双扩展名绕过上传尝试(shell.php.jpg) | 13 |
| 996032 | 归档或启用宏的文件上传(.zip、.docm 等) | 8 |
所有规则均基于 PCRE2 并映射到 MITRE ATT&CK。
## 环境要求
- Wazuh 4.x
- 配置 Caddy 以写入 JSON 访问日志
## Caddy 日志格式
确保 Caddy 正在写入结构化的 JSON 日志。在你的 Caddyfile 中:
```
{
log {
format json
}
}
```
一行示例的 Caddy JSON 日志如下所示:
```
{"level":"info","ts":1700000000.0,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"10.0.0.1","remote_port":"12345","proto":"HTTP/1.1","method":"GET","host":"example.com","uri":"/","headers":{"User-Agent":["Mozilla/5.0"]}},"status":200,"size":1024,"duration":0.002}
```
## 安装说明
### 步骤 1. 复制解码器文件
```
cp caddy_decoders.xml /var/ossec/etc/decoders/caddy_decoders.xml
chown wazuh:wazuh /var/ossec/etc/decoders/caddy_decoders.xml
chmod 640 /var/ossec/etc/decoders/caddy_decoders.xml
```
### 步骤 2. 复制规则文件
```
cp caddy_rules.xml /var/ossec/etc/rules/caddy_rules.xml
chown wazuh:wazuh /var/ossec/etc/rules/caddy_rules.xml
chmod 640 /var/ossec/etc/rules/caddy_rules.xml
```
### 步骤 3. 配置 Wazuh 以读取 Caddy 日志
将以下内容添加到你的 Wazuh 代理配置(`/var/ossec/etc/ossec.conf`)中:
```
json
/var/log/caddy/access.log
```
### 步骤 4. 重启 Wazuh
```
/var/ossec/bin/wazuh-control restart
```
## 使用 Docker 进行测试
如果你想在实际部署到 Wazuh 实例之前测试这些规则,可以使用 Docker 容器。
### 步骤 1. 启动 Wazuh 管理器容器
```
docker run -d --name wazuh-test \
-p 55000:55000 \
wazuh/wazuh-manager:4.14.5
docker start wazuh-test
```
### 步骤 2. 将规则加载到容器中并重启
```
docker exec wazuh-test bash -c "
cp /path/to/caddy_rules.xml /var/ossec/etc/rules/caddy_rules.xml &&
chown wazuh:wazuh /var/ossec/etc/rules/caddy_rules.xml &&
chmod 640 /var/ossec/etc/rules/caddy_rules.xml &&
/var/ossec/bin/wazuh-control restart
"
```
### 步骤 3a. 交互式测试单行日志
```
docker exec -it wazuh-test bash
/var/ossec/bin/wazuh-logtest
```
粘贴任意 Caddy JSON 日志行并按两次 Enter。
### 步骤 3b. 使用日志文件进行测试
```
docker exec -i wazuh-test /var/ossec/bin/wazuh-logtest < test-logs.txt
```
### 步骤 3c. 使用日志文件进行测试并保存输出
```
docker exec wazuh-test bash -c "
cp /path/to/caddy_rules.xml /var/ossec/etc/rules/caddy_rules.xml &&
chown wazuh:wazuh /var/ossec/etc/rules/caddy_rules.xml &&
chmod 640 /var/ossec/etc/rules/caddy_rules.xml &&
/var/ossec/bin/wazuh-control restart
" && sleep 5 && docker exec -i wazuh-test /var/ossec/bin/wazuh-logtest \
< test-logs.txt \
> logtest-output.txt 2>&1
```
### 步骤 4. 仅从输出中查看规则命中情况
```
grep -E "id:|description:|level:" logtest-output.txt
```
## 运行单元测试
这需要 wazuh/wazuh 源仓库的本地克隆。
### 步骤 1. 将测试文件复制到容器中
```
docker cp /path/to/wazuh/ruleset/testing/runtests.py wazuh-test:/tmp/runtests.py
docker cp /path/to/wazuh/ruleset/testing/coverage.py wazuh-test:/tmp/coverage.py
docker cp /path/to/wazuh/ruleset/testing/. wazuh-test:/tmp/testing/
docker cp caddy.ini wazuh-test:/tmp/testing/tests/caddy.ini
```
### 步骤 2. 运行测试
```
docker exec wazuh-test bash -c "cd /tmp/testing && python3 runtests.py --path /var/ossec --testfile tests/caddy.ini"
```
预期输出:
```
| File | Passed | Failed | Status |
|./tests/caddy.ini | 26 | 0 | ✅ |
```
## 注意事项
- 规则 996018、996019 和 996022 是基于频率的(暴力破解 / 重复扫描关联)。它们需要在一个时间窗口内匹配多个事件,并且无法在 wazuh-logtest 中通过单行日志触发。
- `status` 字段是 Wazuh 保留的字段,不能用于自定义规则。不支持基于状态码(4xx、5xx)的检测。
- 所有模式均使用 PCRE2(`type="pcre2"`),以实现正确的字面量点匹配和大小写不敏感标志。
## 许可证
GPLv2。请查看每个文件中的许可证头部信息。
标签:Caddy, CISA项目, Wazuh, Web安全, 日志解析, 红队行动, 网络安全审计, 蓝队分析, 证书伪造, 请求拦截