四、主动的非同步入侵 2 B g+ q& Y4 t) e5 a: S j ) E! v2 H) ~9 C% d
TCP连接需要同步数据包交换,实际上,如果由于某种原因,包的顺序号不是接收机所期望的,接收机将遗弃它,而去等待顺序号正确的数据包。黑客可以探明TCP协议对顺序号的要求以截取连接。 / B4 k ?7 D9 D+ X5 S # q5 ]6 d! Q P- Y0 _; Y+ j: j# _ 下面将详述非同步入侵来攻击系统,黑客或骗取或迫使双方中止TCP连接并进入一个非同步状态,以使得两个系统再也不能交换任何数据。黑客再用第三方主机(换句括说,另一个连接于物理媒介并运送TCP包的计算机)来截取实际中的数据包和为最初连接的两台计算创建可接受的替代包。第三方产生数据以模仿连接中的系统本应交换的数据包。 : D6 Q+ m7 d" e
. {3 U, `' p" R) J# T y- s! } 1.非同步后劫持入侵 , c, u& e9 G' N - c6 }4 {/ K$ G- F0 t$ E
假设,此刻黑客可以窃听两个系统交换的用以形成TCP连接的任何数据包,而且,在截取数据包之后,黑客可以伪造其想要的任何IP包来取代原包。黑客的伪包能让黑客冒充客户机或服务器(甚至伪包可以让黑客既冒充客户机又冒充服务器)。如果黑客可以让这些假设变成现实,那么实际上黑客能迫使在客户机和服务器间传送的消息改变走向,即从客户机到黑客,从服务器到黑客。 ! @' U& Y. p, n# S) B" ?
1 _3 w0 Z; V6 u: n& v8 A | 您将在下一部分了解到黑客可以用一些技术使一个TCP连接非同步。此时,假设黑客已成功地非同步了TCP部分,且黑客发送了一个包头中包含以下代码的包: ; b2 J1 `3 n" ?2 P / R7 [( r% Y1 v# a# x
SEG_SEQ = CLT_SEQ 6 U7 v0 Q8 f5 ?0 E. B4 D7 N' e* D Y/ R
SEG_ACK = CLT_ACK $ k6 P# `7 A, L! B! {' }5 X + }; N; K( \5 n+ m: V 包头域中和第一行,SEG_SEQ = CLT_SEQ,指明了包的顺序号是客户机系列的下一个顺序号(SEG代表数据段);第二行,SEG_ACK = CLT_ACK,把数据包的确认值赋给下一个确认值。因为黑客非同步了TCP 连接,客户机的包顺序号(CLT_SEQ)与前面期望顺序号不相等,服务器不接收数据且将包放弃,黑客拷贝服务器放弃的包(如图5)。 3 V1 t& c0 }" y6 I6 o 6 b/ v8 Z) G5 s" B8 b. W7 h图5黑客拷贝服务器放弃的包 在服务器放弃包之后短暂延迟时间,黑客将与客户机一样发送同样的包,只是改变SEG_SEQ 和SEG_ACK命令(和包的记数值),以使包头域词条变成下面代码: " w3 Q! O3 m* k 2 }& c, h. `$ n
SEG_SEQ = SVR_ACK 5 q5 O1 p# x' G/ O5 H0 O SEG_ACK = SVR_SEQ ! o) E) z( {! G6 t: V , f- m9 d% f# u. T5 V+ X) d6 m 因为包头域的顺序号是正确的(SVR_ACK等于SEG_SEQ),服务器接受包头域部分词条同时接受包且处理数据,另外,依据客户机传送但服务器放弃的包的数目,原客户机仍会不断传送包。 - u+ R- g. u$ f
$ f' C9 W$ e, A: x* ` 如果您定义变量CLT_TO_SVR_OFFSET等于SVR_ACK减CLT_SEQ之结果(即服务器期待的顺序号和客户机的实际的顺序号是相异数),SVR_TO_CLT_OFSET等于CLF_ACK减去SVR_SEQ,黑客一定会重写客户机送给服务器的TCP包,以让包代表SEG_SEQ和SEG_ACK之值(如图6)。 , b7 h" f4 P: ^" `5 E3 T* V2 G9 \ . n" D+ X& B5 S- i: U/ {8 [图6 被截获的连接 SEG_SEG =(SEG_SEQ+CLT_TO_SVR_OFFSET) & ^: W$ ], L5 c2 ~! A) P( }5 X R! G
SEG_ACP =(SEG_ACK_SVR_TO_CLT_OFFSET) 1 [# e2 `6 O7 X' z - f7 N9 z" ^* b& U0 U# Q
因为所有的传送都经过黑客,它便可以在传送流中加任何数据或删任何数据。例如,如果连接是一个远程登录使用的 Telnet,黑客能代表用户添加任何命令(Unix命令 echo jamsa.com,它将产生一个所有连接于jamsa.com服务器的网络的主机列表,就是一个黑客发出命令的范例(如图7)。 1 D+ `2 u0 G2 P' E0 M# H" o0 Y/ a9 @/ u
图7 黑客往传送包中加命令 在服务器接收到包之后,服务器对黑客请求的数据和客户端请求的数据予以响应。在服务器对客户端响应之前,黑客可以漏掉或删除服务器对黑客命令的响应,如此,用户便不再觉察到任何黑客入侵(如图8)。 7 }, Q; M; a9 J- {' Q* [图8 黑客从服务器的传送包中删除其请求的信息 以下部分您将了解 TCP ACK风暴,它在黑客继续伪装时,在非同步后劫持入侵中将发作。 U6 \* Q1 z4 K7 w* F ! r% Z1 ~3 X+ @2 ~- r3 d 2.TCP ACK风暴 0 S4 X" E1 h9 a! z / g8 A. B5 G) V" n5 I. Q
前面部分详述的后期非同步劫持入侵有一个基本的不足,即它将大量地产生 TCP ACK包,网络专家称这些大量的 ACK包为 TCP ACK风暴。当一个主机(无论客户机或服务器)收到一个不能接受的包时,主机将向产生的主机发送期待的顺序号来认证这个不能接收的包。在以前详述的主动的 TCP入侵的情况下,第一个 TCP ACK包将包含服务器的顺序号,客户机因为没有送出请求更改的包,所以将不接受这个认证包。因此,客户机产生自己的认证包,它反过来迫使服务器产生另一个认证包,这些反复循环,理论上对传送每个数据包是一个无止尽循环(如图9)。 4 E2 q" j3 @, F3 g {2 T9 ^. I2 h
& A! D0 m# M) j9 X+ e2 F图9 入侵产生的风暴循环 因为认证包不传送数据,如果接收者丢失了这个包,ACK包的发送者将不再传递。换句话说,如果一个机器在ACK风暴循环中丢掉一个包,循环便终止。幸运的是,正如您以前所知,TCP将IP用在不可靠的网络层上,以一个非空的包损失,网络设计者将迅速结束循环。而且,网上丢掉的包越多,ACK风暴持续期越短。再加之,ACK循环是自规的--换句话说,黑客产生的循环越多,客户机和服务器接到的交通数量也越多,它反过来增加拥挤度。这样便丢掉包,有更多的循环结束。 % N' b' L' ?$ b ! _8 N/ h5 s+ G) m
TCP 连接在每次客户机或服务器发送数据时创建一个循环。如果既不是客户机又不是服务器发送数据,TCP连接便产生不了循环。如果客户机和服务器都未发送数据也没有黑客认证数据,发送者将再传这个数据。在再传之后,TCP连接将为每一个再传送创建一个风暴,最后连接的双方放弃连接,因为客户机和服务器都未发送ACK包。如果黑客认证了数据传送,TCP连接将仅产生一个风暴。实际上,由于网上的负荷,黑客经常错过数据包,因此黑客将认证再传送的第一个包--意味着每次在黑客传输时入侵将至少产生一个ACK风暴。