拒绝服务(DOS)专区[不断更新]
[img=740,108]http://netsecurity.51cto.com/images/dos/top_1.gif[/img][size=4][color=red][/color][/size]
[size=4] [size=3] 5.1假期结束了,又投入到了忙碌而充实的工作当中,从今天开始,我们将对DOS拒绝服务攻击进行一个系统化的介绍,让大家对这种攻击有更好的认识,从而加强防范,减少DOS(DDOS)给我们带来的损失![/size][/size]
[size=4][color=red][b]原理篇:[/b][/color][/size]
什么是拒绝服务攻击(DOS)
DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求就无法通过。连通性攻击指用大量的连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。
什么是分布式拒绝服务攻击(DDOS)
分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DoS攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在Internet上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。 DDOS攻击概念
DoS的攻击方式有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。
DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等等各项性能指标不高它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS攻击的困难程度加大了-目标对恶意攻击包的"消化能力"加强了不少,例如你的攻击软件每秒钟可以发送3,000个攻击包,但我的主机与网络带宽每秒钟可以处理10,000个攻击包,这样一来攻击就不会产生什么效果。
这时侯分布式的拒绝服务攻击手段(DDoS)就应运而生了。你理解了DoS攻击的话,它的原理就很简单。如果说计算机与网络的处理能力加大了10倍,用一台攻击机来攻击不再能起作用的话,攻击者使用10台攻击机同时攻击呢?用100台呢?DDoS就是利用更多的傀儡机来发起进攻,以比从前更大的规模来进攻受害者。
高速广泛连接的网络给大家带来了方便,也为DDoS攻击创造了极为有利的条件。在低速网络时代时,黑客占领攻击用的傀儡机时,总是会优先考虑离目标网络距离近的机器,因为经过路由器的跳数少,效果好。而现在电信骨干节点之间的连接都是以G为级别的,大城市之间更可以达到2.5G的连接,这使得攻击可以从更远的地方或者其他城市发起,攻击者的傀儡机位置可以在分布在更大的范围,选择起来更灵活了。
被DDoS攻击时的现象
1.被攻击主机上有大量等待的TCP连接
2.网络中充斥着大量的无用的数据包,源地址为假
3.制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯
4.利用受害主机提供的服务或传输协议上的缺陷,反复高速的发出特定的服务请求,使受害主机无法及时处理所有正常请求
5.严重时会造成系统死机
DDoS攻击对Web站点的影响
当对一个Web站点执行 DDoS 攻击时,这个站点的一个或多个Web服务会接到非常多的请求,最终使它无法再正常使用。在一个DDoS攻击期间,如果有一个不知情的用户发出了正常的页面请求,这个请求会完全失败,或者是页面下载速度变得极其缓慢,看起来就是站点无法使用。典型的DDoS攻击利用许多计算机同时对目标站点发出成千上万个请求。为了避免被追踪,攻击者会闯进网上的一些无保护的计算机内,在这些计算机上藏匿DDoS程序,将它们作为同谋和跳板,最后联合起来发动匿名攻击。
[[i] 本帖最后由 richardlee 于 2008-7-3 12:04 编辑 [/i]]
分布式拒绝服务攻击(DDoS)原理及防范
DoS的攻击方式有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等等各项性能指标不高它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS攻击的困难程度加大了 - 目标对恶意攻击包的"消化能力"加强了不少,例如你的攻击软件每秒钟可以发送3,000个攻击包,但我的主机与网络带宽每秒钟可以处理10,000个攻击包,这样一来攻击就不会产生什么效果。
这时侯分布式的拒绝服务攻击手段(DDoS)就应运而生了。你理解了DoS攻击的话,它的原理就很简单。如果说计算机与网络的处理能力加大了10倍,用一台攻击机来攻击不再能起作用的话,攻击者使用10台攻击机同时攻击呢?用100台呢?DDoS就是利用更多的傀儡机来发起进攻,以比从前更大的规模来进攻受害者。
高速广泛连接的网络给大家带来了方便,也为DDoS攻击创造了极为有利的条件。在低速网络时代时,黑客占领攻击用的傀儡机时,总是会优先考虑离目标网络距离近的机器,因为经过路由器的跳数少,效果好。而现在电信骨干节点之间的连接都是以G为级别的,大城市之间更可以达到2.5G的连接,这使得攻击可以从更远的地方或者其他城市发起,攻击者的傀儡机位置可以在分布在更大的范围,选择起来更灵活了。
[color=#000000]被DDoS攻击时的现象[/color]
[list][*]被攻击主机上有大量等待的TCP连接[*]网络中充斥着大量的无用的数据包,源地址为假[*]制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯[*]利用受害主机提供的服务或传输协议上的缺陷,反复高速的发出特定的服务请求,使受害主机无法及时处理所有正常请求[*]严重时会造成系统死机[/list]
[color=#000000]攻击运行原理[/color]
[img=528,503]http://www-128.ibm.com/developerworks/cn/security/se-ddos/fig1.gif[/img]
如图一,一个比较完善的DDoS攻击体系分成四大部分,先来看一下最重要的第2和第3部分:它们分别用做控制和实际发起攻击。请注意控制机与攻击机的区别,对第4部分的受害者来说,DDoS的实际攻击包是从第3部分攻击傀儡机上发出的,第2部分的控制机只发布命令而不参与实际的攻击。对第2和第3部分计算机,黑客有控制权或者是部分的控制权,并把相应的DDoS程序上传到这些平台上,这些程序与正常的程序一样运行并等待来自黑客的指令,通常它还会利用各种手段隐藏自己不被别人发现。在平时,这些傀儡机器并没有什么异常,只是一旦黑客连接到它们进行控制,并发出指令的时候,攻击傀儡机就成为害人者去发起攻击了。
有的朋友也许会问道:"为什么黑客不直接去控制攻击傀儡机,而要从控制傀儡机上转一下呢?"。这就是导致DDoS攻击难以追查的原因之一了。做为攻击者的角度来说,肯定不愿意被捉到(我在小时候向别人家的鸡窝扔石头的时候也晓得在第一时间逃掉,呵呵),而攻击者使用的傀儡机越多,他实际上提供给受害者的分析依据就越多。在占领一台机器后,高水平的攻击者会首先做两件事:1. 考虑如何留好后门(我以后还要回来的哦)!2. 如何清理日志。这就是擦掉脚印,不让自己做的事被别人查觉到。比较不敬业的黑客会不管三七二十一把日志全都删掉,但这样的话网管员发现日志都没了就会知道有人干了坏事了,顶多无法再从日志发现是谁干的而已。相反,真正的好手会挑有关自己的日志项目删掉,让人看不到异常的情况。这样可以长时间地利用傀儡机。
但是在第3部分攻击傀儡机上清理日志实在是一项庞大的工程,即使在有很好的日志清理工具的帮助下,黑客也是对这个任务很头痛的。这就导致了有些攻击机弄得不是很干净,通过它上面的线索找到了控制它的上一级计算机,这上级的计算机如果是黑客自己的机器,那么他就会被揪出来了。但如果这是控制用的傀儡机的话,黑客自身还是安全的。控制傀儡机的数目相对很少,一般一台就可以控制几十台攻击机,清理一台计算机的日志对黑客来讲就轻松多了,这样从控制机再找到黑客的可能性也大大降低。
[color=#000000]黑客是如何组织一次DDoS攻击的?[/color]
这里用"组织"这个词,是因为DDoS并不象入侵一台主机那样简单。一般来说,黑客进行DDoS攻击时会经过这样的步骤:
[b]1. 搜集了解目标的情况[/b]
下列情况是黑客非常关心的情报: [list][*]被攻击目标主机数目、地址情况[*]目标主机的配置、性能[*]目标的带宽[/list]
对于DDoS攻击者来说,攻击互联网上的某个站点,如[url]http://www.mytarget.com[/url],有一个重点就是确定到底有多少台主机在支持这个站点,一个大的网站可能有很多台主机利用负载均衡技术提供同一个网站的www服务。以yahoo为例,一般会有下列地址都是提供[url]http://www.yahoo.com[/url]服务的:
66.218.71.87
66.218.71.88
66.218.71.89
66.218.71.80
66.218.71.81
66.218.71.83
66.218.71.84
66.218.71.86
如果要进行DDoS攻击的话,应该攻击哪一个地址呢?使66.218.71.87这台机器瘫掉,但其他的主机还是能向外提供www服务,所以想让别人访问不到[url]http://www.yahoo.com[/url]的话,要所有这些IP地址的机器都瘫掉才行。在实际的应用中,一个IP地址往往还代表着数台机器:网站维护者使用了四层或七层交换机来做负载均衡,把对一个IP地址的访问以特定的算法分配到下属的每个主机上去。这时对于DDoS攻击者来说情况就更复杂了,他面对的任务可能是让几十台主机的服务都不正常。
所以说事先搜集情报对DDoS攻击者来说是非常重要的,这关系到使用多少台傀儡机才能达到效果的问题。简单地考虑一下,在相同的条件下,攻击同一站点的2台主机需要2台傀儡机的话,攻击5台主机可能就需要5台以上的傀儡机。有人说做攻击的傀儡机越多越好,不管你有多少台主机我都用尽量多的傀儡机来攻就是了,反正傀儡机超过了时候效果更好。
但在实际过程中,有很多黑客并不进行情报的搜集而直接进行DDoS的攻击,这时候攻击的盲目性就很大了,效果如何也要靠运气。其实做黑客也象网管员一样,是不能偷懒的。一件事做得好与坏,态度最重要,水平还在其次。
[b]2. 占领傀儡机[/b]
黑客最感兴趣的是有下列情况的主机: [list][*]链路状态好的主机[*]性能好的主机[*]安全管理水平差的主机[/list]
这一部分实际上是使用了另一大类的攻击手段:利用形攻击。这是和DDoS并列的攻击方式。简单地说,就是占领和控制被攻击的主机。取得最高的管理权限,或者至少得到一个有权限完成DDoS攻击任务的帐号。对于一个DDoS攻击者来说,准备好一定数量的傀儡机是一个必要的条件,下面说一下他是如何攻击并占领它们的。
首先,黑客做的工作一般是扫描,随机地或者是有针对性地利用扫描器去发现互联网上那些有漏洞的机器,象程序的溢出漏洞、cgi、Unicode、ftp、数据库漏洞…(简直举不胜举啊),都是黑客希望看到的扫描结果。随后就是尝试入侵了,具体的手段就不在这里多说了,感兴趣的话网上有很多关于这些内容的文章。
总之黑客现在占领了一台傀儡机了!然后他做什么呢?除了上面说过留后门擦脚印这些基本工作之外,他会把DDoS攻击用的程序上载过去,一般是利用ftp。在攻击机上,会有一个DDoS的发包程序,黑客就是利用它来向受害目标发送恶意攻击包的。
[b]3. 实际攻击[/b]
经过前2个阶段的精心准备之后,黑客就开始瞄准目标准备发射了。前面的准备做得好的话,实际攻击过程反而是比较简单的。就象图示里的那样,黑客登录到做为控制台的傀儡机,向所有的攻击机发出命令:"预备~ ,瞄准~,开火!"。这时候埋伏在攻击机中的DDoS攻击程序就会响应控制台的命令,一起向受害主机以高速度发送大量的数据包,导致它死机或是无法响应正常的请求。黑客一般会以远远超出受害方处理能力的速度进行攻击,他们不会"怜香惜玉"。
老到的攻击者一边攻击,还会用各种手段来监视攻击的效果,在需要的时候进行一些调整。简单些就是开个窗口不断地ping目标主机,在能接到回应的时候就再加大一些流量或是再命令更多的傀儡机来加入攻击。
[color=#000000]DDoS攻击实例 - SYN Flood攻击[/color]
SYN-Flood是目前最流行的DDoS攻击手段,早先的DoS的手段在向分布式这一阶段发展的时候也经历了浪里淘沙的过程。SYN-Flood的攻击效果最好,应该是众黑客不约而同选择它的原因吧。那么我们一起来看看SYN-Flood的详细情况。
[b]Syn Flood原理 - 三次握手[/b]
Syn Flood利用了TCP/IP协议的固有漏洞。面向连接的TCP三次握手是Syn Flood存在的基础。
[b]TCP连接的三次握手[/b]
[img=434,220]http://www-128.ibm.com/developerworks/cn/security/se-ddos/fig2.gif[/img]
图二 TCP三次握手
如图二,在第一步中,客户端向服务端提出连接请求。这时TCP SYN标志置位。客户端告诉服务端序列号区域合法,需要检查。客户端在TCP报头的序列号区中插入自己的ISN。服务端收到该TCP分段后,在第二步以自己的ISN回应(SYN标志置位),同时确认收到客户端的第一个TCP分段(ACK标志置位)。在第三步中,客户端确认收到服务端的ISN(ACK标志置位)。到此为止建立完整的TCP连接,开始全双工模式的数据传输过程。
[b]Syn Flood攻击者不会完成三次握手[/b]
[img=458,211]http://www-128.ibm.com/developerworks/cn/security/se-ddos/fig3.gif[/img]
图三 Syn Flood恶意地不完成三次握手
假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃---即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况我们称做:服务器端受到了SYN Flood攻击(SYN洪水攻击)。
下面是我在实验室中模拟的一次Syn Flood攻击的实际过程
这一个局域网环境,只有一台攻击机(PIII667/128/mandrake),被攻击的是一台Solaris 8.0 (spark)的主机,网络设备是Cisco的百兆交换机。这是在攻击并未进行之前,在Solaris上进行snoop的记录,snoop与tcpdump等网络监听工具一样,也是一个很好的网络抓包与分析的工具。可以看到攻击之前,目标主机上接到的基本上都是一些普通的网络包。
[table=98%,#cccccc][tr][td][align=left]…… ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes ? -> (multicast) ETHER Type=0000 (LLC/802.3), size = 52 bytes ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes192.168.0.66 -> 192.168.0.255 NBT Datagram Service Type=17 Source=GU[0]192.168.0.210 -> 192.168.0.255 NBT Datagram Service Type=17 Source=ROOTDC[20]192.168.0.247 -> 192.168.0.255 NBT Datagram Service Type=17 Source=TSC[0] ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes192.168.0.200 -> (broadcast) ARP C Who is 192.168.0.102, 192.168.0.102 ? ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes192.168.0.66 -> 192.168.0.255 NBT Datagram Service Type=17 Source=GU[0]192.168.0.66 -> 192.168.0.255 NBT Datagram Service Type=17 Source=GU[0]192.168.0.210 -> 192.168.0.255 NBT Datagram Service Type=17 Source=ROOTDC[20] ? -> (multicast) ETHER Type=0000 (LLC/802.3), size = 52 bytes ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes……[/align][/td][/tr][/table]接着,攻击机开始发包,DDoS开始了…,突然间sun主机上的snoop窗口开始飞速地翻屏,显示出接到数量巨大的Syn请求。这时的屏幕就好象是时速300公里的列车上的一扇车窗。这是在Syn Flood攻击时的snoop输出结果:
[table=98%,#cccccc][tr][td][align=left]…… 127.0.0.178 -> lab183.lab.net AUTH C port=1352 127.0.0.178 -> lab183.lab.net TCP D=114 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=115 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net UUCP-PATH C port=1352 127.0.0.178 -> lab183.lab.net TCP D=118 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net NNTP C port=1352 127.0.0.178 -> lab183.lab.net TCP D=121 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=122 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=124 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=125 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=126 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=128 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=130 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=131 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=133 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=135 S=1352 Syn Seq=674711609 Len=0 Win=65535……[/align][/td][/tr][/table]这时候内容完全不同了,再也收不到刚才那些正常的网络包,只有DDoS包。大家注意一下,这里所有的Syn Flood攻击包的源地址都是伪造的,给追查工作带来很大困难。这时在被攻击主机上积累了多少Syn的半连接呢?我们用netstat来看一下:
[font=新宋体]# netstat -an | grep SYN[/font] [table=98%,#cccccc][tr][td]……192.168.0.183.9 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.13 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.19 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.21 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.22 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.23 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.25 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.37 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.53 127.0.0.79.1801 0 0 24656 0 SYN_RCVD……[/td][/tr][/table]其中SYN_RCVD表示当前未完成的TCP SYN队列,统计一下:
[font=新宋体]# netstat -an | grep SYN | wc -l
5273
# netstat -an | grep SYN | wc -l
5154
# netstat -an | grep SYN | wc -l
5267
….. [/font]
共有五千多个Syn的半连接存储在内存中。这时候被攻击机已经不能响应新的服务请求了,系统运行非常慢,也无法ping通。
这是在攻击发起后仅仅70秒钟左右时的情况。
[color=#000000]DDoS的防范[/color]
到目前为止,进行DDoS攻击的防御还是比较困难的。首先,这种攻击的特点是它利用了TCP/IP协议的漏洞,除非你不用TCP/IP,才有可能完全抵御住DDoS攻击。一位资深的安全专家给了个形象的比喻:DDoS就好象有1,000个人同时给你家里打电话,这时候你的朋友还打得进来吗?
不过即使它难于防范,也不是说我们就应该逆来顺受,实际上防止DDoS并不是绝对不可行的事情。互联网的使用者是各种各样的,与DDoS做斗争,不同的角色有不同的任务。我们以下面几种角色为例: [list][*]企业网管理员[*]ISP、ICP管理员[*]骨干网络运营商[/list]
[color=#000000]企业网管理员[/color]
网管员做为一个企业内部网的管理者,往往也是安全员、守护神。在他维护的网络中有一些服务器需要向外提供WWW服务,因而不可避免地成为DDoS的攻击目标,他该如何做呢?可以从主机与网络设备两个角度去考虑。
[b]主机上的设置[/b]
几乎所有的主机平台都有抵御DoS的设置,总结一下,基本的有几种: [list][*]关闭不必要的服务[*]限制同时打开的Syn半连接数目[*]缩短Syn半连接的time out 时间[*]及时更新系统补丁[/list]
[b]网络设备上的设置[/b]
企业网的网络设备可以从防火墙与路由器上考虑。这两个设备是到外界的接口设备,在进行防DDoS设置的同时,要注意一下这是以多大的效率牺牲为代价的,对你来说是否值得。
1.防火墙 [list][*]禁止对主机的非开放服务的访问[*]限制同时打开的SYN最大连接数[*]限制特定IP地址的访问[*]启用防火墙的防DDoS的属性[*]严格限制对外开放的服务器的向外访问[/list]
第五项主要是防止自己的服务器被当做工具去害人。
2.路由器
以Cisco路由器为例 [list][*]Cisco Express Forwarding(CEF)[*]使用 unicast reverse-path[*]访问控制列表(ACL)过滤[*]设置SYN数据包流量速率[*]升级版本过低的ISO[*]为路由器建立log server[/list]
其中使用CEF和Unicast设置时要特别注意,使用不当会造成路由器工作效率严重下降,升级IOS也应谨慎。路由器是网络的核心设备,与大家分享一下进行设置修改时的小经验,就是先不保存。Cisco路由器有两份配置startup config和running config,修改的时候改变的是running config,可以让这个配置先跑一段时间(三五天的就随意啦),觉得可行后再保存配置到startup config;而如果不满意想恢复原来的配置,用copy start run就行了。
[color=#000000]ISP / ICP管理员[/color]
ISP / ICP为很多中小型企业提供了各种规模的主机托管业务,所以在防DDoS时,除了与企业网管理员一样的手段外,还要特别注意自己管理范围内的客户托管主机不要成为傀儡机。客观上说,这些托管主机的安全性普遍是很差的,有的连基本的补丁都没有打就赤膊上阵了,成为黑客最喜欢的"肉鸡",因为不管这台机器黑客怎么用都不会有被发现的危险,它的安全管理太差了;还不必说托管的主机都是高性能、高带宽的-简直就是为DDoS定制的。而做为ISP的管理员,对托管主机是没有直接管理的权力的,只能通知让客户来处理。在实际情况时,有很多客户与自己的托管主机服务商配合得不是很好,造成ISP管理员明知自己负责的一台托管主机成为了傀儡机,却没有什么办法的局面。而托管业务又是买方市场,ISP还不敢得罪客户,怎么办?咱们管理员和客户搞好关系吧,没办法,谁让人家是上帝呢?呵呵,客户多配合一些,ISP的主机更安全一些,被别人告状的可能性也小一些。
[color=#000000]骨干网络运营商[/color]
他们提供了互联网存在的物理基础。如果骨干网络运营商可以很好地合作的话,DDoS攻击可以很好地被预防。在2000年yahoo等知名网站被攻击后,美国的网络安全研究机构提出了骨干运营商联手来解决DDoS攻击的方案。其实方法很简单,就是每家运营商在自己的出口路由器上进行源IP地址的验证,如果在自己的路由表中没有到这个数据包源IP的路由,就丢掉这个包。这种方法可以阻止黑客利用伪造的源IP来进行DDoS攻击。不过同样,这样做会降低路由器的效率,这也是骨干运营商非常关注的问题,所以这种做法真正采用起来还很困难。
对DDoS的原理与应付方法的研究一直在进行中,找到一个既有效又切实可行的方案不是一朝一夕的事情。但目前我们至少可以做到把自己的网络与主机维护好,首先让自己的主机不成为别人利用的对象去攻击别人;其次,在受到攻击的时候,要尽量地保存证据,以便事后追查,一个良好的网络和日志系统是必要的。无论DDoS的防御向何处发展,这都将是一个社会工程,需要IT界的同行们来一起关注,通力合作。
[color=#000000]参考资料 [/color][list][*][url=http://staff.washington.edu/dittrich/misc/ddos/][color=#0000ff]http://staff.washington.edu/dittrich/misc/ddos/[/color][/url][/list]
[table=98%][tr][td]关于作者
徐一丁,北京玛赛网络系统有限公司方案设计部高级工程师,从事IT工作多年。目前主要进行国内外安全产品评测与黑客攻击的研究。有丰富的网络安全设计与实施经验,并给各大电信公司如中国电信、吉通公司、联通公司等进行过系列安全培训。[/td][/tr][/table] 攻击工具分析
前段时间,好几个同事向我要DDOS测试工具,用于测试IPS的性能,其实DoS的工具还是不少的,不过总是不大好用,偶常常在点击了“攻击”之后扭头看我身后倒霉的兄弟,可是往往效果不佳,并且使用起来也不爽。为此,一向以界面友好、使用方便著称的微软公司为我们带来了Web Application Stress——一款优秀的WEB应用程序压力测试工具!
认识一下Web Application Stress先:
[align=center][img]http://netsecurity.51cto.com/files/uploadimg/20060904/1754210.jpg[/img][/align]
非常熟悉的界面吧?绝对和我们平时使用应用程序的界面一样简介明了。看到了?Server处写上我们要测试的WEB服务器地址,Notes我不说什么了,如果不明白自己去查金山词霸 ^_^ 在界面的下面添写你要测试的页面地址。比如说对方的首页是index.asp你就可以写这个,当然也可以是default.htm或者别的什么,我们也可以一次测试几个页面,只要多添写几个页面就可以了。
看下软件设置(Settings):
[align=center][img]http://netsecurity.51cto.com/files/uploadimg/20060904/1754211.jpg[/img][/align]
Stress level这里写上你要进行的压力级别,也就是线程,可以写500,可以写1000。当然别的数字也可以。不过不要太贪心,偶曾经一时发晕写上个99999,结果机器立马变慢、变慢,最后终于蓝屏死掉了。所以在hack人家之前要考虑好自己机器的承受能力。^_^
Test Run Time这里写上要测试的时间,一般的压力测试不用太久,当然如果是DoS时间就要长一些,完全取决于你想对这个网站做什么了。
其它选项我们用默认的就可以了。比如我们想测试一下192.168.10.168的WEB服务器,我知道那边装了一个论坛,首页是index.asp,就在服务器地址那里写上192.168.10.168,调用的页面是index.asp,之后选上1000个线程,开始测试。
我们到被测试的机器上可以看到:
[align=center][img]http://netsecurity.51cto.com/files/uploadimg/20060904/1754212.jpg[/img][/align]
IIS进程占用了CPU的97%,很可观的数字哦!再看看“性能”部分:
[align=center][img]http://netsecurity.51cto.com/files/uploadimg/20060904/1754213.jpg[/img][/align]
自从开了Web Applacation Stress之后机器性能急剧下降,CPU占用率将近100%,内存使用也有所上升,并且,这时候再访问192.168.10.168的论坛的时候已经很慢了,并且有连接不上的情况出现。
接下来,我们用Sniffer Pro抓包:
[align=center][img]http://netsecurity.51cto.com/files/uploadimg/20060904/1754214.jpg[/img][/align]
可以看到,从我的机器192.168.10.203发往被测试机192.168.10.168的数据包占用了被测试机99.76%的数据流量,不能不说效果“非常明显”,而着,我仅仅用了我一台机器进行测试,并且只是开了1000个线程,我这边的机器照用不误呢!
接下来,我测试了某个主机供应商的主机,因为一般出售虚拟主机的地方,对某个虚拟主机的CPU占用都有分配的,一般是2-3%,这样我们只要用一台机器对网站进行“压力测试”就足以让供应商关闭这个站点了。是不是很恐怖?
出于效果的考虑,在测试的时候尽量选用PHP或ASP的页面进行测试,因为这样的页面是在服务器端执行的,对服务器压力最大!并且最好找页面比较大的,如果能找到一个调用数据库的页面更好,这样同时调用数据库,更加大了服务器的负担,相信一会儿服务器就会挂掉!
本文的测试仅供网站管理员测试服务器性能,请勿用文中方法攻击合法的服务器!本文作者和《黑客X档案》不对因本文引起的任何事件负责!
[url=http://www.microsoft.com/downloads/details.aspx?FamilyID=e2c0585a-062a-439e-a67d-75a89aa36495&displaylang=en][color=Red]软件下载地址[/color][/url]
[[i] 本帖最后由 richardlee 于 2008-5-23 16:58 编辑 [/i]] 防御工具分析
常见DDOS攻击过程
[table=98%][tr][td] [/td][/tr][tr][td][align=center][img=397,361]http://www.1rmb.com/UploadFile/200801/28/2C5118996.gif[/img][/align][b]1.填写被攻击者 IP 地址,(可填域名):[/b] [align=center][img=397,361]http://www.1rmb.com/UploadFile/200801/28/CF5118133.gif[/img][/align][b]2.选择哪种攻击方式: 如图上面显示七种攻击方式3 .填写攻击对方服务器端口
4 .填写伪造攻击者 IP 地址来源。
5 .伪造填写造原端口[/b] [align=center][img=447,298]http://www.1rmb.com/UploadFile/200801/28/925118506.gif[/img][/align][b]6.选择多种 DDOS 组合攻击受害者服务器[/b] [align=center][img=480,507]http://www.1rmb.com/UploadFile/200801/28/0C5118974.gif[/img][/align][b]结果 : 受害者网站无法正常访问:[/b] [align=center][img=510,400]http://www.1rmb.com/UploadFile/200801/28/2B5118471.gif[/img][/align][b]防御措施:安装X[url=http://www.1rmb.com/DdosFangHuoQiang/][color=#0000ff]DDOS防火墙[/color][/url][/b] [align=center][img=510,380]http://www.1rmb.com/UploadFile/200801/28/2B5118311.gif[/img][/align][b]X[url=http://www.1rmb.com/DdosFangHuoQiang/][color=#0000ff]DDOS防火墙[/color][/url]安装过程[/b] [align=center][img=510,300]http://www.1rmb.com/UploadFile/200801/28/0B5118663.jpg[/img][/align][align=left][b]安装后的天盾防火墙网络状态和任务管理器参数对比[/b][/align] 进入2000年以来,网络遭受攻击事件不断发生,全球许多著名网站如新浪,腾讯,yahoo 、cnn、buy、ebay、fbi, 以往常常采用的只通过更改主页对网站有限破坏的做法。现在 , 取而代之的是,在一定时间内,[url=http://www.1rmb.com/DdosGongJi/][color=#800080]DDOS攻击[/color][/url]彻底使被攻击的网络丧失正常服务功能。 [url=http://www.1rmb.com/DdosGongJi/][color=#800080]DDOS攻击[/color][/url]正逐渐给我们带来新一轮的网络灾难 !
[/td][/tr][/table]
[[i] 本帖最后由 richardlee 于 2008-7-4 09:40 编辑 [/i]] [size=4][color=red][b]防范宝典[/b][/color][/size]
[b][size=4][color=#ff0000][/color][/size][/b]
[color=royalblue][b]小规模DDoS(拒绝服务)用Freebsd+IPFW搞定[/b][/color]
笔者公司共有10台Web服务器,使用Redhat Linux 9作为操作系统,分布在全国各大城市,主要为用户提供HTTP服务。曾经有一段时间不少用户反映有的服务器访问速度缓慢,甚至不能访问,检查后发现是受到了DDoS攻击(分布式拒绝服务攻击)。由于服务器分布太散,不能采用硬件防火墙的方案,虽然IPtables功能很强大,足以应付大部分的攻击,但Linux系统自身对DDoS攻击的防御力本来就弱,只好另想办法了。
一、Freebsd的魅力
发现Freebsd的好处是在一次偶然的测试中,在LAN里虚拟了一个Internet,用一台Windows客户端分别向一台Windows Server、Linux Server和一台Freebsd在无任何防范措施的情况下发送Syn Flood数据包(常见的DDoS攻击主要靠向服务器发送Syn Flood数据完成)。Windows在达到10个包的时候就完全停止响应了,Linux在达到10个数据包的时候开始连接不正常,而Freebsd却能承受达100个以上的Syn Flood数据包。笔者决定将公司所有的Web服务器全换为Freebsd平台。
在使用Freebsd后,的确过了一段时间的安稳日子。不过近日又有用户再次反映网站不能正常访问,表现症状为用户打开网页速度缓慢,或者直接显示为找不到网站。用netstat ?a查看到来自某IP的连接刚好50个,状态均为FIN_WAIT 1,这是属于明显的DDoS攻击,看来Freebsd没有防火墙也不是万能的啊,于是就想到了装防火墙。
看了N多资料,了解到Freebsd下最常见的防火墙叫IP FireWall,中文字面意思叫IP防火墙,简称IPFW。但如果要使用IPFW则需要编译Freebsd系统内核。出于安全考虑,在编译结束后,IPFW是默认拒绝所有网络服务,包括对系统本身都会拒绝,这下我就彻底“寒”了,我放在外地的服务器可怎么弄啊?
大家这里一定要小心,配置稍不注意就可能让你的服务器拒绝所有的服务。笔者在一台装了Freebsd 5.0 Release的服务器上进行了测试。
二、配置IPFW
其实我们完全可以把安装IPFW看作一次软件升级的过程,在Windows里面,如果要升级一款软件,则需要去下载升级包,然后安装;在Freebsd中升级软件过程也是如此,但我们今天升级的这个功能是系统本身已经内置了的,我们只需要利用这个功能即可。打开这个功能之前,我们还要做一些准备工作。
下面开始配置IPFW的基本参数。
Step1:准备工作
在命令提示符下进行如下操作:
#cd /sys/i386/conf
如果提示没有这个目录,那说明你的系统没有安装ports服务,要记住装上。
#cp GENERIC ./kernel_IPFW
Step2:内核规则
用编辑器打开kernel_IPFW这个文件,在该文件的末尾加入以下四行内容:
options IPFIREWALL
将包过滤部分的代码编译进内核。
options IPFIREWALL_VERBOSE
启用通过Syslogd记录的日志;如果没有指定这个选项,即使你在过滤规则中指定了记录包,也不会真的记录它们。
options IPFIREWALL_VERBOSE_LI
MIT=10
限制通过Syslogd记录的每项包规则的记录条数。如果你受到了大量的攻击,想记录防火墙的活动,但又不想由于Syslog洪水一般的记录而导致你的日记写入失败,那么这个选项将会很有用。有了这条规则,当规则链中的某一项达到限制数值时,它所对应的日志将不再记录。
options IPFIREWALL_DEFAULT_TO
_ACCEPT
这句是最关键的。将把默认的规则动作从 “deny” 改为 “allow”。这句命令的作用是,在默认状态下,IPFW会接受任何的数据,也就是说服务器看起来像没有防火墙一样,如果你需要什么规则,在安装完成后直接添加就可以了。
输入完成后保存kernel_IPFW文件并退出。
三、编译系统内核
由于Freebsd和Linux一样,都是公开源代码的操作系统,不像Windows那样代码是封装了的,出了问题我们只能猜测,或者咨询微软公司;由于Freebsd系统内核在不断升级,我们为了使用新版本中的功能,或者定制一个更高效、更稳定的系统,通常需要编译系统内核。
当然,我们在这里编译内核,是为了能得到一个更高效的系统,而不是使用新版本的功能;
在编译的过程中,可能会提示一些错误,为了尽可能减少错误提示,我们已将配置文件缩减到了最少,如果再出现什么错误提示,请仔细检查是否有输入错误等细小问题。
Step1:编译所需的命令
在命令行上执行如下命令:
#/usr/sbin/config kernel_IPFW
执行结束后会出现如下提示:Kernel build directory is ../compile/kernel_IPFW Don`t forget to do a make depend`
#cd ../compile/kernel_IPFW
在这个地方注意一下,Freebsd 4.X版本是../../compile/kernel_IPFW,但Freebsd 5.0版本却是../compile/kernel_IPFW。
#make
#make install
Step2:开始编译内核
根据系统性能差异,时间也有不同,普通双P4 XEON 1GB内存的服务器大约5分钟左右即可完成。
四、加载启动项
编译完成了,我们要让系统自动启动IPFW并记录日志,需要进行如下操作:
Step1:编辑器编辑/etc/rc.conf
加入如下参数:
firewall_enable=`YES`
激活Firewall防火墙
firewall_script=`/etc/rc.firewall`
Firewall防火墙的默认脚本
firewall_type=`/etc/ipfw.conf`
Firewall自定义脚本
firewall_quiet=`NO`
启用脚本时,是否显示规则信息;假如你的防火墙脚本已经不会再有修改,那么就可以把这里设置成“YES”了。
firewall_logging_enable=`YES`
启用Firewall的Log记录
Step2:编辑/etc/syslog.conf文件
在文件最后加入如下内容:
!ipfw
*.* /var/log/ipfw.log
这行的作用是将IPFW的日志写到/var/log/ipfw.log文件里,当然,你也可以为日志文件指定其他目录。
以上步骤完成后重启电脑。
五、使用并保存规则
完成后,你就会发现你能用SSH登录你的远程服务器了。
Step1:测试
刚登录的时候你不会发现你的系统发生了什么变化,但你可以试试以下这个命令:#ipfw show,
将输出以下结果:65535 322 43115 allow ip from any to any。它告诉我们,IPFW已经成功启用,而且允许任何的连接。
Step2:使用
在命令提示符下输入如下命令:#ipfw add 10001 deny all from 218.249.20.135 to any。
拒绝来自218.249.20.135的任何服务,执行完成后,你就会发现来自IP218.249.20.135的所有服务都会被拒绝。
Step3:保存
把这句代码加在/etc/rc.firewall文件里:ipfw add 10001 deny all from 218.249.20.135 to any,
运行如下这个命令:#sh /etc/rc.firew
all
表示保存到rc.firewall里面时,不需要前面的#号,然后重新载入IPFW规则。
或者重启一次你的系统,你的IPFW就生效了,只要你不手动解除,来自218.249.20.135的所有信息全部都会被拒绝。
[[i] 本帖最后由 richardlee 于 2008-5-8 21:38 编辑 [/i]] 都是空的,建议加精,置顶 这个帖子不错,不过要记得及时更新啊.目前好像也没有什么好的方法防范DDOS,Cisco的Gard不错,但是好贵。听说你们Topsec也有防DDOS的产品,功能如何啊?
[[i] 本帖最后由 xss 于 2008-5-8 21:14 编辑 [/i]]
针对DDOS攻击部署防御措施 网络安全新举措
DDoS攻击的主要手段是通过大于管道处理能力的流量淹没管道或通过超过处理能力的任务使系统瘫痪,所以理论上只要攻击者能够获得比目标更强大的“动力”,目标是注定会被攻陷的。对于DDoS攻击来说并没有100%有效的防御手段。但是由于攻击者必须付出比防御者大得多的资源和努力才能拥有这样的“动力”,所以只要我们更好的了解DDoS攻击,积极部署防御措施,还是能够在很大程度上缓解和抵御这类安全威胁的。[color=Red]增强防御力 [/color]
对抗DDoS攻击一个很重要的要素就是增强自身的防御能力。使用更大的带宽及提升相关设备的性能是面对DDoS攻击最直接的处理方法。虽然这必定需要耗用一定的资源,但是对于那些将生存寄托于这些在线系统的企业来说,进行这种投入是具备足够理由的。只是在执行这类“硬性增幅”的时候,我们需要把握适度的原则。
因为我们的资源是有限的,如果增加100%的投入仅能在相关性能及DDoS防御力上获得10%的提升,明显是一种得不偿失的处理方式,毕竟这并不是我们仅有的选择。而且攻击者的资源同样是有限的,在我们增加防御强度的同时,就意味着攻击者必须集合比原来多得多的攻击傀儡机来实施攻击,并且会提高攻击者暴露的风险。不过应该记住的是,真正有效的DDoS防御并不是陷入与攻击者“角力”的恶性循环当中,而是应该综合各种方法,为攻击者设置足够的障碍。
[color=Red]目标系统处理 [/color]
攻击者的最终目标可能是一台主机,也可能是一台网络设备。除了对其目标的硬件能力进行增强之外,我们同样应该充分发挥系统自身的潜能,通过对目标系统的针对性处理,可以有效地放大现有资源的能量。最基本的任务是做好更新补丁的工作。特别是一些操作系统的通讯协议堆栈存在着问题,很容易成为拒绝服务攻击的利用对象。因为利用漏洞实施拒绝服务攻击相对于纯粹的设施能力比拼要容易的多。如果不能保证消除明显可被拒绝服务攻击利用的漏洞,其它的防御工作将只能成为摆设。
好在现在各类系统的补丁更新速度还是比较令人满意的,只要根据自身环境的情况注意对相关系统的补丁发布情况进行跟踪就可以了。一些经常被使用的方法还包括限制连接队列的长度以及减少处理延时等。前者可以缓解系统资源的耗尽,虽然不能完全避免“拒绝服务”的发生,但是至少在一定程度上降低了系统崩溃的可能性。而后者能够加强系统的处理能力,通过减少延时,我们可以以更快的速度抛弃队列里等待的连接,而不是任其堆满队列;不过这种方法也不是在所有情况下都有效,因为很多DDoS的攻击机制并不是建立在类似SYN Flood这样以畸形连接淹没队列的方式之上。
[color=Red]纵深防御 [/color]
攻击者和目标通常并非直接相连,两者之间要经过很多网络节点才能进行通信。所以我们可以在受保护系统之前尽可能部署有效的屏障,以缓解系统的压力。设置屏障最主要的工具就是防火墙,先进的防火墙产品能够有效识别和处理数据包的深层内容,这样有助于我们设置更加细致的过滤。
现在有很多防火墙产品集成了反DDoS功能,进一步提高了对常见DDoS攻击包的识别能力(比如常见的专业级抗DDOS攻击的冰盾防火墙)。这样的产品可以在很大程度上增强DDoS防御能力,并且可以做到不对数据包进行完全检查就可以发现“恶意行为”。这是非常有帮助的能力,因为如果判断DDoS攻击所耗费的处理越少,就越不容易被耗尽处理能力,从而极大的增加攻击者的成本。包括很多路由器产品在内的网络设备都具备一些_blank">防火墙功能,我们应该尽可能充分的利用。
特别是路由器本身负责对数据流进行导向,应尽可能将其置于“前哨”位置。这样既可以起到御敌于千里之外的作用,又可以灵活地将攻击包导向到其它无害的位置甚至化攻击于虚无。当然,攻击者对这些防御层也会有或浅或深的体认,不会一味地以目标系统作为惟一的打击点,他们很可能会在受到这些设施的阻挠之后转而组织针对这些设施的攻击,这就需要我们动态的对防御设施进行调整,随机应变。
除了以上这些基础的方法和工具之外,还有一些更高级的技巧可以利用,例如我们可以进行冗余设计,以在系统瘫痪于攻击发生时有可以随时启用的应急机制;也可以部署一些陷阱部件,既可以用于吸引攻击流量,也可以对攻击者起到一定的迷惑作用。
[color=Red]知己者胜 [/color]
其实在对我们进行安全防御时,最重要的因素之一是对系统的透彻了解。例如我们必须清楚地知道系统对外开放了哪些服务,哪些访问是被禁止的。同时,当有DDoS攻击迹象发生的时候,我们也应该很好地判断攻击利用了系统的哪些处理机制。虽然我们已经听过无数人无数次的重复“关闭不必要服务”,但显然其重要性仍未被充分认知。
有时一个端口没有开放我们就认为其处于安全状态,其实事实并非如此。很多时候,一些关闭的端口由于设计上的原因仍会响应某些查询,这一点经常被DDoS攻击所利用。攻击者通过向这些看似沉睡的端口发送海量的查询耗尽目标系统的资源从而达到自己的目的。我们经常利用一个称为Shields UP!!的基于Web接口的工具检查端口的真实状态。
我们在一台联网的工作站上登录其页面并执行All Service Ports检测,返回的结果页会列出从0到1055端口状态的方格图,绿色的小块儿表示该端口处于安全的隐秘(Stealth)状态,将不会对外界做出任何响应。如果小块儿是代表危险的红色,说明该端口处于开放状态。而如果小块儿是蓝色的话,说明该端口处于关闭状态,虽然大部分程序无法使用这些端口,但不代表其绝对安全。通过类似的工具我们可以更透彻的了解我们暴露在网络上的都是什么,也才能进行真正有效的处理,同时不会忽视存在的隐患。
攻击实例--分布式反射:新一代的DDoS攻击
[font=Verdana] 攻击在凌晨两点左右开始,那时我正好还在工作,所以我才有机会迅速的抓取到一部分的洪水攻击的信息。这次攻击使Verio (我们的网络提供商)的集合路由器将攻击数据挤满了我们的两条T1 。我们的网站服务器因为这次攻击而无法处理其它合法的请求。我们被完全的炸下了网。我们以前就曾遭受过UDP 和ICMP 洪水攻击,这些攻击其实都可以由被攻击者入侵的主机、zombie 工具及Windows 系统简单的实现,我们也被一些经典的SYN 洪水攻击过。所以当我查看了一下那些显示我们是被SYN/ACK 数据攻击的攻击数据包后,眉毛跳了一下。毕竟这些事实并不重要,就像我以前说的那样,一个SYN/ACK 包只是一个SYN 数据包带了一个ACK标记。任何有限权制作"raw socket"的人都可以制作出这种数据包来 —— 不管他是恶意的还是无意的。
真正的惊讶是当我看到这些发起攻击的地址 :
[img]http://www.1rmb.com/UploadFile/200801/28/375920452.gif[/img]
...
...
此处省略了近200个攻击的网络地址
[img]http://www.1rmb.com/UploadFile/200801/28/E35920941.gif[/img]
我们看起来是在被超过200 多个网络核心基础设施路由器攻击.
发生什么事了?
看到这些分别来自Verio 、Qwest 、和 Above.net 的洪水数据包,我想它们都是完全合法的SYN/ACK 连接回应包,它们显示了一个TCP 源端口:179 。换句话说,就像一个网页服务器的数据包会从HTTP 的80 号端口返回一样,这些数据包是从"BGP"的179 号端口返回的。
BGP 是中介路由器支持的"边界网关协议"(Border Gateway Protocol )。 路由器使用BGP与他们的邻居进行即时的信息交流来交换他们的" 路由表" ,这是为了通知它们彼此路由器可以在哪个IP 范围进行转交。
BGP 的细节并不重要,重要的是每个良好连接(高宽带)的中介路由器都会接受在他们179端口上的连接。换句话来说,任何一个SYN 数据包到达一个网络路由器上后都会引出一个该路由的SYN/ACK 回应包来。
我突然知道什么会一定发生…..
这些被利用来攻击的两百台主机不可能全存在安全问题,甚至可能没有任何一台有安全问题。
我认识到它们只不过全是一些普通的的TCP 服务器,它们是在认为我们想建立一个TCP 连接到它们自带的BGP 服务的情况下才向grc.com 发送SYN/ACK 数据包的。
换句话说,一个恶意的入侵者在其他的Internet 角落里利用带有连接请求的syn 数据包对网络路由器进行洪水攻击。这些数据包带有虚假的IP 地址,这些地址都是grc.com 的。这样以来,路由器认为这些Syn 数据包是从grc.com 发送来的,所以它们便对它们发送SYN/ACK数据包作为三次握手过程的第二个步。
[img]http://www.1rmb.com/UploadFile/200801/28/F15920855.gif[/img]
恶意的数据包其实就被那些被利用的主机“反射”到了受害者主机上。这些被反射的数据包返回到受害者主机上后,就形成了洪水攻击。[/font]
[font=Verdana]
阻拦反射攻击
我们有一些好消息,这种攻击看起来可以很简单的阻拦。因为我们自己不是网络服务提供商,以我们从来没有任何连接到远程带有BGP 服务的路由器上的需要。这样以来,我便要求Verio去阻拦任何从BGP 服务端口179 发起的入站数据。因为这个恶意攻击者的SYN 数据包的目标是网络上中介路由的179 号端口,任何反射的数据包也应该会从那个端口发出。
Verio 的工程师加了一个filter 到提供我们网络服务的集合路由上,它用来阻拦(丢弃)任何从179 端口发来的数据包。从179 号端口发送来的数据包洪水立即停止了。
但我们并没有回到Internet 上。
一个刚从网上抓到的数据包显示我们现在正被一群全新的网络服务器攻击。因为这第二群攻击是在我们阻拦了从179 端口发送来的攻击以后才出现的,所以这第二拨攻击没有办法跟第一拨的攻击力相比。
我们现在正在被从端口22 (Secure Shell), 23 (Telnet), 53 (DNS), 和80 (HTTP/Web)上发送来的SYN/ACK 数据包攻击。这其中还有一些从端口4001 (代理服务器端口)和6668(IRC 聊天)发送来的数据包。
很可惜的是,因为这第二波攻击完全出乎我的意料,所以我没有抓到这第二波攻击的完整的数据包来作为取样。不过,我先前在第一波攻击中所抓到一些日志有展现一些非BGP 所发出的SYN/ACK 包。
这是一小部分先前从HTTP(网页服务)端口80 上所发出SYN/ACK 攻击数据包的样本
[img]http://www.1rmb.com/UploadFile/200801/28/EA5920872.gif[/img]
这蜂拥而来的SYN/ACK 数据包和一些非路由的网络服务器告诉了我们,任何用于普通目的TCP 连接许可的网络服务器都可以用做数据包反射服务器。当我看到我们光阻拦从BGP 端口传来的数据是远远不够的,我开发了一套更全面的解决方案来对付这种攻击。这套方案我们会在下面讨论。
在装置好对付反射攻击的filter 后,我们立即就可以重新返回网上了。经过我不可以监控在装置filter 后的攻击状况,但看到下面的这些信息还是让我冒了一阵冷汗…
直到攻击停止,Verio 的路由丢弃了将近十亿(1,072,519,399)的恶意SYN/ACK 数据包。
我是在认识我到没有抓到第二波非BGP 的数据包后才联系Verio ,从而得知这个数据的。我想要重新装备我们的防御系统,好让我们继续遭受攻击,这样才能抓到那些我先前没有收集到的
资料,但当我这样做的时候,攻击已经停止了。
反射攻击的防御及预防
通过Internet 进行交流的电脑一般都可以被分为两类:客户端及服务端。这两个角色可以随着环境转换(例如一个网页服务器可能会是一个邮件服务器的客户端),不过大部分的TCP 连接都意味着一个客户端和服务端的关系。客户端一般会从一个高数位的端口发起连接到服务端上处于监听状态的底数位端口上。
因为任何反射的SYN/ACK 数据包必须要弹到一个TCP 服务器上,并且因为几乎所有的服务端口都在1 到1023 这个范围之内,阻拦所有在服务端口范围之内入站的数据包会防止大部分的攻击造成的阻塞。不过这样做有产生一些问题…..
保护服务器
首先,这次对grc.com 的攻击包含了从端口4001 和6668 来的SYN/ACK 数据包。所以,如果从这些端口发出的数据太多的话,这些特殊的高数位服务端口也需要被阻拦。在阻拦高数位端口的入站数据包存在一个问题,那就是一些合法的客户端的端口所发生的数据可能也会被我们设置的filter 给拦截掉。
第二个问题是如果我们只是简单的拦截所有从1024 以下端口发送的数据的话,那么像当一个在blanket filter 后的服务器作为客户端的话,它将无法和其它服务器进行交流。就像我们刚才举的例子一样,当一个网页服务器作为一个SMTP 服务器的客户端时,这个情况就会变的非常复杂。因为远程SMTP 服务器的数据包会试图从SMTP 服务器的25 号端口返回,这时它就会被我们设置的反反射攻击的filter 给拦截掉。为了解决这个问题,我们需要在配置文件里设置例外端口,这样才可以让合法数据包正常通过。
保护客户端
这里有一些坏消息。客户端主机,例如那些典型的终端用户,将无法被保护。因为多数的客户端在大部分时间里都是连接到远程的服务器端上的,这些服务器端很可能会被利用来攻击这些无辜的客户端。
译者注:
国内的网管可能都冒了一身的冷汗,以前的分布式拒绝服务式攻击可以算是可见不可及。毕竟那是需要几百台受控的肉鸡才能实现的,可现在这个技术可以利用任何不存在安全漏洞的主机来进行攻击,后果可以想象。原作者上面所说的利用filter 来拦截数据包只是暂时之策,服务器不用来提供服务还有什么用?所以真正的解决办法还是要从基础的配置做起,这种攻击不是使用半连接来挂掉主机,所以对付以前那种传统的SYN Flood 的方法可能无法在这里行通。到目前为止,通过利用防火墙来阻挡那些序列号不对的数据包恐怕是最好的方法了。希望网络安全界的人士能尽快研究出更好的解决方法。.[/font]
页:
[1]