标签:ret mamicode 攻击 工作 ash info 三次 建立连接 端口号
TCP是可靠的连接,在进行TCP数据传输前,客户端和服务器之间会进行三次握手操作。主要涉及的地方是序列号(seq)、确认号(ack)、SYN标志位、ACK标志位,这都是TCP的报文格式中的部分。序列号是当前发送到报文的序列号,确认号是希望下一次收到报文的序列号。SYN标志位表示请求建立连接,ACK标志位表示确认受到报文。基础概念介绍完了,梳理一下TCP的工作流程。
通过上一部分的介绍,很清楚的知道,服务器端是被动打开连接的,而传统tcp连接建立在受到客户端的连接请求后开启一个半连接,等待客户端的做法有着很大的问题。在TCP三次握手的时候,服务器分配并初始化变量和缓冲区以响应收到的SYN,然后服务器发送一个SYNACK作为响应,并等待一个来自客户端的ACK报文段。如果客户端没有发送一个ACK来完成三次握手的第三步,最终(通常一分钟或更久以后)服务器会终止这个半开的连接并收回分配的资源。这个时间间隔给了攻击者可乘之机。
其为一种典型的被称为SYN泛洪攻击的拒绝服务攻击(DoS)提供了舞台。在这个攻击中,攻击者发送大量的TCP SYN报文段,不完成第三次握手的步骤。随着SYN报文段的大量涌入,服务器的连接资源在分配给(但从未使用)半开连接时会耗尽。然后合法的用户就被拒绝服务了。
SYN cookie是防御SYN泛洪攻击的一种手段,现已被大多数的操纵系统集成。
其防御的思路采用了hash值不可逆的原理,在接收到客户端发送的SYN后,服务器不会随机给出一个序列号返回,而是通过计算源ip、目标IP、SYN端口号、以及只有该服务器知道的secret number,四个值一起通过计算得到一个hash值对应的数字cookie,用此cookie作为序列号返回SYNACK,同时服务器端并不会记录客户端的连接信息。当有客户端ACK返回时,ACK的值需要进行验证,若服务器计算cookie值后加1得到的值等于确认号的值,则连接建立成功,否则舍弃。有了这样一层手段,SYN泛洪攻击者发送过来的大量SYN并不会给服务器造成大量的半连接,从而保护了服务器的安全。
标签:ret mamicode 攻击 工作 ash info 三次 建立连接 端口号
原文地址:https://www.cnblogs.com/ningningjia/p/14373022.html