处理 HTTP w00tw00t 攻击

Sai*_*han 82 security spam apache-2.2

我有一台带有 apache 的服务器,我最近安装了 mod_security2,因为我受到了很多攻击:

我的 apache 版本是 apache v2.2.3,我使用 mod_security2.c

这是错误日志中的条目:

[Wed Mar 24 02:35:41 2010] [error] 
[client 88.191.109.38] client sent HTTP/1.1 request without hostname 
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

[Wed Mar 24 02:47:31 2010] [error] 
[client 202.75.211.90] client sent HTTP/1.1 request without hostname 
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

[Wed Mar 24 02:47:49 2010] [error]
[client 95.228.153.177] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

[Wed Mar 24 02:48:03 2010] [error] 
[client 88.191.109.38] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
Run Code Online (Sandbox Code Playgroud)

以下是 access_log 中的错误:

202.75.211.90 - - 
[29/Mar/2010:10:43:15 +0200] 
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - - 
[29/Mar/2010:11:40:41 +0200] 
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - - 
[29/Mar/2010:12:37:19 +0200] 
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-" 
Run Code Online (Sandbox Code Playgroud)

我尝试像这样配置 mod_security2:

SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecFilterSelective REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"
Run Code Online (Sandbox Code Playgroud)

mod_security2 中的事情是不能使用 SecFilterSelective,它给了我错误。相反,我使用这样的规则:

SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecRule REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"
Run Code Online (Sandbox Code Playgroud)

即使这样也行不通。我不知道该怎么办了。有人有什么建议吗?

更新 1

我看到没有人可以使用 mod_security 解决这个问题。到目前为止,使用 ip-tables 似乎是执行此操作的最佳选择,但我认为该文件将变得非常大,因为 ip 每天都会更改几次。

我想出了另外 2 个解决方案,有人可以评论它们的好坏。

  1. 我想到的第一个解决方案是从我的 apache 错误日志中排除这些攻击。这将使我更容易在其他紧急错误发生时发现它们,而不必吐槽很长的日志。

  2. 我认为第二个选项更好,那就是阻止未以正确方式发送的主机。在这个例子中,w00tw00t 攻击是在没有主机名的情况下发送的,所以我想我可以阻止格式不正确的主机。

更新 2

在经历了答案之后,我得出了以下结论。

  1. 为 apache 设置自定义日志会消耗一些不必要的资源,如果确实有问题,您可能希望查看完整日志而不会遗漏任何内容。

  2. 最好忽略命中并专注于分析错误日志的更好方法。为您的日志使用过滤器是一个很好的方法。

关于该主题的最终想法

如果你至少有一个最新的系统,上面提到的攻击不会到达你的机器,所以基本上没有后顾之忧。

一段时间后可能很难从真实攻击中过滤掉所有虚假攻击,因为错误日志和访问日志都变得非常大。

以任何方式防止这种情况发生都会消耗您的资源,最好不要将资源浪费在不重要的事情上。

我现在使用的解决方案是Linux logwatch。它向我发送日志摘要,并对它们进行过滤和分组。通过这种方式,您可以轻松地将重要的与不重要的分开。

感谢大家的帮助,我希望这篇文章也能对其他人有所帮助。

Imo*_*Imo 34

从您的错误日志中,他们发送了一个 HTTP/1.1 请求,但没有 Host: 部分的请求。从我读到的内容来看,在移交给 mod_security 之前,Apache 会对此请求回复 400(错误请求)错误。因此,看起来您的规则不会被处理。(Apache 在要求移交给 mod_security 之前处理它)

自己试试:

telnet 主机名 80
GET /blahblahblah.html HTTP/1.1(输入)
(进入)

您应该收到 400 错误并在日志中看到相同的错误。这是一个错误的请求,apache 给出了正确的答案。

正确的请求应如下所示:

获取 /blahblahblah.html HTTP/1.1
主持人:blah.com

解决此问题的方法可能是修补 mod_uniqueid,即使对于失败的请求也能生成唯一 ID,以便 apache 将请求传递给其请求处理程序。以下 URL 是关于此工作的讨论,包括您可以使用的 mod_uniqueid 补丁:http ://marc.info/?l=mod-security-users&m=123300133603876&w=2

找不到任何其他解决方案,想知道是否确实需要解决方案。


小智 16

过滤 IP 不是一个好主意,恕我直言。为什么不尝试过滤你知道的字符串?

我的意思是:

iptables -I INPUT -p tcp --dport 80 -m string --to 60 --algo bm --string 'GET /w00tw00t' -j DROP
Run Code Online (Sandbox Code Playgroud)


小智 12

我也开始在我的日志文件中看到这些类型的消息。防止此类攻击的一种方法是设置fail2ban(http://www.fail2ban.org/)并设置特定过滤器以将这些IP 地​​址列入iptables 规则中的黑名单。

这是一个过滤器的例子,它会阻止与制作这些消息相关的 IP 地址

[2011 年 8 月 16 日星期二 02:35:23] [错误] [客户端] 文件不存在:/var/www/skraps/w00tw00t.at.blackhats.romanian.anti-sec:) === apache w00t w00t messages jail - 正则表达式和过滤器 === 监狱

 [apache-wootwoot]
 enabled  = true
 filter   = apache-wootwoot
 action   = iptables[name=HTTP, port="80,443", protocol=tcp]
 logpath  = /var/log/apache2/error.log
 maxretry = 1
 bantime  = 864000
 findtime = 3600
Run Code Online (Sandbox Code Playgroud)

筛选

 # Fail2Ban configuration file
 #
 # Author: Jackie Craig Sparks
 #
 # $Revision: 728 $
 #
 [Definition]
 #Woot woot messages
 failregex = ^\[\w{1,3} \w{1,3} \d{1,2} \d{1,2}:\d{1,2}:\d{1,2} \d{1,4}] \[error] \[client 195.140.144.30] File does not exist: \/.{1,20}\/(w00tw00t|wootwoot|WootWoot|WooTWooT).{1,250}
 ignoreregex =
Run Code Online (Sandbox Code Playgroud)

  • @SaifBechan,我不同意。w00tw00t 是一个漏洞扫描器,发出此类请求的机器不能被信任尝试其他类型的请求,所以如果我是系统管理员,一次要花 2 分钟时间禁止这些客户端几天,我会这样做。不过,我不会将我的整个安全实现建立在这种方法上。 (4认同)
  • 确实可以阻止它们,但没有必要,因为它们只是不好的请求。最好忽略它们,节省您的工作,您将释放一些资源。 (2认同)