源端口号(16位):识别正在发送的应用。
目标端口号(16号):识别目标应用。
序列号(32位):用于支持数据传输及流和错误控制。
回应号(32位):用于支持数据传输及流和错误控制。
头部长度(4位):TCP头部长度。
保留字段(6位):标明数据包类型标志。
窗口尺寸(16位):用于流量控制,从安全角度来讲,可以通过窗口尺寸,判断OS类型。
校验和(16位):使用部分IP头部及TCP头部和数据计算出的值。
紧急指示(16位):用于标明数据包中含有紧急数据。
可选项(可达40字节):可选信息
URG:数据包中含有紧急数据
ACK:回应号有效
PSH:需要将数据推送到应用
RST:复位数据包
SYN:同步数据包
FIN:结束数据包
基于头部的攻击分为扰乱类和探测类
扰乱类:主要是扰乱TCP层运行。
探测类:使用回应发送无效头部,作为探测OS的一种方法,使用其形成一个攻击计划
TCP最常被攻击的字段是标志字段,分为两种类型
创建一个在标准中没有明确规定的含标志组合的数据包,例如:将所有标志设为0和1,过去的一些OS在处理无效标志组合时有问题,就会退出或者放弃连接。
在一个已经打开的连接中发送无效序列号,这种攻击通常只会中断单个连接。
(1)发送无效标志组合来确认OS如何回应,探测攻击使用一个特征列表,这些特征对某些特定的OS是唯一的。
(2)其他探测攻击使用初始序列号,一些操作系统使用某些确定序列号的初始值,通过打开多个连接(或者至少发送多个SYN数据包)攻击者就能确定一个初始序列号生成模式,。启动窗口尺寸也能帮助缩小可能的OS列表,TCP标准没有指定启动窗口尺寸的值,因为不同的OS使用不同的值
TCP协议因为很复杂,有大量针对它的攻击,而且很难消除,针对协议的攻击分成两类。第一类是攻击者在端点。并且与攻击目标进行不正确的通信,第二类是攻击者能嗅探流量,并且将数据包插入到TCP协议流中。
通常包括发送超出序列的数据包或者没有一次完整的握手,发送超出序列的数据包通常只是扰乱当前的连接,因此对攻击者不是很有用。攻击者可以使用序列外的数据包帮助确认OS类型。
SYN雪崩(flood)攻击是一种典型的端点协议攻击。
TCP的三次连接协议使用一个SYN数据包,这迫使服务器分配缓冲区空间。这一攻击目标是消耗掉所有的TCP资源。迫使TCP拒绝其他连接尝试。如图所示,攻击者发送足够多的SYN数据包而不发送ACK数据包,可能造成服务器上TCP协议栈拒绝新的连接,这些连接尝试经常指半打开连接。攻击者也可能从多个地点实施这个攻击,加大了消除难度。一次成功的SYN雪崩攻击会使一台服务器掉线并且拒绝任何人连接它。
一个消除方法就是在网络入口处安装能够侦查这类攻击的网络过滤器,若是分布式攻击的,那么网络过滤器不可能区分善意连接尝试和恶意连接尝试。
这些攻击不同于常见的数据包嗅探,在常见的数据包嗅探中攻击者试图从网络上读取数据。在这一攻击中攻击者将数据包插入道协议中,其目标要么是切断连接,要么是窃取连接。
若攻击者能够看到流量,那么他很容易通过伪造IP地址并向双方发送复位数据包(RST)切断连接。
从图中可以看到攻击者是连接到网络上的,因此他能看到受害者和服务器间的流量,虽然攻击着和受害者在同一网络上,但是攻击者能够连接到任何他能看到此流量的网络。当攻击者想要终止一个连接时,他创建一个TCP复位数据包,并将数据包发送到源IP地址设置成受害者IP地址服务器,服务器和受害者在收到RST数据包时,两者都将终止连接。
攻击者需要将硬件地目标地址设置成合适的地址,以使数据包传递到合适的设备。攻击者需要将发往服务器的复位数据包硬件地址设置成路由器硬件地址,发往受害者的复位数据包目标硬件地址需要设置成受害者硬件地址,攻击者不需要嗅探源硬件地址,因为无论受害者还是路由器都不查看源硬件地址。
若攻击者能够看到网络流量并且能够将数据插入到网络中,那么这种攻击是不可能消除的,若攻击者也将源硬件地址设置成受害者或者路由器硬件地址,就不可能确定哪个设备执行这一攻击。这个攻击能通过加密消除,如在IP,但是一般不加密网络中的流量。
会话劫持也是一种针对协议的攻击,这个攻击也要求攻击者能看到受害者和服务器之间的流量。会话劫持的目标是从两方中的一方窃取连接,并且伪造成一方设备。
如图, 攻击者等到看到数据信号,攻击就开始了。共接着想受害者发送一个RST数据包,通过将数据包的源IP地址设置成服务器IP地址并且将数据包的目标地址设置成受害者IP地址,伪装成服务器。攻击者使用的流量嗅探中发现的序列号向服务器发送数据。从攻击者发往服务器的数据包看上去像是来自受害者,服务器使用自身的数据回应受害者。攻击者需要连续嗅探流量,以便获取发给受害者的数据。受害者仍在接受服务器的流量,但由于连接已经被关闭,服务器没有了回应。
这种攻击的消除办法就是加密TCP载荷,攻击者不能向服务器发送数据,即使劫持了这个会话,但是一般TCP载荷是由应用方加密。
TCP不支持验证,它用IP层提供全部验证,使用端口号的攻击可以看成是基于验证的攻击。任何应用可以使用任何它想使用的端口号。安全设备不能依靠端口去验证应用的流量,多数OS严格限制某些应用只能使用低数值的端口(1024以下),这些应用需要由管理员用户运行,但这并没有阻止恶意用户在保留端口上运行应用程序。
基于流量的攻击其目标都是消耗掉TCP层资源。由于TCP资源都是密集的,大量的流量能降低服务性能,甚至雪崩不是由攻击引起的,服务器因为一个流行的应用而变得不堪负重。无论雪崩是由攻击引起的还是由过量流量引起的,都有消除雪崩的技术。最常用的方法就是使用网络设备,比如流量整形器,这些设备使用最广泛的术语是服务质量(QOS),它们根据各种标准将流量划分为不同种类,然后分配贷款。