"ModSecurity Access Denied" 在日志中。我不明白它在告诉我什么。我应该担心吗?

"ModSecurity Access Denied" in logs. I don't understand what its telling me.. Should I be concerned?

我在日志中看到以下三项关于访问被拒绝的事情。其中两个具有至关重要的安全性。我真的不明白他们的意思,在谷歌搜索了一下之后,仍然不确定我是否应该担心或做任何事情。我是 运行 Apache 上的 Django mod_wsgi。

这是三个:

ModSecurity:访问被拒绝,代码为 400(第 2 阶段)。 REQUEST_URI_RAW 处的模式匹配“^\\w+:/”。 [文件“/usr/local/apache/conf/modsec-imh/01_base_rules.conf”] [行“23”] [id“960014”] [消息"Proxy access attempt"] [严重性"CRITICAL"] [标签"PROTOCOL_VIOLATION/PROXY_ACCESS"] [主机名"www.MYSITE.com"] [uri "/"] [unique_id "VaM7bUYn@9YAACtkIA8AAABq"]

ModSecurity:访问被拒绝,代码为 501(第 2 阶段)。模式匹配“(?:\\b(?:(?:n(?:et(?:\\b\\W+?\\blocalgroup|\\.exe)|(?:map|c)\\. exe)|t(?:racer(?:oute|t)|elnet\\.exe|clsh8?|ftp)|(?:w(?:guest|sh)|rcmd|ftp)\\.exe|echo\\b\\W*?\\by+)\\b|c(?:md(?:(?:32)?\\.exe\\b|\\b\ \W*?\\/c)|d(?:\\b\\W*?[\\\\/]|\\W*?\\.\\.)|hmod.{0,40} ? ..." 在 REQUEST_HEADERS:User-Agent。[文件 "/usr/local/apache/conf/modsec-imh/01_base_rules.conf"] [行 "100"] [id "959006"] [msg "System Command Injection"] [数据 ";邮件"] [严重性 "CRITICAL"] [标签 "WEB_ATTACK/COMMAND_INJECTION"] [主机名 "www.MYSITE.com"] [uri "/robots.txt"] [unique_id "VaPVSUYn@9YAACtkNioAAABL"]

ModSecurity:访问被拒绝,代码为 406(第 2 阶段)。模式匹配“\\%(?![0-9a-fA-F]{2}|u[0-9a-fA-F]{4})”在 REQUEST_HEADERS:X-Opt-Forward。 [文件“/usr/local/apache/conf/modsec-imh/01_base_rules.conf”] [行“17”] [id“950107”] [消息"URL Encoding Abuse Attack Attempt"] [严重性"WARNING"] [主机名"www.MYSITE.com"] [uri "/static/images/MYIMAGE.png"] [unique_id "VYnqMEYn@9YAAGtcKysAAAAT"]

粗体部分是我编辑我网站相关内容的地方。 任何帮助表示赞赏。谢谢!

运行 一个网站不可避免地意味着您将收到这样的请求。网络是开放的,scammers/hackers/script 孩子们无需花钱就可以编写脚本并尝试大量网站或 IP,希望他们能找到一个易受攻击的网站。这就像拥有一个电子邮件地址 - 很快您就会收到垃圾邮件。大多数情况下,这种垃圾邮件是无害的,只是令人讨厌。偶尔你会得到一些会造成真正伤害的东西。

ModSecurity 是一种工具,用于检查发送到您的服务器的 Web 请求,然后根据特定规则阻止。这通常是通过编写规则将某些 HTTP 请求字段与正则表达式进行比较来完成的。网上有一些免费的规则集,OWASP 核心规则集 (CRS) 就是其中之一。它用于搜索常见的攻击,任何规则 id 9XXXXX 都来自于它。

ModSecurity 是一个非常强大的工具,具有许多保护您网站的优点。然而,它也不是没有缺点。首先,它会让您意识到这些请求 - 其中大部分是无害的,并且可能已经毫无问题地访问了您的网站一段时间。当您第一次查看 ModSecurity 日志文件时,您可能会感到恐慌。另一方面,但更糟糕的是,它还可以阻止 "false positives" - 不应阻止的合法流量。类似于垃圾邮件过滤器有时会将真实电子邮件放入垃圾邮件文件夹的方式。 CRS 肯定需要针对您的特定站点进行调整。

因此,在这样的背景下,让我们看看您给出的三个示例:

第一条规则 (960014) 标记的请求可能是试图将您的网络服务器用作代理。骗子自己的服务器经常被封锁,所以他们喜欢通过其他服务器代理请求,这样流量就好像来自您的 IP 而不是他们的。当在 URL 中收到带有 :// 后跟单词的请求时,将触发该规则。这是可行的,因为请求中永远不应包含此内容:www.example.com/page.html 是合法请求,但 www.example.com/page.html/http://www.example2.com is not a legitimate request. However this can easily catch false positives with legitimate requests like this: www.example.com?referrer=http://www.google.com。许多搜索引擎、广告、营销链接等。可能会使用那种格式,并且由于这条规则,这些格式将停止工作。就我个人而言,我不觉得这条规则有用。默认情况下,Apache 有自己的保护措施,防止尝试将您的网络服务器用作代理,因此这条规则不会给您带来太多好处,但可能会给您带来麻烦。我会把它关掉。您可以与您的虚拟主机服务商谈如何执行此操作(通常在 .htaccess 文件中添加 "SecRuleRemoveById 960014" 行)。

第二个 (959006) 针对用户代理运行一个非常复杂的正则表达式来寻找狡猾的请求。除非你有正则表达式的学位,否则一些 CRS 规则很难理解!用户代理应该是您的浏览器,所有体面的浏览器 return 都是一个好的用户代理。此外,一些知道垃圾邮件工具使用此规则可以轻松阻止的特定用户代理。然而,这通常很容易改变,所以它可以发送一个好的用户代理,所以它看起来像一个普通的网络浏览器,所以这个规则实际上只接收非常简单的错误请求。然后它也很少标记任何误报,因此这是一个很好的规则。这里发送的用户代理是“; 邮件”(像这样的一些规则有助于在日志中显示导致问题的值 - 在本例中为 "data" 字段)。 "; mail" 的用户代理看起来很可疑。现在你可以在用户代理中指定你想要的任何东西,它不应该引起问题(忽略现在试图操纵 HTTP 请求发送其他字段),所以这个规则本身并没有真正保护任何东西,但是如果这个请求者在该字段中发送了类似的内容,那么它可能无论如何都不是合法请求,并且他们可能会在请求的其他位中尝试其他狡猾的请求 - 因此存在此规则的原因。考虑到那里显示的用户代理,我认为这条规则在阻止错误请求方面对你有好处,所以别管它继续阻止。

最后一条规则 950107 查找错误的 URL 编码。网址对某些字符(如空格)进行编码,因此像“http://www.example.com?name=Joe Bloggs" becomes "http://www.example.com?name=Joe%20Bloggs" so the request can be handled by servers. URL encodings have a standard known format (basically start with a % and then have a hexadecimal code (0-9 or a-f)) so a request like this: "http://www.example.com?name=Joe%ZZBloggs”这样的请求是无效的。在这种情况下,错误匹配出现在 X-Opt-Forward 上,我猜这是一个通常用于代理处理的原始 IP 地址的字段。想不出该字段应该为合法流量标记此规则的任何理由,所以我再次声明这是另一个尝试运气的骗子,应该阻止它。

很多东西要吸收,希望对您有所帮助,但如果您有任何问题,请告诉我们。

如果您的 ModSecurity 日志条目中没有 "Matched Data"-Part,请查看您的 Apache 访问日志。

有时 modsecurity 会在日志中记录请求的哪一部分匹配并触发了规则,如下所示: [匹配数据:)在 ARGS:q 内找到:Audi Hamburg (Kollaustr) Oder Willy Tiedke (22047)]