关于 TCP/IP协议安全性能问题的分析互连网技术屏蔽了底层网络硬件细节,使得异种网络之间可以互相通信。TCP/IP协议组是目前使用最广泛的网络互连协议。但TCP/IP协议组本身存在着一些安全性问题。这就给“黑客”们攻击网络以可乘之机。由于大量重要的应用程序都以TCP作为它们的传输层协议,因此TCP的安全性问题会给网络带来严重的后果。 §1 TCP状态转移图和定时器 TCP状态转移图控制了一次连接的初始化、建立和终止,该图由定义的状态以及这些状态之间的转移弧构成。TCP状态转移图与定时器密切相关,不同的定时器对应于连接建立或终止、流量控制和数据传输。几类主要的定时器及其功能如下: ●连接定时器:在连接建立阶段,当发送了SYN包后,就启动连接定时器。如果在75秒内没有收到应答,则放弃连接建立。 ●FIN-WAIT-2定时器:当连接从FIN-WAIT-1状态转移到FIN-WAIT-2状态时,把一个 FIN-WAIT-2定时器设置为10分钟。如果在规定时间内该连接没有收到一个带有置位FIN的TCP包,则定时器超时,再定时为75秒。如果在该时间段内仍无FIN包到达,则放弃该连接。 ●TIME-WAIT定时器:当连接进入TIME-WAIT状态时,该定时器被激活。当定时器超时时,与该连接相关的内核数据块被删除,连接终止。 ●维持连接定时器:其作用是预测性地检测连接的另一端是否仍为活动状态。如果设置了SO-KEEPALIVE套接字选择项,则TCP机状态是ESTABLISHED或CLOSE-WAIT。 下面我们就着重讨论TCP状态转移图和定时器所带来的网络安全性问题。 §2 网络入侵方式 §2.1 伪造IP地址 入侵者使用假IP地址发送包,利用基于IP地址证实的应用程序。其结果是未授权的远端用户进入带有防火墙的主机系统。 假设有两台主机A、B和入侵者控制的主机X。假设B授予A某些特权,使得A能够获得B所执行的一些操作。X的目标就是得到与B相同的权利。为了实现该目标,X必须执行两步操作:首先,与B建立一个虚假连接;然后,阻止A向B报告网络证实系统的问题。主机X必须假造A的IP地址,从而使B相信从X发来的包的确是从A发来的。 我们同时假设主机A和B之间的通信遵守TCP/IP的三次握手机制。握手方法是: A→:SYN(序列号=M) B→A:SYN(序列号=N),ACK(应答序号=M+1) A→B:ACK(应答序号=N+1) 主机X伪造IP地址步骤如下:首先,X冒充A,向主机B发送一个带有随机序列号的SYN包。主机B响应,向主机A发送一个带有应答号的SYN+ACK包、该应答号等于原序列号加1。同时,主机B产生自己发送包序列号,并把其与应答号一起发送。为了完成三次握手,主机X需要向主机B回送一个应答包,其应答号等于主机B向主机A发送的包序列号加1。假设主机X与A和B不同在一个子网内,则不能检测到B的包,主机X只有算出B的序列号,才能创建TCP连接。其过程描述如下: X→B:SYN(序列号=M),SRC=A B→A:SYN(序列号=N),ACK(应答号=M+1) X→B:ACK(应答号=N+1),SRC=A 同时,主机X应该阻止主机A响应主机B的包。为此,X可以等到主机A因某种原因终止运行,或者阻塞主机A的操作系统协议部分,使它不能响应主机B。 一旦主机X完成了以上操作,它就可以向主机B发送命令。主机B把执行这些命令,认为他们是由合法主机A发来的。 §2.2 TCP状态转移的问题 上述的入侵过程,主机X是怎么样阻止主机A向主机B发送响应在的,主机调通过发送一系列的SYN包,但不让A向调发送SYN-ACK包而中止主机A的登录端口。如前所述,TCP维持一个连接建立定时器。如果在规定时间内(通常为75秒)不能建立连接,则TCP把重置连接。在前面的例子中,服务器端口是无法在75秒内作出响应的。 下面我们来讨论一下主机X和主机A之间相互发送的包序列。X向A发送一个包,其SYN位和FIN位置位,A向X发送ACK包作为响应: X→A:SYN FIN(系列号=M) A→X:ACK(应答序号=M+1) A开始处于监听(LISTEN)状态。当它收到来自X的包后,就开始处理这个包。值得注意的是,在TCP协议中,关于怎么样处理SYN和FIN同时置位的包并未作出明确的规定。我们假设它首先处理SYN标志位,转移到SYN-RCVD状态。然后再处理FIN标志位,转移到CLOSE-WAIT状态。如果前一个状态是ESTABLISHED,那么转移到CLOSE-WAIT状态就是正常转移。但是,TCP协议中并未对从SYN-RCVD状态到CLOSE-WAIT状态的转移作出定义。但在几种TCP应用程序中都有这样的转移,例如开放系统SUN OS4.1.3,SUR4和ULTRX4.3。因此,在这些TCP应用程序中存在一条TCP协议中未作定义的从状态SYN-RCVD到状态CLOSE-WAIT的转移弧。 在上述入侵例子中,由于三次握手没能彻底完成,因此并未真正建立TCP连接,相应的网络应用程序并未从核心内获得连接。但是,主机A的TCP机处于CLOSE-WAIT状态,因此它可以向X发送一个FIN包终止连接。这个半开放连接保留在套接字侦听队列中,而且应用进程不发送任何帮助TCP执行状态转移的消息。因此,主机A的TCP机被锁在了CL0SE-WAIT状态。如果维持活动定时器特征被使用,通常2小时后TCP把会重置连接并转移到CLOSED状态。 当TCP机收到来自对等主机的RST时,就从ESTABLISHED,FINWAIT-1和FIN-WAIT-2状态转移到CLOSED状态。这些转移是很重要的,因为它们重置TCP机且中断网络连接。但是,由于到达的数据段只根据源IP地址和当前队列窗口号来证实。因此入侵者可以假装成已建立了合法连接的一个主机,然后向另一台主机发送一个带有适当序列号的RST段,这样就可以终止连接了!
上一篇:全面提升Linux服务器的安全性能 下一篇:UNIX操作系统的安全命令集(口令篇) 更多相关文章
|
推荐文章
精彩文章
|