web防火墙防止ddos攻击 (ddos高防和web防护)

前端怎么防ddos攻击,ddos攻击web服务器

一、定义

DDoS 又叫分布式拒绝服务,全称 Distributed Denial of Service,是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。

二、攻击原理

分布式拒绝服务攻击原理分布式拒绝服务攻击DDoS是一种基于DoS的特殊形式的拒绝服务攻击,是一种分布的、协同的大规模攻击方式。单一的DoS攻击一般是采用一对一方式的,它利用网络协议和操作系统的一些缺陷,采用欺骗和伪装的策略来进行网络攻击,使网站服务器充斥大量要求回复的信息,消耗网络带宽或系统资源,导致网络或系统不胜负荷以至于瘫痪而停止提供正常的网络服务。与DoS攻击由单台主机发起攻击相比较,分布式拒绝服务攻击DDoS是借助数百、甚至数千台被入侵后安装了攻击进程的主机同时发起的集团行为。

一个完整的DDoS攻击体系由攻击者、主控端、代理端和攻击目标四部分组成。主控端和代理端分别用于控制和实际发起攻击,其中主控端只发布命令而不参与实际的攻击,代理端发出DDoS的实际攻击包。对于主控端和代理端的计算机,攻击者有控制权或者部分控制权.它在攻击过程中会利用各种手段隐藏自己不被别人发现。真正的攻击者一旦将攻击的命令传送到主控端,攻击者就可以关闭或离开网络.而由主控端将命令发布到各个代理主机上。这样攻击者可以逃避追踪。每一个攻击代理主机都会向目标主机发送大量的服务请求数据包,这些数据包经过伪装,无法识别它的来源,而且这些数据包所请求的服务往往要消耗大量的系统资源,造成目标主机无法为用户提供正常服务。甚至导致系统崩溃。

说简单点,其原理就是利用大量的请求造成资源过载,导致服务不可用,这个攻击应该不能算是安全问题,这应该算是一个另类的存在,因为这种攻击根本就是耍流氓的存在,「伤敌一千,自损八百」的行为。出于保护 Web App 不受攻击的攻防角度,还是介绍一下 DDoS 攻击吧,毕竟也是挺常见的。

DDoS 攻击可以理解为:「你开了一家店,隔壁家店看不惯,就雇了一大堆黑社会人员进你店里干坐着,也不消费,其他客人也进不来,导致你营业惨淡」。为啥说 DDoS 是个「伤敌一千,自损八百」的行为呢?毕竟隔壁店还是花了不少钱雇黑社会但是啥也没得到不是?DDoS 攻击的目的基本上就以下几个:

  • 深仇大恨,就是要*死你干**
  • 敲诈你,不给钱就*你干**
  • 忽悠你,不买我防火墙服务就会有“人”继续*你干**

也许你的站点遭受过 DDoS 攻击,具体什么原因怎么解读见仁见智。DDos 攻击从层次上可分为网络层攻击与应用层攻击,从攻击手法上可分为快型流量攻击与慢型流量攻击,但其原理都是造成资源过载,导致服务不可用。

三、攻击流程

攻击者进行一次DDoS攻击大概需要经过了解攻击目标、攻占傀儡机、实际攻击三个主要步骤,下面依次说明每一步骤的具体过程:

1.了解攻击目标就是对所要攻击的目标有一个全面和准确的了解,以便对将来的攻击做到心中有数。主要关心的内容包括被攻击目标的主机数目、地址情况。目标主机的配置、性能、目标的带宽等等。对于DDoS攻击者来说,攻击互联网上的某个站点,有一个重点就是确定到底有多少台主机在支持这个站点,一个大的网站可能有很多台主机利用负载均衡技术提供服务。所有这些攻击目标的信息都关系到后面两个阶段的实施目标和策略,如果盲目的发动DDoS攻击就不能保证攻击目的的完成,还可能过早的暴露攻击者的身份,所以了解攻击目标是有经验的攻击者必经的步骤。

2.攻占傀儡主机就是控制尽可能多的机器,然后安装相应的攻击程序。在主控机上安装控制攻击的程序,而攻击机则安装DDoS攻击的发包程序。攻击者最感兴趣,也最有可能成为别人的傀儡主机的机器包括那些链路状态好、性能好同时安全管理水平差的主机。攻击者一般会利用已有的或者未公布的一些系统或者应用软件的漏洞.取得一定的控制权,起码可以安装攻击实施所需要的程序,更厉害的可能还会取得最高控制权、留下后门等等。在早期的DDoS攻击过程中,攻占傀儡主机这一步主要是攻击者自己手动完成的,亲自扫描网络,发现安全性比较差的主机,将其攻占并且安装攻击程序。但是后来随着DDoS攻击和蠕虫的融合,攻占傀儡机变成了一个自动化的过程,攻击者只要将蠕虫放入网络中,蠕虫就会在不断扩散中不停地攻占主机,这样所能联合的攻击机将变得非常巨大,DDoS攻击的威力更大。

3.DDoS攻击的最后一个阶段就是实际的攻击过程,攻击者通过主控机向攻击机发出攻击指令,或者按照原先设定好的攻击时间和目标,攻击机不停的向目标或者反射服务器发送大量的攻击包,来吞没被攻击者,达到拒绝服务的最终目的。和前两个过程相比,实际攻击过程倒是最简单的一个阶段,一些有经验的攻击者可能还会在攻击的同时通过各种手段检查攻击效果,甚至在攻击过程中动态调整攻击策略,尽可能清除在主控机和攻击机上留下的蛛丝马迹。

四、攻击方式及防御

1.1 网络层 DDoS

网络层 DDos 攻击包括 SYN Flood ACK Flood UDP Flood ICMP Flood 等。

  • SYN Flood 攻击

SYN flood 攻击主要利用了 TCP 三次握手过程中的 Bug,我们都知道 TCP 三次握手过程是要建立连接的双方发送 SYN,SYN + ACK,ACK 数据包,而当攻击方随意构造源 IP 去发送 SYN 包时,服务器返回的 SYN + ACK 就不能得到应答(因为 IP 是随意构造的),此时服务器就会尝试重新发送,并且会有至少 30s 的等待时间,导致资源饱和服务不可用,此攻击属于慢型 DDoS 攻击。

  • ACK Flood 攻击

ACK Flood 攻击是在 TCP 连接建立之后,所有的数据传输 TCP 报文都是带有 ACK 标志位的,主机在接收到一个带有 ACK 标志位的数据包的时候,需要检查该数据包所表示的连接四元组是否存在,如果存在则检查该数据包所表示的状态是否合法,然后再向应用层传递该数据包。如果在检查中发现该数据包不合法,例如该数据包所指向的目的端口在本机并未开放,则主机操作系统协议栈会回应 RST 包告诉对方此端口不存在。

  • UDP Flood 攻击

UDP flood 攻击是由于 UDP 是一种无连接的协议,因此攻击者可以伪造大量的源 IP 地址去发送 UDP 包,此种攻击属于大流量攻击。正常应用情况下,UDP 包双向流量会基本相等,因此发起这种攻击的攻击者在消耗对方资源的时候也在消耗自己的资源。

  • ICMP Flood 攻击

ICMP Flood 攻击属于大流量攻击,其原理就是不断发送不正常的 ICMP 包(所谓不正常就是 ICMP 包内容很大),导致目标带宽被占用,但其本身资源也会被消耗。目前很多服务器都是禁 ping 的(在防火墙外可以屏蔽 ICMP 包),因此这种攻击方式已经落伍。

1.2 网络层 DDoS 防御

网络层的 DDoS 攻击究其本质其实是无法防御的,我们能做的就是不断优化服务本身部署的网络架构,以及提升网络带宽。当然,还是做好以下几件事也是有助于缓解网络层 DDoS 攻击的冲击:

  • 网络架构上做好优化,采用负载均衡分流。
  • 确保服务器的系统文件是最新的版本,并及时更新系统补丁。
  • 添加抗 DDos 设备,进行流量清洗。
  • 限制同时打开的 SYN 半连接数目,缩短 SYN 半连接的 Timeout 时间。
  • 限制单 IP 请求频率。
  • 防火墙等防护设置禁止 ICMP 包等。
  • 严格限制对外开放的服务器的向外访问。
  • 运行端口映射程序或端口扫描程序,要认真检查特权端口和非特权端口。
  • 关闭不必要的服务。
  • 认真检查网络设备和主机/服务器系统的日志。只要日志出现漏洞或是时间变更,那这台机器就可能遭到了攻击。
  • 限制在防火墙外与网络文件共享。这样会给黑客截取系统文件的机会,主机的信息暴露给黑客,无疑是给了对方入侵的机会。
  • 加钱堆机器。
  • 报警。

2.1 应用层 DDoS

应用层 DDoS 攻击不是发生在网络层,是发生在 TCP 建立握手成功之后,应用程序处理请求的时候,现在很多常见的 DDoS 攻击都是应用层攻击。应用层攻击千变万化,目的就是在网络应用层耗尽你的带宽,下面列出集中典型的攻击类型。

  • CC 攻击

当时绿盟为了防御 DDoS 攻击研发了一款叫做 Collapasar 的产品,能够有效的防御 SYN Flood 攻击。黑客为了挑衅,研发了一款 Challenge Collapasar 攻击工具(简称 CC)。

CC 攻击的原理,就是针对消耗资源比较大的页面不断发起不正常的请求,导致资源耗尽。因此在发送 CC 攻击前,我们需要寻找加载比较慢,消耗资源比较多的网页,比如需要查询数据库的页面、读写硬盘文件的等。通过 CC 攻击,使用爬虫对某些加载需要消耗大量资源的页面发起 HTTP 请求。

  • DNS Flood

DNS Flood 攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络世界上根本不存在的域名,被攻击的DNS 服务器在接收到域名解析请求的时候首先会在服务器上查找是否有对应的缓存,如果查找不到并且该域名无法直接由服务器解析的时候,DNS 服务器会向其上层 DNS 服务器递归查询域名信息。域名解析的过程给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量就会造成 DNS 服务器解析域名超时。

根据微软的统计数据,一台 DNS 服务器所能承受的动态域名查询的上限是每秒钟 9000 个请求。而我们知道,在一台 P3 的 PC 机上可以轻易地构造出每秒钟几万个域名解析请求,足以使一台硬件配置极高的 DNS 服务器瘫痪,由此可见 DNS 服务器的脆弱性。

  • HTTP 慢速连接攻击

针对 HTTP 协议,先建立起 HTTP 连接,设置一个较大的 Conetnt-Length,每次只发送很少的字节,让服务器一直以为 HTTP 头部没有传输完成,这样连接一多就很快会出现连接耗尽。

2.2 应用层 DDoS 防御

  • 判断 User-Agent 字段(不可靠,因为可以随意构造)
  • 针对 IP + cookie,限制访问频率(由于 cookie 可以更改,IP 可以使用代理,或者肉鸡,也不可靠)
  • 关闭服务器最大连接数等,合理配置中间件,缓解 DDoS 攻击。
  • 请求中添加验证码,比如请求中有数据库操作的时候。
  • 编写代码时,尽量实现优化,并合理使用缓存技术,减少数据库的读取操作。
  • 加钱堆机器。。
  • 报警。。

应用层的防御有时比网络层的更难,因为导致应用层被 DDoS 攻击的因素非常多,有时往往是因为程序员的失误,导致某个页面加载需要消耗大量资源,有时是因为中间件配置不当等等。而应用层 DDoS 防御的核心就是区分人与机器(爬虫),因为大量的请求不可能是人为的,肯定是机器构造的。因此如果能有效的区分人与爬虫行为,则可以很好地防御此攻击。

3.1 其他 DDoS 攻击

发起 DDoS 也是需要大量的带宽资源的,但是互联网就像森林,林子大了什么鸟都有,DDoS 攻击者也能找到其他的方式发起廉价并且极具*伤杀**力的 DDoS 攻击。

  • 利用 XSS

举个例子,如果 12306 页面有一个 XSS 持久型漏洞被恶意攻击者发现,只需在春节抢票期间在这个漏洞中执行脚本使得往某一个小站点随便发点什么请求,然后随着用户访问的增多,感染用户增多,被攻击的站点自然就会迅速瘫痪了。这种 DDoS 简直就是无本万利,不用惊讶,现在大站有 XSS 漏洞的不要太多。

  • 来自 P2P 网络攻击

大家都知道,互联网上的 P2P 用户和流量都是一个极为庞大的数字。如果他们都去一个指定的地方*载下**数据,成千上万的真实 IP 地址连接过来,没有哪个设备能够支撑住。拿 BT *载下**来说,伪造一些热门视频的种子,发布到搜索引擎,就足以骗到许多用户和流量了,但是这只是基础攻击。

高级的 P2P 攻击,是直接欺骗资源管理服务器。如迅雷客户端会把自己发现的资源上传到资源管理服务器,然后推送给其它需要*载下**相同资源的用户,这样,一个链接就发布出去。通过协议逆向,攻击者伪造出大批量的热门资源信息通过资源管理中心分发出去,瞬间就可以传遍整个 P2P 网络。更为恐怖的是,这种攻击是无法停止的,即使是攻击者自身也无法停止,攻击一直持续到 P2P 官方发现问题更新服务器且*载下**用户重启*载下**软件为止。

五、总结

DDoS 不可能防得住,就好比你的店只能容纳 50 人,黑社会有 100 人,你就换一家大店,能容纳 500 人,然后黑社会又找来了 1000 人,这种堆人头的做法就是 DDoS 本质上的攻防之道,「道高一尺,魔高一丈,魔高一尺,道高一丈」,讲真,必要的时候就答应勒索你的人的条件吧,实在不行就报警吧。

参考:

https://zoumiaojiang.com/article/common-web-security/#ddos

https://baike.baidu.com/item/%E5%88%86%E5%B8%83%E5%BC%8F%E6%8B%92%E7%BB%9D%E6%9C%8D%E5%8A%A1%E6%94%BB%E5%87%BB/3802159