【漏洞分析】DDOS攻防分析

0x00 UDP攻击实例

2013年12月30日,网游界发生了一起“追杀”事件。事件的主角是PhantmL0rd(这名字一看就是个玩家)和黑客组织DERP Trolling。

PhantomL0rd,人称“鬼王”,本名James Varga,某专业游戏小组的成员,同时是美国最大的在线游戏直播平台Twitch的知名和资深视频博主,经常一边参加游戏对战一边实况直播。

DERP Trolling,一个成立于2011年的黑客组织,本次事件中专门以“PhantomL0rd”实况直播的游戏为攻击目标,一旦成功弄倒目标,便会在推特上发布战果。

事情看上去很简单。这一天,PhantmL0rd连续在多场游戏对战中遭到DERP Trolling的“追杀”:凡是PhantmL0rd参加的网络游戏,都不同程度地遭到了DERP Trolling的DDoS攻击。英雄联盟、EA官网、暴雪战网、DOTA2官网、企鹅俱乐部等等知名游戏网站都因遭到DDoS攻击而瘫痪。哎,不过想要玩个游戏而已,怎么就这么难?

然而,随着事件的不断被挖掘和曝光,知道真相的玩家们哭了。调查发现,一直被认为是受害者的PhantomL0rd实际上恰恰是这次事件的幕后主使。这是什么原因呢?

原来,PhantomL0rd经常参加一些游戏对战比赛,既然是比赛就会有胜有负。但是PhantomL0rd为了保住自己“王”的地位,就偷偷地和DERP Trolling串通:一旦比赛过程中PhantomL0rd打不过对手,DERP Trolling就登场,向游戏服务器发动DDoS攻击,让比赛异常终止,这样PhantomL0rd就有翻盘的机会。

这次事件的曝光不仅让PhantomL0rd颜面尽失,还让DERP Trolling使用的这个DDoS攻击手段“火”了一把。那么DERP Trolling到底使用了什么手段呢?

DERP Trolling在这次“追杀”事件中,采用的是NTP反射放大攻击。从记载来看,DERP Trolling应该是第一个利用NTP服务器进行大规模反射放大攻击的黑客组织。这次“追杀”事件之后,NTP反射放大攻击一夜之间变得非常火热。2014新年的第一周,NTP反射放大攻击占到了DDoS攻击流量的69%。

什么是NTP反射放大攻击?

我们先来看看什么是NTP。NTP,全称是Network Time Protocol,网络时间协议。顾名思义,NTP是一种用于保证网络中的计算机时间同步的协议。在网络中,计算机的时间同步非常的重要。比如发射火箭,如果每台计算机时间都不同,那么发射的时候应该以哪台计算机为准呢?

NTP协议采用服务器-客户端模型,提供了高精准度的时间校正机制。在网络中,NTP客户端不以自己的时间为准,而是每隔一段时间从NTP服务器同步更新自身时间。NTP协议定义了NTP服务器的层次结构,通过逐层传播,实现时间同步。因为上游NTP服务器通常是高精度而可靠的时钟源,如原子钟、卫星、天文台等,时间同步的精度得到了保证。

20161101142049665.png

NTP协议中有一个监控(Monlist)功能,用于监控NTP服务器。NTP服务器会记录与自己进行过时间同步的客户端IP地址的信息,而且客户端可以通过一些命令索要这些记录。每个NTP服务器可以记录进行过时间同步的最后600个客户端的IP地址,当有客户端索要这个记录时,NTP服务器会返回这600个客户端IP地址,响应包按照每6个IP地址进行分割,最多可以返回100个响应包。

20161101142103507.png

 

理解了NTP协议,NTP反射放大攻击就容易理解了。NTP反射放大攻击有两个关键点:反射和放大。

反射

反射,就是把源IP地址伪造成被攻击IP地址,进行“传瞎话”的无耻行为。谎言之所以可以传播,就是因为听者轻信。缺少源认证机制的协议最容易被利用,所以反射攻击均为基于UDP的无状态连接协议。NTP正是基于UDP协议进行传输的。

在UDP协议中,正常情况下,客户端发送请求包到服务器,服务器返回响应包给客户端,这就完成了一次交互,中间没有校验过程。由于UDP协议是面向无连接的,所以客户端发送请求包的源IP地址很容易被篡改。一些低版本的NTP服务器没有针对源IP地址的校验机制,所以如果把请求包的源IP地址篡改为攻击目标的IP地址,最终服务器返回的响应包就会被送到攻击目标,这就是“反射”攻击。

20161101142116560.png

 

放大

放大,顾名思义,就是我假冒你的名义打他一拳,他会打你100拳。黑客通常是利用互联网的基础架构来进行放大攻击,效果更强,毕竟网络基础架构的能力是超级强大的,而且,完全免费。——这让我想起《三体》中叶文洁利用太阳来放大电磁波信号,把太阳作为放大器,大刘的脑洞够大。网络中开放的NTP服务器非常多,如果黑客利用僵尸主机,同时向NTP服务器发起大量的Monlist请求,1个Monlist请求包可以引发100个响应包。通常,1个NTP请求包只有90字节的大小,而1个回应报文通常为482字节,100个回应报文就是48200字节,回应报文是请求报文的500倍左右,这样就可以达到四两拨千斤的“放大”效果。

20161101142008179.png

(author Zhaoxuepeng https://www.cnblogs.com/Shepherdzhao/)

0x01 UDP协议基础知识

UDP协议全称“用户数据报协议”,User Datagram Protocol,是一种传输层协议。UDP协议是一种无连接的协议,不提供数据报的分组、组装,不对数据包的传输进行确认,当报文发送出去后,发送端不关心报文是否完整的到达对端。这个听起来像是缺点的特点,却是UDP协议最大的优点。这种报文处理方式决定了UDP协议资源消耗小,处理速度快,所以通常音频、视频和普通数据传送时使用UDP比较多。就比如音频或视频吧,大家在看视频或者听音乐的时候,都是追求数据传输更快一些,而在传输过程中,偶尔丢一两个数据包,对整体效果并不会产生太大的影响。

相比于之前介绍的DNS和HTTP协议,UDP协议需要关注的点要简单很多。我们来看看UDP报文结构。

20161108111340314.png

我们再来看一个现网真实UDP报文的抓包。

20161108111450166.png

每个UDP报文由UDP报文头部和UDP数据字段两部分组成。其中头部字段由8个字节,4个字段组成,分别是:源端口号、目的端口号、报文长度和校验和。

l  UDP协议使用端口号为不同的应用保留其各自的数据传输通道。比如DNS协议目的端口号是53;TFTP协议目的端口号是69。

l  数据报的长度是指包括报头和数据载荷部分在内的总字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据载荷部分。数据载荷的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报文的最大长度为65535字节。不过,一些实际应用往往会限制报文的大小。

l  UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方人为篡改或者因其他原因遭到了损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测报文传输过程中是否出错。虽然UDP提供有错误检测,但检测到错误时,UDP不做错误校正,只是简单地把损坏的报文丢弃,或者给应用程序提供警告信息。

0x02 UDP DDOS攻击防御

UDP协议与TCP协议不同,是无连接状态的协议,并且UDP应用协议五花八门,差异极大,因此针对UDP Flood的防护其实非常困难。我们也不能像TCP攻击那样进行源认证,所以只能找特征了。

一般传统的UDP攻击都是由攻击工具打出来的,通常会具有一定的特征,尤其在数据段会有一些相同或者有规律变化的字段。而对于我们前一节介绍的UDP反射放大攻击,虽然并不是攻击工具伪造的UDP报文,而是真实网络设备发出的UDP报文,在数据段不具备相同的特征,但是目的端口却是固定的,所以也可以作为一种特征。

确定攻击报文的特征后,就可以根据特征进行过滤了。特征过滤也就是常说的指纹过滤,根据攻击报文的特征,自定义过滤属性。

指纹过滤有两种方法:

l  静态指纹过滤

对于已知的攻击特征,可以直接配置到过滤器的参数中。Anti-DDoS系统不仅具有TCP、UDP等传输层协议的报文解析能力,还具有应用层报文解析能力,可针对应用层头部信息字段做过滤。配置了静态指纹过滤后,Anti-DDoS会对收到的报文进行特征匹配,对匹配到攻击特征的报文,再进行丢弃、限流等下一步操作。

20161108111503177.png

那么,如何获知攻击特征呢?一种方法是抓包分析,人为识别出攻击特征,然后配置到过滤器中。UDP报文的数据段、源IP地址、源端口,目的IP地址、目的端口都可能隐藏着攻击报文的特征。比如,UDP反射放大攻击一般都是基于特定的UDP端口,比如现在比较常见的NTP、DNS、SSDP反射放大攻击,分别对应的UDP端口是123、53、1900。

下面一般有14种常见UDP反射放大攻击的过滤器模板。这些攻击都属于已知攻击特征,抗D设备可以配置已经预先定义好了攻击特征的参数,直接应用即可。

20161108111519770.png

如果抗D设备预置的过滤器模板不够用,个人也无法抓包分析配置攻击特征,那么有的抗D设备可以配置动态学习:

l  动态指纹学习

在攻击特征未知的情况下,Anti-DDoS系统具有指纹自动学习功能。对于一些攻击工具发起的UDP攻击,攻击报文通常都拥有相同的特征字段,比如都包含某一个字符串,或整个报文内容一致。指纹学习就是对一些有规律的UDP攻击报文负载特征进行识别,并且自动提取出指纹特征,然后就把这个提取的特征作为过滤条件,自动应用并进行过滤。

Anti-DDoS系统默认情况下,学习UDP载荷的最后8个字节,当然这个学习的偏移量和学习长度都是可以手动配置的。偏移量是从UDP报文头结束处开始计算,取值从0字节到1500字节可灵活配置;学习长度从1个字节开始配置,最多可以学习8个字节。

20161108111533644.png

传统的UDP flood攻击是一种消耗对方资源,也消耗自己资源的攻击方式,你攻击了一个服务器,其实也在消耗你的系统资源,说白了就是拼资源而已,看谁的带宽大,看谁能坚持到最后。这种攻击方式没有技术含量,现在已经越来越少的黑客使用这种方式了。

取而代之的是UDP反射放大攻击,近几年越来越多的被黑客所使用。像前面提到的几种做成过滤器模板的UDP反射放大攻击,都是比较常见的。后续对于UDP flood攻击的防御重点也应该聚焦在反射放大攻击上。

0x01 UDP协议基础知识

UDP协议全称“用户数据报协议”,User Datagram Protocol,是一种传输层协议。UDP协议是一种无连接的协议,不提供数据报的分组、组装,不对数据包的传输进行确认,当报文发送出去后,发送端不关心报文是否完整的到达对端。这个听起来像是缺点的特点,却是UDP协议最大的优点。这种报文处理方式决定了UDP协议资源消耗小,处理速度快,所以通常音频、视频和普通数据传送时使用UDP比较多。就比如音频或视频吧,大家在看视频或者听音乐的时候,都是追求数据传输更快一些,而在传输过程中,偶尔丢一两个数据包,对整体效果并不会产生太大的影响。

相比于之前介绍的DNS和HTTP协议,UDP协议需要关注的点要简单很多。我们来看看UDP报文结构。

20161108111340314.png

我们再来看一个现网真实UDP报文的抓包。

20161108111450166.png

每个UDP报文由UDP报文头部和UDP数据字段两部分组成。其中头部字段由8个字节,4个字段组成,分别是:源端口号、目的端口号、报文长度和校验和。

l  UDP协议使用端口号为不同的应用保留其各自的数据传输通道。比如DNS协议目的端口号是53;TFTP协议目的端口号是69。

l  数据报的长度是指包括报头和数据载荷部分在内的总字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据载荷部分。数据载荷的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报文的最大长度为65535字节。不过,一些实际应用往往会限制报文的大小。

l  UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方人为篡改或者因其他原因遭到了损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测报文传输过程中是否出错。虽然UDP提供有错误检测,但检测到错误时,UDP不做错误校正,只是简单地把损坏的报文丢弃,或者给应用程序提供警告信息。

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

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

相关文章

【 PID 算法 】PID 算法基础

一、简介 PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写。也就是说,PID算法是结合这三种环节在一起的。粘一下百度百科中的东西吧。 顾名思义,…

PyTorch使用教程(1)—PyTorch简介

PyTorch是一个开源的深度学习框架,由Facebook人工智能研究院(FAIR)于2016年开发并发布,其主要特点包括自动微分功能和动态计算图的支持,使得模型建立更加灵活‌。官网网址:https://pytorch.org。以下是关于…

PyTorch框架——基于深度学习YOLOv5神经网络水果蔬菜检测识别系统

基于深度学习YOLOv5神经网络水果蔬菜检测识别系统,其能识别的水果蔬菜有15种,# 水果的种类 names: [黑葡萄, 绿葡萄, 樱桃, 西瓜, 龙眼, 香蕉, 芒果, 菠萝, 柚子, 草莓, 苹果, 柑橘, 火龙果, 梨子, 花生, 黄瓜, 土豆, 大蒜, 茄子, 白萝卜, 辣椒, 胡萝卜,…

Mac玩Steam游戏秘籍!

Mac玩Steam游戏秘籍! 大家好!最近有不少朋友在用MacBook玩Steam游戏时遇到不支持mac的问题。别担心,我来教你如何用第三方工具Crossover来畅玩这些不支持的游戏,简单又实用! 第一步:下载Crossover 首先&…

【网络篇】IP知识

IPv4首部与IPv6首部 IPv4相对于IPv6的好处: 1.IPv6可自动配置,即使没有DHCP服务器也可以实现自动分配IP地址,实现即插即用。 2.IPv6包首部长度采用固定40字节,删除了选项字段,以及首部校验和,简化了首部…

我的年度总结

这一年的人生起伏:从曙光到低谷再到新的曙光 其实本来没打算做年度总结的,无聊打开了帅帅的视频,结合自己最近经历的,打算简单聊下。因为原本打算做的内容会是一篇比较丧、低能量者的呻吟。 实习生与创业公司的零到一 第一段工…

Vue脚手架开发 Vue2基础 VueRouter的基本使用 vue-router路由案例

vue-router路由 Vue脚手架开发,创建项目:https://blog.csdn.net/c_s_d_n_2009/article/details/144973766 Vue Router,Vue Router | Vue.js 的官方路由,Vue.js 的官方路由,为 Vue.js 提供富有表现力、可配置的、方便…

Windows远程桌面网关出现重大漏洞

微软披露了其Windows远程桌面网关(RD Gateway)中的一个重大漏洞,该漏洞可能允许攻击者利用竞争条件,导致拒绝服务(DoS)攻击。该漏洞被标识为CVE-2025-21225,已在2025年1月的补丁星期二更新中得到…

c语言----------内存管理

内存管理 目录 一。作用域1.1 局部变量1.2 静态(static)局部变量1.3 全局变量1.4 静态(static)全局变量1.5 extern全局变量声明1.6 全局函数和静态函数1.7 总结 二。内存布局2.1 内存分区2.2 存储类型总结2.3内存操作函数1) memset()2) memcpy()3) memmove()4) memcmp() 2.4 堆…

【2024年华为OD机试】 (C卷,100分)- 堆栈中的剩余数字(Java JS PythonC/C++)

一、问题描述 题目描述 向一个空栈中依次存入正整数&#xff0c;假设入栈元素 n(1<n<2^31-1)按顺序依次为 nx…n4、 n3、n2、 n1, 每当元素入栈时&#xff0c;如果 n1n2…ny(y 的范围[2,x]&#xff0c; 1<x<1000)&#xff0c;则 n1~ny 全部元素出栈&#xff0c;重…

Java安全—SPEL表达式XXESSTI模板注入JDBCMyBatis注入

前言 之前我们讲过SpringBoot中的MyBatis注入和模板注入的原理&#xff0c;那么今天我们就讲一下利用以及发现。 这里推荐两个专门研究java漏洞的靶场&#xff0c;本次也是根据这两个靶场来分析代码&#xff0c;两个靶场都是差不多的。 https://github.com/bewhale/JavaSec …

51单片机入门基础

目录 一、基础知识储备 &#xff08;一&#xff09;了解51单片机的基本概念 &#xff08;二&#xff09;掌握数字电路基础 &#xff08;三&#xff09;学习C语言编程基础 二、开发环境搭建 &#xff08;一&#xff09;硬件准备 &#xff08;二&#xff09;软件准备 三、…

基于Java的百度AOI数据解析与转换的实现方法

目录 前言 一、AOI数据结构简介 1、官网的实例接口 2、响应参数介绍 二、Java对AOI数据的解析 1、数据解析流程图 2、数据解析实现 3、AOI数据解析成果 三、总结 前言 在当今信息化社会&#xff0c;地理信息数据在城市规划、交通管理、商业选址等领域扮演着越来越重要的…

【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS

文章目录 1. 概述2. 网络传输安全2.1.什么是中间人攻击2.2. 加密和签名2.2.1.加密算法2.2.2.摘要2.2.3.签名 2.3.数字证书2.3.1.证书的使用2.3.2.根证书2.3.3.证书链 2.4.HTTPS 1. 概述 本篇主要是讲解讲一些安全相关的基本知识&#xff08;如加密、签名、证书等&#xff09;&…

shell练习2

需求&#xff1a;判断192.168.1.0/24网络中&#xff0c;当前在线的ip有哪些&#xff0c;并编写脚本打印出来。 #!/bin/bashnmap -sn 192.168.1.0/24 | grep Nmap scan report for | awk {print $5} 注意&#xff1a;当运行 bash ip.sh 时出现 nmap: command not found 的错误…

【运维自动化-作业平台】魔法变量到底如何使用之主机列表类型

蓝鲸作业平台&#xff0c;以下简称作业平台或JOB平台 魔法变量&#xff1a;JOB平台执行引擎提供的特有的变量能力用法 脚本中使用&#xff0c;并且需要事先声明&#xff1a;job_import {{变量名}} 声明后&#xff0c;同样是使用 dollar 符 大括号&#xff1a;${变量名}来取值…

活动预告 | CCF开源发展委员会开源供应链安全技术研讨会(2025第一期)——“大模型时代的开源供应链安全风控技术”...

点击蓝字 关注我们 CCF Opensource Development Committee CCF开源发展委员会开源供应链安全工作组&#xff08;以下简称CCF-ODC-OSS&#xff09;将于1月17日下午在北京黄大年茶思屋举行2025年第一期开源供应链安全技术研讨会&#xff0c;此次研讨会主题为“大模型时代的开源供…

XML序列化和反序列化的学习

1、基本介绍 在工作中&#xff0c;经常为了调通上游接口&#xff0c;从而对请求第三方的参数进行XML序列化&#xff0c;这里常使用的方式就是使用JAVA扩展包中的相关注解和类来实现xml的序列化和反序列化。 2、自定义工具类 import javax.xml.bind.JAXBContext; import javax.x…

基于php求职招聘系统设计

基于php求职招聘系统设计 摘要 随着社会信息化时代的到来&#xff0c;如今人们社会的生活节奏普遍加快&#xff0c;人们对于工作效率的要求也越来越高&#xff0c;企业 举办招聘会耗时耗财&#xff0c;个人参加招聘会漫无目的寻找不到“方向”&#xff0c;网络搜索工作量目的…

SDK调用文心一言如何接入,文心一言API接入教程

一、前期准备 注册百度智能云账号&#xff1a; 前往百度智能云官网注册一个账号。这是接入文心一言API的基础。 了解API接口&#xff1a; 在百度智能云开放平台中&#xff0c;找到文心一言API的详情页&#xff0c;了解提供的API接口类型&#xff08;如云端API、移动端API、离线…