首页 资讯 安全 查看内容

分析TCP协议

2017-1-10 21:08 1215 0

摘要: Wireshark工具实验——分析TCP协议一、概述 TCP是面向连接的可靠传输协议,两个进程互发数据之前需要建立连接,这里的连接只不过是端系统中分配的一些缓存和状态变量,中间的分组交换机不维护任何连接状态信息。连接 ...

Wireshark工具实验——分析TCP协议
一、概述 TCP是面向连接的可靠传输协议,两个进程互发数据之前需要建立连接,这里的连接只不过是端系统中分配的一些缓存和状态变量,中间的分组交换机不维护任何连接状态信息。连接建立整个过程如下(即三次握手协议):首先,客户机发送一个特殊的TCP报文段;其次,服务器用另一个特殊的TCP报文段来响应; 最后,客户机再用第三个特殊报文段作为响应。
 
图1 三次握手协议示意图
二、TCP报文格式
2.1 概述
为了提供可靠的数据传输,TCP报文首部字段有较多的字段,TCP报文格式如下图:
 
 
图2 TCP报文格式
源和目标端口
用于多路复用/多路分解来自或送至上层应用的数据,可以这样理解,端口用来标识同一台计算机的不同进程。
序列号和确认号
这两个字段是TCP可靠传输服务的关键部分,序列号是该报文段首字节的字节流编号。当报文被分解成多个报文段时,序列号就是报文段首字节在整个报文的偏移量。TCP是全双工的,假设从主机A接收到主机B的数据,则主机A填充进报文段的确认号是主机A期望从主机B收到的下一个字节序号。见下图(三次握手):
图3 正常情况下TCP连接建立过程
首部长度(4位)
因为选项是不定长的,这就需要标识整个首部字段的长度(单位是32位字),即5+选项个数。4位,单位是32位字,所以首部最长是15*4=60字节,即选项最长是40字节(10个选项)。
标志
①URG
指示报文段里存在着被发送方的上层实体标记为"紧急"数据,当URG=1时,其后的紧急指针指示紧急数据在当前数据段中的位置(相对于当前序列号的字节偏移量),TCP接收方必须通知上层实体。
②ACK
当ACK=0时,表示该数据段不包含确认信息,当ACK=1时,表示该报文段包括一个对已被成功接收报文段的确认。
③PSH
当PSH=1时,接收方在收到数据后立即将数据交给上层,而不是直到整个缓冲区满。 ④RST
用于重置一个已经混乱的连接(如主崩溃),也可用于拒绝一个无效的数据段或者拒绝一个连接请求。一般而言,如果你得到的数据段被设置了RST位,那说明你这一端有问题了。 ⑤SYN
用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。
注:捎带是指对客户机到服务器数据的确认被装载在一个承载服务器到客户机的数据报文段中。
⑥FIN
用于释放一个连接,表示发送方已经没有数据要传输了。此时,接收方可能继续接收数据,好在SYN和FIN数据段都有序列号,从而保证了这两种数据段以正确顺序被处理。 窗口大小用于流控制(确保连接的任何一方都不会过快地发送过量的分组而淹没另一方),窗口大小指定了从被确认的字节算起可以发送多少个字节。校验和提供了额外可靠性,在计算检验和的时候,TCP的Checksum域设为0,如果数据域的字节数为奇数,则数据域填补一个额外的0字节。校验和算法:将所有的16位字按1的补码形式累加起来,取累加结果的补码。因此,当接收方执行同样计算时(包括Checksum域),结果应该是0。紧急指针参考标志字段的URG位。选项选项部分是为了适合复杂网络环境和更好地服务于应用层设计的。TCP选项最长是40字节数据无任何数据的TCP段也是合法的,通常用于确认和控制信息。
2.2 选项字段 TCP选项部分很好出现在已经建立连接的会话中,只要出现在TCP连接建立阶段,即三次握手。TCP选项部分实际运用有以下几种:
(1)最大报文传输段(MMS, Maximum Segment Size)
用于发送发与接收方协商最大报文段长度(仅仅是净荷数据,不包括TCP首部字段)。TCP在三次握手中,每一方都会通告期望收到的MSS(MSS只出现在SYN数据包中),如果一方不接受另一方的MSS值,则使用默认的536字节净荷数据,即主机能够接受20+536字节的TCP报文段。
(2)窗口扩大选项(Window scaling)
TCP报文的窗口大小字段占16位,即最大值是65535,但随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口满足性能和吞吐率,这就是窗口扩大选项存在的意义。
Windows scaling占3个字节,最后一个字节是移位值(Shift count),即首部的窗口位数16向左移动,如移位值为14,则新的窗口最大值增大到65535*(2^14)。
窗口扩大选项是在TCP建立之初进行协商,如果已实现了窗口扩大,当不再需要扩大窗口时,发送移位值=0就可以恢复到原窗口大小,即65535。
(3)选择确认选项(SACK, Selective Acknowledgements)
SACK用来确保只重传缺少的报文段,而不是重传所有报文段。
SACK选项需要2个功能字节,一个用来指明使用SACK选项(SACK Permission),另一指明这个选项占多少字节。
(4)时间戳选项(timestamps)
时间戳选项用来计算往返时间RTT,发送方在发送报文段时把当前时钟的时间值放入时间戳字段,接收方将该时间戳字段的值复制到确认报文中,当接收方收到确认报文,对比确认报文的时间戳(等于发送方发送报文段的时间戳)和现在的时钟,即可算出RTT。
时间戳选项还可用于防止回绕序号PAWS。序列号只有32位,每2^32个序列号就会回绕,采用时间戳选项很容易区分相同序列号的报文段。
(5)NOP(NO-Operation)
TCP的头部必须是4字节的倍数,而大多数选项不是4字节倍数,不足的用NOP填充。除此之外,NOP也用于分割不同的选项数据,如窗口扩大选项和SACK之间使用NOP隔离。
 
三、实例解析
3.1 概述
3.2第一次握手19
Wireshark俘获TCP连接第一次握手的报文段如下:
图5 TCP连接第一次握手实例
标志字段,SYN=1、ACK=0表示该数据段没有使用捎带的确认域。
最大报文段长度(MMS)1460。
NOP字段,可以作为不足4倍数字节填充,也可作为选项间分隔,该报文段出现了
3个NOP。
3.3 第二次握手21
服务器响应客户端TCP报文段,此时确认号为1了,SYN=1、ACK=1表明连接应答捎带一个确认,Wireshark俘获分组如下:
图6 TCP连接第二次握手实例
3.4 第三次握手22
客户机再次服务器的报文段,此时序列号和确认号都为1,没有选项字段,Wireshark俘获的分组信息如下:
图7 TCP连接第三次握手实例
如此,TCP连接建立。
四、安全威胁分析
4.1 TCP协议中初始序列号的安全隐患
每当两台计算机按照TCP协议连接在一起时, 该协议都会生成一些初始顺序号(ISN),ISN可以提供计算机网络设备间的话路信息,但这些序列号并不是随机产生的,有许多平台可以计算出这些序列号,而且它们的准确度非常高。既然能够精确地算出这些序列号, 黑客就可以利用这一漏洞控制互联网或企业内部网上基于TCP协议的话,并对计算机网络实施多种类型的攻击。一般来说,黑客进行TCP/IP顺序号预测攻击分两步: 第一,得到服务器的IP 地址。黑客一般通过网上报文嗅探,顺序测试号码,由web浏览器连接到结点上并在状态栏中寻找结点的IP地址。因为黑客知道其他计算机有一个与服务器IP地址部分公用的IP地址, 他便尽力模拟一个能让其通过路由器和作为网络用户访问系统的IP号码。例如,如果系统的lP地址为192.0.0.15,IP地址指示了一个网络连接的计算机数,同时上述地址的高字节中两个最重要的位设定指出了该网为C级网。由此黑客便知有近256台计算机可以连人一个C级网,并猜出所有最后位在序列中出现过的地址号码。第二,黑客在试过网上IP 地址之后, 便开始监视网下传送包的序列号,然后,黑客将试图推测服务器能产生的下一个序列号,再将自己有效地插人服务器和用户之间。因为黑客有服务器的IP 地址,就能产生有正确IP 地址和顺序码的包裹以截获用户的传递。黑客通过顺序号预测取得系统访问之后,便可访问通讯系统传给服务器的任何信息,包括密钥文件、日志名、机密数据, 或在网上传送的任何信息。
4.2 利用TCP连接过程中三次握手的缺陷实施SYN攻击 黑客利用主机建立连接需要进行三次握手的缺陷可以对B主机实施SYN攻击。由于B 主机在收到A 主机的SYN请求,发出应答后,需要“监听”A 主机的确认应答。该“监听”在监听队列中至少应保持75 秒以上,以保证在Internet上有足够的时间建立连接。但是监听队列一般只能保持有限的连接( 缺省值为5个),攻击者可利用监听队列容量有限,B 主机发送多个SYN请,不回答B 主机送回的SYN和ACK,监听队列很快就会溢出,停止接受新的连接请求。只有等到队列中连接完成或超时,才接受新的请求。这可以让主机拒绝响应至少75 秒。另外,SYN攻击也可作为实现其他攻击的助手。虽然利用SYN 攻击可以实现拒绝服务, 但是在许多情况下,攻击者都是利用TCP/IP设计中的固有缺陷进行,把SYN攻击作为其他复杂欺骗和攻击的基础。如:SYNFLOOD攻击,它利用TCP三次握手过程,打开大量的半开TCP连接,使得目标机器不能进一步接受TCP连接。每个机器都需要为这种半开接分配一定的资源,但这种半开连接的数量是有限制的,达到最大数量时,机器就不再接受进来的连接请求。主要特征是在目标主机的网络上出现大量的SYN包,而没有相应的应答包。
4.3 TCP会话劫持攻击
欺骗是伪装成合法的用户,以获得一定的利益,劫持是积极主动地使一个在线的用户下线,或者冒充这个用户发送消息,以便达到自己的目的。会话劫持分为两种: 一是被动劫持,实际上就是藏在后面监听所有的会话流量。常常用来发现密码或者其它敏感信息。二是主动劫持,找到当前活动的会话,并且把会话接管过来,迫使一方下线,由劫持者取而代之,劫持者接管了一个合法的会话后,可以做许多危害性更大的事情。会话劫持的一般过程为:①寻找黑客想要攻击的目标;②探查远程机器ISN规律;③等待或监听会话;④猜测序列号;⑤使被劫持方下线;⑥接管会话。在会话劫持的过程中最关键的是猜测序列号。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部