有算法就有**法,因为它们都遵循了一定的数据结构和数学知识。所以网络安全是一个相对的概念,不可能出现绝对的安全!作为当今最流行的网络协议——TCP也是如此。那么TCP的安全问题究竟是哪些因素引起的呢?
一、设计初心
我们知道TCP协议诞生于1973年,那时候计算机网络也是刚刚起步。在没有经验的前提下,开发者们主要的目标是为了实现网络的连通性。对于安全性,一是没有经验,二是设计的目的性就不在此。所以TCP协议的诞生之初就意味着它不可能在安全性方面有太高的造诣
二、TCP数据的传输形势——明文传输
不同于一些诞生比较晚的计算机网络协议——https和chap等等。TCP协议在传输数据的时候是明文传输的。这在一定程度上就导致数据安全存在很大的隐患。这也是很多md5等一些列加密算法产生的重要原因
三、TCP协议的首部字段缺乏安全性认证
TCP协议对于数据发送的源头是没有验证机制的,即使数据报中存在源端口字段(也包括网络层协议IP数据报中包含源IP字段)!也就是说,很多时候我们关系的问题是如何把该数据报准确无误的传给谁,但是却忘了这个数据报确实是源方(源IP字段指定的客户端)发送来的未经修改或未经窃取的数据报吗?
四、TCP的连接性是一把双刃剑
只要知道TCP协议的人就知道TCP的一个重要特点——它是面向连接的一个网络协议!更通俗的说就是TCP所进行的数据的交互都是在一个连接周期中进行的!还可以换句话说,如果你想对某个客户端的发起攻击,必须要做的一件事情就是劫持(或窃听)该客户端和某网络应用的一个TCP连接(当前计算机网络的半壁江山都是基于TCP的)!
所以如果我们的某个基于TCP协议进行连接的进程如果被劫持,也就等效于这次数据几乎全部遇难(除非全部关键数据都进行了相关的加密技术)。那么劫持TCP连接的关键在哪?
这个关键点就是报文首部的序号字段。我们知道,TCP的流量控制、数据失效重传功能、拥塞控制算法等等都与滑动窗口的大小(起始端点和窗口长度)有着密切的联系,而滑动窗口的大小取值恰恰依赖着这个 “序号” 字段。