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安全, 日志解析, 红队行动, 网络安全审计, 蓝队分析, 证书伪造, 请求拦截