【发布时间】:2020-11-01 07:22:30
【问题描述】:
TL;DR:
如何调试对mod-security 规则的命中,以识别触发规则的请求部分?
情况
我有一个在 modsecurity 和 Free OWASP ModSecurity Core Rule Set (CRS) 的环境中运行的网站,我真的很喜欢这个想法。我花了很多时间在我的开发机器上运行相同的插件和配置后,我在调试时遇到了问题。
我有一些编辑器 (ckeditor 4) 允许管理员编辑欢迎页面、电子邮件模板等,这些编辑器生成的 html 要么显示在浏览器中,要么通过电子邮件发送。
问题是我不断有数据触发不同的 OWASP 规则,导致 403,这充其量是烦人的,而且对用户不是很友好。
尝试调试
例如,我在日志中得到这样的点击:
[Sat Jul 11 20:12:47.827894 2020] [:error] [pid 9504:tid 2352] [client 127.0.0.1:53355] [client 127.0.0.1] ModSecurity: Warning. Pattern match "(?i)(?:\\\\W|^)(?:javascript:(?:[\\\\s\\\\S]+[=\\\\\\\\(\\\\[\\\\.<]|[\\\\s\\\\S]*?(?:\\\\bname\\\\b|\\\\[ux]\\\\d))|data:(?:(?:[a-z]\\\\w+\\\\/\\\\w[\\\\w+-]+\\\\w)?[;,]|[\\\\s\\\\S]*?;[\\\\s\\\\S]*?\\\\b(?:base64|charset=)|[\\\\s\\\\S]*?,[\\\\s\\\\S]*?<[\\\\s\\\\S]*?\\\\w[\\\\s\\\\S]*?>))|@\\\\W*?i\\\\W*?m\\\\W*?p\\\\W*? ..." at ARGS:sluttekst. [file "C:/udvikling/xampp/apache/conf/extra/owasp-modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] [line "259"] [id "941170"] [msg "NoScript XSS InjectionChecker: Attribute Injection"] [data "Matched Data: \\x22data:image/png; found within ARGS:tekst: <p><span style=\\x22font-size: 14px;\\x22><span style=\\x22font-family: verdana,geneva,sans-serif;\\x22>her er der noget tekst som er fremtrædende. Områder obliver våde.Privat. Kvalitet bør værdsættes, hvis du vil.<br />\\x0d\\x0a<br />\\..."] [hostname "devpc.local"] [uri "/z.php"] [unique_id "XwoBH4TwpS3bcEzonWuZAwAAji0"], referer: https://depc.local/z.php
由于模式被截断,我在本地 apache config (REQUEST-941-APPLICATION-ATTACK-XSS.conf) 中查找了配置文件并复制了匹配的字符串
<p><span style=\\x22font-size: 14px;\\x22><span style=\\x22font-family: verdana,geneva,sans-serif;\\x22>her er der noget tekst som er fremtrædende. Områder obliver våde.Privat. Kvalitet bør værdsættes, hvis du vil.<br />\\x0d\\x0a<br />\\...
...以及我认为的正则表达式模式...
(?i)(?:\W|^)(?:javascript:(?:[\s\S]+[=\\\(\[\.<]|[\s\S]*?(?:\bname\b|\\[ux]\d))|data:(?:(?:[a-z]\w+\/\w[\w+-]+\w)?[;,]|[\s\S]*?;[\s\S]*?\b(?:base64|charset=)|[\s\S]*?,[\s\S]*?<[\s\S]*?\w[\s\S]*?>))|@\W*?i\W*?m\W*?p\W*?o\W*?r\W*?t\W*?(?:\/\*[\s\S]*?)?(?:[\"']|\W*?u\W*?r\W*?l[\s\S]*?\()|\W*?-\W*?m\W*?o\W*?z\W*?-\W*?b\W*?i\W*?n\W*?d\W*?i\W*?n\W*?g[\s\S]*?:[\s\S]*?\W*?u\W*?r\W*?l[\s\S]*?\("
... 到 regexr.com 之类的工具中查看实际匹配。但没有这样的运气。
非最佳解决方法
我已经使用了一个这样的编辑器,并将发送者转换为 base64 编码 tekst,然后再将其发送到服务器,然后再次base64decoding...我不想对我拥有的所有编辑器都这样做...
从这里到哪里?
我宁愿过滤掉所有无效代码(我已经发现斯堪的纳维亚字符 å htmlencoded 到 &aring; 被 REQUEST-932-APPLICATION-ATTACK-RCE 插件捕获,所以我会有以确保将它们作为 UTF-8 字符发送)
【问题讨论】:
标签: mod-security debugging owasp mod-security