最全!浅论DDoS原理及类型

原文:wusi.eo.mk

笔者可能会写DDoS的实现和预防

0x00 DDoS的概念

DDoS(DDoS:Distributed Denial of Service)分布式拒绝服务攻击,就是让多台计算机联合起来对目标发动拒绝服务攻击。

0x10什么是“拒绝服务攻击(DoS攻击)”呢?

拒绝服务攻击是一种网络攻击,通过中断设备的正常功能,使目标用户无法使用计算机或其他设备。攻击者通过发送大量请求,占用目标系统的关键资源(如内存、带宽和CPU),导致系统不堪重负,来不及处理正常请求。另一种方式是利用协议设计或实现中的漏洞,使目标系统陷入异常状态,无法正常提供服务。

0x11为什么叫拒绝服务攻击?

因为攻击成功的结果就是让服务器无法正常对用户服务,即拒绝服务。

0x20 DDoS的原理

在0x10中已经略讲了DoS的原理,DDoS与DoS之差在于D(distributed,分布式)。DoS的攻击是一台机器对服务器的攻击,DDoS攻击可以看作DoS攻击的Plus版本,它可以将分布在不同地方的多台计算机联合起来形成攻击平台,对一个或多个目标发动攻击,从而产生成倍的拒绝服务攻击的威力。如图

一个完整的DDoS攻击体系包括攻击者、主控端、代理机(傀儡机/肉鸡)和攻击目标(服务器)四部分组成

关于什么是傀儡机/肉鸡,请自行搜索。

0x30攻击者的心理

同行之间恶性竞争,如VPS厂商之间的竞争,内网穿透厂商的竞争(某些付费的厂商看不惯免费的内网穿透的工作室)以及某些视频网站。

请注意:DDoS在国际上所禁止,根据我国法律,处五年以下有期徒刑或者拘役,后果特别严重的,处五年以上有期徒刑。

1x00 DDoS的类型

1x10 流量型攻击

攻击原理:通过多个随机源“肉鸡”向攻击目标发送大量的数据包,占用攻击目标网络资源和处理单元,造成攻击目标的网络堵塞或宕机。这也是上文中主要谈到的攻击

简单来说,就是服务器太挤,被肉鸡堵住了,不让你进去

流量型DDoS攻击根据攻击方式的不同可以分为IP flood、SYN Flood、UDP Flood以及UDP反射放大攻击等。

1x11 ICMP Flood攻击(大部分是copy的,只做总结处理)

什么是ICMP协议?


ICMP全称Internet Control Message Protocol(网际控制信息协议)。提起ICMP,一些人可能会感到陌生,实际上,ICMP与我们息息相关。在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于IP数据 报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有内在机制来获取差错信息并处理。为了处理这些错误,TCP/IP设计了ICMP协 议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输 差错报文,还传输控制报文。

ICMP报文格式


ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文(见图表,ICMP报文的结构和几种常见的ICMP报文格式),IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP头部中的类型 (Type)域用于说明ICMP报文的作用及格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面。 RFC定义了13种ICMP报文格式,具体如下:

类型代码   类型描述
0    响应应答(ECHO-REPLY)
3    不可到达
4    源抑制
5    重定向
8    响应请求(ECHO-REQUEST)
11    超时
12    参数失灵
13    时间戳请求
14    时间戳应答
17    地址掩码请求
18    地址掩码应答

其中代码为15、16的报文已经作废。

ICMP flood的成因
足够快的数据包速度+足够的带宽,这才是洪水。
ping.exe和IcmpSendEcho速度慢的另一个原因是它们必须等待目标主机返回REPLY信息,这个过程需要花费大量时间,而Flood—— 洪水,顾名思义,是速度极快的,当一个程序发送数据包的速度达到了每秒1000个以上,它的性质就成了洪水产生器,洪水数据是从洪水产生器里出来的,但这 样还不够,没有足够的带宽,再猛的洪水也只能像公路塞车那样慢慢移动,成了鸡肋。要做真正的洪水,就需要有一条足够宽的高速公路才可以.由于ping.exe无法提速,这就需要专门的工具来做洪水了。

实现ICMP洪水的前提
最大的前提是攻击者的速度,其次是你的机器运行速度和数据吞吐量,由于涉及IP校验和的计算,如果数据处理能力不够,在这步就慢了一个级别,效果当然大打折扣。最后就是目标机器的带宽!如果对方比你大很多那么任何Flood都是无病呻吟。还有许多人都忽略的问题:发送的速度与数据包大小成反比,而且太大的数据包会被路由器等设备过滤掉!找到一个合适的数据包大小,对提高Flood的效率有很大帮助!

不同方式的ICMP洪水
1.直接Flood
要做这个的首要条件是你的带宽够,然后就是要一个好用的ICMP Flooder,别用ping.exe那种探路用的垃圾,例如我以前发布的AnGryPing,发包速度达到6000---9000包/秒(512Kbps ADSL),默认是32bytes的ECHO报文洪水,用它即使不能flood别人下去,防火墙也叫得够惨的了。直接攻击会暴露自己IP(如果对方没有还击能力那还无所谓,固定IP用户不推荐使用这种Flood),直接Flood主要是为了顾及Win9x/Me不能伪造IP的缺陷,否则一般还是别用为妙。

简单示意图:
攻击者[IP=211.97.54.3]---------------->受害者[截获攻击者IP=211.97.54.3]

2.伪造IP的Flood
如果你是Win2000/XP并且是Administrator权限,可以试试看FakePing,它能随意伪造一个IP来Flood,让对方摸不到头脑,属于比较隐蔽阴险的Flood。

简单示意图:

伪造IP=1.1.1.1的ICMP
攻击者[IP=211.97.54.3]----------------->受害者[截获攻击者IP=1.1.1.1]

3.反射
用采取这种方式的第一个工具的名称来命名的“Smurf”洪水攻击,把隐蔽性又提高了一个档次,这种攻击模式里,最终淹没目标的洪水不是由攻击者发出的,也不是伪造IP发出的,而是正常通讯的服务器发出的!
实现的原理也不算复杂,Smurf方式把源IP设置为受害者IP,然后向多台服务器发送ICMP报文(通常是ECHO请求),这些接收报文的服务器被报文欺骗,向受害者返回ECHO应答(Type=0),导致垃圾阻塞受害者的门口……
从示意图可以看出,它比上面两种方法多了一级路径——受骗的主机(称为“反射源”),所以,一个反射源是否有效或者效率低下,都会对Flood效果造成影响!

简单示意图:
攻击者[IP=211.97.54.3]------------->正常的主机----反射------>受害者[截获攻击者IP=……网易?!]

附提一句:现在中国家庭基本没有公网IP

1x12 SYN Flood & ACK Flood(使用TCP协议)

要知道SYN Flood如何攻击,就要先知道TCP协议怎么传输文件

先打个比方:在打电话时

(第一次握手)“你好,能听见吗?"

(第二次握手)"能听见,你呢?"

(第三次握手)”我也能听见。“

1)用户端想连接服务端,用户端向服务端发送一个SYN信息,即同步信息。(第一次握手)

TCP中每一个数据包都有一个序号,这样接收的时候就知道发出来的先后顺序(因为先发的不一定先到)和有没有数据包漏掉(因为网络原因,有几个包在传输的途中丢了也是很正常的)。SYN包的作用是同步序号,即告诉对方我的下一个包的序号应该是多少。

2)服务端向用户端发送SYN+ACK包(第二次握手)

3)用户端收到后回复ACK包(第三次握手),连接建立完成。

概括一下,就是用户端发SYN,服务端发ACK+SYN,用户端发ACK,连接建立完成。这个过程一般称为“三次握手”。

而SYN Flood攻击就是A发SYN包,B发ACK+SYN,此时A不发ACK而是再发一个SYN(相当于建立了一个新连接),然后不停的发SYN。这会产生大量建立了一半的连接,称为半开连接。

收到一个SYN,就会产生一个半开连接,正常情况下很快又会收到一个ACK,从而建立一个完整的连接。极少时候,一直收不到ACK,超时之后关闭这个半开连接。如果短时间内收到大量SYN而收不到ACK,就会建立很多半开连接,半开连接数如果超过上限,服务器就不会再接受SYN请求了,导致正常用户连不上来。

顺带一提,这是最经济的方法

服务器表示:

此外还有ACK Flood,这用于计算机与计算机(用户与用户)之间的攻击,用户与用户互相进行三次握手,而不是用户-服务器那样单向的。

比如一个恶作剧呼叫者用虚假消息给某人打电话,使普通呼叫者拨打占线。现在假设,这些虚假消息全部说的是:“我能听见”这就像在 ACK 洪水 DDoS 攻击中发生的情况。

1x13 传统UDP Flood(使用UDP协议)

要阅读下面的内容,请先知道什么是UDP协议怎样传输数据以及UDP与TCP的区别,请自行百度,另附区别梗图(Data:数据|Receiver:接收方|Sender:发送方)

UDP协议是一种无连接的协议,使用UDP协议传输报文之前,客户端和服务器之间不需要建立连接。如果在从客户端到服务器端的传递过程中出现报文的丢失,协议本身也不做任何检测或提示。这种报文处理方式决定了UDP协议资源消耗小、处理速度快,在被广泛应用的同时也为攻击者发动UDP Flood攻击提供了可能。

UDP Flood传统攻击方式如下:(没错,就是之前那图改的)

攻击者通过僵尸网络向目标设备发送大量伪造的UDP报文,这种报文一般为大包且速率非常快,通常会造成链路拥塞甚至网络瘫痪。(非常正宗的DDOS攻击)

1x14 UDP反射放大攻击(使用UDP协议)

攻击者通过伪造源IP地址,将大量UDP请求报文发送给反射器(如DNS服务器、NTP服务器等),这些服务器在收到请求后会回复比请求报文更大的响应报文,而这些响应报文会被错误地发送到伪造源IP地址对应的受害者主机,从而造成受害者主机的网络带宽被耗尽,甚至导致拒绝服务(DoS)攻击。

UDP反射放大攻击的核心在于“放大”二字。由于某些服务的响应报文远大于请求报文,因此这种攻击能够实现“放大”效果,即少量的伪造请求能够产生大量的响应报文。例如,对于Memcached服务,攻击者只需发送一个小小的请求,即可使服务器回传数万倍甚至更高倍数的响应数据,形成极具破坏力的DDoS洪流,从而对受害者造成巨大的网络流量压力,甚至导致网络拥塞和服务瘫痪。

(这种攻击不易追查,隐蔽性强) 遵纪守法

再打个比方:假设攻击者的IP是A,受害者IP是C:

攻击者告诉许多反射器:我的IP是C(由于UDP协议的特性,反射器只能从报文里知道发送者是谁),你给我发送114514个”坤“字+1919810个emoji

反射器们自言自语:好

反射器们向C发送了114514个”坤“字和1919810个emoji(关键是受害者他还必须接收),然后受害者就无了

当然实际情况远比文章中复杂,具体可以参见文末链接(链接失灵请复制名称然后搜索或者到wusi.eo.mk查看原文)

1x20 连接型攻击

攻击原理:利用目标用户获取服务器资源时需要交换DNS数据包的特性,发送大量的伪装DNS数据包导致目标用户网络拥塞,不能访问目标服务器。(对于什么是DNS服务器,请搜索(这句话好像说了三遍了)

如果流量性攻击是不让你进服务器的话,那这个就是给你把桥烧了,让你过不去。

连接型DDoS攻击根据攻击方式的不同可以分为DNS Query Flood和DNS Reply Flood等。

顺带一提,所有连接性攻击都是UDP Flood的一种。

1x21 DNS Query Flood

通过发起大量的DNS请求,导致DNS服务器无法响应正常用户的请求,正常用户不能解析DNS,从而不能获取服务。

DNS Query Flood攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络世界上根本不存在的域名,被攻击的DNS 服务器在接收到域名解析请求的时候首先会在服务器上查找是否有对应的缓存,如果查找不到并且该域名无法直接由服务器解析的时候,DNS 服务器会向其上层DNS服务器递归查询域名信息。

域名解析的过程(特别是递归查询时)给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量就会造成DNS服务器解析域名超时。

DNS Query Flood就是攻击者操纵大量肉鸡,对目标发起大量的域名查询请求

根据微软的统计数据,一台DNS服务器所能承受的动态域名查询的上限是每秒钟9000个请求。而一个集中的僵尸网络每秒可以发送上万个请求,而且攻击者经过一些蜜汁操作(地址过滤等)可以让请求查询的地址全都都是网络世界上根本不存在的域名。类似于SYN Flood(二者其实很大不同)

DNS服务器:WDNMD

但是这个对目标服务器本身没有实质性影响(属实是伤敌一千,他损一万了) 遵纪守法

1x22 DNS Reply Flood

DNS Reply Flood与DNS Query Flood大致相同,但发送的不是请求包,而是应答包,类似与ACK Flood

1x30 特殊协议缺陷攻击

(除了Http泛洪攻击了解以外其他攻击方式特别是1x32没听过)

攻击原理:利用目标用户平时使用服务所需要的协议漏洞,通过协议漏洞向目标用户递送大量的数据交换包,导致目标用户无法正常使用主机。特殊协议缺陷攻击常见的方式有Http泛洪攻击、Sip Invite Flood、Sip Register Flood、Ntp Request Flood、Connection Flood等。

1x31 Http泛洪攻击

HTTP 泛洪攻击是应用程序层攻击,它会利用加载网页和通过互联网发送内容时使用的 HTTP 互联网协议。为了与应用程序或服务器进行通信,网络浏览器会发送 GET 或 POST 请求。GET 请求旨在获取网页的标准静态内容,例如图片。POST 请求用于用户到服务器的动态交互。

HTTP 泛洪 DDoS 攻击有两个主要类型:

HTTP GET 攻击。在 HTTP 泛洪 GET 攻击中,攻击者会向 Web 服务器发送大量 GET 请求。这些请求通常针对目标服务器中的图片、文件或其他形式的大量静态内容。(由于这些文件比较大)由于服务器会尝试保持与这些请求的联系,因此最终会变得负荷过重,无法再对合法请求和有效流量做出响应。

出不来了,真是一点都出不来了想什么呢

HTTP POST 攻击。POST 请求通常包含发送到服务器进行处理的数据。POST 请求可能包含需要服务器端进行密集处理的参数,从而导致该服务器更快地耗尽其资源。

HTTP GET 攻击实施起来更容易,而 HTTP POST 攻击则会造成更大的损害。

1x32 Sip invite Flood

通过发起大量的Sip invite请求,导致网络视频电话会议Sip服务器无法响应正常用户的请求报文,占用服务器带宽使其阻塞,达到Sip报文洪水攻击的目的。

这个笔者没有测试,而且有关资料较少,所以不详细写

不是太懒不想写

1x33 Ntp Request Flood

网络时间协议(NTP)是一种通过因特网服务于计算机时钟的同步时间协议。它提供了一种同步时间机制,能在庞大而复杂多样因特网中用光速调整时间分配。它使用的是可返回时间设计方案,其特点是:时间服务器是一种分布式子网,能自我组织操作、分层管理配置,经过有线或无线方式同步逻辑时钟达到国家标准时间。此外,通过本地路由选择运算法则及时间后台程序,服务器可以重新分配标准时间。

攻击者向NTP服务器发送大量的请求报文,占用服务器带宽使其阻塞达到NTP攻击的目的。

由于NTP协议基于UDP,这为UDP Flood(前面已经提到)提供可能,而请求流量:接收流量=1:562(数据来源:NTP Reply Flood Attack)直接让UDP Flood变得可行。

1x34 Connection Flood

利用真实IP地址(代理服务器、广告页面)在服务器上建立大量连接,造成服务器上残余连接过多,效率降低,甚至资源耗尽,无法响应。

其中一种攻击方法是每秒钟向服务器发起大量的连接请求,这类似于固定源IP的SYN Flood攻击,不同的是采用了真实的源IP地址。通常这可以在防火墙上限制每个源IP地址每秒钟的连接数来达到防护目的。但现在已有工具采用慢速连接的方式,也即几秒钟才和服务器建立一个连接,连接建立成功之后并不释放并定时发送垃圾数据包给服务器使连接得以长时间保持。这样一个IP地址就可以和服务器建立成百上千的连接,而服务器可以承受的连接数是有限的,这就达到了DDoS效果。

参考资料(真™多):

DDOS攻击原理(非常详细)从零基础入门到精通,看完这一篇就够了_ddos原理-CSDN博客

DDoS攻击包教包会(原理和实现) - 哔哩哔哩 (bilibili.com)

技术分享 | 常见的DDoS攻击类型及防御措施 - FreeBuf网络安全行业门户

ICMP flood(ICMP洪水攻击)-CSDN博客

什么是UDP反射放大攻击,有什么安全措施可以防护UDP攻击_基于udp的反射ddos攻击-CSDN博客

DDoS攻击--Udp/Dns_query Flood攻击防护详解(UDP)_udpflood攻击使用防火墙防御-CSDN博客

DDoS攻防DNS原理篇 DNS Reply Flood - 白灰 - 博客园 (cnblogs.com)

什么是 HTTP 泛洪 DDoS 攻击?| HTTP 泛洪攻击的工作原理是什么?| Akamai

NTP Reply Flood Attack (NTP反射型DDos攻击) - cn三少<script></script> - 博客园 (cnblogs.com)

DDoS攻击原理及防护方法论(7)--Connection Flood攻击_ddos攻击中connecting flood攻击的原理-CSDN博客

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值