首先,我们来研究一下最常见的攻击。SYN攻击是一种DOS拒绝服务攻击,利用TCP协议缺陷,通过发送大量半连接请求来消耗CPU和内存资源。TCP协议建立连接时,双方需要确认对方的信息,防止连接被伪造,准确控制整个数据传输过程的完整性和有效性。因此,TCP协议使用三次握手来建立连接。
第一次握手:连接建立后,客户端向服务器发送syn包,进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器接收到syn包,确认客户的SYN,发送SYN包,即SYN+ACK包。此时,服务器进入SYN_RECV状态。
三次握手:客户端收到服务器发来的SYN+ACK包,向服务器发送确认包ACK。该数据包发送后,客户端和服务器进入“已建立”状态,并完成三次握手。
SYN攻击利用TCP协议的三次握手原理,发送大量带有虚假源IP的SYN数据包,即虚假的第一次握手数据包。每次服务器收到一个SYN包,都会为这个连接信息分配核心内存,放到半连接队列中。如果短时间内收到太多syn,半连接队列会溢出,操作系统会丢弃这个连接信息,使其无法连接。当被攻击的SYN包超过半连接队列的最大值时,正常客户端发送SYN包请求服务器丢弃连接。每个操作系统都有不同的半连接队列大小,因此其抵抗SYN攻击的能力也不同。那你能不能把半连接队列增加到足够大,保证不溢出?答案是否定的。每个操作系统都有一种方法来调整TCP模块的半连接队列的最大数量。例如,Win2000操作系统位于注册表HKLM 系统当前控制集服务 TCPIP 在参数、TcpMaxHalfOpenRetried和TcpMaxHalfOpen中,Linux操作系统使用变量tcp_max_syn_backlog来定义半连接队列的最大数量。但是,每建立一个半连接的资源,都会消耗系统的核心内存。操作系统的核心内存是专门为系统内核提供的,无法转换成虚拟内存,所以是非常稀缺的资源。以windows2000系统为例,当物理内存为4g时,核心内存小于300M,系统所有核心模块都需要使用核心内存,所以可用于半连接队列的核心内存非常少。
据云防御实验室测试:测试环境:Windows 2003操作系统默认安装硬件配置:P4 3.0 (925),1GDDR2内存,160GBSATA硬盘攻击强度:WEB SERVER端口每秒接收5000 SYN数据包。测试结果:一分钟后,网站瘫痪。网页无法打开64字节的标准SYN包,5000个攻击包等于5000*64 *8(换算成比特)/1024 = 2500k,即2.5M带宽。从上面的实验情况可以看出,很小的带宽攻击就能造成很大的危害,可以瘫痪配置良好的足够带宽的web服务器,而且由于攻击包的源IP是伪造的,很难追踪攻击源,造成肆无忌惮的攻击者。最终的结果是,这次SYN攻击在互联网上猖獗,对网络的正常运行构成了极大的威胁。
原文来自:,
1.《syn 服务器SYN攻击原理》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《syn 服务器SYN攻击原理》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/guonei/881541.html