发信人: aaa234(我只只在乎你) 
整理人: jiaxu2000(2004-03-30 10:01:47), 站内信件
 | 
 
 
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地址证实 
 的应用程序。其结果是未授权的远端用户进入带有防火 
 墙的主机系统。 
 
 
 图1 TCP状态转移图 
 
 假设有两台主机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秒内作出响应的。 
 
 图2 TCP状态图的一个外部转移 
 
 下面我们来讨论一下主机X和主机A之间相互发送的 
 包序列。X向A发送一个包,其SYN位和FIN位置位,A向X 
 发送ACK包作为响应: 
 
 X→A:SYN FIN(系列号=M) 
 
 A→X:ACK(应答序号=M+1) 
 
 从图2的状态转移可以看出,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的转 
 移弧,如图2所示。 
 在上述入侵例子中,由于三次握手没能彻底完成, 
 因此并未真正建立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段,这样就可以终止连接了! 
 从上面的分析我们可以看到几种TCP应用程序中都存 
 在外部状态转移。这会给系统带来严重的安全性问题。 
 
 §2.3 定时器问题 
 
 正如前文所述,一旦进入连接建立过程,则启动连 
 接定时器。如果在规定时间内不能建立连接,则TCP机回 
 到CLOSED状态。 
 我们来分析一下主机A和主机X的例子。主机A向主机 
 X发送一个SYN包,期待着回应一个SYN-ACK包。假设几乎 
 同时,主机X想与主机A建立连接,向A发送一个SYN包。A 
 和X在收到对方的SYN包后都向对方发送一个SYN-ACK包。 
 当都收到对方的SYN-ACK包后,就可认为连接已建立。在 
 本文中,假设当主机收到对方的SYN包后,就关闭连接建 
 立定时器。 
 
 X→A:SYN(序列号=M) 
 
 A→X:SYN(序列号=N) 
 
 X→A:SYN(序列号=M),ACK(应答号=N+1) 
 
 A→X:SYN(序列号=N),ACK(应答号=M+1) 
 
 ●主机X向主机A发送一个FTP请求。在X和A之间建立起一 
 个TCP连接来传送控制信 
 号。主机A向X发送一个SYN包以启动一个TCP连接用来 
 传输数据,其状态转移到 
 SYN-SENT状态。 
 
 ●当X收到来自A的SYN包时,它回送一个SYN包作为响 
 应。 
 
 ●主机X收到来自A的SYN-ACK包,但不回送任何包。 
 
 ●主机A期待着接收来自X的SYN-ACK。由于X不回送任何 
 包,因此A被锁在SYN-RCVD 
 状态。这样,X就成功地封锁了A的一个端口。 
 
 §3 利用网络监控设备观测网络入侵 
 
 我们在局域网上安装一个网络监控设备观测通过网 
 络的包,从而判断是否发生了网络入侵。下面我们将讨 
 论在几种入侵过程中网络监控设备可观测到的序列包。 
 
 §3.1 伪造IP地址 
 最初,网络监控设备会监测到大量的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连接。 
 
 §3.2 虚假状态转移 
 
 当入侵者试图利用从SYN-RCVD到CLOSE-WAIT的状态 
 转移长时间阻塞某服务器的一个网络端口时,可以观察 
 到如下序列包: 
 
 ●从主机X到主机B发送一个带有SYN和FIN标志位置位的 
 TCP包。 
 
 ●主机B首先处理SYN标志,生成一个带有相应ACK标志位 
 置位的包,并使状态转移 
 到SYN-RCVD,然后处理FIN标志,使状态转移到 
 CLOSE-WAIT,并向X回送ACK包。 
 
 ●主机X不向主机B发送其它任何包。主机的TCP机将固定 
 在CLOSE-WAIT状态。直到 
 维持连接定时器将其重置为CLOSED状态。 
 
 因此,如果网络监控设备发现一串SYN-FIN/ACK 
 包,可推断入侵者正在阻塞主机B的某个端口。 
 
 §3.3 定时器问题 
 
 如果一入侵者企图在不建立连接的情况下使连接建 
 立定时器无效,我们可以观察到以下序列包: 
 
 ●主机X从主机B收到一个TCP SYN包。 
 
 ●主机X向主机B回送一个SYN包。 
 
 主机X不向主机B发送任何ACK包。因此,B被阻塞在 
 SYN-RCVD状态,无法响应来自其它客户机的连接请求。 
 
 §4 总结 
 
 目前还没有十分简便的方法防止伪造IP地址的和侵 
 行为,但我们可以采取以下措施来尽可能地保护系统免 
 受这类攻击。首先,我们可以配置路由器和网关,使它 
 们能够拒绝网络外部与本网内具有相同IP地址的连接请 
 求。而且,当包的IP地址不在酝酿 网内时,路由器和网 
 关不应该把本网主机的包发送出去。其次,在包发送到 
 网络上之前,我们可以对它进行加密。虽然加密过程要 
 求适当改变目前的网络环境,但它将保证数据的完整性 
 和真实性。 
 为了防止从SYN-RCVD到CLOSE-WAIT状态的伪转移, 
 需要改变操作系统中TCP操作的部分相关代码,使得当 
 TCP机处于SYN-RCVD状态时,忽略任何对等主机发来的 
 FIN包。 
 只有当建立连接后,才可以使连接建立定时器无 
 效。也就是说,在同步开放连接建立过程中,当主机收 
 到一个ACK时,定时器应置为无效,使状态转移到 
 ESTABLISHED。只有CLOSED等少数几种状态与定时器无关。 
 入侵主机可能会迫使TCP机转移到这些状态,因为该 
 状态不受任何定时器制约,如果入侵者不发送适当的 
 包,主机可能会被阻塞在这个状态。 
 
   
  | 
 
 
 |