如何解决ModSecurity在 DetectionOnly 模式下没有提供有用的日志/警告
我已经在 Kubernetes Nginx 控制器上配置了 modsecurity-nginx 连接器。
目前,我使用 ModSecurity WAF 的目标是在 DetectionOnly
模式下实现,因为我不想立即开始阻止所有内容。因此,为了实现我在控制器 ConfigMaps 中使用的以下配置。
enable-modsecurity: "true"
modsecurity-snippet: |
SecRuleEngine DetectionOnly
SecAuditEngine On
SecAuditLogParts ABIJDEFHZ
SecAuditLogFormat JSON
SecAuditLogType Serial
SecAuditLog /dev/stdout
为了测试这一点,我尝试了 SQL 注入攻击,在该攻击中,我将一个 SQL 查询从客户端插入到我的测试应用程序中。但是 ModSecurity 没有在日志中给出任何警告或任何有用的信息,表明在应用程序中插入了 SQL 查询。以下是我分别发送和获取日志的请求:
$ curl -ks -o /dev/null -w ‘%{http_code}’ “https://test-ingress-nginx.example.com/foo?username=1'%20or%20'1'%20=%20'”
输出:404
Logs :
----
{“transaction”:{“client_ip”:“192.xxx.xxx.xx",“time_stamp”:“Tue Feb 16 07:44:10 2021",“server_id”:“995f188ad543e6fcbcdbfb4c7a2c67327xxxxx",“client_port”:59455,“host_ip”:“10.x.xxx.xxx”,“host_port”:443,“unique_id”:“161346145098.924xxx",“request”:{“method”:“GET”,“http_version”:2.0,“uri”:“/foo?username=1'%20or%20'1'%20=%20'“,”headers”:{“host”:“test-ingress-nginx.example.com”,“user-agent”:“curl/7.64.1",“accept”:“*/*“}},“response”:{“body”:“<!DOCTYPE HTML PUBLIC \“-//IETF//DTD HTML 2.0//EN\“>\n<html><head>\n<title>404 Not Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p>The requested URL /foo was not found on this server.</p>\n<hr>\n<address>Apache/2.4.25 (Debian) Server at test-ingress-nginx.example.com Port 80</address>\n</body></html>\n”,“http_code”:404,“headers”:{“Server”:“”,“Server”:“”,“Date”:“Tue,16 Feb 2021 07:44:10 GMT”,“Content-Length”:“306”,“Content-Type”:“text/html; charset=iso-8859-1”,“Connection”:“close”,“Strict-Transport-Security”:“max-age=15724800; includeSubDomains”}},“producer”:{“modsecurity”:“ModSecurity v3.0.4 (Linux)“,”connector”:“ModSecurity-nginx v1.0.1”,“secrules_engine”:“DetectionOnly”,“components”:[]},“messages”:[]}}
如果我将 SecRuleEngine DetectionOnly
更改为 SecRuleEngine On
,则错误代码会更改,并且日志会显示请求被阻止的原因:
$ curl -ks -o /dev/null -w ‘%{http_code}’ “https://test-ingress-nginx.example.com/foo?username=1'%20or%20'1'%20=%20'”
输出:403
Logs :
----
2021/02/16 07:35:11 [error] 8100#8100: *25411553 [client 192.xxx.xxx.xx] ModSecurity: Access denied with code 403 (phase 2). Matched “Operator `Ge’ with parameter `5' against variable `TX:ANOMALY_SCORE’ (Value: `5' ) [file “/etc/nginx/owasp-modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf”] [line “80"] [id “949110”] [rev “”] [msg “Inbound Anomaly Score Exceeded (Total Score: 5)“] [data “”] [severity “2"] [ver “OWASP_CRS/3.3.0”] [maturity “0"] [accuracy “0”] [tag “application-multi”] [tag “language-multi”] [tag “platform-multi”] [tag “attack-generic”] [hostname “10.x.xxx.xxx"] [uri “/foo”] [unique_id “16134609114.611xxx"] [ref “”],client: 192.xxx.xx.xx,server: test-ingress-nginx.example.com,request: “GET /foo?username=1'%20or%20'1'%20=%20' HTTP/2.0",host: “test-ingress-nginx.example.com”
问题:当我在 Detection Only
模式下启用 ModSecurity 时,有没有办法可以在 ModSecurity 日志中获取一些有用的信息,以便我可以确定我的应用程序收到了什么样的请求/威胁,从而确定开始为他们编写阻止规则。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。