为什么说 Windows 10 不会被 DDoS SSDP反射攻击利用

news2025/8/13 18:25:15

为什么说 Windows 10 不会被 DDoS SSDP反射攻击利用

        • 一段来自陌生人的对话
        • 我所在网络拓扑图
        • 一、SSDP 协议极简介绍
        • 二、模拟查找 SSDP 设备
          • 2.1 Linux 发现 SSDP 服务
          • 2.2 Windows 发现 SSDP 服务
        • 三、Windows 10 VS Windows 7 数据包
        • 四、回答先前的问题
          • 回答 1:Windows 10 系统开启了 SSDP 服务,为何不响应 SSDP Discovert 消息。
          • 回答 2:为什么说 Windows 10 不会被 DDoS SSDP反射攻击利用
        • 五、SSDP 协议的 DDoS 攻击的防御措施
        • 参考:

作者:高玉涵

时间:2022-11-23 10:21

环境:

  • Linux ubuntu 4.15.0-163-generic #171-Ubuntu SMP Fri Nov 5 11:53:11 UTC 2021 i686 i686 i686 GNU/Linux

  • Windows 10 专业工作站版 22H2

  • Windows 7 旗舰版 SP1

工具:

  • Wireshark

  • tcpdump

  • gssdp-discover

在计算机网络中,每天都可能发生成千上万的问题,从简单的间谍软件感染,到复杂的路由配置错误。我们永远也不能立即解决所有问题,而只能期盼充分地准备好相关的知识和工具,从而能够快速地响应各种类型的错误。—— Chris Sanders

一段来自陌生人的对话

在这里插入图片描述
在这里插入图片描述

明眼人一定能通过上述对话发现问题。当时限于我固有认知,再加上并未在 WIN10 系统上去验证他所描述的现象,在经验主义的驱使下,想当然的认为这只是一个平常的网络通信问题。然后,就有了上述“哔哩吧啦”一段所谓的排查。我想这一定给他带来不少困扰、走了不少弯路。在此,深表歉意。

可能缘于我多年从事技术相关工作的原因,日常潜移默化培养成有了严谨习惯的人。在上面对话中我虽然给出了排查方案,也笃信这是造成上述"故障"的原因,但终究没有亲手验证总是有点不自信。就利用空闲时间,在电脑上打开 WireShark 一看,让我大跌眼镜的是,我也遇到上述“故障"经过一系列的排查验证(搭建了一套实验环境)终将原因刨析出来(先卖个关子暂不给出结论)将此次经历分享出来,以期大家在排除网络通信问题上有所启发。

我所在网络拓扑图

在这里插入图片描述

一、SSDP 协议极简介绍

为了能顺利阅读下面的主题,这里极简介绍下 SSDP 协议(详细部分见文未给出的参考)如果你熟知此协议可跳过此部分。

SSDP(简单服务发现协议)是应用层协议,是在 HTTPUHTTPMU 的基础上实现的协议,是构成 UPnP(通用即插即用)技术的核心协议之一。它为网络客户端提供了一种发现网络服务的机制,采用基于通知和发现路由的多播方式实现。

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

IPv4 环境,当需要使用多播方式传送相关消息的时候 SSDP 一般使用多播地址239.255.255.250UDP 端口号 1900。根据互联网地址指派机构的指派 SSDP 在 IPv6 环境下使用多播地址 FF0X::C 这里的 X 根据 scope 的不同可以有不同的取值。

自此,你只需要知道支持 SSDP 协议的控制点或服务,接入网络后会首先以多播方式声明和查找设备,当收到别的设备发来的查询时,如果自身提供了控制点请求的服务,再以单播的方式进行回复。

典型的设备查询请求消息格式:

M-SEARCH * HTTP/1.1
S:uuid:ijklmnop-7dec-11d0-a765-00a0c91e6bf6
Host:239.255.255.250:1900
Man:"ssdp:discover"ST:ge:fridge
MX:3

典型的响应消息格式:

HTTP/1.1 200 OK
Cache-Control: max-age= seconds until advertisement expires
S: uuid:ijklmnop-7dec-11d0-a765-00a0c91e6bf6
Location: URL for UPnP description for root device
Cache-Control: no-cache="Ext",max-age=5000ST:ge:fridge // search targetUSN: uuid:abcdefgh-7dec-11d0-a765-00a0c91e6bf6 // advertisement UUIDAL: <blender:ixl><http://foo/bar>

响应消息应该包含服务的位置信息(Location 或AL头),ST 和 USN 头。响应消息应该包含cache 控制信息(max-age 或者 Expires头)。

其实谈论 SSDP 是绕不开 UPnP 协议,要想把它们都讲清楚,可不是这篇文章的任务,感兴趣的朋友可以参考文未给出的链接,限于篇幅关于 SSDP 的介绍就此结束。

二、模拟查找 SSDP 设备

为了能更好的解决网络问题,我们需要进入到数据包层次。在这一层次,没有任何东西能够逃出我们的视线范围。首先,我需要复现 SSDP 通信的整个流程。

2.1 Linux 发现 SSDP 服务

这里我利用 Linux 发行版自带的 gssdp-discover (推荐)命令,安装如下:

sudo apt-get install gupnp-tools

UBUNTU@192.168.100.142 下执行:

gao@ubuntu:~$ gssdp-discover -i eth0 --timeout=3
Using network interface eth0
Scanning for all resources
Showing "available" messages
resource available
  USN:      uuid:e90f107d-5086-4516-af02-493389e5574c
  Location: http://192.168.100.1:1900/rootDesc.xml
resource available
  USN:      uuid:0e594edd-c5d4-4f0b-a216-85d0a58c460c::urn:schemas-upnp-org:service:ContentDirectory:1
  Location: http://192.168.100.167:2869/upnphost/udhisapi.dll?content=uuid:0e594edd-c5d4-4f0b-a216-85d0a58c460c
resource available
  USN:      uuid:50809696-105a-3721-e8b8-f084c96d1c54::upnp:rootdevice
  Location: http://192.168.100.196:52869/dscdesc.xml

执行后,在网络上找到了 3 台设备。

2.2 Windows 发现 SSDP 服务

这里利用一个 PYTHON 程序来实现,程序向一个多播地址发送查询请求,并监听其它支持设备的应答。

import socket
import sys

dst = "239.255.255.250"
if len(sys.argv) > 1:
    dst = sys.argv[1]
st = "upnp:rootdevice"
if len(sys.argv) > 2:
    st = sys.argv[2]

msg = [
    'M-SEARCH * HTTP/1.1',
    'Host:239.255.255.250:1900',
    'ST:%s' % (st,),
    'Man:"ssdp:discover"',
    'MX:1',
    '']

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.settimeout(10)
s.sendto('\r\n'.join(msg).encode('ascii'), (dst, 1900) )

while True:
    try:
        data, addr = s.recvfrom(32*1024)
    except socket.timeout:
        break
    print ("[+] %s\n%s" % (addr, data))

Windows10@192.168.100.192 下执后,在网络上只能找到了 1 台设备。经测试程序在所有机器下执行结果都一样,不知是不是受构造包大小不同的影响(安全较严格的系统会丢弃不规范的包)这也是我推荐使用 gssdp-discover 来查找 SSDP 设备原因。

[+] ('192.168.100.1', 1900)
b'HTTP/1.1 200 OK\r\nCACHE-CONTROL: max-age=120\r\nST: upnp:rootdevice\r\nUSN: uuid:e90f107d-5086-4516-af02-493389e5574a::upnp:rootdevice\r\nEXT:\r\nSERVER: TP-LINK/2.0 UPnP/1.1 MiniUPnPd/2.0\r\nLOCATION: http://192.168.100.1:1900/rootDesc.xml\r\nOPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01\r\n01-NLS: 1514736021\r\nBOOTID.UPNP.ORG: 1514736021\r\nCONFIGID.UPNP.ORG: 1337\r\n\r\n'

三、Windows 10 VS Windows 7 数据包

两台机器同时抓取由 gssdp-discover 命令发送的包。截图省去了不必要的只给差异部分。

  • Windows 10
    在这里插入图片描述

  • Windows 7
    在这里插入图片描述

在 Windows 10 和 Windows 7 上都收到了来自 192.168.100.142 设备的查询包。 而 Windows 7 还以单播方式向对方进行了应答,通过查看数据包细节 Server 项,它还告知对方自身提供了那些服务。

四、回答先前的问题

回答 1:Windows 10 系统开启了 SSDP 服务,为何不响应 SSDP Discovert 消息。

希望你注意到了在 SSDP 协议极简介绍 中,我标记的这段话 "…如果自身提供了控制点请求的服务,再以单播的方式进行回复。”

其实我和这位朋友都犯了同一种错误,认为只要支持 SSDP 协议并开启了 1900 端口的设备,都必定会提供服务并响应来自网络上其它设备的查询。在这种错误的认知下,就有了开头那段"啼笑皆非"的对话。

结论:开启了 1900 端口的控制点(如,Windows 10)本身不提供 UPnP 服务,就不会响应 SSDP 包。

回答 2:为什么说 Windows 10 不会被 DDoS SSDP反射攻击利用

SSDP 反射攻击原理:攻击者伪造成被攻击者的 IP 向互联网(或内网)上大量支持 SSDP 服务的设备发起 SSDP 请求(多播),网络上接收到请求的所有设备根据源 IP 地址将响应数据包返回给受害者(攻击被放大)。

结论:Windows 10 虽然开启了 1900 端口,但它是做为 UPnP 的控制点的存在,并不提供UPnP服务,因此不会响应SSDP包。而且 UPnP多个缓冲区溢出漏洞 的利用是通过构造特殊的或超长的 SSDP 包来触发。因此可得:Windows 10 作为 UPnP 控制点,即使开了 1900 端口也不受该漏洞影响。
在这里插入图片描述

五、SSDP 协议的 DDoS 攻击的防御措施

对于不需要启用即插即用服务的设备,将即插即用服务停止运行。如,家用路由器出厂设置默认开启此功能的,需要手动将其关闭,同时应检查确认所有连接外网的设备没有将即插即用服务暴露于互联网上,对非信任网络禁用 SSDP 协议,以防设备被攻击者利用为攻击发射点,另外,除 SSDP 服务之外,应检查屏蔽设备未用协议,关闭相应无用端口。

在攻击目标侧,引入 DDoS 防御技术。如,流量清洗,其原理是,对业务流量进行实施监控分析,如果检测到遭受DDoS攻击,则改变业务流量的流向,将其导引到流量清洗中心,由清洗中心对流量进行清洗,将攻击流量数据包直接抛弃,将正常业务流量再回注到业务网络。 此技术通道采用旁路工作方式,可有效避免单点故障和网络瓶颈,是当前行之有效的 DDoS 攻击防御技术。

参考:

  • 反黑风暴·记一次遭遇 SSDP DDoS 和 EternalBlue(永恒之蓝)攻击经历_半点闲的博客-CSDN博客_eternalblue攻击

  • [Microsoft SSDP Provider](SSDP Provider | Microsoft Learn)

  • [Stupidly Simple DDoS Protocol (SSDP) generates 100 Gbps DDoS](Stupidly Simple DDoS Protocol (SSDP) generates 100 Gbps DDoS (cloudflare.com))

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

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

相关文章

前后端分离项目,vue+uni-app+php+mysql订座预约小程序系统设计与实现

功能介绍 【后台功能】 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信息&#xff0c;支持删除 录入资讯&#xff1a;录入资讯标题、内容等信息 管理资讯&#x…

证书格式说明

证书格式说明 参考&#xff1a; 证书格式说明SSL中&#xff0c;公钥、私钥、证书的后缀名都是些啥&#xff1f; PEM 参考&#xff1a; Pem格式 Privacy-Enhanced Mail (PEM)是存储、传输密码学的密钥、公开密钥证书和其他数据的文件格式的业界标准。 许多加密标准使用ASN.1…

几行 Python 代码就可以提取数百个时间序列特征

以下所有内容均来自python绿色通道订阅号&#xff0c;个人整理主要为了个人方便查看&#xff0c;希望也可以对各位有所帮助 时间序列数据是随着时间的推移反复捕获的变量值&#xff0c;随着时间的推移可以产生一系列的按时间顺序索引的数据点。在时间序列中&#xff0c;数据具…

dp入门(二)

目录 45、跳跃计划 53、最大子数组和 55、跳跃游戏 62、不同路径 63、不同路径2 64、最小路径和 70、爬楼梯 72、编辑距离 84、柱形图中最大的矩形 85、最大矩形 4721、排队 45、跳跃计划 当前可移动距离尽可能多走&#xff0c;如果还没到终点&#xff0c;步数再加一。整体…

Spring Boot 入门

37) Boot 骨架项目 https://start.spring.io/pom.xml 38) Boot War项目 步骤1&#xff1a;创建模块&#xff0c;区别在于打包方式选择 war 步骤2&#xff1a;编写控制器 Controller public class MyController { ​RequestMapping("/hello")public String abc() …

南京溧水农民丰收节 国稻种芯·中国水稻节:江苏味稻文化

南京溧水农民丰收节 国稻种芯中国水稻节&#xff1a;江苏味稻文化 &#xff08;融媒体记者 诸婧雯&#xff09;新闻中国采编网 中国新闻采编网 谋定研究中国智库网 国稻种芯中国水稻节 中国三农智库网-功能性农业农业大健康大会报道&#xff1a;由溧水区政府、市农业农村局主办…

MCE | Hippo 途径与靶向策略

在 PubMed 输入了“Hippo pathway or YAP/TAZ”&#xff0c;小编发现近十年来与 Hippo 通路沾点边的研究势头猛烈&#xff0c;且发的文章不少都“非富即贵”&#xff0c;如发表在 Nature Cell Biology 上的两篇关于 YAP (TAZ) 相变的文章 (两篇结论相反的文章&#xff0c;还能双…

红黑树C++实现

目录 一、红黑树的概念 二、红黑树的性质 三、红黑树节点的定义 四、红黑树的插入 4.1 插入节点 4.2 插入节点的颜色 4.3 调整情况1 4.4 调整情况2 4.5 调整情况3 4.6 调整情况总结 五、调整的实现 5.1 调整的步骤分析 5.2 代码实现 六、树的平衡判断 七、源代码…

微信小程序制作要多少钱?【制作小程序】

关于微信小程序制作要多少钱的问题&#xff0c;是很多企业商家在制作小程序之前需要了解的事项&#xff0c;因为总是听说制作小程序的费用有高有低&#xff0c;而他们又对这方面不太了解&#xff0c;所以也还是需要了解微信小程序制作要多少钱的。那么微信小程序制作要多少钱呢…

RocketMQ中生产者发消息前为啥一定要调用start()方法?

前言 我们在使用RocketMQ发送消息时&#xff0c;一般都会使用DefaultMQProducer&#xff0c;类型的代码如下&#xff1a; DefaultMQProducer producer new DefaultMQProducer("producer_group"); producer.setNamesrvAddr("42.192.50.8:9876"); try {pr…

Chrome 103支持使用本地字体,纯前端导出PDF优化

在前端导出PDF&#xff0c;解决中文乱码一直是一个头疼的问题。要解决这个问题&#xff0c;需要将ttf等字体文件内容注册到页面PDF生成器中。但是之前网页是没有权限直接获取客户机器字体文件&#xff0c;这时就需要从服务器下载字体文件或者提示用户选择字体文件上传到页面。对…

链接杂谈 CASPP

构建大型程序 构建大型程序&#xff0c;不可避免的一个问题是链接问题&#xff1a; - 链接器提示&#xff1a;缺少某个模块 缺少某个库 不兼容的库版本 理解全局变量的链接 你的代码可能有多个全局变量&#xff0c;有些是强变量&#xff0c;有些是弱定义&#xff0c;执行…

清除浮动的常用方法

关于浮动 我们为什么需要浮动&#xff1f; 我们想把多个块级元素放到同一行上。 打破标准流的限制。 浮动原来做图文混排效果&#xff0c;现在主要用来做网页布局的。 浮动语法 只有左浮动和右浮动。 float: left; float: right;浮动特点 1.浮动元素会脱离标准流&#x…

Win10禁止应用独占麦克风

痛点需求&#xff1a; qq和微信同时发起语音通话&#xff0c;发现只有一个qq说话对方能听到&#xff0c;但是微信却不能&#xff0c;这是典型的应用程序独占了麦克风&#xff0c;导致其他应用无法使用。 有没有办法让qq和微信同时使用麦克风呢&#xff1f; 答案是&#xff1a;有…

图的拓扑序列

拓扑序列&#xff1a; 拓扑序是按照点的先后顺序排列的。拓扑序列满足以下两点&#xff1a; 1.每个顶点在序列中出现且只出现一次。 2.若存在一条从顶点 A 到顶点 B 的路径&#xff0c;那么在序列中顶点 A 出现在顶点 B 的前面。 拓扑序列只存在于有向无环图中。可以理解成…

MCE | 肝炎病毒是如何诱发肝癌的

肝炎病毒分类 肝炎病毒是世界上最常见的肝炎病因&#xff0c;其它原因包括酗酒、某些药物、毒素、其他感染、自身免疫性疾病和非酒精性脂肪性肝炎 (NASH)。肝炎病毒共有五种主要的肝炎病毒株&#xff0c;分别为 A、B、C、D 和 E 型。目前&#xff0c;全世界大约有 3.25 亿人患…

2023中国绿色铝业国际峰会

会议背景 铝行业属于能源高度密集型行业&#xff0c;主要包括铝矿石开采、氧化铝生产、电解铝生产和铝材加工等环节。我国原铝产量自2001年以来一直占据世界首位&#xff0c;连续7年产量占比超过全球50%。然而与国际先进铝生产企业相比&#xff0c;我国铝生产企业单位原铝碳…

C# 自定义事件

一 自定义事件 例如&#xff0c;利用自定义绘制的技术&#xff0c;画出一个圆角按钮。 现在来看&#xff0c;怎么样给它添加自定义的事件。 二 要点与细节 1 Control 类本身就有继承的鼠标和键盘事件&#xff0c;这里只是一个引子&#xff0c;用于引出更复杂的自定义事件。 …

web测试——业务测试2

1.历史数据 前端&#xff1a; 组件相关  组件内部是否动过&#xff1b;  展示的数据是否受影响&#xff1b;  失焦后的校验(爆红) 页面样式相关  坐标位置、  按钮位置是否动过&#xff0c;  新版本上线对历史配置的影响 交互提示相关  新手引导的展示位置、关闭后的展…

pycharm2022.2 远程连接服务器调试代码

目的&#xff1a; 同步本地和服务器的全部或者部分文件本地debug&#xff0c;服务器跑实验 需要条件&#xff1a; 服务器上已经创建好虚拟环境你本地已经安装好pycharm 1.1 File → Settings → Project:XXX →Python Interpreter 打开之后再右边这添加解释器。选On SSH 1.2把…