TCP安全

时间:2024.4.20

TCP的攻击方式与相关解决办法分析

伪造IP地址(TCP欺骗) 

最初,网络监控设备会监测到大量的TCP SYN包从某个主机发往A的登录端口。主机A会回送相应的SYN-ACK包。SYN包的目的是创建大量的与主机A的半开放的TCP连接,从而填满了主机A的登录端口连接队列。 

大量的TCP-SYN包将从主机X经过网络发往主机B,相应地有SYN-ACK包从主机B发往主机X。然后主机X将用RST包作应答。这个SYN/SYN-ACK/RST包序列使得入侵者可以知道主机B的TCP序列号发生器的动作。 

主机A向主机B发送一个SYN包。实际上,这是主机X发送的一个“伪造”包。收到这个包之后,主机B将向主机A发送相应的SYN-ACK包。主机A向主机B发送ACK包。按照上述步骤,入侵主机能够与主机B建立单向TCP连接。

SYN Flooding

SYN Flooding是最为有效和流行的一种DoS攻击形式。它利用TCP三次握手协议的缺陷,向目标主机发送大量的伪造源地址的SYN连接请求,消耗目标主机的资源,从而不能够为正常用户提供服务。

在TCP会话初期,有所谓的“三次握手”过程:对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包进行编号,并需要等待这些包传送给目标机之后的确认消息。TCP总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。由于TCP要时刻跟踪,这需要额外开销,使得TCP的格式有些显得复杂。

TCP三次握手的步骤如下:

(1)设主机A要与主机B通信,要建立一个TCP连接。首先,主机B(在这儿是服务器),必须先运行一个服务器进程,发出一个“被动找开”命令给TCP。之后服务器进程便不断探测端口,看是否有客户进程有连接请求。并处于“听”状态。客户端主机A的应用进程,向其TCP发“主动打开”命令,指明要与某个IP地址的某个端口建立TCP连接。第一次主机A的TCP便向主机B的TCP发出连接请求报文。TCP报文中指明了要连接的IP地址(隐含TP数据报指明)和端口号,设置能够接受的TCP数据段最大值,以及一些用户数据,SYN=1,ACK=0。这称为“第一次握手”。

(2)主机A的连接请求到达主机B后,主机B的TCP查看是否有进程在侦听该端口,如没有,就发送一个RST=1的应答,拒绝连接,否则将到达TCP数据段留给“侦听”进程。“侦听”进程将发回一个应答TCP报文段,其中SYN=1,ACK=1,确认序号ACKSEQ=X+1,同时自己选一个发送序号SEQ=Y。这是“第二次握手”。

(3)主机A收到主机B的确认报文后,再向主机B发出一个确认TCP报文段,其中SYN=1,ACK=1,SEQ=X+1,ACKSEQ=Y+1,这就完成了“第三次握手”。

在SYN Flooding攻击中,黑客机器向受害主机发送大量伪造源地址的TCP SYN报文,受害主机分配必要的资源,然后向源地址返回SYN+ACK包,并等待源端返回ACK包,如图1所示。由于源地址是伪造的,所以源端永远都不会返回ACK报文,受害主机继续发送SYN+ACK包,并将半连接放入端口的积压队列中,虽然一般的主机都有超时机制和默认的重传次数,但是由于端口的半连接队列的长度是有限的,如果不断地向受害主机发送大量的TCP SYN报文,半连接队列就会很快填满,服务器拒绝新的连接,将导致该端口无法响应其他机器进行的连接请求,最终使受害主机的资源耗尽。

SYN Flooding攻击示意图

目前在防御SYN Flooding攻击方面有2种比较有效的技术。

(1)SYN-cookie技术

一般情况下,当服务器收到一个TCP SYN报文后,马上为该连接请求分配缓冲区,然后返回一个SYN+ACK报文,这时形成一个半连接。SYN Flooding正是利用了这一点,发送大量的伪造源地址的SYN连接请求,而不完成连接。这样就大量地消耗服务器的资源。

SYN-cookie技术针对标准TCP连接建立过程资源分配上的这一缺陷,改变了资源分配的策略。当服务器收到一个SYN报文后,不立即分配缓冲区,而是利用连接的信息生成一个cookie,并将这个cookie作为将要返回的SYN+ACK报文的初始序列号。当客户端返回一个ACK报文时,根据包头信息计算cookie,与返回的确认序列号(初始的序列号+1)的前24位进行对比,如果相同,则是一个正常连接,然后,分配资源,建立连接。

该技术的巧妙之点在于避免了在连接信息未完全到达前进行资源分配,使SYN Flooding攻击的资源消耗失效。实现的关键之处在于cookie的计算。cookie的计算应该做到包含本次连接的状态信息,使攻击者不能伪造cookie。cookie的计算过程如下。

① 服务器收到一个SYN包后,计算一个消息摘要mac:

mac = MAC(A,k)

MAC是密码学中的一个消息认证码函数,也就是满足某种安全性质的带密钥的hash函数,它能够提供cookie计算中需要的安全性。A为客户和服务器双方的IP地址和端口号以及参数t的串联组合:A = SOURCE_IP || SOURCE_PORT || DST_IP || DST_PORT || t;K为服务器独有的密钥;时间参数t为32比特长的时间计数器,每64秒加1;

② 生成cookie:

cookie = mac(0:24):表示取mac值的第0到24比特位;

③ 设置将要返回的SYN+ACK报文的初始序列号,设置过程如下:

· 高24位用cookie代替;

· 接下来的3比特位用客户要求的最大报文长度MMS代替;

· 最后5比特位为t mod 32。

客户端收到来自服务器SYN+ACK报文后,返回一个ACK报文,这个ACK报文将带一个cookie(确认号为服务器发送过来的SYN ACK报文的初始序列号加1,所以不影响高24位),在服务器端重新计算cookie,与确认号的前24位比较,如果相同,则说明未被修改,连接合法,然后,服务器完成连接的建立过程。

SYN-cookie技术由于在连接建立过程中不需要在服务器端保存任何信息,实现了无状态的三次握手,从而有效地防御了SYN Flooding攻击。但是该方法也存在一些弱点。由于cookie的计算只涉及了包头的部分信息,在连接建立过程中不在服务器端保存任何信息,所以失去了协议的许多功能,比如超时重传。此外,由于计算cookie有一定的运算量,增加了连接建立的延迟时间,因此,SYN-cookie技术不能作为高性能服务器的防御手段。通常采用动态资源分配机制,即分配了一定的资源后再采用cookie技术,Linux系统中的SYN-cookie就是这样实现的。还有一个问题是,当我们避免了SYN Flooding攻击的同时,也提供了另一种拒绝服务攻击方式,攻击者发送大量的ACK报文,使服务器忙于计算验证。尽管如此,在预防SYN Flooding攻击方面,SYN-cookie技术仍然是一种有效的技术。

(2)地址状态监控的解决方法

地址状态监控的解决方法是利用监控工具对网络中的有关TCP连接的数据包进行监控,并对监听到的数据包进行处理。处理的主要依据是连接请求的源地址。

每个源地址都有一个状态与之对应,总共有四种状态:

· 初态:任何源地址刚开始的状态;

· NEW状态:第一次出现或出现多次也不能断定存在的源地址的状态;

· GOOD状态:断定存在的源地址所处的状态;

· BAD状态:源地址不存在或不可达时所处的状态。

具体的动作和状态转换根据TCP头中的位码值决定。

① 监听到SYN包,如果源地址是第一次出现,则置该源地址的状态为NEW状态;如果是NEW状态或BAD状态;则将该包的RST位置1然后重新发出去,如果是GOOD状态不作任何处理。

② 监听到ACK或RST包,如果源地址的状态为NEW状态,则转为GOOD状态;如果是GOOD状态则不变;如果是BAD状态则转为NEW状态;如果是BAD状态则转为NEW状态。

③ 监听到从服务器来的SYN ACK报文(目的地址为addr),表明服务器已经为从addr发来的连接请求建立了一个半连接,为防止建立的半连接过多,向服务器发送一个ACK包,建立连接,同时,开始计时,如果超时,还未收到ACK报文,证明addr不可达,如果此时addr的状态为GOOD则转为NEW状态;如果addr的状态为NEW状态则转为BAD状态;如果为addr的状态为BAD状态则不变。

地址状态的转换图如图2所示。

图2 地址状态转换图

下面分析一下基于地址状态监控的方法如何能够防御SYN Flooding攻击。

对于一个伪造源地址的SYN报文,若源地址第一次出现,则源地址的状态为NEW状态,当监听到服务器的SYN+ACK报文,表明服务器已经为该源地址的连接请求建立了半连接。此时,监控程序代源地址发送一个ACK报文完成连接。这样,半连接队列中的半连接数不是很多。计时器开始计时,由于源地址是伪造的,所以不会收到ACK报文,超时后,监控程序发送RST数据包,服务器释放该连接,该源地址的状态转为BAD状态。之后,对于每一个来自该源地址的SYN报文,监控程序都会主动发送一个RST报文。

对于一个合法的SYN报文,若源地址第一次出现,则源地址的状态为NEW状态,服务器响应请求,发送SYN+ACK报文,监控程序发送ACK报文,连接建立完毕。之后,来自客户端的ACK很快会到达,该源地址的状态转为GOOD状态。服务器可以很好地处理重复到达的ACK包。

ACK Flooding

ACK Flooding攻击是在TCP连接建立之后,所有的数据传输TCP报文都是带有ACK标志位的,主机在接收到一个带有ACK标志位的数据包的时候,需要检查该数据包所表示的连接四元组是否存在,如果存在则检查该数据包所表示的状态是否合法,然后再向应用层传递该数据包。如果在检查中发现该数据包不合法,例如该数据包所指向的目的端口在本机并未开放,则主机操作系统协议栈会回应RST包告诉对方此端口不存在。

这里,服务器要做两个动作:查表、回应ACK/RST。这种攻击方式显然没有SYN Flooding给服务器带来的冲击大,因此攻击者一定要用大流量ACK小包冲击才会对服务器造成影响。按照我们对TCP协议的理解,随机源IP的ACK小包应该会被Server很快丢弃,因为在服务器的TCP堆栈中没有这些ACK包的状态信息。但是实际上通过测试,发现有一些TCP服务会对ACK Flooding比较敏感,比如说JSP Server,在数量并不多的ACK小包的打击下,JSP Server就很难处理正常的连接请求。对于Apache或者IIS来说,10kbps的ACK Flooding不会构成危胁,但是更高数量的ACK Flooding会造成服务器网卡中断频率过高,负载过重而停止响应。可以肯定的是,ACK Flooding不但可以危害路由器等网络设备,而且对服务器上的应用有不小的影响。

如果没有开放端口,服务器将直接丢弃,这将会耗费服务器的CPU资源。如果端口开放,服务器回应RST。

利用对称性判断来分析出是否有攻击存在。所谓对称性判断,就是收包异常大于发包,因为攻击者通常会采用大量ACK包,并且为了提高攻击速度,一般采用内容基本一致的小包发送。这可以作为判断是否发生ACK Flooding的依据,但是目前已知情况来看,很少有单纯使用ACK Flooding攻击,通常都会和其他攻击方法混合使用,因此,很容易产生误判。

一些防火墙应对的方法是:建立一个hash表,用来存放TCP连接“状态”,相对于主机的TCP协议栈实现来说,状态检查的过程相对简化。例如,不作sequence number的检查,不作包乱序的处理,只是统计一定时间内是否有ACK包在该“连接”(即四元组)上通过,从而“大致”确定该“连接”是否是“活动的”。

Connection Flooding

Connection Flooding是典型的并且非常的有效的利用小流量冲击大带宽网络服务的攻击方式,这种攻击方式目前已经越来越猖獗。这种攻击的原理是利用真实的IP地址向服务器发起大量的连接,并且建立连接之后很长时间不释放,占用服务器的资源,造成服务器上残余连接(WAIT状态)过多,效率降低,甚至资源耗尽,无法响应其他客户所发起的连接。

其中一种攻击方法是每秒钟向服务器发起大量的连接请求,这类似于固定源IP的SYN Flooding攻击,不同的是采用了真实的源IP地址。通常这可以在防火墙上限制每个源IP地址每秒钟的连接数来达到防护目的。但现在已有工具采用慢速连接的方式,也即几秒钟才和服务器建立一个连接,连接建立成功之后并不释放并定时发送垃圾数据包给服务器使连接得以长时间保持。这样一个IP地址就可以和服务器建立成百上千的连接,而服务器可以承受的连接数是有限的,这就达到了拒绝服务的效果。

另外,蠕虫大规模爆发的时候,由于蠕虫代码比较简单,传播过程中会出现大量源IP地址相同的包,对于 TCP 蠕虫,则表现为大范围扫描行为。这是在判断Connection Flooding时需要注意的。

该攻击的一般表现形式是:在受攻击的服务器上使用netstat –an命令来查看,会发现大量连接状态来自少数的几个源。如果统计的话,可以看到连接数对比平时出现异常。并且增长到某一阈值之后开始波动,说明此时可能已经接近性能极限。因此,对这种攻击的判断原则为:在流量上体现并不大,甚至可能会很小;出现大量的ESTABLISH状态;新建的ESTABLISH状态总数有波动。

防范该攻击主要有如下方法。

· 主动清除残余连接。

· 对恶意连接的IP进行封禁。

· 限制每个源IP的连接数。

· 可以对特定的URL进行防护。

· 反查Proxy后面发起HTTP Get Flood的源。

l  RST复位攻击

A和服务器B之间建立了TCP连接,此时C伪造了一个TCP包发给B,使B异常的断开了与A之间的TCP连接,就是RST攻击了。实际上从上面RST标志位的功能已经可以看出这种攻击如何达到效果了。
 
那么伪造什么样的TCP包可以达成目的呢?我们至顶向下的看。
 
假定C伪装成A发过去的包,这个包如果是RST包的话,毫无疑问,B将会丢弃与A的缓冲区上所有数据,强制关掉连接。
 
如果发过去的包是SYN包,那么,B会表示A已经发疯了(与OS的实现有关),正常连接时又来建新连接,B主动向A发个RST包,并在自己这端强制关掉连接。
 
这两种方式都能够达到复位攻击的效果。似乎挺恐怖,然而关键是,如何能伪造成A发给B的包呢?这里有两个关键因素,源端口和序列号。
 
一个TCP连接都是四元组,由源IP、源端口、目标IP、目标端口唯一确定一个连接。所以,如果C要伪造A发给B的包,要在上面提到的IP头和TCP头,把源IP、源端口、目标IP、目标端口都填对。这里B作为服务器,IP和端口是公开的,A是我们要下手的目标,IP当然知道,但A的源端口就不清楚了,因为这可能是A随机生成的。当然,如果能够对常见的OS如windows和linux找出生成source port规律的话,还是可以搞定的。
 
序列号问题是与滑动窗口对应的,伪造的TCP包里需要填序列号,如果序列号的值不在A之前向B发送时B的滑动窗口内,B是会主动丢弃的。所以我们要找到能落到当时的AB间滑动窗口的序列号。这个可以暴力解决,因为一个sequence长度是32位,取值范围0-4294967296,如果窗口大小像上图中我抓到的windows下的65535的话,只需要相除,就知道最多只需要发65537(4294967296/65535=65537)个包就能有一个序列号落到滑动窗口内。RST包是很小的,IP头+TCP头也才40字节,算算我们的带宽就知道这实在只需要几秒钟就能搞定。

那么,序列号不是问题,源端口会麻烦点,如果各个操作系统不能完全随机的生成源端口,或者黑客们能通过其他方式获取到source port,RST攻击易如反掌,后果很严重

l  TCP劫持攻击

   TCP劫持法的基本思想是,黑客控制了一台连接于入侵目标网的计算机,然后从网上断开以让网络服务器误以为黑客是实际的客户端。


   成功地劫持了可信任计算机之后,黑客将用自己的IP地址更换入侵目标机的每一个包的IP地址,并模仿其顺序号。安全专家称顺序号伪装为”IP模仿”,黑客用IP模仿在自己机器上模拟一个可信系统的IP地址,黑客模仿了目标计算机之后,便用灵巧的顺序号模仿法成为一个服务器的目标。


   最后,TCP劫持入侵比IP模仿更具危害性,因为黑客一般在成功的TCP劫持入侵后比成功的IP模仿入侵后有更大的访问能力。

更多相关推荐:
小学消防安全隐患排查整治工作总结

我校认真贯彻安全第一,预防为主的方针,以明确责任、强化责任、追究责任为核心,在接到市教育局关于开展消防安全隐患排查整改通知后,在全校范围内开展了消防隐患排查整改工作,为打造平安校园打下了扎实的基础。一、健全领导…

海事局百日安全生产活动总结

市海事局:为认真贯彻落实全省安全生产暨百日安全生产活动电视电话会议精神,按照市局、华蓥市政府和市交通运输局的统一要求和安排,自20xx年x月x日起至今年x月x日期间,我处以百安活动为载体,围绕抓好枯水雾季…

XX小学安全教育日活动总结

今年x月x日是第十四个全国中小学生安全教育日,今年的教育主题是强化安全意识,提升安全素养学校围绕这一主题,根据本校实际情况,通过一系列内容丰富的活动,使学生在参与活动的过程中,树立安全意识,掌握安全知识,提高…

百日安全生产活动总结

按照市经济和信息化局关于开展20xx百日安全生产活动实施方案的要求,公司紧紧围绕强化监管、落实责任、突出预防、保障平安的主题,以百日安全生产活动为抓手,扎实推进去冬今春安全管理工作。通过进一步加强领导,突出重点…

安全逃生演练总结讲话

各位老师、同学们:为加强学校的安全管理,提高全校师生的安全意识,今天上午9:33分,全校师生进行了一次火灾和地震应急逃生疏散演练。在疏散演练的过程中,各教学楼、实验楼、运动场负责人,各路口引导员,各位班主任老师…

安全生产月活动个人总结 精选4篇

安全生产月已经结束了,在安全月活动期间,运行车间全体职工以安全责任重于泰山为主题,以安全第一,预防为主为方针,以实际行动积极投入到安全生产工作中去,为确保安全优质供水,做出了极大的努力,取得了显著的成效,并对自…

校园安全周总结

我校领导对安全工作非常重视,在日常教育教学工作中,始终抓安全工作。开学初,积极响应教育局号召并开展安全活动,使广大师生的安全意识进一步提高,安全责任心大大增强,安全无小事、安全大于天师生安全,人人有责已深入人心…

信息安全范文

文献综述基于DCT系数均值盲水印算法研究及其在珠宝图像数字水印生成与识别中的应用学号20xx0820xx12姓名凌慧泉摘要静态图像数字水印是利用数字水印技术在静态图像中嵌入水印用来保护图像的版权本文归纳了静态图...

公司三级安全教育内容(范文)

公司三级安全教育内容(范文),内容附图。

安全在我心中

安全在我心中安全是一个既古老又年轻的字眼是一个只有起点而无终点的永恒话题是一个单位一个企业一切工作的基石安全又是一项复杂的系统工程安全事故是社会六大不稳定因素之一而所发生的安全事故几乎都是管理不严操作不当违反规...

公司安全生产征文

安全生产重于泰山俗话说安全无小事安全是人类生存和发展的基本条件安全生产是关系到企业兴衰关系到整个公司的根本利益关系到广大职工生命和财产安全的头等大事对于我们通信企业来说安全就是生命安全就是效益唯有安全生产这个环...

安全协议范本

甲方乙方为了贯彻安全第一预防为主综合治理的安全生产方针规范乙方在承接甲方钢结构施工检修工程安全及其他劳务时的安全行为促使乙方加强本单位安全生产管理建立健全安全生产责任制度和切实有效的安全防范措施确保安全生产根据...

安全(525篇)