DDoS入门学习


之前以为DDos很简单,现在发现学问还是大滴很呢!!!

理论

DDOS简介

DDOS(Distributed Denial of Service),又称分布式拒绝服务攻击。
是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。
分布式拒绝服务攻击方式在进行攻击的时候,可以对源IP地址进行伪造,这样就使得这种攻击在发生的时候隐蔽性是非常好的,同时要对攻击进行检测也是非常困难的,因此这种攻击方式也成为了非常难以防范的攻击。

DDOS危害

出口带宽堵死
游戏掉线导致客户流失
服务器连接数多,连接资源被耗尽
服务器卡、慢、死机、无法连接

流量特点

IP地址随机或固定某些IP段随机
没有完整完成三次握手
地址多数是伪造的
请求数量大、快

DDOS攻击类型与防御

1.Smurf攻击

攻击者向网关(网络广播地址)发送ICMP请求包,并将该ICMP请求报文的源地址伪造成受害主机IP地址,目的地址为广播地址。路由器在接受到该数据包,发现目的地址是广播地址,就会将该数据包广播出去,局域网内所有的存活主机都会受到一个ICMP请求包,源地址是受害主机IP。接下来受害主机就会收到该网络内所有主机发来的ICMP应答报文,通过大量返回的ICMP应答报文来淹没受害主机,最终导致网络阻塞,受害主机崩溃。下面是smurf攻击示意图(盗的图)

防护方案:

  • 禁止路由器广播ICMP请求包;
  • 禁止操作系统对广播发出的ICMP请求包做出响应;
  • 配置防火墙静止来自你所处网络外部的ping包
2.TearDrop攻击

是一种畸形报文攻击,基于UDP的病态分片数据包的攻击方法。
通过设置错误的片偏移(IP分段),使得数据包到达目的地时,服务器无法重新组合数据包,因为数据包的组合是通过片偏移来组装的,最终导致崩溃。对比一下正常IP数据包和错误IP数据包
这种攻击主要对旧的windows版本和Linux版本有效。

防护:
可以检测发来的数据包片偏移是否合法,如果合法在组装,不合法直接丢弃。比如这个:分片重组检查算法

3.Land Attack(着陆攻击)

攻击者发动Land Attack攻击时,需要先发出一个SYN数据包,并将数据包的源IP与目的IP都设置成要攻击的目标IP,这样目标在接收到SYN数据包后,会根据源IP回应一个SYN+ACK数据包,即和自己建立一个空连接,然后到达idel超时时间时,才会释放这个连接。攻击者发送大量这样的数据包,从而耗尽目标的TCP连接池,最终导致拒绝服务。

Kali Linux提供的很多工具,都可以实现伪造包的功能,如hping3

防御方案:
这种攻击对早期系统有效。通过防火墙、路由设备,建立规则,丢弃源地址和目标地址相同的SYN、SYN+ACK的TCP。

4.YN FLOOD攻击

SYN FLOOD攻击是在TCP三次握手过程中产生的。
攻击者通过发送大量伪造的带有SYN标志位的TCP报文,与目标主机建立了很多虚假的半开连接,在服务器返回SYN+ACK数据包后,攻击者不对其做出响应,也就是不返回ACK数据包给服务器,这样服务器就会一直等待直到超时。这种攻击方式会使目标服务器连接资源耗尽、链路堵塞,从而达到拒绝服务的目的

防御:

  • SYNCheck:使用防护设备,3次握手变成了6次握手,由防护设备检测SYN请求是否合法,通过后再由防护设备将报文转发给服务器,后续报文仍由防护设备代理。
  • Micro blocks:管理员可以在内存中为每个SYN请求创建一个小索引(小于16字节),而不必把整个连接对象存入内存。
  • RST cookies:在客户端发起第一个SYN请求后,服务器故意回应一个错误的SYN+ACK报文。如果合法用户收到这个报文,就会给服务器响应RST报文。当服务器收到这个报文时,就将这个主机的IP记录进合法IP列表,下次该主机发起SYN请求时,就可以直接通过了。
  • STACK tweaking:管理员可以调整TCP堆栈以减缓SYN泛洪攻击的影响。这包括减小超时时间,等到堆栈存释内放时再分配连接,否则就随机性地删除传入的连接。
5.ACK FLOOD攻击

ACK FLOOD攻击是利用TCP三次握手过程。这里可以分为两种。
第一种:
攻击者伪造大量的SYN+ACK包发送给目标主机,目标主机每收到一个SYN+ACK数据包时,都会去自己的TCP连接表中查看有没有与ACK的发送者建立连接 ,如果有则发送ACK包完成TCP连接,如果没有则发送ACK+RST 断开连接。但是在查询过程中会消耗一定的CUP计算资源。如果瞬间收到大量的SYN+ACK数据包,将会消耗服务器的大量cpu资源,导致正常的连接无法建立或增加延迟,甚至造成服务器瘫痪、死机。

第二种:
利用TCP三次握手的ACK+SYN应答,攻击者向不同的服务器发送大量的SYN请求,这些SYN请求数据包的源IP均为受害主机IP,这样就会有大量的SYN+ACK应答数据包发往受害主机,从而占用目标的网络带宽资源,形成拒绝服务。

通常DDOS攻击会将ACK flood与SYN flood结合在一起,从而扩大威力。

防御方案参考:

  • 采用CDN进行流量稀释;
  • 避免服务器IP暴露在公网上;
  • 通过限速或动态指纹的方式;
  • 利用对称性判断来分析出是否有攻击存在;
  • 在连续收到用户发送的ACK包时,中断回话,让其重连。
6.UDP FLOOD攻击(UDP泛洪攻击)

因为UDP不需要三次握手,这就造成UDP泛洪攻击不但效率高,而且还可以在资源相对较少的情况下执行。
UDP FLOOD可以使用小数据包(64字节)进行攻击,也可以使用大数据包(大于1500字节,以太网MTU为1500字节)进行攻击。
大量小数据包会增大网络设备处理数据包的压力;
而对于大数据包,网络设备需要进行分片、重组,最终达到的效果就是占用网络传输接口的带宽、网络堵塞、服务器响应慢等等。

防御方案:

  • 限制每秒钟接受到的流量(可能产生误判);
  • 通过动态指纹学习(需要攻击发生一定时间),将非法用户加入黑名单。
7.NTP放大攻击

NTP(Network Time Protocol,网络时间协议),是用来使计算机网络时间同步化的一种协议,使用UDP123端口进行通信。
通常在NTP服务器上会有一些调试接口,而利用这些接口中的monlist请求,就可触发放大攻击。当主机向NTP服务器发送monlist查询请求时,NTP服务器会将与之进行时间同步的最后600个IP地址返回。所以攻击者只需要将源地址伪造为受害主机的IP,向NTP服务器发送一个monlist查询请求包,受害主机就会收到大量的UDP响应包。这种攻击在放大攻击里,危害相对较大。

这种攻击产生的原因:

  • 请求与响应数据包不等价;
  • UDP协议的通信模糊性(无数据传输确认机制);
  • 以及NTP服务器的无认证机制。

防御方案:

  • 使用防 DDoS 设备进行清洗;
  • 加固并升级NTP服务器;
  • 在网络出口封禁 UDP 123 端口;
  • 通过网络层或者借助运营商实施 ACL 来防御;
  • 关闭现在 NTP 服务的 monlist 功能,在ntp.conf配置文件中增加disable monitor选项。
8.DNS放大攻击

DNS报文格式(借个图):

首先,攻击者向僵尸网络发出指令,使僵尸网络中的每一台主机均发出一个伪造源地址的DNS查询请求包,这些请求包查询类型设置为ANY,因为这种类型会请求所有的记录,这些记录会在返回的响应包中,也就是说这种数据包的大小较其他类型是最大的。
接着查询类型设为递归查询,为什么不是迭代查询呢,仔细看两种查询的过程图可发现,如果迭代查询第一个请求的DNS服务器没有查询到结果,那么第一个请求的服务器会返回另一个DNS服务器IP,让请求主机向这个IP去继续查询,然而攻击者的数据包源地址是伪造的,所以并不会发起第二次查询,因为第一次查询根本就不是它发起的;而递归查询却是在查询到结果之后,才返回给查询请求发起者。
利用这两个特点,攻击者就可以成功发起DNS放大攻击。这种普通的查询请求可以将攻击流量放大2~10倍,如果想增大攻击倍数,可以使用RFC 2671中定义的DNS拓展机制EDNS0。未使用EDNS0时,若响应包大小小于512字节,就使用UDP封装数据;若响应包大小超过512字节,就使用TCP连接或者服务器截断响应报文,丢弃超过512字节的部分,并把TC位置1。这两种方式都不利于进行DNS放大攻击。然而在开启EDNS0机制后,增加了OPT RR字段,这两个字段包含了能够处理的最大UDP报文大小信息,所以攻击者将这个信息设置的很大,服务器就会根据这个信息生成响应报文。最后看一下DNS放大攻击演示图

# 四个步骤
1.攻击者使用受损端点将带有欺骗性IP地址的UDP数据包发送到DNS recursor(递归)。数据包上的欺骗地址指向受害者的真实IP地址。
2.每个UDP数据包都向DNS解析器发出请求,通常会传递诸如“ANY”之类的参数,以便接收可能的最大响应。
3.在收到请求后,尝试通过响应提供帮助的DNS解析器会向欺骗的IP地址发送大量响应。
4.目标的IP地址接收响应,周围的网络基础设施因流量泛滥而变得不堪重负,导致拒绝服务。

虽然一些请求不足以取消网络基础设施,但当此序列在多个请求和DNS解析器之间成倍增加时,目标接收的数据放大可能很大。

防御的话,可以参考以下几点:

  • 联系ISP清洗上游流量;
  • DNS服务器只对可信域内提供服务,限制对域外用户提供DNS解析服务;
  • 对单个IP的查询速率做限制;
  • 拥有足够的带宽承受小规模攻击;
  • 关闭DNS服务器的递归查询;
  • 利用防火墙等对ANY Request进行过滤。
  • 源IP验证 - 停止欺骗数据包离开网络
9.SNMP放大攻击

SNMP(Simple Network Management Protocol,简单网络管理协议),它使用UDP 161端口进行通信
攻击者向互联网上开启SNMP服务的设备发送GetBulk请求,并使用默认通信字符串作为认证凭据。常见的默认通信字符串如public、private以及一些厂商默认的通信字符串。GetBulk请求是在SNMPv2中添加的的,该请求会让SNMP设备尽可能多的返回数据,这也就是SNMP放大攻击的利用点

攻击者先将源地址改成要攻击的目标IP,再使用默认的通信字符串,向大量SNMP设备发出GetBulk请求,设备收到GetBulk请求数据包后,会将一大段的设备检索信息返回给目标主机,最终目标主机会被这些SNMP设备返回的数据包淹没,导致拒绝服务。

防御措施:

  • 禁止已开启SNMP的设备响应GetBulk请求,避免自己的设备被黑客利用;
  • 更改默认的通信字符串;
  • 修改默认端口161;
  • 隐藏开启SNMP设备的公网IP
10.TFTP放大攻击

TFTP(Trivial File Transfer Protocol,简单文件传输协议),使用UDP 69端口进行通信。
由于TFTP使用的是不可靠的UDP协议,所以他不能确保发送的任何报文都能真正到达目的地,因此他必须使用定时器来检测并重传报文

FTP协议将数据分成好多个数据块进行传输,每个数据块最大为512字节,客户端在接受到数据块时,需要给服务器端返回一个ACK确认报文,然后才会继续传输下一个报文。
若服务器没有收到客户端发来ACK报文,则在时间到达超时计数器时,便会开启重传机制,这也就是攻击利用点。
攻击者利用TFTP协议上的缺陷,伪造源地址向服务器发起请求,服务器回复的第1个data数据包后无法收到客户端发送的ACK。此时TFTP就会利用他的重传机制,定时重传第1个data数据包,当攻击者发出大量的这种请求时,TFTP放大攻击也就发生了

防御方案可参考如下:

  • 不要将TFTP服务器暴露在公网上;
  • 对流经TFTP服务的流量进行入侵检测;
  • 将重传(数据包)率设置为1;
  • 只为信任域内的主机提供服务。
11.CC攻击

CC攻击(ChallengeCollapsar)又称作HTTP 泛洪攻击。
原理是攻击者控制肉鸡、僵尸网络或使用代理服务器,不停地向目标的web服务发送大量合法请求,使得正常用户的web请求处理缓慢甚至得不到处理,制造大量的后台数据库查询动作,消耗目标CPU资源,最终导致服务器宕机崩溃。
这种攻击方式不需要很大的带宽,且无法使用伪造IP地址进行攻击,需要真实的机器与web服务器建立连接,因为HTTP协议是建立在TCP协议上,必须先进行TCP三次握手才能进行HTTP通信。
如果目标web服务器支持HTTPS,那么发起的HTTPS泛洪攻击还能穿透一些防护设备。

ddos攻击和cc攻击区别知主要是针对对象的不同:
ddos是主要针对IP的攻击,而CC攻击的主要是网页。CC攻击相对来说,攻击的危害不是毁灭性的,但是持续时间长;而ddos攻击就是流量攻击,这种攻击的危害性较大,通过向目标服务器发送大量数据包,道耗尽其带宽,更难防御。

防御方案:

  • 必要时将网页做成静态,减少数据库的使用;
  • 通过缓存的方式进行,尽量由设备的缓存直接返回结果来保护后端业务
  • Token随IP地址变化
  • 限制连接数量;
  • 修改最大超时时间;
  • 让用户手动输入验证码;
  • 在response报文中添加特殊字段,验证IP合法性;
  • 屏蔽频繁访问服务器的主机IP。

一个防CC攻击的脚本:https://zhangge.net/4649.html

参考文章:https://www.jianshu.com/p/dff5a0d537d8

12.HTTP慢速攻击

Slow HTTP Dos AttACKs(慢速HTTP拒绝服务攻击)
黑客模拟正常用户向web服务器发送慢速http请求,由于是慢速的,服务器端需要保持连接资源,直到数据传输结束或请求结束才可释放连接。当服务器端建立了大量这样的慢速连接,就会导致服务器拒绝服务。
这种攻击可以分为两类:一类是客户端发数据,另一类是客户端读取服务器发来的数据。
HTTP慢速攻击对基于线程处理的web服务器影响显著,如apache、dhttpd,而对基于事件处理的web服务器影响不大,如nginx、lighttpd。

HTTP慢速攻击还可以细分成以下几种攻击方式:
a. Slowloris攻击方式

HTTP协议规定请求头以一个空行结束,所以完整的http请求头结尾是\r\n\r\n。
然而'使用非正常的\r\n来结尾',就会导致服务端认为我们的请求头还没结束,等待我们继续发送数据直到超时时间。
# CRLF(Carriage Return Line Feed)表示回车换行

b. Slow post攻击方式

在http头部信息,可以使用content-length声明HTTP消息实体的传输长度,服务器端会content-length的值作为HTTP BODY的长度。
利用这一特点,攻击者'把content-length设置得很大的,然后缓慢发送数据部分',比如一次只发送一个字节,这样服务器端就要一直保持连接,直到客户端传完所有的数据。

# 利用工具  slowloris
https://github.com/gkbrk/slowloris.git
参考文章:https://www.fujieace.com/hacker/tools/slowloris-dos.html

c. Slow read攻击方式

攻击者发送一个完整的HTTP数据请求,之后服务器会给出响应,这时攻击者再'将自己的TCP窗口大小设置的很小',服务器会根据客户的TCP窗口大小来传送数据。
由于客户端的TCP窗口大小很小,服务器只能缓慢的传输数据给客户端。当建立大量的这种连接时,web应用的并发连接池将被耗尽,最终导致拒绝服务。

d. Apache range header攻击

# 这种攻击方式只针对apache
当客户端传输大文件时会有range字段,表示将大文件分段,分成几个小段进行传输。
例如攻击者将一个文件按照一个字节一段,分成好多段,这样就会造成传输数据缓慢,长时间占用连接,消耗服务器CPU和内存资源

防御
这里至只看apache的防护策略(具体的需要实践)

# 设置并使用以下模块
mod_reqtimeout 模块  # 控制请求数据传输的超时时间及最小速率
mod_qos 模块         # Apache的一个服务质量控制模块,用户可配置各种不同阈值
mod_security模块     # 一个开源的WAF模块,有专门针对慢速攻击防护的规则

对于其他中间件:参考文章

13.XSS-DOS

利用网站存在的存储型XXS漏洞,在网站中插入恶意的javascript代码。
代码的功能是不断向web服务器发起大量请求,从而导致服务器宕机,无法响应正常用户的请求

由于这种攻击的是由存储型XSS导致的,我们再防御方面就要考虑如何防御存储型XSS。
防御策略如下:

  • 对用户的输入以及url参数进行特殊字符过滤;
  • 对输出内容进行编码转换;
  • 结合黑白名单机制;
  • 等防御存储型XSS的方式
14.时间透镜攻击

通过控制相同源和相同目的IP报文,使得走不同路径的数据包,在同一时刻到达目标服务器,从而达到流量集中攻击的目的。

防御方案:

  • 增加抖动,干扰攻击路径,使得数据包无法预期到达;
  • 由运营商禁止源路由。
  • 采用高性能的网络设备;
  • 充足的网络带宽保证;
  • 升级主机服务器硬件;
  • 避免将服务器的真实IP暴露在公网中;
  • 使用CDN对流量进行稀释,当大流量稀释到各个CDN节点时,再对流量进行清洗,从而达到防护源站的目的(然而这种防御方式只能用在对域名发起的DDOS攻击,如果攻击者直接对IP进行攻击,则需要使用anycast技术来防御)。

可以参考:
http://icir.org/vern/papers/lensing.oak15.pdf
http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=7163026
https://www.cnblogs.com/h2zZhou/p/6513238.html
https://www.youtube.com/watch?v=QwAHNnKDVxQ
https://mp.weixin.qq.com/s?__biz=MzI2NjUwNjU4OA==&mid=2247483685&idx=1&sn=8ac38ff22d571bbbf7716cb9e83b9b35&chksm=ea8c5916ddfbd00008d9b28e22fccba8c201ce78c70c2d78d10ee732f22a39ccf46d4b197634&mpshare=1&scene=23&srcid=0831Wr5YJPYzSrQU6gnfGVd0

所有这些方案都不完美各有利弊,最终的策略可能是几种方案的结合使用,形成防御体系,将攻击提前化解在局部,不至于影响整个系统。


实践

暂时有待实践

参考(基本是完全参考大佬的,整理的太全了):
https://xz.aliyun.com/t/71
https://xz.aliyun.com/t/70

其他链接资源:
https://www.freebuf.com/articles/network/76021.html
https://www.cnblogs.com/wuyuan2011woaini/p/5800062.html
https://www.cnblogs.com/micr067/p/12519779.html
https://yq.aliyun.com/articles/480125/ kali下的DDos测试工具


文章作者: 剑胆琴心
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 剑胆琴心 !
评论
 上一篇
python进程之间全局锁(GIL) python进程之间全局锁(GIL)
感觉这篇文章写的不错: 点击这里 document.querySelectorAll('.github-emoji') .forEach(el => { if (!el.data
2020-05-08
下一篇 
内网第二章-内网基础信息搜集 内网第二章-内网基础信息搜集
二 . 内网信息收集 本机信息收集 1)查询网络配置 net view # 查看工作组 ipconfig /all # 也可以看到是否有域 2) 查询用户列表 net user # 查看本机用户列表 net localgro
2020-05-08
  目录