TCP工作过程;TCP Flood的攻击的原理和现象;TCP协议设计的安全隐患与防范对策
TCP分三个阶段
- 连接建立(三次握手)
- 数据传输
- 连接释放(四次挥手)
TCP工作过程
TCP连接建立阶段
- 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
- 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
- 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
TCP数据传输阶段
- seq为本次发送的数据中的第一个字节的标号
- ack为希望下一次收到的数据中第一个字节的标号
TCP连接释放
- 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
- 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
- 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
- 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
TCP Flood 攻击
据统计,有90%的DoS攻击使用的是TCP协议,而SYN洪泛优势其中最常见的一种攻击。下面就以SYN Flood代表TCP Flood对这类攻击的基本原理进行描述。
安全缺陷
在3次握手进行的过程中,服务器需要保持所有未完成的握手信息(称为半开连接,即收到了TCP-SYN并发送了SYN-ACK,但第三次握手信息(ACK)未收到的状态)直到握手完成或超时(不同的系统超时长度的设置不同,一般情况下在75秒左右)以后丢弃该信息。而且,半开连接的数量是有限的,比如很多OS设置为1024个,当服务器的半开连接栈用完,服务器将不再接受其他的连接请求。
攻击原理
SYN Flood 攻击就是攻击者向攻击目标发送大量伪造的TCP 连接请求报文,即 SYN 包; 而当攻击目标收到连接请求时,就会在目标的 TCP 协议栈分配资源, 并记录其信息到半连接队列中,同时回应 ACK + SYN; 此时, 攻击者却不再发送ACK 确认报文以完成第三次握手, 而是将继续发送大量的SYN 连接请求包。这样不仅会导致被攻击者在短时间内需要为大量半连接分配内存资源,还会使得系统对后续到来的SYN 包在自身的半连接队列中查找是否有此包的握手信息,从而消耗大量 CPU 资源, 最终造成被攻击者无法向正常用户提供所需服务。
防御策略
基于退让的防御策略
a)缩短半连接队列的保持时间。
b)增大半连接队列的大小。
c)负载均衡策略。
基于 TCP 协议栈缺陷的防御策略
a)SYN Cookie 技术
Cookie 机制是服务器收到客户端的连接请求后, 系统可简单记录该连接信息,形式即如源 IP、 源端口、 时间戳的三元组。但并不会为其分配资源, 而是根据这个 SYN 包的相关信息计算生成某一 Cookie 值, 并将其作为 ACK + SYN 包的序列号返回给客户端。在接到 ACK 报文时, 就可以第一时间验证报文的三元组信息,如果信息满足条件则进行 Cookie 验证, 否则直接丢弃。
b)SYN Cache 技术
该方法通过一个专用的 HASH 表( Cache) 来保存半连接信息,直至收到 ACK 信息才为连接分配系统资源 (TCB) .
c)SYN Proxy 技术
只有在 SYN 代理确认连接的有效性后, 才向内部服务器发起连接请求。所以当攻击发生时, 攻击造成的危害就将转移到至该代理上,借此以保护服务器端。是基于 SYN Cookie 和SYN Cache 的,这也是对 SYN Cookie 的另一种改进。只是需要注意,一旦代理被攻击破坏, 其保护的服务器也都将无法向外界提供服务,这也成为 SYN Proxy 方法的瓶颈所在。
TCP工作过程;TCP Flood的攻击的原理和现象;TCP协议设计的安全隐患与防范对策的更多相关文章
- 第三次实验报告:使用Packet Tracer分析TCP连接建立过程
目录 1 实验目的 2 实验内容 3. 实验报告 3.1 建立网络拓扑结构 3.2 配置参数 3.3 抓包,分析TCP连接建立过程 4. 拓展 (不作要求,但属于加分项) 1 实验目的 使用路由器连接 ...
- 扯谈网络编程之Tcp SYN flood洪水攻击
简单介绍 TCP协议要经过三次握手才干建立连接: (from wiki) 于是出现了对于握手过程进行的攻击.攻击者发送大量的SYN包,server回应(SYN+ACK)包,可是攻击者不回应ACK包,这 ...
- TCP SYN flood洪水攻击原理和防御破解
简介 TCP协议要经过三次握手才能建立连接: 于是出现了对于握手过程进行的攻击.攻击者发送大量的SYN包,服务器回应(SYN+ACK)包,但是攻击者不回应ACK包,这样的话,服务器不知道(SYN+AC ...
- 不可不知的socket和TCP连接过程
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- TCP三次握手与DDOS攻击原理
TCP三次握手与DDOS攻击原理 作者:冰盾防火墙 网站:www.bingdun.com 日期:2014-12-09 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. ...
- TCP数据传输过程详解
在学习三次握手的时候,我们知道其中有seq.ack两个序列号. 如果不仔细了解,那么可能只知道发回去的时候要加一. 下文将着重介绍,关于序列号的传输过程. 最关键的一句话:序列号为当前端成功发送的数据 ...
- 性能测试基础 ---TCP通信过程的状态码与过程,以及出现错误码的分析(TIME_WAIT,CLOSE_WAIT)
TCP通信过程 如下图所示,TCP通信过程包括三个步骤:建立TCP连接通道(三次握手).数据传输.断开TCP连接通道(四次挥手). 这里进一步探究TCP三路握手和四次挥手过程中的状态变迁以及数据传输过 ...
- TCP连接建立过程中为什么需要“三次握手”(转)
传输控制协议(Transmission Control Protocol, TCP)是一种面向连接的.可靠的.基于字节流的运输层(Transport layer)通信协议.是专门为了在不可靠的互联网络 ...
- zabbix主动、被动TCP连接过程
zabbix主动.被动TCP连接过程 https://blog.csdn.net/u010668387/article/details/79460183
随机推荐
- centos 7 安装sqoop 1.4.7
1. 下载sqoop1.4.7 cd /home/workspace wget https://mirrors.tuna.tsinghua.edu.cn/apache/sqoop/1.4.7/sqoo ...
- (转)Intellij IDEA 快捷键整理
[常规] Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关 ...
- Codeforces Round #493 (Div. 1)
A. /* 发现每次反转或者消除都会减少一段0 当0只有一段时只能消除 这样判断一下就行 */ #include<cstdio> #include<algorithm> #in ...
- JVM总结-垃圾回收(下)
大部分的 Java 对象只存活一小段时间,而存活下来的小部分 Java 对象则会存活很长一段时间. 之所以要提到这个假设,是因为它造就了 Java 虚拟机的分代回收思想.简单来说,就是将堆空间划分为两 ...
- JVM总结-invokedynamic
前不久,“虚拟机”赛马俱乐部来了个年轻人,标榜自己是动态语言,是先进分子. 这一天,先进分子牵着一头鹿进来,说要参加赛马.咱部里的老学究 Java 就不同意了呀,鹿又不是马,哪能参加赛马. 当然了,这 ...
- 微信小程序笔记<三>入口app.js —— 注册小程序
小程序开发框架在逻辑层使用的语言就是JavaScript,所以想玩小程序JavaScript的基本功一定要扎实.但小程序基于js做了一些修改,以方便开发者更方便的使用微信的一些功能,使得小程序更好的贴 ...
- position:absolute溢出处理
今天在做布局的时候发现把table设置了position:absolute后 overflow居然不管用了,溢出的部分依然溢出. 百度后,才想起来... ... position后,元素已经和父元素不 ...
- SimpleDateFormat线程不安全
http://www.cnblogs.com/peida/archive/2013/05/31/3070790.html dateUtil替换
- webDAV
wiki webDAV client - java https://github.com/lookfirst/sardine https://www.cnblogs.com/xgjblog/p/383 ...
- centos出现“FirewallD is not running”
最近在服务器centos上安装了rdis数据库,默认是不开启远端访问功能,需要设置一下防火墙,在开放默认端口号 8888时提示FirewallD is not running,经过排查发现是防火墙就没 ...