SYN攻击的基本原理及防范技术

SYN攻击的基本原理及防范技术
据统计,SYN攻击是所有黑客攻击中最常见、最容易使用的攻击方式,我相信很多人都记得雅虎网站在2000遭受的攻击事件。当时,黑客使用简单有效的SYN攻击,一些网络蠕虫攻击SYN攻击,本文介绍了SYN攻击的基本原理、工具检测方法,并对SYN攻击的防范技术进行了全面的探讨。

一、tcp握手协议

在TCP/IP协议中,TCP协议提供了可靠的连接服务,三握手用于建立连接。

第一次握手:建立连接后,客户端发送SYN包(SYN = J)到服务器,并进入syn_send状态,等待服务器确认

第二次握手:当服务器接收到SYN包时,它必须确认客户的SYN(ACK = J + 1),并发送SYN包(SYN K),即SYN包。在这个时候,服务器进入syn_recv状态。

第三次握手:客户端接收服务器的SYN - ACK包,向服务器发送确认包ACK(ACK = K + 1),包被发送到服务器,客户端和服务器进入已建立的状态,三次握手完成。

当三次握手完成后,客户机和服务器开始传输数据。在这个过程中,有一些重要的概念:

未连接队列:三次握手协议中,服务器维护一个断开连接的队列,每个队列客户端SYN包(SYN = J)开设一个条目,该条目表示服务器已收到SYN包,并向客户发出确认,顾客等待确认包。通过这些条目确定连接在服务器syn_recv状态。当服务器接收到客户的确认包时,它将删除条目,服务器将进入已建立的状态。

待定参数:未连接队列的最大数目。

SYN-ACK重传服务器发送SYN-ACK包的数量,如果客户没有收到确认报文,对于第一个转发服务器,等待一段时间仍未收到客户确认包,重传二次,如果重传的最大重发次数超过系统的要求,系统将连接队列信息删除从半连接。注意,重传的时间不一定是相同的每一次。

半连接生存时间:半连接队列中最长的输入时间,即服务接收SYN包确认无效消息的最长时间。这个时间值最长的总等待时间的重传数据包。有时我们也叫半连接的超时时间和syn_recv生存时间,生存时间。

二、SYN攻击原理

SYN攻击属于一个DoS攻击,利用TCP协议的缺陷和消耗的CPU和内存资源,通过发送大量的半连接requests.syn攻击不仅可以影响宿主,也害了路由器、防火墙等网络系统。事实上,SYN攻击与目标系统无关。只要打开TCP服务这些系统,他们可以实现。正如你可以看到上面的图片,服务器接收到连接请求(SYN = J),将信息添加到未连接队列,并发送请求包给客户(SYN ACK = = K,J + 1),然后进入syn_recv状态。当服务器没有收到客户的确认包,请求包补发,直到超时,和进入从未从队列中删除,IP欺骗,SYN攻击能达到很好的效果,通常,客户端不存在大量在短时间内假冒的IP地址,继续发送SYN包到服务器,服务器回复确认包,并等待客户的确认,BEC由于源地址是不存在的,服务器需要继续直到超时重传。在没有连接队列的情况下,伪造的SYN包将被占用很长时间,丢弃正常的SYN请求,目标系统运行缓慢,造成严重的网络拥塞,甚至系统瘫痪。

三,SYN攻击工具

SYN攻击非常简单,互联网上有很多SYN攻击工具。

windows系统下的SYN工具:

以synkill.exe为例,运行工具,选择随机的源地址和源端口,并填写目标机器地址和TCP端口,启动操作,并很快发现目标系统的运行速度慢。如果攻击效果不明显,可能是目标机到底没有TCP或打开防火墙拒绝访问结束在TCP,出口端,这个时候选择允许访问在21年底常开的Windows系统tcp139 tcp7,UNIX开放23月底。

四,检测SYN攻击

检测SYN攻击非常方便。当你在服务器上看到大量的半连接状态,特别是源IP地址是随机的,可以断定,这是一个SYN攻击。我们使用的系统来检测SYN攻击的netstat工具。

# netstat-N-P TCP 10.11.11.11:23124.173.152.8:25882 syn_recv 00 TCP 0

0 10.11.11.11:23236.15.133.204:2577 syn_recv TCP 00

10.11.11.11:23127.160.6.129:51748 syn_recv TCP 00

10.11.11.11:23222.220.13.25:47393 syn_recv TCP 00

10.11.11.11:23212.200.204.182:60427 syn_recv TCP 00

10.11.11.11:23232.115.18.38:278 syn_recv TCP 00

10.11.11.11:23239.116.95.96:5122syn_recv TCP 00

10.11.11.11:23236.219.139.207:49162 syn_recv—…

以上是在Linux系统中看到的。许多连接在syn_recv状态(在Windows系统syn_received状态),和源IP地址都是随机的,表明这是一个IP欺骗的SYN攻击。

我们可以使用下面的命令直接查看Linux环境中的一个终端没有连接在队列中的条目数:

# netstat -n -p tcp grep syn_recv grep:22 WC - L 324

有324个不相连的数字显示TCP端22,尽管它远不是系统的极限,但是管理员应该注意到它。
五、SYN攻击防护技术

关于SYN攻击防护技术,人们以前研究过很多,总结起来主要有两大类,一种是通过防火墙和路由器网关保护,另一种是通过TCP/IP协议栈来加强防范。但是应该清楚的是,SYN攻击不能完全阻止,除非TCP协议设计,我们尽可能地减少SYN攻击的损害。

1。过滤网关防护

在这里,过滤网关主要指定防火墙,当然路由器也可以成为过滤网关,防火墙部署在不同的网络之间,以防止非法攻击和防止机密信息泄漏。它在客户机和服务器之间。它对保护SYN攻击起到很好的作用,过滤网关保护主要包括超时设置、SYN网关和SYN代理三种。

。网关超时设置:

防火墙设置了SYN timeout参数(状态检测的防火墙可以设置在状态表),远小于服务器的超时时间,当客户端发送SYN包,服务器发送确认包(SYN+ACK),如果防火墙没有收到客户的确认包(ACK)当计数器到期,它发送RST包给服务器,这样服务器就可以从队列中删除的半连接。值得注意的是,定时参数设置网关既不太小也不太大。太长时间参数设置会影响正常通信。设置太大也会影响防止SYN攻击的效果。我们必须根据网络应用环境来设置这个参数。

SYN网关:

当SYN网关接收客户端的SYN包时,它将直接传输到服务器。SYN网关发送数据包到客户端收到服务器的SYN / ACK包后,发送ACK确认包在客户端的名称服务器,此时服务器连接状态进入半连接状态。当客户确认数据包到达,如果数据转发,否则数据包被丢弃。事实上,除了保持服务器的半连接队列,还有一个连接队列,如果SYN攻击时,将使连接队列数目增加,但服务器所能承受的连接数超过一半连接到一个更大的数,所以这方法可以有效地减少服务器的攻击。

SYN代理:

当客户端SYN包过滤网关,SYN代理不是SYN包的转发,但在服务器主动回复SYN / ACK包的名称给客户,如果客户收到的ACK包,这是一种正常的访问,防火墙向服务器发送ACK数据包并完成三次握手实际上,SYN代理的服务器所处理的SYN攻击,这就要求过滤网关本身对SYN攻击能力强大的防御。

2、加强TCP/IP协议栈

为了防止SYN攻击的另一个主要的技术是调整TCP / IP协议栈和修改TCP协议实现的主要方法包括启用SYN攻击保护的保护机制,SYN Cookie技术的最大半连接的超时时间的缩短等增加,TCP / IP协议栈的可能原因有些功能是有限的调整,和管理员应在充分了解和测试的前提下做这项工作

启用SYN攻击保护机制

为了防止SYN攻击的启用SYN攻击保护机制在嵌入式TCP / IP协议栈的Windows2000系统和WIN2003系统也使用这种机制,启用SYN攻击保护机制是增加额外的连接指令,通过关闭某些套接字选项减少超时时间,使系统能够处理更多的SYN连接,这样为了防止SYN攻击。默认情况下,Windows2000操作系统支持启用SYN攻击保护的保护机制,它是必要的添加启用SYN攻击保护关键值的注册位置下方:

HKLM 系统 CurrentControlSet 服务 TCPIP 参数

当启用SYN攻击保护值(如果没有特殊说明,注册表键值为十六元)为0或不设置,系统不受启用SYN攻击保护。

当启用SYN攻击保护值为1,通过减少重传时延无关的路由缓冲区数的系统防止SYN攻击(路由缓存条目)。

当启用SYN攻击保护值是2(微软推荐值),系统不仅使用积压队列,同时使用额外的半连接的指示,为了应对更多的SYN连接,使用TCP / IP的关键,tcpinitialrtt,窗口的大小和滑动窗口将被禁止

要知道,通常情况下,系统不使用启用SYN攻击保护机制。只有在检测到SYN攻击时,才能对TCP/IP协议栈进行调整,系统如何检测SYN攻击事实上,系统判断是否受到SYN攻击根据tcpmaxhalfopen三参数,并tcpmaxportsexhausted值名称:TcpMaxHalfOpenRetried。

TcpMaxHalfOpen代表了半连接,可以同时处理的最大数量,如果超过此值,该系统被认为是在SYN攻击,服务器的默认值是100,和Windows2000 Advanced Server 500。

值名称:TcpMaxHalfOpenRetried定义半连接队列积压的数量和存储转发。如果超过这个值,系统自动启动启用SYN攻击保护机制。对于Windows2000服务器的默认值是80,和Windows2000 Advanced Server 400。

tcpmaxportsexhausted指SYN请求,系统拒绝的数量,和默认值为5。

如果你想调整上述参数的默认值,可以修改注册表中(位置启用SYN攻击保护相同)

SYN Cookie技术

我们知道,TCP协议开辟了一个相对大的内存空间。积压队列存储半连接条目,当SYN请求增加和空间时,系统丢弃SYN连接。为了填补半连接队列,服务器仍然可以处理新的SYN请求,并设计了SYN cookie技术。

SYN Cookie应用于Linux,FreeBSD等操作系统。当半连接队列已满,syncookies不丢弃SYN请求,但半连接状态标识的加密技术。

在TCP的实现,当收到客户端的SYN请求,服务器需要回复SYN+ACK包给客户端,而客户端必须发送确认包给服务器,太。通常,服务器的初始序列号或随机数由服务器按照一定的规律进行计算,但在SYN Cookies,服务器的初始序列号是通过哈希操作在客户端的IP地址,在客户端、服务器IP地址和服务器安全等数值的因素如加密。调用cookie。当服务器受到SYN攻击时,使积压队列已满,服务器不拒绝新的SYN请求,而是将应答cookie(应答SYN序列号包)发送给客户机,如果客户端接收到ACK包、客户机服务器ACK序列号减去1 cookie值,以及哈希操作的元素。看看这等于饼干。如果相等,三次握手完成直接(注:在这一点上,别看这个连接属于积压队列)。

在RedHat Linux,SYN Cookie是由启动环境设置以下命令启用:

#回声1 /程序/系统/网 / / tcp_syncookies IPv4

增加最大半连接数

大量SYN请求会导致未连接队列被填满,以便正常的TCP连接不能成功完成。三次握手可以通过增加未连接的队列空间来减轻压力。当然,积压队列需要占用大量内存资源,不能无限期地扩展

Windows2000:除了上述的TcpMaxHalfOpen值名称:TcpMaxHalfOpenRetried参数,Windows2000操作系统可以设置动态(动态积压积压)增加系统可容纳一半的连接的最大数目,动态配置驱动的afd.sys积压,AFD.SYS驾驶一辆核水平,支持窗口基于Socket的应用,如FTP Telnet等。在注册表中的位置AFD.SYS:

在HKLM 系统 CurrentControlSet 服务 AFD enabledynamicbacklog参数值是1,这意味着动态的积压可以激活,和最大半连接数可以改变。

MinimumDynamicBacklog表示,在对连接数最小的自由分布的一端有一个TCP半连接队列,最后在积压队列自由连接的TCP小于临界值,在本系统自动启用扩展的自由端连接(dynamicbackloggrowthdelta),推荐值为20微软。

maximumdynamicbacklog是半连接和当前活动的空闲连接的总和。当超过某一临界值时,系统拒绝SYN包,和微软建议MaximumDynamicBacklog值应不超过2000。

dynamicbackloggrowthdelta价值指的是空闲连接的延伸,连接数不在maximumdynamicbacklog计算,当一个连接队列小于在自由连接分配结束一个TCP minimumdynamicbacklog,系统自动分配的dynamicbackloggrowthdelta定义空闲连接的空间,所以最后TCP可以处理更多的半加入。微软建议的值是10。

Linux操作系统:Linux使用的变量tcp_max_syn_backlog定义半连接队列的最大数量的积压着,在RedHat 7.3,变量的默认值为256,这是远远不够的,和一个小强度小SYN攻击可以使半连接队列满。我们可以通过下面的命令修改这个变量的值:

# sysctl - W网。IPv4。tcp_max_syn_backlog = ` 2048 `

Sun Solaris Sun Solaris定义了连接的最大数量的变量tcp_conn_req_max_q0半。在Sun Solaris 8中,该值为1024,可以通过添加命令更改。

# NDD集/ dev / TCP tcp_conn_req_max_q0 2048

HP-UX:HP-UX使用可变tcp_syn_rcvd_max定义半最大连接数。在HP-UX 11,该值默认是500,和默认值可以改变ndd命令。

# NDD集/ dev / TCP tcp_syn_rcvd_max 2048

缩短超时时间

如上所述,可以通过增加积压队列来防止SYN攻击;此外,系统还可以通过减少超时时间来处理更多SYN请求。我们知道超时超时时间,也称为半连接生存时间,是等待系统的所有重传时间的总时间。值越大,半连接数占用积压队列的时间越长,系统所能处理的SYN请求越少,为了缩短超时时间,可以通过缩短重传时间(通常是第一次重传时间)和减少重传次数来实现。

Windows2000的等待时间为3秒,在第一重传。为了改变默认值,可以通过在注册表中修改网络连接的tcpinitialrtt登记价值完成。重传次数由tcpmaxconnectresponseretransmissions,和注册表位置:

HKLM 系统 CurrentControlSet 服务 TCPIP 注册表关键参数

当然,我们还可以将重发次数设置为0次,这样如果服务器在3秒内没有收到ACK确认包,它将自动从积压队列中删除连接条目。

RedHat Linux:使用变量tcp_synack_retries定义的重传次数,与5倍的默认值,以及总的超时时间为3分钟。

Sun Solaris Solaris默认的重传次数为3次,而总的超时时间是3分钟,和默认值可以由NDD命令修改。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部