这是我第一次在临时服务器上运行它,我认为我做的一切都是正确的。当我对它运行 nikto2 时,我可以看到 modsec_audit.log 中的条目,但我实在无法手动让 mod_security 阻止任何东西。我已将 SQL 放入 URL、表单等中,但我只得到了我们典型的用户友好的 HTML 404 页面,而不是来自 mod_security 的阻止,这应该是 403 错误或彻底阻止。
我担心它只会检测而不会阻止。我检查了我的配置,它肯定设置为阻止攻击而不仅仅是检测攻击。有没有人知道如何验证这个东西是否真的在阻止攻击?有没有人有测试 URL 或我可以做些什么来证明它确实有效?
答案1
在您的浏览器中尝试访问该服务器上托管的网站,如下例所示:
http://www.anywebsitefromthatserver.com/aphpfilethatdonotexist.php?something=../../etc
然后检查 Modsecurity 日志,你会看到类似的内容(如果你有 WHM / cPanel -> 检查 WHM -> Modsecurity Tools 以查看日志):
2017-12-14 10:28:41 www.anywebsitefromthatserver.com YOUR IP: 68.XX.XX.XX CRITICAL 404 930100: Path Traversal Attack (/../)
详细日志如下:
Request: GET /aphpfilethatdonotexist.php?something=../../etc
Action Description: Warning.
Justification: Pattern match "(?i)(?:\\x5c|(?:%(?:c(?:0%(?:[2aq]f|5c|9v)|1%(?:[19p]c|8s|af))|2(?:5(?:c(?:0%25af|1%259c)|2f|5c)|%46|f)|(?:(?:f(?:8%8)?0%8|e)0%80%a|bg%q)f|%3(?:2(?:%(?:%6|4)6|F)|5%%63)|u(?:221[56]|002f|EFC8|F025)|1u|5c)|0x(?:2f|5c)|\\/))(?:%(?:(?:f(?:(?:c%80|8)%8)?0%8 ..." at REQUEST_URI_RAW.
如果您看到类似的日志,那么您可以确定您的 Modsecurity 已激活并正在运行。
答案2
默认情况下,引擎只会检测模式:
SecRuleEngine DetectionOnly
你需要调整SecRuleEngine On
sed -ie 's/^\s*SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/modsecurity/modsecurity.conf
并重新启动 Apache。
答案3
您可以查看 Rapid7 指南了解基本配置。
https://blog.rapid7.com/2017/04/09/how-to-configure-modsecurity-with-apache-on-ubuntu-linux/
有几个测试 curl 应该会生成日志条目。日志条目会同时出现在 /var/log/apache2/access 和 /var/log/apache2/modsec_audit.log 中,具体取决于您的设置
XSS 测试
curl 'http://www.example.com/?q="><script>alert(1)</script>'
SQL 注入
curl "http://www.example.com/?q='1 OR 1=1"
答案4
我有一张如下的支票
$ curl -ks -o /dev/null -w '%{http_code}' "https://something.example.com/foo?username=1'%20or%20'1'%20=%20'"
如果您得到一个403
,那么 ModSecurity 就按预期工作了。