UPNP(Universal Plug and Play),即插即用协议,是由UPnP论坛提出并完善的一套协议。主要用于解决局域网络中实现各个设备的互联互通。UPnP定义了一套基本协议:SSDP、GENA、SOAP等
UPnP的基本组件
UPnP网络由设备、服务和控制点组成
- 设备:即提供服务的设施。如各种家电。
- 控制点:即客户端,控制点会通过设备的描述信息控制设备上的服务,从而实现想要的功能。
- 服务:设备所能提供的服务,如NAT,端口映射等。
UPnP的实现流程
寻址、发现、描述、控制|事件|展示是UPnP设备进入一个局域网络中时会做的一些事情。
- 寻址:UPnP是基于IP协议的,因此当一个控制点加入一个局域网当中时候,首先需要利用DHCP或静态IP等操作获取一个IP地址。
- 发现:控制点加入网络中之后首先会寻找整个网络上的UPnP设备(SSDP协议),同时网络上的设备也会宣告自己的存在。
- 描述:获取设备的描述文件,得到设备提供的服务
- 控制:根据描述文件中定义的描述,向设备发送控制信息,从而使用设备中提供的服务。(SOAP协议)
UPnp的协议介绍
SSDP
SSDP(Simple Service Discover Protocol)简单服务发现协议。UPnP技术的核心协议之一,既可使用该协议向其它控制点声明自己的存在,也可以利用该协议发现其它设备的服务。
设备声明消息
设备接入网络的时候,向特定的多播地址的SSDP端口发送下面的消息报文。控制点根据自己的策略,处理监听到的消息。1
2
3
4
5
6
7NOTIFY * HTTP/1.1
Host: 239.255.255.250:1900
Cache-control: max-age=1800
Location: http://192.168.0.1:49152/des.xml
Nt: upnp:rootdevice
Nts: ssdp:alive
Usn: uuid:de5d6118-bfcb-918e-0000-00001eccef34::upnp:rootdevice
- Host: 必须使用该组播地址:239.255.255.250:1900
- Cache-Control:设备可能在没有通知的情况下停止服务或者从网络上卸载,利用该字段指定超时值,设备必须在约定的超时值以前重发该消息,否则控制点认为设备失效。
- Location: 设备描述符的位置,里面记录有设备提供的服务及描述
- Nt: Notification Type的缩写,
- Nts: Notification Sub Type的缩写,规定该消息必须是 ssdp:alive
- Usn: Unique Service Name的缩写,设备实例的标识符,8-4-4-16的格式,分别表示当前的日期、时间、始终序列、全局唯一的IEEE机器标识
设备发现消息
设备向一个特定的多播地址的SSDP端口(239.255.255.250:1900)(也可以是某一个具体的IP)发送下面的消息。当设备监听到这个保留的多播地址上由控制点发送的消息的时候,设备会分析控制点请求的服务,如果自身提供了控制点请求的服务,设备将通过单播的方式直接响应控制点的请求。1
2
3
4
5M-SEARCH * HTTP/1.1
Host: 239.255.255.250:1900
Man: "ssdp:discover"
Mx: 5
ST: ssdp:rootdevice
- Host: 必须使用该组播地址:239.255.255.250:1900
- Man: 必须是”ssdp:discover”,引号不能省略
- Mx:1到5之间的一个值,表示最大的等待响应的秒数
- ST:Search Target的缩写,表示搜索的节点类型,有多种节点类型,这里只搜索根设备。
SOAP
Simple Object Access Protocol:简单对象访问协议。UPnP使用SOAP来完成控制。SOAP工作在HTTP上,使用XML来描述远程调用并返回结果。
漏洞
- 部分Dlink路由可以通过UPnP多播请求实现系统代码命令执行工具。
- RCE: MiniUPnPd 1.0 中的栈溢出漏洞,从而导致攻击者能够执行任意代码。
- NAT:设备的描述文件公网可访问,攻击者可以根据描述文件中的服务描述,为设备增加NAT转换条目等。