AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 125607
Accepted
Saif Bechan
Saif Bechan
Asked: 2010-03-24 21:33:49 +0800 CST2010-03-24 21:33:49 +0800 CST 2010-03-24 21:33:49 +0800 CST

处理 HTTP w00tw00t 攻击

  • 772

我有一个带有 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:)

以下是 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 "-" "-" 

我尝试像这样配置 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:\)"

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:\)"

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

更新 1

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

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

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

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

更新 2

在仔细阅读答案后,我得出了以下结论。

  1. 为 apache 进行自定义日志记录会消耗一些不必要的资源,如果确实存在问题,您可能希望查看完整的日志而不会丢失任何内容。

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

关于这个主题的最后想法

如果你至少有一个最新的系统,上面提到的攻击不会到达你的机器,所以基本上不用担心。

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

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

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

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

apache-2.2 security spam
  • 11 11 个回答
  • 90684 Views

11 个回答

  • Voted
  1. Best Answer
    Imo
    2010-03-30T05:17:55+08:002010-03-30T05:17:55+08:00

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

    自己试试:

    远程登录主机名 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

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

    • 34
  2. Des
    2012-05-10T08:21:40+08:002012-05-10T08:21:40+08:00

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

    我是说:

    iptables -I INPUT -p tcp --dport 80 -m string --to 60 --algo bm --string 'GET /w00tw00t' -j DROP
    
    • 16
  3. Jackie Craig Sparks
    2011-08-20T09:46:50+08:002011-08-20T09:46:50+08:00

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

    下面是一个过滤器示例,该过滤器将阻止与发送这些消息相关的 IP 地址

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

     [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
    

    筛选

     # 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 =
    
    • 12
  4. PRW
    2011-06-02T03:20:19+08:002011-06-02T03:20:19+08:00

    w00tw00t.at.blackhats.romanian.anti-sec 是一次黑客攻击,并使用欺骗 IP,因此 VisualRoute 等查找将根据当时借调的 IP 报告中国、波兰、丹麦等。因此,设置拒绝 IP 或可解析的主机名几乎是不可能的,因为它会在一小时内改变。

    • 3
  5. Xorlev
    2010-03-24T23:06:01+08:002010-03-24T23:06:01+08:00

    我个人编写了一个 Python 脚本来自动添加 IPtables 规则。

    这是一个略带缩写的版本,没有记录和其他垃圾:

    #!/usr/bin/python
    from subprocess import *
    import re
    import shlex
    import sys
    
    def find_dscan():
            p1 = Popen(['tail', '-n', '5000', '/usr/local/apache/logs/error_log'], stdout=PIPE)
            p2 = Popen(['grep', 'w00t'], stdin=p1.stdout, stdout=PIPE)
    
            output = p2.communicate()[0].split('\n')
    
            ip_list = []
    
            for i in output:
                    result = re.findall(r"\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b", i)
                    if len(result):
                            ip_list.append(result[0])
    
            return set(ip_list)
    
    for ip in find_dscan():
            input = "iptables -A INPUT -s " + ip + " -j DROP"
            output = "iptables -A OUTPUT -d " + ip + " -j DROP"
            Popen(shlex.split(input))
            Popen(shlex.split(output))
    
    sys.exit(0)
    
    • 2
  6. hellomynameisjoel
    2010-03-31T03:09:33+08:002010-03-31T03:09:33+08:00

    我相信 mod_security 对您不起作用的原因是 Apache 无法自己解析请求,它们不符合规范。我不确定你这里有问题 - apache 正在记录网络上发生的奇怪的事情,如果它没有记录它,你甚至不会意识到它正在发生。记录请求所需的资源可能很少。我理解有人正在填写您的日志令人沮丧 - 但如果您禁用日志记录只是为了发现您确实需要它,那将更加令人沮丧。就像有人闯入您的网络服务器一样,您需要日志来显示他们是如何闯入的。

    一种解决方案是通过 syslog 设置 ErrorLogging,然后使用 rsyslog 或 syslog-ng,您可以专门过滤和丢弃这些有关 w00tw00t 的 RFC 违规。或者,您也可以将它们过滤到一个单独的日志文件中,这样您的主 ErrorLog 就易于阅读。Rsyslog 在这方面非常强大和灵活。

    所以在 httpd.conf 你可能会这样做:

    ErrorLog syslog:user 
    

    然后在 rsyslog.conf 你可能有:

    :msg, contains, "w00tw00t.at.ISC.SANS.DFind" /var/log/httpd/w00tw00t_attacks.log
    

    请注意,这种方法实际上会比最初直接使用日志记录到文件使用更多的资源。如果您的网络服务器非常繁忙,这可能会成为一个问题。

    最好的做法是尽快将所有日志发送到远程日志服务器,如果您被闯入,这将使您受益,因为擦除所做工作的审计跟踪要困难得多。

    IPTables 阻塞是一个想法,但您最终可能会得到一个非常大的 iptables 阻塞列表,它本身可能会对性能产生影响。IP 地址中是否存在某种模式,还是来自大型分布式僵尸网络?需要有 X% 的重复项才能从 iptables 中受益。

    • 2
  7. Imo
    2010-04-01T00:52:01+08:002010-04-01T00:52:01+08:00

    你在更新 2 中说:

    仍然存在的问题 仍然存在的问题如下。这些攻击来自在您的服务器上搜索某些文件的机器人。这个特定的扫描仪搜索文件 /w00tw00t.at.ISC.SANS.DFind:)。

    现在你可以忽略它,这是最推荐的。问题仍然存在,如果有一天你的服务器上确实有这个文件,你就有麻烦了。

    从我之前的回复中,我们了解到 Apache 由于 HTML 1.1 查询格式不正确而返回错误消息。所有支持 HTTP/1.1 的网络服务器在收到此消息时可能应该返回一个错误(我没有仔细检查 RFC - 也许 RFC2616 告诉我们)。

    拥有 w00tw00t.at.ISC.SANS.DFind: 在您的服务器上的某些地方并不神秘地意味着“您遇到了麻烦”...如果您在 DocumentRoot 甚至创建 w00tw00t.at.ISC.SANS.DFind: 文件DefaultDocumentRoot 没关系......扫描仪正在发送一个损坏的 HTTP/1.1 请求,而 apache 说“不,这是一个糟糕的请求......再见”。w00tw00t.at.ISC.SANS.DFind: 文件中的数据将不会被提供。

    在这种情况下不需要使用 mod_security ,除非您真的想要(没有意义?)......在这种情况下,您可以查看手动修补它(其他答案中的链接)。

    您可能会考虑使用的另一件事是 mod_security 中的 RBL 功能。也许有一个在线 RBL 提供 w00tw00t IP(或其他已知的恶意 IP)。然而,这意味着 mod_security 会为每个请求进行 DNS 查找。

    • 1
  8. Kreker
    2011-08-10T00:23:54+08:002011-08-10T00:23:54+08:00

    向 modsecurity 添加规则怎么样?像这样的东西:

       SecRule REQUEST_URI "@rx (?i)\/(php-?My-?Admin[^\/]*|mysqlmanager
       |myadmin|pma2005|pma\/scripts|w00tw00t[^\/]+)\/"
       "severity:alert,id:'0000013',deny,log,status:400,
       msg:'Unacceptable folder.',severity:'2'"
    
    • 1
  9. Milan
    2014-10-09T10:10:16+08:002014-10-09T10:10:16+08:00

    我看到上面已经介绍了大多数解决方案,但是我想指出,并非所有客户端发送的没有主机名攻击的 HTTP/1.1 请求都直接针对您的服务器。有许多不同的尝试来指纹和/或利用您的服务器之前的网络系统,即使用:

    client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /tmUnblock.cgi
    

    以 Linksys 路由器等为目标。因此,有时它有助于扩大您的注意力,并在所有系统之间平分防御工作,即:实施路由器规则,实施防火墙规则(希望您的网络有一个),实施服务器防火墙/IP 表规则和相关服务,即 mod_security、fail2ban 等。

    • 1
  10. Urbach-Webhosting
    2016-03-02T12:42:58+08:002016-03-02T12:42:58+08:00

    这个怎么样 ?

    iptables -I INPUT -p tcp --dport 80 -m string --to 70 --algo bm --string 'GET /w00tw00t.at.ISC.SANS.DFind' -j DROP
    iptables -I INPUT -p tcp --dport 80 -m string --to 70 --algo bm --string 'GET /w00tw00t.at.ISC.SANS.DFind' -j LOG --log-level 4 --log-prefix Hacktool.DFind:DROP:
    

    对我来说很好。

    • 1

相关问题

  • 在 Linux Xen VPS 上优化 Apache 和 MySQL

  • 从多个位置保护远程服务器/工具访问的最佳方法是什么?

  • 在 SOHO 环境中实施的最佳 VPN 技术是什么?[关闭]

  • mod_rewrite 不转发 GET 参数

  • 保护新的 Ubuntu 服务器 [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve