四、主动的非同步入侵
TCP连接需要同步数据包交换,实际上,如果由于某种原因,包的顺序号不是接收机所期望的,接收机将遗弃它,而去等待顺序号正确的数据包。黑客可以探明TCP协议对顺序号的要求以截取连接。
下面将详述非同步入侵来攻击系统,黑客或骗取或迫使双方中止TCP连接并进入一个非同步状态,以使得两个系统再也不能交换任何数据。黑客再用第三方主机(换句括说,另一个连接于物理媒介并运送TCP包的计算机)来截取实际中的数据包和为最初连接的两台计算创建可接受的替代包。第三方产生数据以模仿连接中的系统本应交换的数据包。
1.非同步后劫持入侵
假设,此刻黑客可以窃听两个系统交换的用以形成TCP连接的任何数据包,而且,在截取数据包之后,黑客可以伪造其想要的任何IP包来取代原包。黑客的伪包能让黑客冒充客户机或服务器(甚至伪包可以让黑客既冒充客户机又冒充服务器)。如果黑客可以让这些假设变成现实,那么实际上黑客能迫使在客户机和服务器间传送的消息改变走向,即从客户机到黑客,从服务器到黑客。
您将在下一部分了解到黑客可以用一些技术使一个TCP连接非同步。此时,假设黑客已成功地非同步了TCP部分,且黑客发送了一个包头中包含以下代码的包:
SEG_SEQ = CLT_SEQ
SEG_ACK = CLT_ACK
包头域中和第一行,SEG_SEQ = CLT_SEQ,指明了包的顺序号是客户机系列的下一个顺序号(SEG代表数据段);第二行,SEG_ACK = CLT_ACK,把数据包的确认值赋给下一个确认值。因为黑客非同步了TCP 连接,客户机的包顺序号(CLT_SEQ)与前面期望顺序号不相等,服务器不接收数据且将包放弃,黑客拷贝服务器放弃的包(如图5)。

黑客拷贝服务器放弃的包
在服务器放弃包之后短暂延迟时间,黑客将与客户机一样发送同样的包,只是改变SEG_SEQ 和SEG_ACK命令(和包的记数值),以使包头域词条变成下面代码:
SEG_SEQ = SVR_ACK
SEG_ACK = SVR_SEQ
因为包头域的顺序号是正确的(SVR_ACK等于SEG_SEQ),服务器接受包头域部分词条同时接受包且处理数据,另外,依据客户机传送但服务器放弃的包的数目,原客户机仍会不断传送包。
如果您定义变量CLT_TO_SVR_OFFSET等于SVR_ACK减CLT_SEQ之结果(即服务器期待的顺序号和客户机的实际的顺序号是相异数),SVR_TO_CLT_OFSET等于CLF_ACK减去SVR_SEQ,黑客一定会重写客户机送给服务器的TCP包,以让包代表SEG_SEQ和SEG_ACK之值(如图6)。
被截获的连接
SEG_SEG =(SEG_SEQ+CLT_TO_SVR_OFFSET)
SEG_ACP =(SEG_ACK_SVR_TO_CLT_OFFSET)
因为所有的传送都经过黑客,它便可以在传送流中加任何数据或删任何数据。例如,如果连接是一个远程登录使用的 Telnet,黑客能代表用户添加任何命令(Unix命令 echo jamsa.com,它将产生一个所有连接于jamsa.com服务器的网络的主机列表,就是一个黑客发出命令的范例(如图7)。

黑客往传送包中加命令
在服务器接收到包之后,服务器对黑客请求的数据和客户端请求的数据予以响应。在服务器对客户端响应之前,黑客可以漏掉或删除服务器对黑客命令的响应,如此,用户便不再觉察到任何黑客入侵(如图8)。
黑客从服务器的传送包中删除其请求的信息
以下部分您将了解 TCP ACK风暴,它在黑客继续伪装时,在非同步后劫持入侵中将发作。