网络安全之DDos攻击原理与防御

news2024/10/7 20:32:34

请添加图片描述

DDos简介

  • 对于DDos(分布式拒绝服务)攻击,人们往往谈虎色变。它被认为是安全领域中最难解决的问题之一,迄今为止也没有完美的解决方案。
  • DDos攻击是一种网络攻击方式,其目的是通过利用大量的互联网连接设备同时向目标网站或服务发送大量请求,使得目标服务器无法处理正常流量,进而导致服务拒绝、系统瘫痪或者严重影响正常用户的使用体验。
  • DDos攻击中,“分布式” 意味着攻击流量来自多个源头,这使得攻击更难以防御,因为攻击者可以控制成千上万的设备形成所谓的“僵尸网络”,对目标发起大规模冲击。"拒绝服务"则表示攻击的目标是让合法用户无法正常使用目标网站或服务。

DDos攻击案例

  • Dyn 遭受的 DDoS 攻击:2016 年 10 月,主要域名服务 (DNS) 提供商 Dyn 遭受每秒 1 TB 的流量洪水攻击,有证据表明,DDoS 攻击实际上可能达到了每秒 1.5 TB 的速度。流量海啸使 Dyn 的服务下线,对很多主要网站造成了破坏,导致包括 GitHub、HBO、Twitter、Reddit、PayPal、Netflix 和 Airbnb 在内的许多知名网站无法访问。
  • GitHub遭DDoS攻击:2018年2月,GitHub平台遭遇了史上最大规模的DDoS网络攻击。这次攻击以每秒1.3太字节(Tbps)的速率传输流量,每秒发送1.269亿的数据包。攻击者利用memcached数据库缓存系统的放大效应,将攻击放大了约50,000倍。幸运的是,由于GitHub正在使用DDoS防护服务,该服务器在接收攻击后的10分钟内自动发出警报,触发了DDoS防护的缓解过程,成功阻止了攻击,这次攻击仅持续了约20分钟。
  • 美国大面积断网事件:2016年10月22日凌晨,美国域名服务器管理机构Dynamic Network Service(Dyn)宣布,该公司在遭受了一次大规模的DDoS攻击后,导致很多网站在美国无法访问。这次攻击展示了DDoS攻击对于全球互联网基础设施的潜在破坏力。
  • 针对AWS的大规模攻击:2020年AWS经历了一次前所未有的大规模DDoS攻击。这次攻击达到了2.3Tbps的流量,是有史以来最猛烈的攻击之一。攻击持续了整整三天,主要目标是AWS的云服务,攻击者似乎企图使其瘫痪。幸运的是,由于AWS拥有强大的防御系统,攻击者的目标并未达成。据悉,此次针对AWS的攻击是基于CLDAP反射的攻击,这种反射攻击会利用受欺骗的IP地址向第三方服务器发送请求,以此来滥用合法协议。

DDos攻击原理

  • 拒绝服务攻击的方式有很多中,比如触发了服务器bug,导致服务器进程崩溃,或者大量恶意得到请求导致服务器的CPU、内存、磁盘等资源被过度消耗,还有网络流量劫持、DNS劫持都可能导致服务中断,都可以被称为拒绝服务攻击。
  • 多台计算机节点共同发起拒绝服务攻击,就能形成规模效应。这些攻击节点往往是黑客所控制的"肉鸡",当肉鸡数量到达一定规模后,就形成了一个"僵尸网络"。在大型的僵尸网络中,肉鸡数量甚至能达到数万、数十万的规模。如此大规模的僵尸网络发起的DDos攻击,几乎是不可阻挡的。
    请添加图片描述

DDos攻击类型

网络层泛洪攻击

  • 网络层泛洪攻击是一种常见的DDos攻击类型,攻击发生在网络层,其目的是通过向目标系统或网络设备发送大量数据包、请求或无效信息,从而耗尽目标的网络带宽、CPU资源或其他关键资源,最终导致合法用户无法正常访问该服务或系统。
  • 常见的网络泛洪攻击有 : SYN Flood、ACK Flood、FIN Flood、RST Flood、TCP Fragment Flood、、UDP Flood、UDP Fragment Flood、IP Flood等。下面重点介绍下 SYN Flood攻击

SYN Flood攻击

  • SYN Flood是一种最为经典的DDos攻击,它利用了TCP协议设计中的缺陷,而TCP/IP协议是整个互联网的基础,如今想要修复这样的缺陷几乎是不可能的事情。
  • 正常情况下,TCP三次握手的过程如图所示
    请添加图片描述
  • 客户端向服务端发送一个带有SYN标志位的包,包含了客户端使用的初始序列号
  • 服务端收到客户端发送的SYN包后,向客户端发送了一个SYN和ACK都置位的TCP报文,其中包含确认号和服务端的初始序列号
  • 客户端收到服务端返回的SYN+ACK报文后,向服务端返回一个ACK置位且确认号的报文。至此,一个标准的TCP连接就完成了,双向都可以收发数据。
  • 在SYN Flood攻击中,攻击者向服务端发送大量伪造源IP地址的SYN包,此时服务端会返回SYN+ACK包,因为源IP地址是伪造的,所以伪造的IP地址并不会应答ACK包,而服务端没有收到ACK回应包,就会等待一段时间,此时的连接状态称为半开连接,如果超时则丢弃这个连接。
  • 虽然是半开连接,服务端也需要为它们分配系统资源,并使用一个队列来存储这些半开连接。如果攻击者大量发送这种伪造源IP地址的SYN报文,服务端将会消耗非常多的资源来处理这种般连接,同时半开连接数量会超过队列中连接数的最大限制。随后的结果是,服务端没办法处理正常的连接请求,因而拒绝服务。
    请添加图片描述
  • 对抗SYN Flood攻击,有一种方案为Safe Reset,一般在网络防火墙中使用。接收到客户端的SYN报文后,防火墙返回一个确认号错误的SYN+ACK报文,真实的客户端在发现错误后会回应一个RST报文,这样防火墙就知道这个IP地址是真实客户端,并将其添加到白名单中,后面如果客户端重新请求连接时就将它放行。而虚假的源IP地址不会有响应,所以它们就不会被列入白名单。

反射放大型攻击

  • 反射放大型攻击是近几年非常流行的DDos攻击方式,超大流量的DDos攻击多数是由反射放大型攻击产生的。
  • 绝大部分反射放大型攻击是使用UDP协议,因为UDP是无连接的协议,当客户端伪造源IP地址访问UDP服务时,服务端会把响应内容返回给伪造的源IP地址,所以当攻击者把源IP地址指定为攻击目标时,响应内容就被发送给了攻击目标。
  • 如果一个UDP响应内容远大于请求内容,攻击者就借助UDP服务器实现了四两拔千斤的放大攻击效果。
    请添加图片描述

Web应用层DDoS攻击

  • Web应用层DDos攻击,攻击发生在应用层,TCP三次握手已经完成。所以发起攻击的IP地址都是真实的。但应用层DDos攻击有时甚至比网络层DDos攻击更为可怕,因为网络层DDos攻击通常都伴随着超大流量,并且都是非正常的网络数据包,攻击流量和正常访问流量比较容易区别,而应用层DDos攻击流量可能与正常访问流量的相似度很高,这对网络安全产品提出了很大的挑战。
  • 常见的Web应用层DDos攻击有:HTTP Flood、HTTPS Flood、Slowloris、CC攻击等。

HTTP Flood

  • HTTP Flood攻击主要是通过向目标网站发送大量看似合法的HTTP请求来消耗服务器资源,从而导致服务器无法处理正常用户的访问请求。
  • 在HTTP Flood攻击中,攻击者通常使用大量的肉鸡或僵尸网络,模拟真实用户发起HTTP请求。这些请求可以包括GET、POST等各种HTTP方法,并且可能携带各种不同的URL和HTTP头信息,使得防御系统难以简单地通过过滤特定IP地址或识别异常数据包特征的方式来抵御攻击。
  • 攻击的目标在于耗尽服务器资源,例如CPU使用率、内存占用、数据库连接数或者Web服务器线程池等。当这些资源被恶意请求填满时,正常的网页访问将变得极其缓慢甚至完全无法响应。

CC攻击

  • CC攻击源自一个叫fatboy的攻击程序,当时黑客为了挑战绿盟的一款反DDos设备开发了它。绿盟是中国著名的安全公司之一,它有一款叫"黑洞" (Collapasar)的反DDos设备,能够有效清洗SYN Flood等有害流量。而黑客则挑衅式地将fatboy所实现地攻击方式命名为 Collenge Collapasar,简称CC,意指在黑洞地防御下,仍然能有效地完成拒绝服务攻击。

  • CC攻击的原理非常简单,就是对一些资源消耗量较大的应用页面不断发起正常的请求,以达到消耗服务端资源的目的。

  • 这种攻击手法利用多个代理服务器、肉鸡网络(被恶意软件感染并控制的计算机网络)或僵尸网络向目标网站发送大量并发请求,尤其是对那些资源消耗较大的动态页面发起攻击。由于这些请求看似合法且通常来自不同的IP地址,因此难以通过简单的过滤手段来防御。

  • 攻击的目标是耗尽受害服务器的CPU使用率、内存占用或者数据库连接数等关键资源,导致服务器响应速度极度下降,甚至无法正常处理合法用户的访问请求,最终造成网站服务中断或严重性能下降。相较于传统的网络层DDoS攻击,CC攻击更难以防御,因为它往往需要识别和区分出恶意用户流量与正常访问流量,而这在应用层上具有更高的复杂性。

Slowloris攻击

  • Slowloris攻击原理是以极低的速度向服务器发送HTTP请求。由于Web服务器对于并发的连接数都设有上限,因此若是恶意占用住这些连接不释放,那么Web服务器的所有连接都将被恶意连接占用,从而无法接受新的请求,导致网站拒绝服务。
  • 为了保持住这个连接,攻击者构造了一个畸形的HTTP请求,准确的说,是一个不完整的HTTP请求
  •   GET / HTTP/1.1\r\n
      Host:www.csdn.net
      User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36\r\n
      Content-Length:42\r\n
    
  • 正常的HTTP请求是以两个"\r\n"表示HTTP Headers部分结束的,比如
  •   Content-Length:42\r\n\r\n
    
  • 由于Web服务器只收到了一个"\r\n",因此认为HTTP Headers部分没有结束,并保持此连接不释放,继续等待完整的请求。
  • 此时,客户端每隔一段时间再发送任意HTTP头,并保持住连接即可。因为一直没有收到两个"\r\n",所以服务端就一直认为请求还没有发送完,这个连接就会很长时间不断开。当构造很多个连接后,服务器的连接数很快就会达到上限,从而产从拒绝服务。
  • 这种攻击可以通过设置Web服务器读取请求头的超时时间,或者通过设置网络层读取数据包的超时时间来防御。

DDos攻击类型分布

网络层DDos攻击

在这里插入图片描述

应用层DDos攻击

在这里插入图片描述

总结

  • DDos攻击自1996年首次出现,距今已过去近30年的时间,依旧是安全领域最难解决的问题之一。
  • 由于DDoS攻击利用的是互联网协议的漏洞和弱点,因此没办法从根本上去解决,只能被动采取一些防御措施去抵御攻击。并且随着技术的不断进步,DDoS攻击的手法也在不断演变和升级。攻击者可能会利用新的漏洞、协议缺陷或者技术手段来发起更加复杂和难以防御的攻击。
  • 虽然无法从根本上完全解决DDoS攻击,但可以通过技术、管理和合作等多种手段来降低其影响和风险,保护网络的安全和稳定。抵御DDos攻击之路任重而道远。

参考

  • 《白帽子讲Web安全》 - 吴翰清 叶敏/著

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1524630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字母异位词分组【每日一题】

可以通过案例找到规律&#xff0c;每个词排序完后是同一个&#xff0c;所以通过hasmap存储排序过的值做key&#xff0c;值是存储单词集合。 package HasTable;import java.util.*;class Solution {static List<List<String>> groupAnagrams(String[] strs) {Map&l…

UnityShader(十六)凹凸映射

前言&#xff1a; 纹理的一种常见应用就是凹凸映射&#xff08;bump mapping&#xff09;。凹凸映射目的就是用一张纹理图来修改模型表面的法线&#xff0c;让模型看起来更加细节&#xff0c;这种方法不会改变模型原本的顶点位置&#xff08;也就是不会修改模型的形状&#xf…

《论文阅读》E-CORE:情感相关性增强的移情对话生成 EMNLP 2023

《论文阅读》E-CORE:情感相关性增强的移情对话生成 EMNLP 2023 前言摘要模型架构图构建边的构建和初始化节点的初始化图更新情感相关性加强解码损失函数总结前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来…

Django验证码(一)

一、介绍 1.1、概述 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序 可以防止:恶意破解密码、刷票、论坛灌水,有效防止某…

@Valid 和 @Validated 区别和使用方法

1、相关依赖 Valid 依赖包 <dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId> </dependency>Validated的依赖包 <dependency> <groupId>org.springframework</groupId> <…

学习JavaEE的日子 Day27 手撕HashMap底层原理

Day27 1.手撕HashMap底层原理(重点) public class Test01 {public static void main(String[] args) {// Float float1 new Float("0.0f"); // Float float2 new Float("0.0f"); // Float result float1/float2; // System.out.println(result);/…

【论文阅读】DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer

DiffSpeaker: 使用扩散Transformer进行语音驱动的3D面部动画 code&#xff1a;GitHub - theEricMa/DiffSpeaker: This is the official repository for DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer paper&#xff1a;https://arxiv.org/pdf/…

【SQL】1174. 即时食物配送 II (窗口函数row_number; group by写法;对比;定位错因)

前述 推荐学习&#xff1a; 通俗易懂的学会&#xff1a;SQL窗口函数 题目描述 leetcode题目&#xff1a;1174. 即时食物配送 II 写法一&#xff1a;窗口函数 分组排序&#xff08;以customer_id 分组&#xff0c;按照order_date 排序&#xff09;&#xff0c;窗口函数应用。…

从零自制docker-4-【PID Namespace MOUNT Namespace】

文章目录 PID namespace代码mountnamespace通俗理解代码 PID namespace 每个命名空间都有独立的PID空间&#xff0c;即每个命名空间的进程都由一开始分配。 新建立的进程内部进程ID为1 代码 package main import ("log""os/exec""os""sy…

pyspark基础 -- DataFrame的理解与案例

DataFrame(df)介绍 datafram就是一个内存中的二维表结构&#xff0c;具备表结构的三个基本属性&#xff1a; 行列表结构描述 在结构层面&#xff0c;pyspark中的StructType对象描述了表结构&#xff0c;StructField对象描述了表的一个列信息&#xff1b;在数据层面&#xff…

银行信息系统应用架构导论-引用

一级目录二级目录金融标准和参考文档一、银行企业级应用系统架构规划企业级应用系统架构规划《金融科技发展规划&#xff08;2022-2025年&#xff09;&#xff08;2022年1月中国人民银行印发&#xff09;》 《关于银行业保险业数字化转型的指导意见&#xff08;2022年1月中国银…

【linux】CentOS查看系统信息

一、查看版本号 在CentOS中&#xff0c;可以通过多种方法来查看版本号。以下是几种常用的方法&#xff1a; 使用cat命令查看/etc/centos-release文件&#xff1a; CentOS的版本信息存储在/etc/centos-release文件中。可以使用cat命令来显示该文件的内容&#xff0c;从而获得C…

ThingsBoard初始化数据库Postgres

视频教程&#xff1a; ThingsBoard初始化数据库postgres_哔哩哔哩_bilibilihingsBoard是一个基于Java的开源物联网平台&#xff0c;旨在实现物联网项目的快速开发、管理和扩展。本课程主要从0到1带你熟悉ThingsBoard&#xff0c;学习优秀的物联网变成思维与思想&#xff0c;主…

Nginx离线安装(保姆级教程)

1、下载与安装gcc-c环境 获取rpm包的方式很多&#xff0c;在这里推荐使用yum工具获取&#xff0c;因为手动从官网下载&#xff0c;手动执行rpm -Uvh *.rpm --nodeps --force命令进行安装&#xff0c;可能会缺少某个依赖&#xff0c;我们也不确定到底需要哪些依赖。 因此需要准…

游戏引擎中网络游戏的基础

一、前言 网络游戏所面临的挑战&#xff1a; 一致性&#xff1a;如何在所有的主机内都保持一样的表现可靠性&#xff1a;网络传输有可能出现丢包安全性&#xff1a;反作弊&#xff0c;反信息泄漏。多样性&#xff1a;不同设备之间链接&#xff0c;比如手机&#xff0c;ipad&a…

第九节:Vben Admin实战-系统管理之角色管理实现-上

系列文章目录 第一节:Vben Admin介绍和初次运行 第二节:Vben Admin 登录逻辑梳理和对接后端准备 第三节:Vben Admin登录对接后端login接口 第四节:Vben Admin登录对接后端getUserInfo接口 第五节:Vben Admin权限-前端控制方式 第六节:Vben Admin权限-后端控制方式 第七节…

RUST egui体验

egui官方提供了web版的demo&#xff0c;效果还是很不错的&#xff0c;就是用的时候有点一头雾水&#xff0c;没有找到明确的指导怎么把这些组件插入到自己的application或者web。花了一天时间撸了一遍流程&#xff0c;记录一下&#xff0c;说不定以后能用到呢 >_< efram…

蓝桥杯并查集|路径压缩|合并优化|按秩合并|合根植物(C++)

并查集 并查集是大量的树&#xff08;单个节点也算是树&#xff09;经过合并生成一系列家族森林的过程。 可以合并可以查询的集合的一种算法 可以查询哪个元素属于哪个集合 每个集合也就是每棵树都是由根节点确定&#xff0c;也可以理解为每个家族的族长就是根节点。 元素集合…

【Java基础知识总结 | 第三篇】深入理解分析ArrayList源码

文章目录 3.深入理解分析ArrayList源码3.1ArrayList简介3.2ArrayLisy和Vector的区别&#xff1f;3.3ArrayList核心源码解读3.3.1ArrayList存储机制&#xff08;1&#xff09;构造函数&#xff08;2&#xff09;add()方法&#xff08;3&#xff09;新增元素大体流程 3.3.2ArrayL…

R:简易的Circos图

library(grid) library(circlize) library(RColorBrewer) library(ComplexHeatmap) setwd("C:/Users/fordata/Downloads/Circos") # 创建颜色调色板 coul <- colorRampPalette(brewer.pal(9, "Set3"))(12) # 读取基因组数据 genome <- read.table(ci…