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年网络安全观察报告