网络安全课程笔记四:TCP Security

Network Security Lecture 4: TCP SECURITY

4.1 TCP 相关知识

https://en.wikipedia.org/wiki/Transmission_Control_Protocol

4.2 针对 TCP 的攻击

4.2.1 SYN Flooding

通常情况下,服务器对于每个到达的 SYN 数据包都会创建一个 TCB(TCP Control Block),包含了序列号,流量控制状态,MSS 等各种信息。这种半开的 TCP 连接会一直持续到第三次握手(用户送来 ACK),或者直到超时自动关闭。

攻击者发送大量的 SYN 数据包,而不去回应服务器期望的 ACK,就可以耗尽其内存资源。

4.2.1.1 防御:SYN Cookies

服务器收到 SYN 数据包之后,不再去为其生成一个半开连接。相反,服务器生成一个初始的 TCP 序列号,该序列号是关于源和目的 IP 地址与端口号,和一个仅有该服务器知道的秘密随机数的一个函数:

sqn = f(src addr, src port, dest addr, dest port, rand)

这被称为 SYN Cookie,服务器并不去记忆它。

如果客户是合法的,那么他会回复一个 ACK。服务器再对源和目的 IP 地址与端口号,和秘密随机数运行一次函数 f,如果该函数的结果等于 ACK - 1,那么即意味着该 ACK 对应于较早的一个 SYN,因此它是合法的。

4.2.2 Malicious Receiver

攻击者和很多服务器建立 TCP 连接,并且声明很大的接收窗口,从这些服务器接收数据,导致中间链路拥塞。

4.2.3 TCP/IP Stack Fingerprinting

TCP/IP stack fingerprinting:TCP/IP 协议栈指纹。

协议栈指纹识别是一项强大的技术,能够以很高的概率迅速确定操作系统的版本。虽然 TCP/IP 协议栈的定义已经成为一项标准,但是各个厂家,如微软和 RedHat 等在编写自己的 TCP/IP 协议栈时,却做出了不同的解释。这些解释因具有独一无二的特性,故被称为“指纹”。通过这些细微的差别,可以准确定位操作系统的版本。

以下是不同 OS 的网络协议栈的差异,这些差异可作为协议栈指纹识别的依据(仅仅列举部分)。

4.2.3.1 对 FIN 包的响应

发送一个只有 FIN 标志位的 TCP 数据包给一个打开的端口,Linux 等系统不做响应;有些系统,例如 MS Windows, CISCO 和 HP/UX 等,则发回一个 RESET

4.2.3.2 虚假标记的 SYN 包

在 SYN 包的 TCP 头里设置一个保留(未定义)的 TCP 标记。目标系统在响应时,有的会保持这个标记,有的不保持。还有一些系统在收到这样的包时会复位连接。

4.2.3.3 ISN(初始化序列号)

不同的 OS 在选择 ISN 时采用不同的方法。不同操作系统使用的 ISN 生成器往往不同。一些 UNIX 系统采用传统的 64K 递增方法,较新的 Solaris,IRIX,FreeBSD,Digital Unix 和 Cray 等系统则采用随机增量的方法,Linux 2.0,OpenVMS 和 AIX 等系统采用真随机方法,Windows 系统采用一种时间相关的模型。

4.2.3.4 ACK 序号

不同的 OS 处理 ACK 序号时是不同的。如果发送一个 FIN/PSH/URG 数据包到一个关闭的 TCP 端口,大多数 OS 会把回应 ACK 的序号设置为发送的包的初始序号,而 Windows 则是将序号设置为初始序号加 1。

4.2.4 TCP Port Scanning

端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关)。

4.2.4.1 传统 connect() 方法

和目标系统上的每一个端口都试图进行 TCP 三次握手,从而判断其端口是否开放。

4.2.4.2 SYN Scan

这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的 TCP 连接。扫描程序发送的是一个 SYN 数据包,一个 SYN/ACK 的返回表示端口处于侦听状态;一个 RST 的返回表示端口没有处于侦听态。如果收到一个 SYN/ACK,则扫描程序必须再发送一个 RST 信号,来关闭这个连接。

4.2.4.3 FIN, NULL, and XMAS scans

向服务器发送 FIN, NULL, 或 XMAS 类型的 TCP 包。

  • 如果某个端口是打开的,系统会回复一个 RST 信号
  • 如果某个端口是关闭的,系统会直接丢弃这个数据包

FIN, NULL, XMAS 分别指:

  • 只设置了 FIN 标志位的 TCP 包
  • 任何控制位都没有设置的 TCP 包
  • 设置了 FIN/PSH/URG 标志位的 TCP 包

4.2.5 ACK Storm Attack

攻击者处于两个建立了 TCP 连接的主机之间,并向他们发送各发送一个数据包,可能导致 ACK 风暴(两个主机互相回复大量的 ACK)。

这是因为 TCP 规定:当 TCP 连接建立之后,如果主机收到了一个 ACK,且该 ACK 的确认号还没有发送(比如才发送到 1000,却收到 ACK = 1100),则其应该重传最后一个 ACK 或者丢弃该数据包。