SYN flood攻击及SYN cookie原理分析
1.实验简介
最近在学习《计算机网络》,课程布置了一个网络攻击的作业 SYN Flooding Attack ,本篇博客就本次实验做一个完整的实验报告及总结。
所用平台seed简介
- SEED:计算机安全教育的教学实验平台
- http://www.cis.syr.edu/~wedu/seed/
- 纽约雪城大学 杜文亮 (Du, Wenliang)教授设计和实现,从2002年开始得到NSF 1.2M$的资助
一.实验环境(详细说明实验运行的操作系统,网络平台,机器的配置)
操作系统:Windows10
虚拟机操作系统:SEEDUbuntu 12.04
虚拟机工具:VirtualBox 5.2.16
网络虚拟软件:GNS3 2.0.3
二.实验目的
- 掌握基础ip网络配置;
- 掌握GNS3和使用WireShark对流量进行抓包分析;
- 实现SYN flood攻击,理解其表现形式和产生的影响;
- 深入观察理解linux内核tcp SYN cookie机制,理解其在SYN flood攻击中的作用。
三.实验步骤
- 导入SEED虚拟机镜像文件,命名为SEED ubuntu,复制一个,命名为SEED ubuntu target(注意勾选重新初始化网卡的MAC地址)。
利用GNS3配置如图所示网络
配置两台主机的ip地址和路由,一个为192.168.1.1,另一个为192.168.1.2.默认的路由为192.168.1.0
测试连通性
在SEED Ubuntu target上启动telnet服务
在SEED Ubuntu主机上输入攻击命令
在seed Ubuntu target上用wireshark观察攻击报文
用netstat –n –tcp命令观察建立的连接,显示的状态为established
此时seed ubuntu可以通过telnet登录seed Ubuntu target
进一步观察linux内核tcp syn cookie机制
通过echo 0 > /proc/sys/net/ipv4/tcp_syncookies命令关闭syn cookies
通过sysctl -w net.ipv4.tcp_max_syn_backlog = 5指定所能接受SYN同步包的最大客户端数量为5再次从SEED Ubuntu 上用netwox的syn flood攻击SEED Ubuntu target
此时发现不能用telnet登录seed ubuntu target
再次打开SEED Ubuntu target内核tcp syn cookie参数(将tcp_syncookies设置为1),同时从SEED Ubuntu 上用telnet连接主机 SEED Ubuntu target
发现可以通过telnet建立连接
- 用netstat –n –tcp查看tcp网络的连接情况。
在seed ubuntu target查看连接情况
四.实验结果分析
1. SYN Flood攻击原理
SYN Flood 攻击是一种典型的拒绝服务型(Denial of Service,DoS)攻击。所谓拒绝服务型攻击就是通过对网络带宽进行消耗性攻击,使受害主机或网络不能够良好的提供服务,从而间接达到攻击的目的。SYN Flood攻击就是利用了“三次握手”的漏洞。假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出 SYN+ACK 应答报文后是无法收到客户端的 ACK 报文的(第三次握手无法完成),一般把服务器收到 SYN 包而还未收到 ACK 包时的连接状态成为半开连接。这时服务器端一般会重试(再次发送 SYN+ACK 给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为 SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟)。如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源—-数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的 CPU 时间和内存,何况还要不断对这个列表中的 IP 进行 SYN+ACK 的重试。服务器端将忙于处理攻击者伪造的 TCP 连接请求而无暇理睬客户的正常请求,此时从正常客户的角度看来,服务器失去响应,这种情况就称作服务器端受到了SYN Flood攻击(SYN 洪范攻击)。
2. SYN Cookies原理
SYN cookie就是用一个cookie来响应 TCP SYN请求的TCP实现,根据上面的描述,在正常的TCP实现中,当服务器接收到一个SYN数据包,它返回一个SYN+ACK包来应答,然后进入TCP_SYN_RECV(半开放连接)状态来等待最后返回的ACK包。服务器用一个数据空间来描述所有未决的连接,然而这个数据空间的大小是有限的,所以攻击者将塞满这个空间。SYN Cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYN Flood 攻击的一种手段。它的原理是,在TCP服务器收到 TCP SYN包并返回 TCP SYN+ACK 包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值,并将这个cookie作为将要返回的 SYN+ACK 包的初始序列号。在收到 TCP ACK包时,TCP服务器再根据报头信息获取cookie值,并通过这个cookie值检查这个TCP ACK包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。 由此可见,cookie的实现要求cookie 必须与每次TCP连接紧密对应,攻击者无法伪造cookie,同时cookie中包含连接的状态信息。
3. 实验结果
当打开SEED Ubuntu target内核的tcp syn cookie参数时,在target机器遭受syn flood 攻击后,源主机(SEED Ubuntu)可以用telnet登录target主机,即可以建立正常的TCP连接。
当内核关闭tcp syn cookie参数时,target主机在遭受flood攻击后,源主机(SEED Ubuntu)telnet不能正常登录target主机,无法建立正常的TCP连接。