tcp半连接攻击解决方案_服务器处理半连接攻击

hacker|
187

DDOS攻击包括哪些

1、TCP洪水攻击(SYN Flood)

TCP洪水攻击是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷;

发送大量伪造的TCP连接请求,常用假冒的IP或IP号段发来海量的请求连接的第一个握手包(SYN包),被攻击服务器回应第二个握手包(SYN+ACK包),因为对方是假冒IP,对方永远收不到包且不会回应第三个握手包。

导致被攻击服务器保持大量SYN_RECV状态的“半连接”,并且会重试默认5次回应第二个握手包,塞满TCP等待连接队列,资源耗尽(CPU满负荷或内存不足),让正常的业务请求连接不进来。

2、反射性攻击(DrDoS)

反射型的 DDoS 攻击是一种新的变种,与DoS、DDoS不同,该方式靠的是发送大量带有被害者IP地址的数据包给攻击主机,然后攻击主机对IP地址源做出大量回应,形成拒绝服务攻击。

黑客往往会选择那些响应包远大于请求包的服务来利用,这样才可以以较小的流量换取更大的流量,获得几倍甚至几十倍的放大效果,从而四两拨千斤。一般来说,可以被利用来做放大反射攻击的服务包括DNS服务、NTP服务、SSDP服务、Chargen服务、Memcached等。

3、CC攻击(HTTP Flood)

HTTP Flood又称CC攻击,是针对Web服务在第七层协议发起的攻击。通过向Web服务器发送大量HTTP请求来模仿网站访问者以耗尽其资源。虽然其中一些攻击具有可用于识别和阻止它们的模式,但是无法轻易识别的HTTP洪水。它的巨大危害性主要表现在三个方面:发起方便、过滤困难、影响深远。

4、直接僵尸网络攻击

僵尸网络就是我们俗称的“肉鸡”,现在“肉鸡”不再局限于传统PC,越来越多的智能物联网设备进入市场,且安全性远低于PC,这让攻击者更容易获得大量“肉鸡”;

也更容易直接发起僵尸网络攻击。根据僵尸网络的不同类型,攻击者可以使用它来执行各种不同的攻击,不仅仅是网站,还包括游戏服务器和任何其他服务。

5、DOS攻击利用一些服务器程序的bug、安全漏洞、和架构性缺陷攻击

然后通过构造畸形请求发送给服务器,服务器因不能判断处理恶意请求而瘫痪,造成拒绝服务。以上就是墨者安全认为现阶段出现过的DDOS攻击种类,当然也有可能不是那么全面,DDOS攻击的种类复杂而且也不断的在衍变,目前的防御也是随着攻击方式再增强。

关于syn/ack攻击,如何消除阿?!

■ SYN cookies技术 我们知道,TCP协议开辟了一个比较大的内存空间backlog队列来存储半连接条目,当SYN请求不断增加,并这个空间,致使系统丢弃SYN连接。为使半连接队列被塞满的情况下,服务器仍能处理新到的SYN请求,SYN cookies技术被设计出来。 SYN cookies应用于linux、FreeBSD等操作系统,当半连接队列满时,SYN cookies并不丢弃SYN请求,而是通过加密技术来标识半连接状态。 在TCP实现中,当收到客户端的SYN请求时,服务器需要回复SYN+ACK包给客户端,客户端也要发送确认包给服务器。通常,服务器的初始序列号由服务器按照一定的规律计算得到或采用随机数,但在SYN cookies中,服务器的初始序列号是通过对客户端IP地址、客户端端囗、服务器IP地址和服务器端囗以及其他一些安全数值等要素进行hash运算,加密得到的,称之为cookie。当服务器遭受SYN攻击使得backlog队列满时,服务器并不拒绝新的SYN请求,而是回复cookie(回复包的SYN序列号)给客户端, 如果收到客户端的ACK包,服务器将客户端的ACK序列号减去1得到cookie比较值,并将上述要素进行一次hash运算,看看是否等于此cookie。如果相等,直接完成三次握手(注意:此时并不用查看此连接是否属于backlog队列)。 在RedHat linux中,启用SYN cookies是通过在启动环境中设置以下命令来完成: # echo 1 /proc/sys/net/ipv4/tcp_syncookies ■ 增加最大半连接数 大量的SYN请求导致未连接队列被塞满,使正常的TCP连接无法顺利完成三次握手,通过增大未连接队列空间可以缓解这种压力。当然backlog队列需要占用大量的内存资源,不能被无限的扩大。 WIN2000:除了上面介绍的TcpMaxHalfOpen, TcpMaxHalfOpenRetried参数外,WIN2000操作系统可以通过设置动态backlog(dynamic backlog)来增大系统所能容纳的最大半连接数,配置动态backlog由AFD.SYS驱动完成,AFD.SYS是一种内核级的驱动,用于支持基于window socket的应用程序,比如ftp、telnet等。AFD.SYS在注册表的位置:HKLM\\System\\CurrentControlSet\\Services\\AFD\\ParametersEnableDynamicBacklog值为1时,表示启用动态backlog,可以修改最大半连接数。 MinimumDynamicBacklog表示半连接队列为单个TCP端囗分配的最小空闲连接数,当该TCP端囗在backlog队列的空闲连接小于此临界值时,系统为此端囗自动启用扩展的空闲连接(DynamicBacklogGrowthDelta),Microsoft[s:148]该值为20。 MaximumDynamicBacklog是当前活动的半连接和空闲连接的和,当此和超过某个临界值时,系统拒绝SYN包,Microsoft[s:148]MaximumDynamicBacklog值不得超过2000。 DynamicBacklogGrowthDelta值是指扩展的空闲连接数,此连接数并不计算在MaximumDynamicBacklog内,当半连接队列为某个TCP端囗分配的空闲连接小于MinimumDynamicBacklog时,系统自动分配DynamicBacklogGrowthDelta所定义的空闲连接空间,以使该TCP端囗能处理更多的半连接。Microsoft[s:148]该值为10。 LINUX:Linux用变量tcp_max_syn_backlog定义backlog队列容纳的最大半连接数。在Redhat 7.3中,该变量的值默认为256,这个值是远远不够的,一次强度不大的SYN攻击就能使半连接队列占满。我们可以通过以下命令修改此变量的值: # sysctl -w net.ipv4.tcp_max_syn_backlog=\"2048\" Sun Solaris Sun Solaris用变量tcp_conn_req_max_q0来定义最大半连接数,在Sun Solaris 8中,该值默认为1024,可以通过add命令改变这个值: # ndd -set /dev/tcp tcp_conn_req_max_q0 2048 HP-UX:HP-UX用变量tcp_syn_rcvd_max来定义最大半连接数,在HP-UX 11.00中,该值默认为500,可以通过ndd命令改变默认值: #ndd -set /dev/tcp tcp_syn_rcvd_max 2048 ■缩短超时时间 上文提到,通过增大backlog队列能防范SYN攻击;另外减少超时时间也使系统能处理更多的SYN请求。我们知道,timeout超时时间,也即半连接存活时间,是系统所有重传次数等待的超时时间总和,这个值越大,半连接数占用backlog队列的时间就越长,系统能处理的SYN请求就越少。为缩短超时时间,可以通过缩短重传超时时间(一般是第一次重传超时时间)和减少重传次数来实现。 Win2000第一次重传之前等待时间默认为3秒,为改变此默认值,可以通过修改网络接囗在注册表里的TcpInitialRtt注册值来完成。重传次数由TcpMaxConnectResponseRetransmissions 来定义,注册表的位置是:HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters registry key。 当然我们也可以把重传次数设置为0次,这样服务器如果在3秒内还未收到ack确认包就自动从backlog队列中删除该连接条目。 LINUX:Redhat使用变量tcp_synack_retries定义重传次数,其默认值是5次,总超时时间需要3分钟。 Sun Solaris Solaris 默认的重传次数是3次,总超时时间为3分钟,可以通过ndd命令修改这些默认值。

游戏服务器经常被DDOS和CC攻击怎么办?

100个做游戏的,99个会这么说,这99个人也不是说不适合吃这碗饭,只是他们没想到自己会被DDOS和CC攻击。

游戏服务器为什么老被攻击

原因之一、竞争对手来攻击你的服务器,让你的服务器无法正常运行,游戏很卡或被攻击到所有服务器瘫痪,玩家就会去竞争对手哪里玩。

原因之二、游戏里的一些玩家,对游戏里的部分人,例如GM不满意,然后攻击服务器,发泄。

原因之三、一些伪黑客爱好者或出初学者,拿服务器试试手,看看自己的技术怎么。

游戏服务器防御方法

第一、确保游戏服务器系统安全。

服务器管理维护人员需要对服务器所有的项目进行检查,查看访问者是从哪里来的,然后查看网络和日志,通过日志分析有哪些可疑的流量。此外将一些不必要的服务及端口进行关闭,限制一些SYN半连接数,确保系统文件是最新的版本,然后系统的版本一定要更新到最新,将一些漏洞打上补丁。

第二、在骨干节点设置防火墙。

防火墙可以有效的抵御DDOS攻击,与其他服务器一样,高防服务器也需要设置相关的防火墙,对于一些攻击流量,可以牺牲一些主机,将一些恶意流量引导出去,保证游戏服务器的正常运行,同时处理这些恶意流量。

第三、接入专业游戏高防

服务器被syn flood攻击,应该怎么处理

很有可能是SYN Flood的攻击, [以2下h为4转贴] 剖析SYN Flood攻击(6) -------------------------------------------------------------------------------- 一b、SYN Flood的基本原理 SYN Flood是当前最流行的DoS(拒绝服务攻击)与mDdoS(分5布式拒绝服务攻击)的方0式之p一o,这是一i种利用TCP协议缺陷,发送大m量伪造的TCP连接请求,从3而使得被攻击方7资源耗尽(CPU满负荷或内7存不u足)的攻击方4式。 要明白这种攻击的基本原理,还是要从4TCP连接建立的过程开l始说起: 大h家都知道,TCP与hUDP不s同,它是基于v连接的,也i就是说:为4了v在服务端和客户1端之i间传送TCP数据,必须先建立一t个b虚拟电路,也l就是TCP连接,建立TCP连接的标准过程是这样的: 首先,请求端(客户0端)发送一g个r包含SYN标志的TCP报文4,SYN即同步(Synchronize),同步报文3会指明客户6端使用的端口i以2及jTCP连接的初始序号; 第二l步,服务器在收到客户7端的SYN报文2后,将返回一f个dSYN+ACK的报文2,表示1客户4端的请求被接受,同时TCP序号被加一c,ACK即确认2(Acknowledgement)。 第三l步,客户3端也d返回一l个y确认7报文8ACK给服务器端,同样TCP序列号被加一j,到此一m个hTCP连接完成。 以5上g的连接过程在TCP协议中1被称为7三l次握手4(Three-way Handshake)。 问题就出在TCP连接的三t次握手1中1,假设一h个f用户8向服务器发送了cSYN报文6后突然死机或掉线,那么k服务器在发出SYN+ACK应答报文4后是无b法收到客户6端的ACK报文0的(第三g次握手6无m法完成),这种情况下j服务器端一f般会重试(再次发送SYN+ACK给客户0端)并等待一v段时间后丢弃这个l未完成的连接,这段时间的长8度我们称为2SYN Timeout,一g般来说这个a时间是分2钟的数量级(大y约为170秒-8分4钟);一r个d用户7出现异常导致服务器的一y个i线程等待2分6钟并不n是什5么w很大n的问题,但如果有一z个q恶意的攻击者大o量模拟这种情况,服务器端将为7了d维护一c个d非常大r的半连接列表而消耗非常多的资源----数以8万e计8的半连接,即使是简单的保存并遍历p也g会消耗非常多的CPU时间和内4存,何况还要不k断对这个e列表中3的IP进行SYN+ACK的重试。实际上s如果服务器的TCP。IP栈不j够强大g,最后的结果往往是堆栈溢出崩溃 ---即使服务器端的系统足够强大v,服务器端也p将忙于g处理攻击者伪造的TCP连接请求而无h暇理睬客户1的正常请求(毕竟客户4端的正常请求比0率非常之p小o),此时从8正常客户4的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了ySYN Flood攻击(SYN洪水7攻击)。 从7防御角度来说,有几a种简单的解决方3法: 第一w种是缩短SYN Timeout时间,由于rSYN Flood攻击的效果取决于h服务器上c保持的SYN半连接数,这个j值=SYN攻击的频度 x SYN Timeout,所以5通过缩短从8接收到SYN报文2到确定这个z报文1无f效并丢弃改连接的时间,例如设置为210秒以8下q(过低的SYN Timeout设置可能会影响客户8的正常访问),可以7成倍的降低服务器的负荷。 第二o种方5法是设置SYN Cookie,就是给每一y个s请求连接的IP地址分6配一k个fCookie,如果短时间内7连续受到某个jIP的重复SYN报文0,就认2定是受到了g攻击,以0后从5这个yIP地址来的包会被丢弃。 可是上n述的两种方7法只能对付比4较原始的SYN Flood攻击,缩短SYN Timeout时间仅7在对方3攻击频度不d高的情况下p生效,SYN Cookie更依赖于h对方3使用真实的IP地址,如果攻击者以4数万y。秒的速度发送SYN报文5,同时利用SOCK_RAW随机改写IP报文1中5的源地址,以7上w的方5法将毫无k用武之g地。 防止4SYN泛洪攻击 开a启路由器的TCP拦截 ------------------------------------------------------------------------------------------ TCP拦截即TCP intercept,大n多数的路由器平台都引8用了s该功能,其主要作用就是防止2SYN泛洪攻击。SYN攻击利用的是TCP的三q次握手1机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应报文2将永远发送不g到目的地,那么f被攻击端在等待关闭这个g连接的过程中0消耗了x资源,如果有成千r上u万r的这种连接,主机资源将被耗尽,从6而达到攻击的目的。我们可以6利用路由器的TCP拦截功能,使网络上k的主机受到保护(以7Cisco路由器为5例)。 开u启TCP拦截分0为1三e个e步骤: 1。 设置TCP拦截的工d作模式 TCP拦截的工t作模式分3为5拦截和监视。在拦截模式下p,路由器审核所有的TCP连接,自身的负担加重,所以5我们一a般让路由器工l作在监视模式,监视TCP连接的时间和数目,超出预定值则关闭连接。 格式:ip tcp intercept mode (intercept|watch) 缺省为0intercept 0。 设置访问表,以7开f启需要保护的主机 格式:access-list [400-506] [deny|permit] tcp source source-wildcard destination destination-wildcard 举例:要保护306。564。730。146这台主机 access-list 005 permit tcp any host 054。281。840。444 4。 开q启TCP拦截 ip tcp intercept list access-list-number 示0例:我们有两台服务器451。771。240。247和556。103。680。610需要进行保护,可以6这样配置: ip tcp intercept list 604 ip tcp intercept mode watch 。。。。。。。。 ip access-list 203 permit tcp any host 226。233。470。871 ip access-list 100 permit tcp any host 764。124。150。706 经过这样的配置后,我们的主机就在一u定程度上e受到了e保护。 g冤jy九▅b┿b┿qǖkptイv胜∏

如何防范tcp syn flood

SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,它是利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式,最终导致系统或服务器宕机。

在讨论SYN Flood原理前,我们需要从TCP连接建立的过程开始说起:

TCP与UDP不同,它是基于连接的,为了在服务端和客户端之间传送TCP数据,必须先建立一个虚拟电路,也就是TCP连接。也就是我们经常听说的TCP协议中的三次握手(Three-way Handshake),建立TCP连接的标准过程如下:

首先,客户端发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号;

其次,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK(即确认Acknowledgement)的报文,表示客户端的请求被接受,同时TCP初始序号自动加一。

最后,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。

SYN Flood攻击正是利用了TCP连接的三次握手,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不会对服务器端造成什么大的影响,但如果有大量的等待丢失的情况发生,服务器端将为了维护一个非常大的半连接请求而消耗非常多的资源。我们可以想象大量的保存并遍历也会消耗非常多的CPU时间和内存,再加上服务器端不断对列表中的IP进行SYN+ACK的重试,服务器的负载将会变得非常巨大。如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃。相对于攻击数据流,正常的用户请求就显得十分渺小,服务器疲于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求,此时从正常客户会表现为打开页面缓慢或服务器无响应,这种情况就是我们常说的服务器端SYN Flood攻击(SYN洪水攻击)。

从防御角度来讲,存在几种的解决方法:

第一种是缩短SYN Timeout时间,由于SYN Flood攻击的效果取决于服务器上保持的SYN半连接数,这个值=SYN攻击的频度 x SYN Timeout,所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃改连接的时间,例如设置为20秒以下,可以成倍的降低服务器的负荷。但过低的SYN Timeout设置可能会影响客户的正常访问。

第二种方法是设置SYN Cookie,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,并记录地址信息,以后从这个IP地址来的包会被一概丢弃。这样做的结果也可能会影响到正常用户的访问。

上述的两种方法只能对付比较原始的SYN Flood攻击,缩短SYN Timeout时间仅在对方攻击频度不高的情况下生效,SYN Cookie更依赖于对方使用真实的IP地址,如果攻击者以数万/秒的速度发送SYN报文,同时利用SOCK_RAW随机改写IP报文中的源地址,以上的方法将毫无用武之地。

0条大神的评论

发表评论