【问题标题】:Debugging triggered modsecurity rule hits调试触发的 modsecurity 规则命中
【发布时间】:2020-11-01 07:22:30
【问题描述】:

TL;DR:

如何调试对 规则的命中,以识别触发规则的请求部分?

情况

我有一个在 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&aelig;dende. Omr&aring;der obliver v&aring;de.Privat. Kvalitet b&oslash;r v&aelig;rds&aelig;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&aelig;dende. Omr&aring;der obliver v&aring;de.Privat. Kvalitet b&oslash;r v&aelig;rds&aelig;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 到 &amp;aring; 被 REQUEST-932-APPLICATION-ATTACK-RCE 插件捕获,所以我会有以确保将它们作为 UTF-8 字符发送)

【问题讨论】:

    标签: mod-security debugging owasp mod-security


    【解决方案1】:

    在这里解决的一个想法是:

    • 使用内置 ACF 将 CKeditor 设置为使用/接受有限的 HTML 标记集,
    • 再次将CRS中CKeditor的ACF中定义的所有html标签列入白名单,
    • 确保网络服务器使用 UTF-8,
    • 让 modsecurity 阻止其他任何事情。

    这是理论,总有一天会实现...... 但是,我不喜欢将 modsecurity 逻辑外包/重复给 ACF 的想法,这是堆栈中的另一层。

    【讨论】:

    • 我喜欢你的建议。目前我已经厌倦了,我正在考虑使用 base64 方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    相关资源
    最近更新 更多