SSDP 基于反射的DDOS攻击分析

简介

简单服务发现协议 (SSDP) 攻击是一种基于反射的分布式拒绝服务 (DDoS) 攻击 ,它利用通用即插即用 (UPnP) 网络协议将放大的流量发送给目标受害者,使目标的基础设施不堪重负而影响正常业务。

简单服务发现协议提供了在局部网络里面发现设备的机制

控制点(也就是接受服务的客户端)可以通过使用简单服务发现协议,根据自己的需要查询在自己所在的局部网络里面提供特定服务的设备。

设备(也就是提供服务的服务器端)也可以通过使用简单服务发现协议,向自己所在的局部网络里面的控制点宣告它的存在。

攻击原理

简单服务发现协议是在HTTPU和HTTPMU的基础上实现的协议,即通过UDP而不是TCP来发送HTTP消息。

按照协议的规定,当一个控制点(客户端)接入网络 的时候,它可以向一个特定的多播地址的SSDP端口使用M-SEARCH方法发送ssdp:discover消息。当设备监听到这个保留的多播地址上由控制点发送的消息的时候,设备会分析控制点请求的服务,如果自身提供了控制点请求的服务,设备将通过单播的方式直接响应控制点的请求。

类似的,当一个设备接入网络 的时候,它应当向一个特定的多播地址的SSDP端口使用NOTIFY方法发送ssdp:alive消息。控制点根据自己的策略,处理监听到的消息。考虑到设备可能在没有通知的情况下停止服务或者从网络上卸载,"ssdp:alive"消息必须在HTTP协议头CACHE-CONTROL里面指定超时值,设备必须在约定的超时值到达以前重发"ssdp:alive"消息。如果控制点在指定的超时值内没有再次收到设备发送的"ssdp:alive"消息,控制点将认为设备已经失效。

当一个设备计划从网络上卸载 的时候,它也应当向一个特定的多播地址的SSDP端口使用NOTIFY方法发送ssdp:byebye消息。但是,即使没有发送"ssdp:byebye"消息,控制点也会根据"ssdp:alive"消息指定的超时值,将超时并且没有再次收到的"ssdp:alive"消息对应的设备认为是失效的设备。

IPv4环境,当需要使用多播方式传送相关消息的时候,SSDP一般使用多播地址239.255.255.250和UDP端口号1900

根据互联网地址指派机构的指派,SSDP在IPv6环境下使用多播地址FF0X::C,这里的X根据scope的不同可以有不同的取值。

攻击典型步骤:

  1. 首先,攻击者进行扫描,寻找可以用作放大因子的即插即用设备。
  2. 攻击者发现联网设备后,创建所有发出响应的设备的列表。
  3. 攻击者使用目标受害者的欺骗性 IP 地址创建 UDP 数据包。
  4. 然后,攻击者使用僵尸网络通过设置某些标志(比如 ssdp:rootdevicessdp:all),向每个即插即用设备发送一个欺骗性发现数据包,并请求尽可能多的数据。
  5. 结果,每个设备都会向目标受害者发送回复,其数据量最多达到攻击者请求的 30 倍
  6. 然后,目标从所有设备接收大量流量,因此不堪重负,可能导致对正常流量拒绝服务。

报文分析

从网络层次模型来看,SSDP协议构建在HTTPU和HTTPMU之上。

HTTPU是以UDP实现的HTTP协议,HTTPMU是广播的HTTPU。

M-SEARCH报文

  • 目的IP为约定的多播地址239.255.255.250
  • 目的端口为约定的1900
  • 基于UDP协议通信
  • 应用层符合HTTP协议请求报文格式规范
  • 方法名为M-SEARCH
  • HOST标头为多播地址和端口
  • MAN标头为"ssdp:discover",标识查询的类型
    • 此时URI必须为*
    • 必须有ST标头,标识想发现的服务类型
  • MX标头为响应最长等待时间
  • USER-AGENT标头为UA信息

ST设置查询的目标:

  • ssdp:all 搜索所有设备和服务(DDoS反射效果最好
  • upnp:rootdevice 仅搜索网络中的根设备
  • uuid:device-UUID 查询UUID标识的设备
  • urn:schemas-upnp-org:device:device-Type:version 查询device-Type字段指定的设备类型。
  • urn:schemas-upnp-org:service:service-Type:version 查询service-Type字段指定的服务类型。

NOTIFY报文

  • CACHE-CONTROL标头中max-age指定通知消息存活时间,如果超过此时间间隔,控制点可以认为设备不存在
  • LOCATION标头为设备的URI地址
  • SERVER标头为设备的版本信息
  • NT标头为服务的服务类型
  • NTS标头为通知消息的子类型,如"ssdp:alive"
  • USN标头为不同服务的统一服务名,它提供了一种标识出相同类型服务的能力

响应报文

  • 使用的是单播报文进行回复
  • 应用层符合HTTP协议响应报文格式规范
  • DATE标头指定响应生成的时间
  • EXT标头标识确认MAN头域已经被设备理解
  • LOCATION标头标识设备描的URI地址
  • SERVER标头为操作系统版本等信息
  • ST标头一般和请求保持一致

总结

  • 请求为多播报文,响应为单播报文。
  • 检查本地服务,不要暴露1900端口到公网,以免被攻击者利用。
  • 监测目的端口为1900的流量,观察是否存在异常。
  • DDoS防护清洗设备统计源端口为1900的UDP流量,判断是否触发阈值。

参考

相关推荐
许野平40 分钟前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
Suckerbin1 小时前
Hms?: 1渗透测试
学习·安全·网络安全
Diamond技术流1 小时前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos
Spring_java_gg1 小时前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全
齐 飞2 小时前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
newxtc2 小时前
【国内中间件厂商排名及四大中间件对比分析】
安全·web安全·网络安全·中间件·行为验证·国产中间件
LunarCod3 小时前
WorkFlow源码剖析——Communicator之TCPServer(中)
后端·workflow·c/c++·网络框架·源码剖析·高性能高并发
码农派大星。3 小时前
Spring Boot 配置文件
java·spring boot·后端
weixin_442643423 小时前
推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
服务器·网络·安全·filelink数据摆渡系统
杜杜的man4 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang