本文介绍: 在TCP连接的三次握手中,假设一个用户服务器发送了SYN报文后突然死机或掉线,那么服务器在 发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试

【预备知识
可用性(Availability)
数据可用性是一种以使用者为中心的设计概念,易用性设计的重点在于让产品的设计能够符合使用者的习惯与需求。以互联网网站的设计为例,希望让使用者在浏览的过程中不会产生压力或感到挫折,并能让使用者使用网站功能时,能用最少的努力发挥最大的效能。基于这个原因,任何有违信息 的“可用性”都算是违反信息安全的规定。因此,世上不少国家,不论是美国还是中国都有要求保持信息可以不受规限地流通的运动举行。
有一种专门用于抵消信息的“可用性”的攻击,称之为DOS(拒绝服务攻击;而有一种工作在网络传输层的典型的DOS攻击,称之为SYN Flood攻击
SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。

(图示:SYN Flood攻击)

在TCP连接的三次握手中,假设一个用户服务器发送了SYN报文后突然死机或掉线,那么服务器在 发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源数以万计的半连

接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。

在Linux中防御SYN型DOS攻击的方法比较常见的有: 1、增大队列SYN最大半连接

2、利用SYN cookie技术下面分别进行分析。

1、增大队列SYN最大半连接

在Linux中执行命令“sysctl –a|grep net.ipv4.tcp_max_syn_backlog“,在返回

的”net.ipv4.tcp_max_syn_backlog=256″中显示 Linux队列的最大半连接容量是256.这个默认值对于 Web服务器来说是远远不够的,一次简单的SYN攻击就足以将其完全占用.因此,防御DOS攻击 最简单的

办法就是增大这个默认值,在Linux中执行命令“sysctl -w net.ipv4.tcp_max_syn_backlog=3000″,这样就可以队列SYN最大半连接数容量值改为3000了。

2、利用SYN cookie技术

SYN Cookie是用一个Cookie来响应TCP SYN请求的,在正常的TCP连接过程中,当服务器接收一个 SYN数据包,就会返回一个SYN -ACK包来应答,然后进入TCP -SYN -RECV(半开放连接)状态来等待最后返回的ACK包。服务器用一个数据空间来描述所有未决的连接,然而这个数据空间的大小是有限的,所以攻击者将塞满 这个空间,在TCP SYN COOKIE的执行过程中,当服务器收到一个SYN包的时候,他返回一个SYN -ACK包,这个数据包的ACK序列号是经过加密的,它由TCP连接的源地址端口号,目标地址和端口号,以及一个加密种子经过HASH计算得出的,然后 服务器释放所有的状态.如果一个ACK包从客户返回后,服务器重新计算COOKIE来判断它是不是上个SYN -ACK的返回包.如果是的话,服务器就可以直接进入TCP连接状态并打开连接.这样服务器就可以避免守候半开放连接了,在Linux中执行命令echoecho “1” > / proc/sys/net/ipv4/tcp_syncookies”> > /etc/rc_local“,这样即可启动SYN Cookie,并将其添加到了Linux的启动文件,这样即使系统重启也不影响SYN Cookie的激活状态

【实验步骤

网络拓扑:BackTrack5–CentOS centos

用户:root

密码root

bt5

用户:root密码:toor
第一步:为各主机配置IP地址 Ubuntu Linux: IPA:192.168.1.112/24

CentOS Linux: IPB:192.168.1.100/24

第二步:在渗透测试机打开WireShark程序,并配置过滤条件

第三步:在渗透测试机执行hping3程序发起SYN Flood(面向靶机TCP 23端口)

第四步:打开WireShark程序,对SYN Flood过程进行分析

第五步:配置靶机SYN最大半连接数,将其值增大,并验证

第六步:配置靶机启用SYN Cookie,并验证

原文地址:https://blog.csdn.net/m0_50553973/article/details/134639325

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_2990.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注