UPnP 协议栈的脆弱性

与风险分析
由于 UPnP 协议栈包含的协议较多,在实现过程中,容易存在脆弱性。而在 UPnP 工作流程的六个 阶段中,发现、描述、控制三个阶段出现过比较严重的脆弱性问题。这些脆弱性广泛存在于支持 UPnP 技术的物联网
设备中,具有了一定的风险。本节将对 UPnP 在协议设计以及协议栈实现过程中的脆弱性 和产生的风险展开分析。

UPnP 协议的脆弱性与风险分析

4.2.1.1 UPnP SSDP 协议的脆弱性分析

UPnP SSDP 协议的目的是在局域网
中发现设备,而通常设备发现有两种思路,一种是对 IP 段进行 遍历扫描,另一种是借助多播的方式搜索。采用遍历扫描的方式十分浪费通信资源且效率低下,相反多 播的方式则可以减少通信资源的浪费且效率极高。多播的特性决定了任何一个协议在设计时,若需要使 用多播,都必须基于 UDP协议设计,所以 SSDP 协议也是如此。虽然 UDP协议有很多的优势,但还有 一个很明显的缺陷,通信的发起者可以伪造源 IP,导致通信的接收方无法确定数据包的来源是否真实。 事实上,很多公开 SSDP 协议的脆弱性是 UDP协议的缺陷带来的,并非 SSDP 协议本身的问题,只是 UDP协议的缺陷在 SSDP 协议上被放大了。
OCF在设计时显然没有考虑到 SSDP 可用于反射,攻击者可以通过伪造源 IP,用于 SSDP 进行放大 反射攻击。借助 SSDP 进行的反射攻击,攻击带宽的放大倍数会因设备不同而浮动,根据《2014 绿盟 科技 DDoS 威胁报告》[41] 统计,攻击带宽放大倍数在 30 倍左右(单播)。

SSDP 协议在设计时规定支持单播和多播,所以既可以通过组播的方式,借助整个组播组内所有设 备的 SSDP 服务进行反射攻击。也可以通过单播的方式,利用某一台设备的 SSDP 服务进行反射攻击。 我们以单播为例,分析利用 SSDP 协议进行的反射攻击的过程。正常情况下,利用 SSDP 协议搜索根设 备的过程

若请求方希望搜索提供 SSDP 服务的根设备,可以向 SSDP 服务发送搜索的报文,若 SSDP 服务正 常开放,在收到搜索的报文后,将向发送搜索报文的源 IP(请求方)返回自己的基本信息。

通常 UPnP 架构将很多设备抽象为虚拟的子设备和子服务,允许请求方通过 SSDP,一次搜索所有 的子设备和子服务

若攻击者希望利用 SSDP 服务对受害者发起反射攻击,只需将自己的 IP 伪造成受害者的 IP,不断 向 SSDP 服务发送搜索报文,就形成了利用 SSDP 的反射攻击,如图 4.5 所示。

事实上,SSDP 协议对多播的支持没有太多被用于反射攻击的风险,因为多播数据通常不允许被路由, 攻击者无法在互联网
上直接利用组播进行反射攻击。而在内网中,环境相对安全,由于设备数量较少, 即使有攻击者在内网环境中通过多播的方式,利用 SSDP 进行反射攻击,也很难形成较大的攻击带宽。
总体而言,SSDP 协议对单播 UDP的支持,又具有较高的反射放大率,加之大量物联网设备的 SSDP 服务暴露在互联网上,成为用于发动 DDoS 攻击的重大风险。

4.2.1.2 暴露 SSDP 协议的服务产生的风险分析

根据我们在 4.2.1.1 节的分析,我们知道 SSDP 协议对 UDP单播的支持存在很大的隐患。在互联网中, 单播的 UDP数据包是允许被路由的,若大量支持单播的 SSDP 服务被暴露在互联网中被人用做反射攻击, 则可以形成非常高的攻击带宽,存在很大风险。

不幸的是, OCF在 UPnP 设备架构 [28] 中也并没有明确限制 UPnP 服务的暴露范围,仅在部分设备(如 路由器
)的标准中,要求厂商设计产品时,必须使用最新版本的标准(目前为 Internet Gateway Device V2.0 DCPs)[29] 且实现的 UPnP 服务必须只暴露在内网中。但厂商在实现过程中,往往采用了旧版的标
准(Internet Gateway DeviceV1.0 Device DCPs)[30] ,也并没有重对 UPnP 服务暴露范围的限制。所 以一些不正确的配置或实现过程中编码的缺陷,导致大量物联网设备的 SSDP 服务暴露在互联网上,这些暴露的 SSDP 服务对于攻击者而言都是非常好的反射源。

若黑客希望利用互联网中暴露的 SSDP 服务,进行反射攻击,首先需要借助用于扫描的服务器或僵 尸主机,按照 SSDP 的报文格式对 1900 端口进行扫描,统计出可以用于反射攻击的反射源列表

在得到反射源的列表后,黑客只需控制僵尸网络向反射源发送伪造源 IP(为受害者 IP)的 SSDP 报 文,即可对受害者发起反射攻击。

对于黑客而言,反射攻击是一种非常好的 DDoS 方式,除了可以放大攻击带宽外,源 IP 被伪造使 得无论是受害者还是暴露了 SSDP 服务的设备,均很难确定反射的发起者。受害者在被黑客利用 SSDP 进行反射攻击时,会收到大量源端口为 1900 的 UDP数据包,最终带宽被耗尽。

对于用户而言,避免自己的设备被用于 SSDP 反射攻击最好的方法,就是关闭 UPnP 服务。就协 议设计而言,我们认为 SSDP 协议对多播的支持没有争议,但对单播的设计,完全可以基于 TCP 而非 UDP协议,这样即使 SSDP 服务被暴露在互联网中,也无法被用做反射攻击。

UPnP 实现中的常见脆弱性与风险统计

由于 UPnP 协议栈中众多的协议实现起来十分繁琐,所以实现过程中十分容易出现漏洞。图 4.8 为 2005 年至 2018 年公布的物联网设备 UPnP 相关的 CVE统计结果,几乎每年都会出现与物联网 UPnP 实现相关的 CVE,且趋势没有变缓。

通常,厂商在为其产品实现 UPnP 协议栈时有两种思路:一种是采用第三方的 SDK,可缩短开发周期; 另一种是自主实现整个协议栈,尽可能减少因第三方 SDK本身存在问题导致的产品脆弱性。遗憾的是, 无论第三方的 SDK还是厂商自行实现的协议栈,很多存在各种漏洞,原因如下:

第一,某些版本的第三方 SDK本身存在命令注入漏洞。目前设备厂商使用较多的的 UPnP 协议栈 SDK有 libupnp、MiniUPnP、Broadcom UPnP stack 以及 RealTek SDK。其中 libupnp 由英特尔创建, 之后发布到了开源社区,促进 UPnP 的发展。MiniUPnP 是由 Thomas BERNARD 等人自行开发的轻量 化 SDK。Broadcom UPnP stack 以及 RealTek SDK 是芯片厂商出售芯片时自带的 SDK。表 4.2 为各第 三方 SDK存在的命令注入类漏洞的统计,可以看出受影响版本或产品非常多,而 CVE也不仅存在于 SOAP的实现中,SSDP 的实现中也存在很多缓冲区溢出类漏洞。

表 4.2 第三方 UPnP SDK 中的越权执行类 CVE

SDK 受影响版本 / 产品 CVE 协议
libupnp 1.6.18 之前

CVE-2012-5958 CVE-2012-5959 CVE-2012-5960

CVE-2012-5961 CVE-2012-5962 CVE-2012-5963 CVE-2012-5964

CVE-2012-5965

SSDP
MiniUPnP 1.0 CVE-2013-0230 SOAP
Broadcom UPnP stack 思科 WRT54G CVE-2011-4499 SOAP
RealTek SDK rtl81xx CVE-2014-8361 SOAP
第二,某设备厂商在 OCF制定的标准之上,在 SOAP中加入了设备升级的服务。但实现过程中, 设备升级服务中存在命令注入漏洞。如漏洞 CVE-2017-17215 在 OCF为网关设备制定的标准之外,加 入了一个基于 SOAP的设备升级的服务,但该服务中存在命令注入漏洞,最终被各种僵尸网络所利用。

我们根据危害将漏洞分为越权执行、越权写入、越权读取和拒绝服务四类,各类漏洞占比
越权执行,是指可以直接在系统上执行命令,可以对系统造成较大程度控制的漏洞,如缓冲区溢出、 系统命令注入等。由图可见,越权执行类漏洞危害高,且占比最大,越权执行类漏洞中绝大多数为缓冲 区溢出。造成该漏洞的原因,主要是在实现 UPnP 协议栈过程中,目前没有较完善的报文解析开源库, 所以无论是厂商自行实现的协议栈,还是第三方 SDK,均容易出现缓冲区溢出类漏洞。越来越多的物联 网设备支持了 UPnP 协议,但大量设备存在此类脆弱性,有很大风险被僵尸网络感染,成为僵尸主机。

越权写入,是指能以某种方式修改在系统上写入文件、修改配置等(如新增端口映射关系),但无 法直接执行代码的漏洞。该类漏洞占比为 21.82%,且其造成的危害十分严重,如路由器的 UPnP 服务 有该类漏洞,则有很大风险被黑客修改端口映射表,入侵内网,攻击内网中的设备。我们在统计过程中 甚至发现了部分输液系统中 UPnP 的越权写入类漏洞,攻击者可以直接修改药品的信息,可能危及输液患者的生命。

越权读取,是指能读取或访问指定或任意文件、服务,造成信息泄露或利用服务进行反射攻击。可 以看出该类漏洞相比越权执行和越权写入,占比较少。对于 UPnP 而言,该类漏洞最大的风险在于攻击 者可以越权通过互联网直接访问局域网中的 SSDP 服务,用于反射攻击。

拒绝服务,是指可造成 UPnP 服务自身的进程崩溃、死锁等,是软件无法正常工作的漏洞。通常 UPnP 服务会作为物联网设备的独立服务存在,所以该类漏洞,对设备自身核心功能的正常运行影响较小。

其他,指的是细节未公开的漏洞。由于物联网设备种类繁多,很多 UPnP 漏洞披露的时间较新,所 以并未公开相关的细节。

对于黑客而言,服务实现过程中产生的各种脆弱性,最有利用价值的就是各种越权执行漏洞,因为 这类漏洞让攻击者具备了在攻击目标上执行代码的能力,继续感染更多的僵尸主机,或直接执行攻击。

而对于 UPnP 服务而言,由于大部分越权执行类漏洞均属于缓冲区溢出,所以无论漏洞存在于 SSDP 的实现,还是存在于 SOAP的实现中,通常黑客只需要发送一个精心构造的数据包,即可在目标 上执行代码。对于黑客感染新的僵尸主机而言,与撞库相比,成本低、效率高。因而我们预测使用越权 执行类漏洞感染新僵尸主机的行为在未来将呈不断上升的趋势。

参考资料

绿盟 2018物联网安全年报

友情链接

绿盟 2018年网络安全观察报告

UPnP实现中的常见脆弱性与风险分析相关推荐

  1. 基于Python查找图像中最常见的颜色

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 如果我们能够得知道一幅图像中最多的颜色是什么的话,可以帮助我们解决 ...

  2. 详解pytorch中的常见的Tensor数据类型以及类型转换

    文章目录 概览 Tensor的构建 补充 类型转换 附录 概览 本文主要讲pytorch中的常见的Tensor数据类型,例如:float32,float64,int32,int64.构造他们分别使用如 ...

  3. 人力资源中最常见的7张报表

    以下是在人力资源中最常见的7张报表. 人员结构分析 从部门.工龄.性别总体的分析整个员工的分布 新增员工分析 从学历和来源分析新增员工 人员离职分析 从原因和趋势分析 部门层级 学历层级 工龄层级 性 ...

  4. php进攻教程,如何对PHP程序中的常见漏洞进行攻击(下)_php基

    如何对PHP程序中的常见漏洞进行攻击(下)_php基 发布时间:2016-06-17 来源: 点击: 次 如何对PHP程序中的常见漏洞进行攻击(下) 翻译:analysist(分析家) 来源:http ...

  5. 编程面试过程中最常见的10大算法

    编程面试过程中最常见的10大算法 编程语言:C/C++ 1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法. toCharArray() // 获得字符串对应的char数组 A ...

  6. 5 个 Android 开发中比较常见的内存泄漏问题及解决办法

    Android开发中,内存泄漏是比较常见的问题,有过一些Android编程经历的童鞋应该都遇到过,但为什么会出现内存泄漏呢?内存泄漏又有什么影响呢? 在Android程序开发中,当一个对象已经不需要再 ...

  7. Js中最常见的异常捕捉 TryCatch

    Js中最常见的异常捕捉 TryCatch 参考文章: (1)Js中最常见的异常捕捉 TryCatch (2)https://www.cnblogs.com/Zwq286179/p/5999450.ht ...

  8. java安装_Java开发中更多常见的危险信号

    java安装 在< Java开发中的常见危险信号>一文中,我介绍了一些不一定本身就是错误或不正确的做法,但它们可能表明存在更大的问题. 这些"红色标记"类似于" ...

  9. C语言初学者代码中的常见错误与瑕疵(9)

    题目 字母的个数 现在给你一个由小写字母组成字符串,要你找出字符串中出现次数最多的字母,如果出现次数最多字母有多个那么输出最小的那个. 输入:第一行输入一个正整数T(0<T<25) 随后T ...

最新文章

  1. JavaScript碎片—函数闭包(模拟面向对象)
  2. Numpy:数组合矢量计算
  3. 保护数据安全的三种武器
  4. ABAP实现农历转成公历
  5. 5页面如何切图_如何让你的设计稿做到95%还原?
  6. C#常用类库----CSV文件操作类
  7. 总结之:CentOS 6.5基于DHCP的PXE自动化安装系统详解
  8. 湖南2021年高考成绩查询与录取查询课件,@所有高考生,高考成绩和录取动态查询方式公布...
  9. golang 最小堆排序实现
  10. IBM人工智能项目Watson旧金山开设新总部
  11. 超像素分割SLIC与SLIC0(SLIC Zero)算法的区别
  12. 离线地图三维立体建筑物实现
  13. 虚拟机u盾怎么使用_Linux下如何使用网银
  14. 机器学习之【蒙特卡罗法】
  15. 巴菲特致股东的一封信:2000年
  16. 003-Xshell和Xftp连接CentOS
  17. 看过这篇文章,终于找到单身的原因了!
  18. 微软:人工智能迅速崛起,面临着严重的技术短缺
  19. 网络流24题(部分)
  20. (转载)c# winform comboBox的常用一些属性和用法

热门文章

  1. STM32F103ZET6通过SPI驱动2.4寸TFT彩屏
  2. 灵活组合复合图元模板,电路图状态图业务定义可配置,浮云E绘图软件源码开发
  3. 全基因组测序 从头测序(de novo sequencing) 重测序(re-sequencing)
  4. 当程序员遇上电信诈骗犯 黑掉对方电脑!成功反制
  5. SushiSwap新任「主厨」对近期传闻的回应
  6. PRML:Pattern Recognition And Machine Learning 相关资料整理与下载
  7. error 1044 mysql_mysql ERROR 1044 (42000): Access denied for user ''@'localhost' to database
  8. 手写体数字图像识别图像_手写识别调整笔画大小而不是图像
  9. 手机桌面隐藏大师_隐藏大师app下载-隐藏大师安卓版下载-ROM之家
  10. 数字世界,企业何以抵御勒索病毒?