在发生DDoS攻击的情况下,可以通过一些缓解技术来减少攻击对自身业务和服务的影响,从而在一定程度上保障业务正常运行。
缓解DDoS攻击的主要方法是对网络流量先进行稀释再进行清洗。

1.攻击流量的稀释

1.1 内容分发网络 CDN
CDN技术的初衷是提高互联网用户对网站静态资源的访问速度,由于分布式多节点的特点,它也能够对DDoS攻击的流量产生稀释的效果。
CDN在互联网范围内广泛设置多个节点作为代理缓存,并将用户的访问请求导向最近的缓存节点,以加快访问速度。
CDN使用智能DNS系统,一个域名对应一张IP地址表,当收到域名解析请求时,智能DNS会查看解析请求的来源,并给出地址表中距离请求来源最近的IP地址。
用户收到域名解析应答时,认为该CDN节点就是他请求的域名所对应的IP地址,并向该节点发起服务或资源请求。
CDN节点在收到用户的请求时,会在其存储的缓存内容中寻找用户请求的资源,如果找到,就直接将资源响应给用户,如果找不到,则作为代理服务器向源站请求资源并将结果缓存并返回给用户。
对于有大量静态资源的网站,使用CDN进行代理缓存能够大大减少源站的访问流量。
在发生DDoS攻击时,智能DNS会将来自不同位置的攻击流量分散到对应位置的CDN节点上,从而达到流量稀释的效果。
利用CDN技术只能稀释通过域名发起的DDoS攻击的流量,如果攻击者直接通过IP地址进行攻击,就不会经过智能DNS解析,也就无法稀释流量了。

1.2 任播 Anycast
Anycast技术是一种网络寻址和路由方法。通过使用它,多台提供特定服务的服务器可以使用相同的IP地址,客户端访问请求报文将会被IP网络路由到这一组服务器中最近的一台之上。
Anycast技术通常是通过在不同的节点处同时使用BGP协议向外声明同样的目的IP地址的方式实现的。
使用Anycast技术能够稀释DDoS攻击流量,在Anycast寻址过程中,流量会被导向最近的节点,攻击者不能对流量路径进行操控。
由于Anycast技术的高度可靠性,即使少数节点被DDoS攻击打垮,其周围客户端的请求也能够被快速地引导向其他可用的服务器,从而保证服务的高可用性。

2.攻击流量的清洗

2.1 IP信誉检查
IP信誉机制是指为互联网上的IP地址赋予一定的信誉值,那些过去或现在经常被作为僵尸主机发动DDoS攻击的IP地址会被赋予较低的信誉值。
当发生DDoS攻击时,流量清洗设备会对通过的网络流量进行IP信誉检查,优先丢弃信誉值低的IP地址所发来的数据包或建立的会话连接。
IP信誉检查的极端情况就是IP黑名单机制,如果数据包的来源存在于黑名单之中,则直接丢弃。
这种方式一般会造成较多的误报。

2.2 攻击特征匹配
多数情况下,发动DDoS攻击需要借助工具,为了提高发送请求的效率,攻击工具发出的数据包通常是由编写者伪造并固化到工具中的,因此一种攻击工具所发出的数据包载荷会具有一定的特征。
流量清洗设备可以将这些数据包载荷中的特征作为指纹,来识别工具所发出的攻击流量。
命中指纹特征的数据包会被丢弃。

2.3 速度检查与限制
一些攻击方法在数据包载荷上可能并不存在明显的特征,没有办法进行攻击特征匹配,但却在请求数据包发送的频率和速度上有着明显的异常。
这些攻击方法可以通过速度与限制来进行清洗。
例如在受到THC SSL DoS攻击时,会在同一个SSL会话中多次进行密钥协商,而正常情况下是不会这样的,因此当流量清洗设备发现SSL会话中密钥协商的次数超过了特定的值,就可以中断这个会话并将来源IP加入黑名单中。
再如受到Slowloris和POST慢速攻击时,客户端和服务器之间会以非常低的速率进行交互和数据传输,流量清洗设备在发现HTTP请求长时间没有完成传输时,就可以将会话中断。

2.4 TCP代理和验证
在一个TCP SYN请求到达流量清洗设备后,设备并不将它交给服务器,而是回复一个SYN+ACK响应,并等待客户端回复。
如果SYN请求来自合法用户,那么它会对SYN+ACK进行响应,这时流量清洗设备会代替用户与服务器建立TCP连接,之后合法用户和服务器之间就通过流量清洗设备进行通信。
而如果SYN请求来自攻击者,它通常不会对SYN+ACK进行响应,从而形成半开连接。流量清洗设备会暂时保留半开连接,在经过短暂超时后丢弃它。
相比于服务器,流量清洗设备对连接表进行了优化,能够处理极其庞大的连接请求,因此即使有非常多的SYN请求同时涌向清洗设备,它也能够处理。
在此过程中,服务器并没有消耗任何连接资源,因此保证了服务器的性能不受影响。

2.5 协议完整性验证
为了提高发送攻击请求的效率,大多数的攻击方法都只会发送攻击请求,而不接收和处理服务器的响应数据。
因此,如果能够对请求来源进行交互式验证,就可以检查请求来源协议实现的完整性。对于协议实现不完整的请求来源,通常可以丢弃其数据包。
例如对于提供HTTP服务的Web服务器,可以使用302重定向来验证请求来源是否完整实现了HTTP协议。
HTTP状态码302表示请求的资源被临时转移,并会给出一个转移后的地址。合法用户在接收到302重定向响应码后会顺着跳转地址寻找对应的资源,而攻击工具则不会进行跳转。
因此,攻击请求将会被流量清洗设备拦截并丢弃,Web服务器不会受到影响。

2.6 客户端真实性验证
一些攻击工具在开发过程中使用了第三方库,完整实现了协议交互功能。对于这些攻击工具,需要使用客户端真实性验证技术进行攻击流量清洗。
例如对于Web服务,可以通过检查客户端是否支持JavaScript来验证请求是否来自合法用户。
对于加入了JavaScript解析和执行功能的攻击工具,则需要使用验证码来进行识别。
对于无法解析JavaScript或无法识别验证码的请求,流量清洗设备可以丢弃它,从而保护Web服务器不受影响。

DDoS攻击与防御(4)的更多相关文章

  1. 通过DDOS攻击流程图来浅谈如何预防Ddos攻击与防御

    DDOS攻击流程图 站长之家配图(来源:ppkj.net) 一 背景 在前几天,我们运营的某网站遭受了一次ddos攻击,我们的网站是一个公益性质的网站,为各个厂商和白帽子之间搭建一个平台以传递安全问题 ...

  2. 浅谈 DDoS 攻击与防御

    浅谈 DDoS 攻击与防御 原创: iMike 运维之美  什么是 DDoS DDoS 是英文 Distributed Denial of Service 的缩写,中文译作分布式拒绝服务.那什么又是拒 ...

  3. DDoS 攻击与防御:从原理到实践

    本文来自 网易云社区 . 可怕的 DDoS 出于打击报复.敲诈勒索.政治需要等各种原因,加上攻击成本越来越低.效果特别明显等趋势,DDoS 攻击已经演变成全球性的网络安全威胁. 危害 根据卡巴斯基 2 ...

  4. DDoS 攻击与防御:从原理到实践(下)

    欢迎访问网易云社区,了解更多网易技术产品运营经验. DDoS 攻击与防护实践 DDoS 攻击的实现方式主要有如下两种: 自建 DDoS 平台 现在有开源的 DDoS 平台源代码,只要有足够机器和带宽资 ...

  5. DDoS 攻击与防御:从原理到实践(上)

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 可怕的 DDoS 出于打击报复.敲诈勒索.政治需要等各种原因,加上攻击成本越来越低.效果特别明显等趋势,DDoS 攻击已经演变成全球性的网络安全威胁 ...

  6. DDOS攻击与防御简单阐述,列出DDOS的攻击方法和防御方法

    参考1:https://www.hi-linux.com/posts/50873.html#%E7%BD%91%E7%BB%9C%E5%B1%82-ddos-%E6%94%BB%E5%87%BB 什么 ...

  7. DDoS攻击与防御(3)

    3.攻击应用资源网络应用和服务在处理数据时,通常需要消耗一定的网络连接.计算和存储资源,这些资源是由应用程序向系统进行申请并自行管理和维护的.消耗应用资源的DDoS攻击就是通过向应用提交大量消耗资源的 ...

  8. DDoS攻击与防御(2)

    2.攻击系统资源终端设备在与服务器进行通信时,经常需要创建会话连接,在此过程中通常会使用TCP和SSL等协议.会话连接一旦被占满,新进入的会话请求就必须等待前面的会话完成.消耗系统资源的DDoS攻击的 ...

  9. DDoS攻击与防御(1)

    分布式拒绝服务攻击的精髓是,利用分布式的客户端,向服务提供者发起大量看似合法的请求,消耗或长期占用大量资源,从而达到拒绝服务的目的.从不同的角度看,分布式拒绝服务攻击的方法有不同的分类标准.依据消耗目 ...

随机推荐

  1. for循环里使用查询如何优化(代码库)

    for循环里的查询,只是为了赋值对象中的一个字段,如果每一个都重新查一下数据库,影响效率 应该先进行查询,然后再循环里组装自己需要的业务数据 如下代码:list1 查询出对象的一部分内容,list2 ...

  2. jmeter笔记(1)--原理,下载与安装

    Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试静态和动态资源,例如静态文 ...

  3. 深入理解JVM(1)——栈和局部变量操作指令

    将常量压入栈的指令 aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入栈i ...

  4. oldboy s21day13装饰器和推导式

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 2.请为 func 函数编写一个装饰器,添加上装饰器后可以实现:执行func时,先输入"befor ...

  5. SpringBoot系列: JdbcTemplate 事务控制

    ============================Spring JdbcTemplate 事务控制============================之前使用 JDBC API 操作, 经常 ...

  6. EffectiveC++ 第5章 实现

    我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」. Chapter 5 实现 Implementations 适当提出属于 ...

  7. Java 多线程总结

    昨天熬了个通宵,看了一晚上的视频,把java 的多线程相关技术重新复习了一遍,下面对学习过程中遇到的知识点进行下总结. 首先我们先来了解一下进程.线程.并发执行的概念: 进程是指:一个内存中运行的应用 ...

  8. mui弹出菜单

    详细操作见代码: <!doctype html> <html> <head> <meta charset="UTF-8"> < ...

  9. JAVA进阶7

    间歇性混吃等死,持续性踌躇满志系列-------------第7天 1.Map接口的常用方法 import java.util.HashMap; import java.util.Map; publi ...

  10. Docker入门-docker-compose使用(二)

    Docker  Docker容器大行其道,直接通过 docker pull + 启动参数的方式运行比较麻烦, 可以通过docker-compose插件快速创建容器 1.安装docker-compose ...