◆赵菁
虚拟化平台下SYN Flooding攻击研究
◆赵菁
(北京信息职业技术学院 北京 100018)
本文引入Kali Linux和Windows 2003两个虚拟机构造了一个仿真环境,采用Kali Linux中自带的hping3发起SYN Flooding攻击,并且使用Wireshark对攻击进行了分析,最终给出攻击的防御方法。
DDoS攻击;SYN Flooding攻击原理;攻击的模拟与分析;SYN Flooding攻击的防御
DDoS攻击是全世界都面临的问题,几乎每家公司的服务器都受到过不同程度的攻击。SYN FLOODING攻击在单纯的流量型攻击中,是作为最常用的攻击方式,在阿里云安全团队《2019年上半年DDoS攻击态势报告》显示SYN_Flood占比达10.59%。DDoS攻击手段呈现的特点是更加隐蔽复杂,峰值流量Tb级攻击时代已经到来,研究DDoS攻击对该攻击的防御具有积极意义。本文在讨论了DDoS攻击的原理、种类、SYN Flooding攻击原理的基础上,搭建了实验仿真环境,再现了SYN FLOODING攻击的情景,并使用Wireshark对攻击进行了分析,最后提出攻击的防御方法。
DDoS最初的形式是DoS(Denial of Service)攻击,DoS攻击的原理是:通过消耗网络带宽、系统资源以导致网络或系统濒临瘫痪甚至完全瘫痪,从而不能提供正常的网络服务或使服务质量显著降低来达到攻击的目的。
DDoS攻击即分布式拒绝服务攻击(Distributed Denial of Service)。在DoS攻击中如果处于不同位置的多个攻击者同时向一个或多个目标发起拒绝服务攻击,或一个或多个攻击者控制了位于不同位置的多台计算机,并利用这些计算机对受害者同时实施DoS攻击,则称这种攻击为DDoS攻击,它是DoS攻击最主要的一种形式。
DoS是一对一攻击。随着网络带宽、计算机性能的高速发展,类似DoS这样一对一的攻击已经起不了什么作用了,于是DDoS—分布式拒绝服务攻击诞生了,其原理和DoS相同,不同之处在于DDoS攻击是多对一进行攻击。具体过程是:黑客首先扫描Internet上的主机,发现存在漏洞的主机,然后在其上安置代理程序,从而攻占傀儡机,进而通过这些傀儡机,对目标系统发起大规模的攻击,成倍地提高拒绝服务攻击的威力,在同一时间以DoS攻击的方式攻击一台服务器,最终导致被攻击的服务器瘫痪。
DDoS攻击的种类包括:Http Flooding攻击、SYN Flooding攻击、UDP Flooding攻击、DNS Flooding攻击等等,本文主要介绍SYN Flooding攻击的原理与防御方法。
1.4.1 TCP三次握手的过程
TCP的连接建立是一个三次握手过程,目的是为了通信双方确认开始序号,以便后续通信的有序进行。主要步骤如下:
(1)连接开始时,连接建立方(Client)发送SYN包,并包含了自己的初始序号a;
(2)连接接受方(Server)收到SYN包以后会回复一个SYN包,其中包含了对上一个a包的回应信息ACK,回应的序号为下一个希望收到包的序号,即a+1,然后还包含了自己的初始序号b;
(3)连接建立方(Client)收到回应的SYN包以后,回复一个ACK包做响应,其中包含了下一个希望收到包的序号即b+1。
1.4.2什么是SYN Flooding
SYN Flooding攻击是DDoS的一种形式,它利用TCP协议存在的半连接缺陷,发送大量虚假的TCP SYN报文(连接请求),但对服务器的TCP SYN+ACK应答报文(连接响应)不做应答,即三次握手的第三次握手(对响应的响应)无法完成。在这种情况下,服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间(称为SYN Timeout,分钟级,大约为0.5至2分钟)后丢弃这个未完成的连接(称为“半连接”,放在半连接表中),如果一个恶意的攻击者大量发出这种请求,则服务器将会为了维护一个非常大的半连接列表而消耗非常多的资源。一般系统中,半连接数的上限为1024,超过此限制则不接受新的连接请求,此时从正常客户的角度看,服务器失去响应了。此外,对服务器的性能也会有很大的影响。
在kali linux中打开一个终端,然后输入:root@kali:~# hping3 -q -n --rand-source -S -p 80 --flood 192.168.203.200,攻击就开始了。
从图1可以看到,kali linux伪造了大量的源IP地址和源port,对测试机(IP:192.168.203.200)发送了TCP三次握手中的SYN包,进行了SYN泛洪攻击。
直接查看wireshark抓到的包不是很直观,可以使用wireshark提供的统计功能的流量图来查看,如图2所示。在wireshark的菜单栏中:统计->流量图。
图1 使用wireshark抓到SYN泛洪攻击包
图2 wireshark中的流向图
从这个流量图中可以看到大量伪造的随机源地址只向目标主机发送了一个SYN请求。并且可以看到每一个包的流向,为抓包方便上图是在kali linux上的截图,所以无法看到SYN+ACK包从80端口发出去(需要在测试机上使用wireshark抓包)。在流量图中可以看到两点,一是短时间出现了大量的数据包,二是这些数据包并没有后续。
TCP SYN Flooding的防御一般有以下方式:
(1)丢弃第一个SYN包
TCP SYN泛洪攻击发送的SYN包,一般每个伪造源IP只会发送一个SYN包,所以丢弃每个源IP地址对应的第一个SYN包可以达到避免泛洪攻击的目的。
缺点是用户体验比较差,因为正常的用户请求始终要发送两次SYN包才能成功建立TCP连接。当泛洪攻击每一个SYN包发送两次时,这种防御方式就失效了。
(2)反向探测
当收到某个SYN包时,服务器不会直接返回SYN+ACK包,而是先发送一个用于反向探测的SYN包来确定源IP和端口的合法性(即是否在线,对面返回SYN+ACK)。如果对方合法,服务器再回复正确的SYN+ACK包。
(3)代理模式
使用防火墙代理与来源地址进行TCP连接,当正常建立连接后,防火墙再和后面的服务器进行连接,并代理业务数据。
SYN Flooding攻击可以利用TCP协议的缺陷对目标服务器发起攻击,以造成被攻击目标拒绝服务的严重后果。本文通过搭建仿真环境模拟了攻击过程,为了更好地了解网络攻击的详情,利用Wireshark的流向图功能绘制出了TCP端点之间的数据流,更直观地分析了SYN Flooding攻击。通过丢弃第一个SYN包、反向探测和设置代理模式几种方式可以有效地防御SYN Flooding攻击。
[1]陶涛. SYN 洪泛攻击原理及其防范策略[J].电脑知识与技术,2012.
[2]刘双强. SYN Flooding攻击原理与防御措施[J]. 电脑知识与技术,2009.