一. 协议简介
协议全称:Universal Plug and Play,用于设备的智能互联互通(物联网),简化家庭/企业(局域网)中智能设备的联网过程。
实例:智能监控摄像头、手机端预约开启智能空调
二. 基本原理
其中寻址相当于UPnP协议的预阶段,设备获取一个可用的ip地址用以上网。有以下三种方式获取:
DHCP:通过DHCP协议自动获取ip地址(首选)
Auto-IP:通过Auto-IP协议,从169.254.1.0 ~169.254.254.255(也称169.254/16)获取一个局域网内唯一的IP地址
friendly name:设备借助DHCP服务器到DNS服务器中注册设备主机名(/URL)和IP地址的映射关系
其余五个主要阶段的协议架构如下:
其中HTTPU是以UDP实现的HTTP协议,HTTPMU是广播的HTTPU;SSDP是简单服务发现协议;SOAP是简单对象访问协议,其允许一个访问点改变服务状态表中的元素;GENA是通用事件提醒架构协议;
发现
①控制点上线:控制点向UPnP专用的多播地址发送SSDP发现报文(M-search),请求连接到网络上的UPnP设备告知自己其所拥有的服务,设备收到该多播请求,并判断自己能满足该请求,则SSDP单播回复控制点(报文中包含指向设备描述文档的URL)
②设备上线:以多播方式发送SSDP通知报文(Notify,报文中包含指向描述文档的URL),通知控制点自己所拥有的服务,且每隔一定的时间就要重新再通知一次,否则会被判为离线
描述
**对于一个物理设备可以包含多个逻辑设备,多个逻辑设备既可以是一个根设备其中嵌入多个设备,也可以是多个根设备的方式存在**
描述是一个XML文档,其中包含设备的基本信息(制造商、设备状态、可执行动作……),控制点采用基于TCP的HTTP(标准的GET命令)去请求指向描述文档的URL;与之相应的,设备会运行一个标准的HTTP服务器以供控制点访问。
控制
设备描述中会提供Control URL,控制点根据描述文档中的说明构建一个SOAP协议请求(含有消息Body,指示如何控制设备。可能会包含参数,比如想播放一个视频,要把视频的URL传过去),随后使用HTTP的POST方法向设备的Control URL发送操控请求,设备收到后要respone,表示能不能执行调用,出错的话会返回一个错误代码;
与之相应的,设备会运行一个或多个控制服务器(基于HTTP的SOAP服务端)以供控制点访问。
事件
当设备上的服务在运行,其状态变量发生改变之后,就产生了一个事件。控制点可以订阅这个事件,保证能及时捕获事件信息,并做出相应的控制动作。设备的描述文档同样提供了一个事件URL,控制点的订阅/退订请求会通过构建一个基于TCP的HTTP之上的GENA报文来递交给事件URL;
与之相应的,设备会运行一个或多个事件服务器(基于HTTP的GENA服务端)以供控制点访问。
表示
设备的描述文档中包含该设备的表示URL,该URL指向了一个为设备展示用户交互界面的HTML文档,控制点通过标准的HTTP请求得到该HTML文档并呈现在控制点的浏览器中。控制点就是根据这个HTML界面,及会话机制实现对设备的控制,订阅收取事件等;
**不是所有设备都包含表示文档,也不是所有控制点都能呈现包含复杂HTML对象的表示文档。**
三. 安全缺陷
(一)CallStranger漏洞
CallStranger漏洞(cve-2020-12695)允许攻击者绕过内网的数据防泄露系统(DLP)进行数据逃逸,可导致敏感数据泄露,并且可对设备所在内部网络进行扫描,甚至能劫持设备进行分布式拒绝服务(DDOS)攻击。
1. 漏洞原理
该漏洞存在于UPnP协议中的事件(Event)模块,在UPnP协议中,用户可以通过控制点向智能电子设备发送订阅请求,以使得该设备可以及时地将对应事件发布给用户指定的目标设备。
订阅请求需要具备以下几个要素:发布者URL、服务标识符和事件消息交付URL
其中,“publisher path”表示事件触发URL(设备描述中的服务元素eventSubURL子元素) ;“publisher host”及“publisher port”分别表示事件触发URL的域名或ip及端口;“CALLBACK”表示回调地址,即事件消息发往的目的地,如果有多个url则挨个尝试,直至成功。
大概的“订阅&发布”过程如下:
智能UPnP设备收到订阅请求后,会将事件以NOTIFY的方式发送给CALLBACK所指向的目标设备。然而事实上,UPnP协议并没有对CALLBACK地址进行限制或规范,因此攻击者可通过构建一些**非常规的CALLBACK地址**来达到其攻击目的。
2. 利用方式
该漏洞所造成的危害可以分三个方面:DDoS攻击、数据逃逸和端口扫描。其中造成的DDoS攻击可以分两种,SYN洪水攻击和TCP反射放大攻击
DDoS攻击--SYN洪水攻击
假设攻击者已经通过一些方法(如在局域网仿冒控制点上线进行广播等)获得了某些设备UPnP服务的eventSubURL(事件订阅URL),那么攻击者就可以这些UPnP设备发送订阅请求,并使CALLLBACK地址均指向目标设备。
如前文所说,若CALLBACL Value中定义了不止一个URL,则会按顺序尝试TCP连接,直到有一个连接成功。那么攻击者可在CALLBACK Value中精心构造多个URL,使每一个都无法连接成功,这样UPnP设备就会用多个SYN包依次对每个URL尝试TCP握手。假设攻击者可以获得足够多的UPnP设备的订阅URL,就会导致受害设备遭受DDoS攻击。
**SYN数据包的数量根据UPnP设备操作系统和配置的不同而不同。**
DDoS攻击--TCP反射放大攻击
攻击原理与SYN泛洪攻击一致,只不过引入了一个放大因子的概念;比如某UPnP设备尝试连接一个CALLBACK URL时会发送8个SYN包,假设每个SYN包均为最小的60字节(14字节以太头 + 20字节IP头 + 20字节TCP头 + 自填充的6字节0),那么带宽放大因子就可以达到 **8*(60/订阅报文长度)*CALLBACK地址数**
放大效果一般与UPnP设备的操作系统和厂商配置有关。
数据逃逸
当攻击者需要将获得的内网敏感数据传输出去时,可以以UPnP设备作为跳板,从而绕过内网防火墙的限制。
因为UPnP协议对CALLBACK 地址的长度没有做限制,所以攻击者可以将数据通过Callback的URL值传输出去
端口扫描
如前文提到的,若CALLBACK定义了不止一个URL,则会按顺序尝试TCP连接,直到有一个成功,那么这个规则显然也可以用于端口扫描,如下图所示,假设攻击者需要扫描IP为192.168.1.13的555端口是否开启,那么攻击者只需要将某个可以监控的URL放置在后即可确认,若攻击者收到连接请求,则端口未开启,反之,则开启。
其中,第一个CALLBACK地址为待扫描主机端口,第二个CALLBACK地址为攻击者可控制的外部服务器。
3. 漏洞修复
在UPnP协议规范[1]4.1.1节中,可以看出开发者限制了订阅事件的源IP和目标IP都必须在内网中,这从一定程度上修复了该漏洞。
(二)其他缺陷
除了CallStranger漏洞外,还找到了一些攻击思路,但并没有相应的漏洞实例。
- 1.缓冲区溢出攻击:
由于UPnP在设计时可能没有对缓冲区使用进行检查和限制,恶意攻击者可能会利用这一点获得系统的控制权限。这种攻击可能导致整个网络的安全性受到威胁。
- 2.设备发现机制的漏洞:
UPnP的设备发现机制可能会被恶意利用。攻击者可以伪装成合法的UPnP设备,通过发送广播消息来搜集网络中的设备信息,甚至执行拒绝服务攻击(DoS)。 此外github上还有一个写的比较全的文章:https://github.com/dhishan/UPnP-Hack
四. 参考文章
UPnP技术总结-CSDN博客
UPnP协议CallStranger漏洞影响数百万设备 - FreeBuf网络安全行业门户
版权归原作者 阿D苦练挖洞 所有, 如有侵权,请联系我们删除。