Appearance
7. 安全与隐私注意事项
TCP 的设计仅包含基础的安全特性,用于提升连接和应用数据传输的稳健性与可靠性;它没有内置的密码学能力,无法支持机密性、认证等典型安全功能。目前已开发出非密码学增强机制(例如 RFC 5961),用于提升 TCP 连接抵御特定类型攻击的稳健性,但此类机制的适用范围和保护能力有限(参见 RFC 5961 第 1.1 节)。应用通常借助下层协议(如 IPsec)和上层协议(如 TLS),为 TCP 连接及其承载的应用数据提供安全与隐私保护。此外,也有一些基于 TCP 选项开发的安全能力。
要为 TCP 连接(包括控制标志)完整提供机密性、完整性保护和认证,IPsec 是目前唯一有效的方法。对于完整性保护和认证,可以使用 TCP Authentication Option(TCP-AO,参见 RFC 5925);另有提案建议将其扩展,为报文段有效载荷提供机密性。本节讨论的其他方法虽然可为有效载荷提供机密性或完整性保护,但要么只覆盖 TCP 首部的部分字段(例如 tcpcrypt),要么完全不覆盖首部(例如 TLS)。TCP 中新增的其他安全特性(例如 ISN 生成、序列号检查)只能部分阻碍攻击。
使用长寿命 TCP 流的应用容易受到一类攻击,这类攻击利用的是早期 TCP 规范对控制标志的处理方式。TCP-MD5 曾是常用的 TCP 选项,用于为其中一些连接提供认证,但它存在缺陷,现已废弃。TCP-AO 能够保护长寿命 TCP 连接免受攻击,且特性优于 TCP-MD5;但它不为应用数据或 TCP 首部提供隐私保护。
tcpcrypt 是 TCP 的实验性扩展,能够对连接数据进行密码学保护。TCP 流的元数据仍然可见,但应用流得到了良好保护。在 TCP 首部中,tcpcrypt 只保护紧急指针和 FIN 标志。
《TCP 路线图》对若干与 TCP 安全相关的 RFC 作了说明。这些 RFC 提供的许多增强机制已整合进本文,包括 ISN 生成、缓解窗口内盲攻击,以及改进软错误和 ICMP 分组的处理。原始 RFC 还更详细地讨论了早期 TCP 规范所需的变更。此外,RFC 6093 讨论了与紧急指针字段相关的安全注意事项,并劝阻新应用使用紧急指针。
TCP 常用于批量数据传输流,一些攻击可能借此滥用 TCP 拥塞控制逻辑,“ACK 分割”攻击即为一例。TCP 拥塞控制规范的更新引入了适当字节计数(ABC)等机制,用于缓解此类攻击。
另一些攻击则着眼于耗尽 TCP 服务器资源,例如 SYN 洪泛攻击,或在没有进展的连接上空耗资源。操作系统通常会实现针对这些攻击的缓解措施;还有一些防御借助代理、有状态防火墙等技术,这些技术位于端主机 TCP 实现之外。
RFC 8546 描述了协议的“线路图像”(wire image)概念:TCP 的明文首部向路径上的节点暴露了超出严格路由所需的元数据。路径上的攻击者可能利用这些元数据。TCP 的相关经验已经影响了 QUIC 等新传输协议的设计。基于 TCP 及其扩展的经验,IETF 还在 RFC 9065 中记录了若干注意事项,可供未来的 TCP 扩展和其他传输协议借鉴;RFC 8558 和 RFC 9170 也包含 IAB 建议。
还可以通过“指纹识别”推断主机 TCP 实现(操作系统)的版本或平台信息。指纹识别会观察多个方面——报文段中携带的选项、选项的排列顺序、各种条件下的具体行为、分组时序、分组大小,以及其他交由实现者自行决定的协议行为——并据此识别主机和实现信息。
ICMP 消息处理也可能与 TCP 连接产生交互,因此 TCP 连接可能遭受 ICMP 攻击。RFC 5927 讨论了此类攻击以及已实现的缓解措施。