【网络】SYN泛洪攻击原理及防御---未消化完_小鱼菜鸟的博客-程序员宅基地

技术标签: python  java  网络  linux  数据库  

DDoS和DoS攻击

拒绝服务攻击时,攻击者想非法占用被攻击者的一些资源,比如如:带宽,CPU,内存等等,使得被攻击者无法响应正常用户的请求。

讲泛洪攻击之前,我们先了解一下DoS攻击和DDoS攻击,这两个攻击大体相同,前者的意思是:拒绝服务攻击;后者的意思是:分布式拒绝服务攻击。不要看这两个攻击前一个比后一个多了一个字母,后一个攻击比前你一个攻击少了"分布式"三个字,其实他们具体的来说还是有所区分的。

DDoS是DoS攻击中的一种方法。下面我们来详细看一下区分:

DoS(拒绝服务):不是DOS操作系统,造成DoS的攻击行为被称为DoS攻击,它的目的是使得计算机或者网络我无法提供正常服务。最常见的DOS攻击有计算机网络带宽攻击和连通性的攻击。

DDoS(分布式拒绝服务);这个的攻击借助于客户/服务器技术,将多个计算机联合起来作为一个攻击平台,对一个或者是多个目标发动攻击,从而成倍的提高就裁决服务攻击的威力。

简单地说,DDoS的攻击威力要大于DoS的攻击威力,DDoS主要是发动群体攻击。

黑客基础知识——SYN泛洪攻击原理及防御

SYN攻击

以上的内容就是对DoS和DDoS攻击文字上的一个概念。为了更加直观地表达出来,我在下面附一张图:

黑客基础知识——SYN泛洪攻击原理及防御

这幅图呢就是TCP的通信的三次握手,如果说攻击端,发送完第一次握手的数据后,然后就"消失"了,那么服务器就会不断的发送第二次握手的数据,可是攻击端的人找不到了。于是,服务器的资源大量被消耗,直到死机为止。当然了,如果要完全弄懂机制,需要对TCP有相当深入的了解。

现在回到我们的原题:SYN泛洪攻击,其实这个攻击主要利用的就是TCP三次握手机制的缺陷。

TCP SYN泛洪主要发生在OSI的第四层,(关于这个OSI我会在后面的文章给大家讲述。)利用了这个TCP三次握手的特性。

A(攻击者)发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当这个服务器返回ACK以后,A不再进行确认,那这个连接就处在了一个挂起的状态,也就是半连接的意思,那么服务器收不到再确认的一个消息,还会重复发送ACK给A。这样一来就会更加浪费服务器的资源。A就对服务器发送非法大量的这种TCP连接,由于每一个都没法完成握手的机制,所以它就会消耗服务器的内存最后可能导致服务器死机,就无法正常工作了。更进一步说,如果这些半连接的握手请求是恶意程序发出,并且持续不断,那么就会导致服务端较长时间内丧失服务功能——这样就形成了DoS攻击。这种攻击方式就称为SYN泛洪攻击。

防御措施

那么我们如何去防范这种SYN攻击呢?

其实最常用的一个手段就是优化主机系统设置。比如降低SYN timeout时间,使得主机尽快释放半连接的占用或者采用SYN cookie设置,如果短时间内收到了某个IP的重复SYN请求,我们就认为受到了攻击。我们合理的采用防火墙设置等外部网络也可以进行拦截。

6 网络终端的对策

6.1增加TCP backlog队列

由于其基本攻击原理是依赖于终端主机连接套接字的backlog溢出,因此一个显然的基于终端主机的解决方案是增加backlog队列大小,而且这种方法已经广泛的运用于大多数服务器了。增加backlog队列通常是通过修改应用的listen()函数调用和一个操作系统内核参数SOMAXCONN——它用于设置一个应用程序能够接收的backlog上限值。这种方法本身并不能被完全认为是抵御SYN洪泛的有效方法,即使在一些能够有效支持超大backlog队列分配的操作系统中,因为攻击者能够任意生成比其操作系统支持的backlog还大得多的数据报。

6.2减少SYN-RECEIVED的时间

另一个基于终端主机的解决方法是缩短一个TCB从进入SYN-RECEIVED状态到因未进入下一个状态而被回收之间的时间。但这个方案的一个明显缺点是攻击可以利用因拥塞而丢包的ACK-SYN或者握手完成的ACK包,这样合法连接的TCB就会由于主机忙于重传这些包(因为SYN-RECEIVED时间减少)而被回收。此外,在管理员减少SYN-RECEIVED状态时间多少和攻击者的发包率之间仅仅是一个线性关系而已。基于上述原因,此方案并不建议采用。

6.3 SYN缓存

另外两种方案是基于SYN缓存和SYN cookies(见6.4)的,简化因接收SYN而生成TCB时初始化的状态,推迟全状态的实例化[4]。在采用SYN缓存的主机中,一个带有被限制大小的HASH表空间被用于存放那些将被分配给TCB的数据的一个子集。如果当握手完成的ACK接收到了,这些数据将被复制到一个完整的TCB中,否则超出存活时间的HASH值将会在需要时被回收。在Lemon的FreeBSD中,对于一个半开连接的SYN缓存是160字节,而一个完整的TCB是736字节,并且支持15359个SYN缓存空间。

SYN缓存的数据结构对于那些试图让HASH表空间溢出的攻击者是健壮的。因为在其HASH值里面包含了对方的端口号和一些密码比特。由于堆栈相对于链表是一种更加高效的数据结构,因此堆栈被用于SYN缓存以提高速度。在Lemon的测试中,处于活跃攻击下的主机用SYN缓存能够建立连接且仅仅比正常时间延缓了15%的时间。

6.4 SYN Cookies

对比SYN缓存的方法,SYN Cookies技术做到了接收到一个SYN时完全不需要分配空间。因为构成连接状态的最基本数据都被编码压缩进SYN-ACK的序列号比特位里了。对于一个合法连接,服务器将收到一个带有序列号(其实序列号已经加1)的ACK报文段,然后基本的TCB数据将被重新生成,一个完整的TCB通过解压确认数据将被安全的实例化。这种解压即使在重度攻击下仍然能够成功,因为在主机端根本没有任何存储负载,只有计算编码数据到ACK序列号中的负载。其不足之处就是,不是所有的TCB数据都能添加到32位的序列号段中,所以一些高性能要求的TCP选项将不能被编码。其另一个问题是这样的SYN-ACK报文段将不能被转发(因为转发需要完整的状态数据)。

Andre Oppermann最近的一些研究是运用TCP时间戳选项结合序列号字段编码更多的状态信息,保存那些高性能选项的应用,比如TCP窗口大小,TCP选择性确认选项(TCP Selective Acknowledgment Options )以及TCP MD5摘要对SYN cookies的支持。这使SYN Cookies向前迈进了一步,他消除了之前SYN cooikes实现不能支持这些功能的缺陷。

TCP SYN cookies 的规范格式并不涉及互操作性问题,因为它们仅在本地被处理,对于生成和验证的规范和过程在不同实现中会稍有不同。

6.4.1 SYN cookies的生成

为了在使用SYN cookies时计算出SYN-ACK序列号(就是SYN cookies),主机首先要结合一些本机的密码比特,一个包括IP地址和TCP端口号的数据结构,SYN初始序列号,和一些标识密码比特的索引数据。在所有上述字节之上生成一个MD5摘要,然后一些比特位从hash值里被截断以便将其放入到SYN-ACK序列号中。由于序列号的大小大约是全部hash值的四分之一,因此这种截断是必要的,但是通常验证的时候至少要用3字节大小的hash比特位,这意味着在不知道密码比特位的情况下仍然有将近2^24种可能性去猜测验证cookies。为了将hash值发送出去,cookies的一些比特位将使SYN包含的MSS(最大报文段长度)的上限值变小,并影响在hash值中标识本机密码位的索引位。

6.4.2 SYN cookies的验证

为了验证SYN cookies,首先要将收到的ACK报文段中的确认号减1以便重新生成SYN cookies。对于这些已被截断过的hash位验证值的计算是基于双方IP地址,端口号,序列号减1和与cookie中索引号对应的密码池中的值。如果被计算出来的这些值与cookie中的值相同,此时TCB才初始化并开始建立连接。被编码的MSS上界被用来设置一个不超过最初值的合理大小的MSS值。MSS通常由3个比特位来实现,这三个比特位对应8个由一般链路的MTU(最大传输单元)和以太网头部计算出的MSS值。

6.5混合方式

混合方式将上述的两种或更多防御方法联合起来使用。例如,一些终端机操作系统同时实现了一个超大backlog队列和SYN cookies,但是仅仅当backlog的大小超过一定阈值时SYN cookies才被使用,这样就能在不涉及SYN cookies缺点的情况下正常使用,也允许在遭受攻击时转移到SYN-cookies防御。

7 基于网络的对策

7.1过滤

网络层最基本的防御是RFC 2827[3]里描述的过滤应用。采用输入源过滤,ISP拒绝将一个源IP地址不属于其来源子网的包进行更远的路由。输入源过滤能够有效地阻止用IP伪装的SYN洪泛攻击。然而这种方法在目前是没用的,因为其很难大规模部署。而且输入源过滤同样不能抵御分布式攻击。

7.2防火墙与代理

一个有防火墙或者代理的设备在网络中就能够通过两种方法缓冲SYN洪泛攻击,一种是对连接发起人伪装SYN-ACK包,另一种是对服务器伪装ACK包[5]。

如果连接发起人是合法的,防火墙/代理就会收到ACK,然后在它自己和服务器之间建立连接并伪装连接发起人的地址。防火墙/代理将连接双方分割开。这种分割能够抵御SYN洪泛攻击,因为服务器方根本没接受收过攻击者的SYN。只要防火墙/代理实现了一些基于TCP的防御策略,比如SYN cookies或SYN 缓存,他就能够保护所有在其后面的服务器免于SYN洪泛攻击。

另一种是响应SYN-ACK的伪装ACK包通过防火墙/代理到达服务器。这种伪装防止服务器的TCB一直停留在SYN-RECEIVED状态,因此保证了backlog队列中的空余空间。防火墙/代理将会停留等待一段时间,如果连接发起人正确的ACK没有被检测到,它将会通过伪装的TCP RET报文使服务器释放TCB。对合法的连接,数据包流能够在没有防火墙/代理的影响下继续进行。这种方法相比于上面伪装SYN-ACK的方法更具吸引力,因为当合法连接建立以后防火墙/代理不需要直接参与到连接中去。

8 活动监视器

活动监视器是一种能够检测并干预发往服务器的流量的设备,跟像防火墙一样,它并不是网络路由中必须的设备。一种典型的监视器会像7中的ACK伪装的防火墙/代理一样,拥有一个附加的能力,就是如果它发现SYN包来源于它知道的攻击者源地址就会立刻发送伪装RST包给服务器。活动监视器因其便宜容易部署(相比于基于防火墙和输入源过滤的方案)而具有实用性,而且仍然能够保护整个服务器网络而不需要每台服务器操作系统都实现一个基于终端的解决方案。

9 SYN洪泛与相关一些攻击的比较

除了SYN洪泛,通过在TCP已建立的连接中伪装源IP地址和连接参数的一些其他攻击也是可能的。如果攻击者能够推测到双方的IP地址,TCP端口号和合法的序列号,就能通过重置或修改恶意数据而破坏连接。除了伪装TCP报文段,伪装ICMP数据包同样也能终止一个TCP连接。

不管是这些攻击还是SYN洪泛,其目标都是受害者的TCP应用程序,而且能够用比蛮力洪泛数据包方法小的多的代价来中断受害者的服务。然而,SYN洪泛与其他TCP欺骗攻击相比有很大的不同。SYN洪泛攻击新连接的服务而不影响已建立的连接,然而其他欺骗攻击却是打断已建立的连接不能从开始阻止新的连接。SYN攻击仅仅通过修改初始握手程序就能被制止,然而其他的欺骗攻击需要整个连接生命周期中检查每一段数据。SYN洪泛和其他TCP欺骗攻击之间的共同之处是他们都是取决于攻击者发送伪装源地址IP数据包的能力,而防御它们的相同方法都是部署更多的地址过滤或使用IP安全协议(IPsec)。

10 总结

在我看来,一些SYN缓存技术的变体应该作为固化功能将其植入到服务器操作系统中去,而且这些变体可以适当的情况下结合其他解决方案(基于地址的过滤,ACK伪装防火墙,IP安全协议等等)一起部署。目前也有许多专家正在致力于研究健壮性更强的TCP协议,也希望这些补充协议能够早日部署。

原文:

https://www.cnblogs.com/jokerbj/p/11278067.html

https://blog.csdn.net/shixin_0125/article/details/78829069

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42319496/article/details/119371948

智能推荐

测试syn-flood等泛洪攻击的小软件

可以模拟syn flood udp flood等泛洪攻击的一款小软件,360会报警。

TCP SYN洪泛攻击的原理及防御方法

尽管这种攻击已经出现了十四年,但它的变种...本篇论文详细描述这种攻击并展望和评估现在应用于终端主机和网络设备的对抗SYN洪泛方法。 1 基本的漏洞 SYN洪泛攻击首次出现在1996年。当时Phrack杂志中描述了这种攻击

TCP三次握手详解-深入浅出(有图实例演示)

TCP是属于网络分层中的传输层,因为OSI分为层,感觉太麻烦了,所以分为四层就好了,简单。 分层以及每层的协议,如下两张图: TCP三次握手 TCP三次握手简单如下图: TCP三次握手的过程描述: 1.客户...

DDoS攻击--Syn_Ack/Ack_Flood等攻击防护详解(TCP)

Syn_Ack/Ack_Flood攻击属于TCP攻击,在了解Syn_Ack/Ack_Flood攻击之前,可以先看看TCP攻击详解。 Syn_Ack Flood 攻击: syn_ack报文出现在连接建立的第2个报文,用来确认第一次握手的syn包。 当服务器收到syn_ack...

SYN Flood攻击原理及防御技术

SYN泛洪一直是互联网上最常见也是最经典的DDoS攻击方式。这种攻击通过向服务器发送大量tcp请求连接报文(源IP一般是离散的),服务器为每一条连接分配资源最终导致内存耗尽而无法为后续的合法请求建立连接和服务。 ...

SYN泛洪攻击

转自《SYN洪泛攻击的原理、预防和排除》 ...SYN泛洪攻击原理在TCP协议中被称为三次握手(Three-way Handshake)的连接过程中,如果一个用户向服务器发送了SYN报文,服务器又发出 SYN+ACK 应答报文后未收到客户端的 A

防止SYN泛洪攻击 开启路由器的TCP拦截

防止SYN泛洪攻击 开启路由器的TCP拦截 intercept,大多数的路由器平台都引用了该功能,其主要作用就是防止SYN泛洪攻击。SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击...

使用Python实现SYN 泛洪攻击(SYN Flood)

SYN泛洪攻击(SYN Flood)是一种比较常用的DoS方式之一。通过发送大量伪造的Tcp连接请求,使被攻击主机资源耗尽(通常是CPU满负荷或者内存不足) 的攻击方式。 SYN攻击是客户端向服务器发送SYN报文之后就不再响应服务器...

DDoS攻击--Syn_Flood攻击防护详解(TCP)

Syn-Flood攻击是当前网络上最为常见的DDoS攻击,也是最为经典的拒绝服务攻击,它利用了TCP协议实现上的一个缺陷,通过向网络服务所在端口发送大量的伪造源地址的攻击报文,就可能造成目标服务器中的半开连接队列被占...

测试开发笔记

测试开发笔记 第一章 测试基础 7 什么是软件测试: 7 ★软件测试的目的、意义:(怎么做好软件测试) 7 3.软件生命周期: 7 第二章 测试过程 8 1.测试模型 8 H模型: 8 V模型 9 2.内部测试 10 ...

【网络编程】SYN Flood (SYN洪水攻击) 源代码分析

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack...

简述TCP的三次握手和四次挥手过程

①TCP是一种精致的,可靠的字节流协议。 ②在TCP编程中,三路握手一般由客户端(Client)调用Connent函数发起。 ③TCP3次握手后数据收发通道即打开...(1)第一次握手:Client将标志位SYN置为1,随机产生一个值s...

TCP SYN泛洪攻击

尽管这种攻击已经出现了十四年,但它的变种至今...本篇论文详细描述这种攻击并展望和评估现在应用于终端主机和网络设备的对抗SYN洪泛方法。 1 基本的漏洞 SYN洪泛攻击首次出现在1996年。当时Phrack杂志中描述了

Scapy实现SYN泛洪攻击

一、实验说明 1.实验介绍 本次实验将使用python3版本的Scapy--Scapy3k...SYN泛洪攻击的实现原理Scapy3k的基本用法 3.效果图 二、基础知识 以下部分内容整理自百度百科、360百科和Scapy3k官方文档:

【网络编程】SYN Flood (SYN洪水攻击)原理及防阻

SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。

使用scapy实现TCP SYN-Flooding攻击

基于ubuntu 16.04系统,首先安装scapy,如下的apt-get或者可...本文即使用其数据包构造功能,实现syn flooding攻击。 # sudo apt-get install scapy TCP SYN Flooding即向服务器的监听端口不断发送TCP的SYN报...

泛洪攻击以及防护方法

泛红攻击以及预防方法

SYN Flood攻击及防御方法

SYN Flood攻击及防御方法   一、 为什么Syn Flood会造成危害   这要从计算机网络的TCP/IP协议栈的实现说起。当开放了一个TCP端口后,该端口就处于Listening状态,不停地监视发到该端口的SYN报文,一旦接收到...

分析syn flood的攻击原理,如何防御syn flood攻击

(1) syn攻击利用TCP协议的缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。服务器收到连接请求,将此信息加入到未连接队列,并发送请求包给客户,此时进入SYN_RECV状态。当服务器未收到客户端的确认包时,...

TCP SYN-Cookie的原理和扩展

SYN-Cookie概述预防半连接攻击,SYN-Cookie是一种有效的机制,它的基本原理非常简单,那就是“完成三次握手前不为任何一个连接分配任何资源”,它是怎么做到的呢?也是非常简单。1.编码信息将一些本应该在本地保存的...

Kali Linux渗透测试 125 拒绝服务--Syn-Flood攻击

本文记录 Kali Linux 2018.1 学习使用...TCP 连接和端口过程TCP 三次握手过程 版权声明TCP建立连接第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号

SYN Flood攻击的基本原理及防御

转载自:http://www.xfocus.net/articles/200106/208.htmlSYN Flood攻击的基本原理及防御创建时间:2001-06-28 文章属性:转载 文章来源:http://shotgun.patching.net/syn.htm 文章提交:xundi (xundi_at_xfocus...

Linux 内核网络协议栈 ------ tcp重传数据包 tcp_retransmit_skb 函数

/* This retransmits one SKB. Policy decisions and retransmit queue * state updates are done by the caller. Returns non-zero if an * error occurred which prevented the send. */ int tcp_retransmit_

常见网络攻击原理及其防御

常见的网络攻击,按照osi七层协议,可以分为: 1,物理层 线路侦听 2,数据链路层 mac_flood 3,网络层 arp_poison,icmp_redirection 4,传输层 tcp_flood(包含ack_flood和syn_flood),udp_flood(ntp,dns) 7,应用...

Linux网络编程---TCP三次握手,SYN洪水攻击,

TCP三次握手,四次挥手图解,SYN洪水攻击实例。

TCP--SYN洪水攻击

在查看TCP标识位SYN时,顺便关注了一下SYN ... 正常的3次握手连接:首先是C发送一个SYN报文给服务端S,然后这个服务端发送一个SYN-ACK包以回应C,接着,C就返回一个ACK包来实现一次完整的TCP连接。就这样,C到服务端

调用CONTEXT上下文报错,ORA-01031: 权限不足 ,ORA-06512: 在 "SYS.DBMS_SESSION

 上下文处理: 导入一个用户后,执行调用上下文报错 SQL> execute pkg_clcp_cldm_utils.proc_set_cldm_context('AS','AS'); begin pkg_clcp_cldm_utils.proc_set_cldm_context('AS','AS');...

程序员价值观和网络复杂性-网络不可达排查过程

序周三由于吃了可能已经坏掉的生蚝,周四开始腹泻并发烧,周四晚上开始高烧,并持续到周五晚上,没去医院没吃药,死磕,对,死磕,然后在周六白天断断续续高烧低烧相间后,到了晚上看完同事介绍的电影《异度空间》后...

随便推点

推荐文章

热门文章

相关标签