40,931
次編輯
變更
TCP重置攻击
,無編輯摘要
'''TCP重置攻击 ''' 指的是使用伪造的TCP重置包干扰用户和 [[ 网站 ]] 的连接。这个技术可以在善意的 [[ 防火墙 ]] 中应用,但也可用于网络审查或是攻击,恶意中断Internet连接。中国的防火长城便运用了这个技术进行TCP关键字阻断。使用IPsec可以避免TCP重置攻击。
==背景==
本质上,Internet是用于单个 [[ 计算机 ]] 交换电子消息或IP数据包的系统。该系统包括用于承载消息的 [[ 硬件 ]] (例如铜缆和光纤电缆)和用于格式化消息的形式化系统,称为“协议”。互联网上使用的基本协议是IP协议,通常与其他协议(例如TCP或UDP协议)结合使用。TCP/IP是用于 [[ 电子邮件 和Web ]]和[[Web 浏览 ]] 的协议集。每个协议都有一个信息块,称为包头,包含在每个数据包的开头附近。包头含有关哪台计算机发送了数据包,哪台计算机应接收它,数据包大小等信息。
当两台计算机之间需要双向虚拟连接时,TCP与IP一起使用。(UDP是无连接IP协议。)两台机器上的TCP软件将通过交换数据包流进行通信(例如,装有 [[ 浏览器 ]] 的电脑 和Web 和[[Web 服务器 ]] )。使用TCP连接为计算机提供了一种简便的方法来交换对于单个数据包来说太大的数据项,例如视频剪辑,电子邮件附件或音乐文件。尽管某些网页对于单个数据包来说足够小,但为方便起见,它们也是通过TCP连接发送的。
==TCP重置==
在TCP连接的数据包流中,每个 [[ 数据包 ]] 都包含一个TCP包头。这些包头中的每一个都包含一个称为“复位”(RST)标志的位。在大多数数据包中,该位设置为0,并且无效;但是,如果此位设置为1,则向接收计算机指示该计算机应立即停止使用TCP连接;它不应使用连接的标识号( [[ 端口 ]] )发送更多数据包,并丢弃接收到的带有包头的其他数据包,这些包头指示它们属于该连接。TCP重置基本上会立即终止TCP连接。
按照最初的 [[ 设计 ]] ,这是一个有用的工具。常见的应用是在进行TCP连接时计算机(计算机A)崩溃的情况。另一端的计算机(计算机B)将继续发送TCP数据包,因为它不知道计算机A已崩溃。重新启动计算机A后,它将从旧的崩溃前连接接收数据包。计算机A没有这些数据包的上下文,也无法知道如何处理这些数据包,因此它可以向计算机B发送TCP重置。此重置使计算机B知道该连接不再起作用。计算机B上的用户现在可以尝试其他连接或采取其他措施。
==伪造TCP重置==
在上述情况下,TCP重置是由作为连接端点之一的计算机发送的。但操作中,第三台计算机可以监视连接上的TCP数据包,然后将包含TCP重置的“伪造”数据包发送到一个或两个端点。伪造数据包中的报头必须错误地表明它来自端点,而不是伪造者。此信息包括端 点IP 点[[IP 地址 ]] 和端口号。IP和TCP包头中的每个字段都必须设置为令人信服的伪造值,以进行伪重置,以欺骗端点关闭TCP连接。正确格式化的伪造TCP重置可能是中断伪造者可以监视的任何TCP连接的非常有效的方法。
==合法使用TCP重置注入==
伪造的TCP重置的一个明显的应用是在未经拥有端点的两方同意的情况下恶意破坏TCP连接。但是,也有人设计了使用伪造TCP重置来保护网络安全的系统。1995年被演示的一个原型“ Buster” [[ 软件包 ]] ,该软件包会将伪造的重置发送到使用短列表中的端口号的任何TCP连接。Linux志愿者在2000年提出了在Linux防火墙上实现此功能,而开源的Snort早在2003年就使用TCP重置来中断可疑连接。
IETF认为,RFC3360中 [[ 防火墙 ]] ,负载 [[ 平衡器 ]] 和Web服务器进行的TCP重置是有害的。