SYN flood攻击及SYN cookie原理分析

1.实验简介

  最近在学习《计算机网络》,课程布置了一个网络攻击的作业 SYN Flooding Attack ,本篇博客就本次实验做一个完整的实验报告及总结。

所用平台seed简介

  1. SEED:计算机安全教育的教学实验平台
  2. http://www.cis.syr.edu/~wedu/seed/
  3. 纽约雪城大学 杜文亮 (Du, Wenliang)教授设计和实现,从2002年开始得到NSF 1.2M$的资助

一.实验环境(详细说明实验运行的操作系统,网络平台,机器的配置)

操作系统:Windows10
虚拟机操作系统:SEEDUbuntu 12.04
虚拟机工具:VirtualBox 5.2.16
网络虚拟软件:GNS3 2.0.3

二.实验目的

  1. 掌握基础ip网络配置;
  2. 掌握GNS3和使用WireShark对流量进行抓包分析;
  3. 实现SYN flood攻击,理解其表现形式和产生的影响;
  4. 深入观察理解linux内核tcp SYN cookie机制,理解其在SYN flood攻击中的作用。

三.实验步骤

  1. 导入SEED虚拟机镜像文件,命名为SEED ubuntu,复制一个,命名为SEED ubuntu target(注意勾选重新初始化网卡的MAC地址)。
    01.png
    02.png
    03.png
    04.png
  1. 利用GNS3配置如图所示网络
    01.png

  2. 配置两台主机的ip地址和路由,一个为192.168.1.1,另一个为192.168.1.2.默认的路由为192.168.1.0
    02.png
    03.png

  3. 测试连通性
    04.png
    05.png

  4. 在SEED Ubuntu target上启动telnet服务
    06.png

  5. 在SEED Ubuntu主机上输入攻击命令
    07.png

  6. 在seed Ubuntu target上用wireshark观察攻击报文
    08.png

  7. 用netstat –n –tcp命令观察建立的连接,显示的状态为established
    09.png

  8. 此时seed ubuntu可以通过telnet登录seed Ubuntu target
    10.png

  9. 进一步观察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
    11.png

  10. 再次从SEED Ubuntu 上用netwox的syn flood攻击SEED Ubuntu target
    12.png

  11. 此时发现不能用telnet登录seed ubuntu target
    13.png

  12. 再次打开SEED Ubuntu target内核tcp syn cookie参数(将tcp_syncookies设置为1),同时从SEED Ubuntu 上用telnet连接主机 SEED Ubuntu target
    14.png

发现可以通过telnet建立连接
15.png

  1. 用netstat –n –tcp查看tcp网络的连接情况。
    16.png

  在seed ubuntu target查看连接情况
17.png

四.实验结果分析

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连接。