- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经在 Kubernetes Nginx Controller 上配置了 modsecurity-nginx 连接器。
目前,我使用 ModSecurity WAF 的目标是在 DetectionOnly
模式下实现,因为我不想立即开始阻止所有内容。因此,为了实现这一点,我在我的 Controller ConfigMap 中使用了以下配置。
enable-modsecurity: "true"
modsecurity-snippet: |
SecRuleEngine DetectionOnly
SecAuditEngine On
SecAuditLogParts ABIJDEFHZ
SecAuditLogFormat JSON
SecAuditLogType Serial
SecAuditLog /dev/stdout
为了对此进行测试,我尝试了 SQL 注入(inject)攻击,在这种攻击中,我将来自客户端的 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 日志中获取一些有用的信息,以便我可以识别即将到来的请求/威胁类型我的应用程序,因此开始为他们编写阻止规则。
最佳答案
核心规则集 Dev on Duty 在这里。在您的 403 日志输出中,我看到您已使用 OWASP Core Rule Set 配置了 ModSecurity .
您的 ModSecurity 配置似乎是正确的,您配置了正确的 SecAuditLogParts
。
当我使用具有完全相同的 ModSecurity 配置的官方 CRS Docker 容器对此进行测试时,我得到以下输出:
{"transaction":{"client_ip":"172.x.x.x","time_stamp":"Wed Jan 19 19:51:47 2022","server_id":"364905fd334fdd694cd3e0d02976eb3eb63f3790","client_port":46202,"host_ip":"172.x.x.x","host_port":80,"unique_id":"1642621907","request":{"method":"GET","http_version":1.1,"uri":"/foo?username=1'%20or%20'1'%20=%20'","headers":{"Host":"localhost","User-Agent":"curl/7.58.0","Accept":"*/*"}},"response":{"body":"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\n<title>404 Not Found</title>\n<h1>Not Found</h1>\n<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>\n","http_code":404,"headers":{"Server":"nginx/1.20.1","Date":"Wed, 19 Jan 2022 19:51:47 GMT","Content-Length":"233","Content-Type":"text/html","Access-Control-Allow-Origin":"*","Connection":"keep-alive","Access-Control-Allow-Credentials":"true"}},"producer":{"modsecurity":"ModSecurity v3.0.5 (Linux)","connector":"ModSecurity-nginx v1.0.2","secrules_engine":"DetectionOnly","components":["OWASP_CRS/3.4.0-dev\""]},"messages":[{"message":"","details":{"match":"detected SQLi using libinjection.","reference":"v18,13","ruleId":"942100","file":"/etc/modsecurity.d/owasp-crs/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf","lineNumber":"46","data":"","severity":"0","ver":"OWASP_CRS/3.4.0-dev","rev":"","tags":[],"maturity":"0","accuracy":"0"}},{"message":"Inbound Anomaly Score Exceeded (Total Score: 5)","details":{"match":"Matched \"Operator `Ge' with parameter `5' against variable `TX:ANOMALY_SCORE' (Value: `5' )","reference":"","ruleId":"949110","file":"/etc/modsecurity.d/owasp-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf","lineNumber":"139","data":"","severity":"2","ver":"OWASP_CRS/3.4.0-dev","rev":"","tags":["${MODSEC_TAG}","application-multi","language-multi","platform-multi","attack-generic"],"maturity":"0","accuracy":"0"}}]}}
我的和你的输出之间的区别是:
在我的输出中,我看到组件:“OWASP_CRS/3.4.0-dev”messages数组包含两条消息:一条是违反CRS规则942100和阻止规则949110。
正如我们在今天的回复中看到的那样,它在 SecAuditLogFormat Native
而不是 SecAuditLogFormat JSON
中显示了 ModSecurity AuditLog,违反的规则应该在 SecAuditLogParts 中列出
部分 H
。
为了确认这一点,我在我的环境中对其进行了测试,我可以使用 H
部分完全关闭消息部分。
所以我进一步调查并发现了一些与您的问题相关的 ModSecurity 问题。
这些不能 1:1 解释您的问题。我看到 CRS 规则之间的区别是:由您的 curl 测试触发的 SQL 注入(inject)规则是 942100
,它具有操作 block
(未记录):https://github.com/coreruleset/coreruleset/blob/v3.4/dev/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf#L46
阻止 ID 为 949110
的请求的阻止评估规则具有操作 deny
:https://github.com/coreruleset/coreruleset/blob/v3.4/dev/rules/REQUEST-949-BLOCKING-EVALUATION.conf#L139 .
正如我上面所说,这并不能 1:1 解释您的问题。但是我建议你升级到最新版本再测试一下。您的帖子已有 11 个月了,问题本可以在此期间得到解决,因为我们看到了一些 ModSecurity 问题和与此问题相关的拉取请求。
关于nginx-ingress - ModSecurity(在 DetectionOnly 模式下)没有提供有用的日志/警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66222656/
我正在寻找一种方法,使规则(触发了哪个规则)的消息信息出现在错误和/或审核日志文件中,并在响应 header 中发送回客户端。我知道有阶段“msg”,但它不会在响应 header 中将信息发送回客户端
我正在尝试在Docker容器中使用ModSecurity Rule set设置Apache服务器。我遵循了一些教程(this,this和this)来构建安全的Apache服务器。但是我无法使服务器使用
我做了很多研究,找到了很多东西,但还没有能够确定一些可以满足我需要的东西。首先,我在运行 ModSecurity 2.7.3 的 CentOS 7 服务器上。 目标 我希望能够扫描除某些参数之外的所有
我已经安装了 Owasp ModSecurity,之后我的应用程序上的所有页面都有这个规则警报。 ModSecurity: Warning. Match of "eq 1" against "&ARG
我正在尝试为 Apache 配置 modsecurity 以限制每单位时间可以访问给定资源的点击次数(假设每个资源每分钟 10 次点击,无论请求是哪个 IP 地址)。资源具有“https://myho
今天,我为 nginx 安装了 mod_security。我将以下 block 添加到 /etc/nginx/nginx 中: server { listen 80; server_nam
我根据 this link 通过 nginx 入口 Controller 的配置映射启用了 modsecurity: "true"和 enable-owasp-modsecurity-crs: "tr
我在 Mod 安全方面遇到了很多问题。我正忙于为工作中的项目编写 CMS,而在开发页面以编辑特定数据库记录时,我不断收到 403 错误。在我的头撞在 table 上几个小时后,调整了一些代码,我终于改
web防火墙(waf)免费开源的比较少,并且真正可以商用的WAF少之又少,modsecurity 是开源防火墙鼻祖并且有正规公司在维护着,目前是https://www.trustwave.com在维
我在 CentOS 7 上设置了 Apache2 + PHP5 我的 Web 应用程序的一些 PHP,它们接受 UUID 作为 GET 参数,这违反了 ModSecurity URI 模式。 我想设置
ModSecurity 尝试打开 url 时出现误报:https://www.galgani.it/solitudine-contesti-virtuali-internet-facebook-soc
我已经安装了 ModSecurity 和核心 OWASP 规则集版本 2.2.5 几个月了,但是网站上的一个 JSON 端点最近停止响应,并且 Apache 日志得到以下内容: [Tue Jul 21
我正在尝试为 Nginx OSS Web 服务器编译 ModSecurity。我已按照他们的“快速入门指南”中的所有说明进行操作,但遇到了问题。连接新模块后,配置测试失败。 /var/log/ngin
我正在尝试一起构建 Nginx 和 ModSecurity 以便使用 OWASP- Core Rule Set Project . 根据 modsecurity 下载页面,最新版本的 modsecur
我正在尝试在 Windows 中安装 ModSecurity 以帮助保护我的 Coldfusion/Railo 网站。我下载并安装了 MSI,但在我测试以确保它正常工作时它似乎没有阻止 SQL 注入(
基于 DOM(类型 0)的 XSS 不需要向服务器发送恶意代码,因此它们也可以使用静态 HTML 页面作为攻击向量。此处的虚拟攻击字符串示例如下: http://www.xssed.edu/home.
我让 Apache 和 Modsecurity 一起工作。我试图通过请求的 header (如“facebookexternalhit”)来限制命中率。然后返回友好的“429 Too Many Req
我在我的 Cpanel 服务器上遇到了这个错误。它不会在每次更新时发生,只是一些 SQL。 [Sat Mar 11 03:48:18.409435 2017] [:error] [pid 31376:
modsecurity 是否有一个在没有 Apache 的情况下工作的 nginx 或 Tomcat 模块? 最佳答案 是的。 Mod-security 有用于 nginx、IIS 和 java 的模
我在 modsecurity 中有很多规则,但如果主机在 SSL https://SERVER_IP 中是数字,则没有任何规则有效,我得到这样的响应: 400 Bad Request No requi
我是一名优秀的程序员,十分优秀!