下面是我在实验室中模拟的一次Syn Flood攻击的实际过程
这一个局域网环境,只有一台攻击机(PIII667/128/mandrake),被攻击的是一台Solaris 8.0 (spark)的主机,网络设备是Cisco的百兆交换机。这是在攻击并未进行之前,在Solaris上进行snoop的记录,snoop与tcpdump等网络监听工具一样,也是一个很好的网络抓包与分析的工具。可以看到攻击之前,目标主机上接到的基本上都是一些普通的网络包。 ……? -> (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……
接着,攻击机开始发包,DDoS开始了…,突然间sun主机上的snoop窗口开始飞速地翻屏,显示出接到数量巨大的Syn请求。这时的屏幕就好象是时速300公里的列车上的一扇车窗。这是在Syn Flood攻击时的snoop输出结果:
…127.0.0.178 -> lab183.lab.net AUTH C port=1352127.0.0.178 -> lab183.lab.net TCP D=114 S=1352 Syn Seq=674711609 Len=0 Win=65535127.0.0.178 -> lab183.lab.net TCP D=115 S=1352 Syn Seq=674711609 Len=0 Win=65535127.0.0.178 -> lab183.lab.net UUCP-PATH C port=1352127.0.0.178 -> lab183.lab.net TCP D=118 S=1352 Syn Seq=674711609 Len=0 Win=65535127.0.0.178 -> lab183.lab.net NNTP C port=1352127.0.0.178 -> lab183.lab.net TCP D=121 S=1352 Syn Seq=674711609 Len=0 Win=65535127.0.0.178 -> lab183.lab.net TCP D=122 S=1352 Syn Seq=674711609 Len=0 Win=65535127.0.0.178 -> lab183.lab.net TCP D=124 S=1352 Syn Seq=674711609 Len=0 Win=65535127.0.0.178 -> lab183.lab.net TCP D=125 S=1352 Syn Seq=674711609 Len=0 Win=65535127.0.0.178 -> lab183.lab.net TCP D=126 S=1352 Syn Seq=674711609 Len=0 Win=65535127.0.0.178 -> lab183.lab.net TCP D=128 S=1352 Syn Seq=674711609 Len=0 Win=65535127.0.0.178 -> lab183.lab.net TCP D=130 S=1352 Syn Seq=674711609 Len=0 Win=65535127.0.0.178 -> lab183.lab.net TCP D=131 S=1352 Syn Seq=674711609 Len=0 Win=65535127.0.0.178 -> lab183.lab.net TCP D=133 S=1352 Syn Seq=674711609 Len=0 Win=65535127.0.0.178 -> lab183.lab.net TCP D=135 S=1352 Syn Seq=674711609 Len=0 Win=65535…
这时候内容完全不同了,再也收不到刚才那些正常的网络包,只有DDoS包。大家注意一下,这里所有的Syn Flood攻击包的源地址都是伪造的,给追查工作带来很大困难。这时在被攻击主机上积累了多少Syn的半连接呢?我们用netstat来看一下:
# netstat -an | grep SYN ……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……
其中SYN_RCVD表示当前未完成的TCP SYN队列,统计一下:
# netstat -an | grep SYN | wc -l5273# netstat -an | grep SYN | wc -l5154# netstat -an | grep SYN | wc -l5267…..
共有五千多个Syn的半连接存储在内存中。这时候被攻击机已经不能响应新的服务请求了,系统运行非常慢,也无法ping通。
这是在攻击发起后仅仅70秒钟左右时的情况。
DDoS的防范到目前为止,进行DDoS攻击的防御还是比较困难的。首先,这种攻击的特点是它利用了TCP/IP协议的漏洞,除非你不用TCP/IP,才有可能完全抵御住DDoS攻击。一位资深的安全专家给了个形象的比喻:DDoS就好象有1,000个人同时给你家里打电话,这时候你的朋友还打得进来吗?
不过即使它难于防范,也不是说我们就应该逆来顺受,实际上防止DDoS并不是绝对不可行的事情。互联网的使用者是各种各样的,与DDoS做斗争,不同的角色有不同的任务。我们以下面几种角色为例: 企业网管理员 ISP、ICP管理员 骨干网络运营商
企业网管理员网管员做为一个企业内部网的管理者,往往也是安全员、守护神。在他维护的网络中有一些服务器需要向外提供WWW服务,因而不可避免地成为DDoS的攻击目标,他该如何做呢?可以从主机与网络设备两个角度去考虑。
主机上的设置几乎所有的主机平台都有抵御DoS的设置,总结一下,基本的有几种: