转载自 Norah C.IV
更多:SSDP协议 SOAP协议
一、UPnP简介
通用即插即用(英语:Universal Plug and Play,简称UPnP)是由“通用即插即用论坛”(UPnP™ Forum)推广的一套网络协议,主要用于设备的智能互联互通。
UPnP 可以当作是一个相对复杂的网络协议,毕竟它包含了很多其他的网络协议,如:ip(设备寻址)、tcp、udp(数据打包发送)、http(数据传递格式)等。
UPnP 可以扩展,也就是说还可以在启动加入其他的协议,比如:传递数据时,http协议再包一层json协议,或者数据传递使用xml协议来传递等等。
UPnP 之所以强大,很大一个原因是基于互联网,这样对等设备可以通过互联网自由交互,也就是说任何可以联网的设备都可以使用UPnP协议。
二、UPnP用法
(1)寻址——Addressing
因为基于互联网,需要满足基本的p2p协议,所以就必须要寻址,寻址的过程就是设备获取ip地址的过程,这个里面一般都使用DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),即路由动态的分配一个没有使用的ip地址给设备。
(2)发现——Discovery
UPnP通过SSDP(简单服务发现协议)完成设备的发现。通过寻址拥有了身份标识IP,加入了互联网当中。新加入的设备向UPnP专用
的组播地址(239.255.255.250:1900)发送消息宣告自己的存在。
(3)描述——Description
在设备发现的过程中,设备描述文件的URL包含在设备加入网络
时发送的消息中,也就是LOCATION中的描述url,通过location中的url能获取一个xml,一般设备的描述都是通过xml来标识的。
(4)控制——Control
UPnP通过SOAP协议控制设备,按照XML描述文件中的信息,以
Device(设备)+Service(设备的服务)+action(动作)+Variable
(值)的形式控制设备。一个控制的过程包含控制地址、控制说明、控制执行、控制响应。
(5)事件——Eventing
事件即设备的状态量发生了变化,需注册一个观察者。当状态量发生了变化时,设备会提示观察者状态量发生变化,并及时处理。
(6)展示——Presentation
展示作为一个控制和事件的补充,实现upnp协议并不强制要求。
关于UPnP协议详细内容,请参阅:
https://blog.csdn.net/braddoris/article/details/41646789
https://blog.csdn.net/braddoris/article/details/41646809
三、应用场景
1.智能家庭网络
许多智能家居环境使用了现存的家庭控制网络,例如家庭网络来控制和监控整个家居环境,比如灯光,安防和其他家庭设备。这些网络可以连接PC上,但是除了PC之外,不能被其他的设备存取。使用UPnP设备可以桥接这些网络成为一个网络,并提供用户更多设备存取家庭网络中的设备。在实现时也无须对家庭网络中的现有布线和设备进行昂贵的升级,只需要将设备变成UPnP设备并能够与控制点通讯并接受控制点的控制命令。
2.数字音视频文件管理
可以在PC和其他设备上播放的数字化音视频文件在近几年正在成指数级的增长。一个家庭中,可能有几台计算机或者其他设备用于保存这些文件。使用UPnP可以使这些分布在不同PC的文件统一管理。这些设备能被发现然后被其他控制点(比如个人电脑、UPnP接收器)控制,播放器可以通过家庭网络获得这些音视频文件并播放它们,用户可以在电视上欣赏这些音视频文件。
3.数字图片库
许多家庭使用数字相机拍照,或者将已有照片扫描保存,然后将这些照片上载到他们的计算机中保存。在计算机中对其进行分类,或者以幻灯片的形式进行显示。随着照片的增加,照片可能保存在多种设备或者多种介质上,比如光盘、硬盘、Flash卡。使用UPnP技术,图片库可以自己作为一个设备存在,并自动在网络上声明。这使得一个照片库可能临时为多个应用程序使用,例如可以进行幻灯片显示的同时,在电子像框、机顶盒和电视上进行显示。
四、UPnP利用
MirandaUPNP 是各种各样的智能设备、无线设备和个人电脑等实现遍布全球的对等网络连接(P2P)的结构。例如,迅雷软件就支持UPNP结构,从而加快软件下载速度。为了提高P2P类程序的网速,很多人都会打开路由器中的UPNP功能。
而Miranda是Kali提供的一款基于Python语言的UPNP客户端工具,是一个通过UPNP功能来探测主机信息的工具,并不限于探测操作系统。它可以用来发现、查询和操作UPNP设备,尤其是网关设置。当路由器开启UPNP功能,存在相应的漏洞,就可以通过Miranda进行渗透和控制。
五、验证
(1)miranda
通过命令,进入miranda的shell
miranda -v -i eth0
指定打开网卡eth0
(2)msearch
在shell中,执行msearch命令,搜索支持UPnP的主机
路由器的UPNP功能往往需要手动开启,默认是关闭的
(3)Help
通过help可列出miranda的命令
(4)设备发现
host list:查看发现的设备列表
host get <n>:获取信息(查询summary之前需执行)
host info <n>:显示查询到的信息
host summary 0:显示xml文件的摘要信息
(n为设备在列表中的编号)
(5)访问url
可以查看到设备描述的xml文件
(6)获取设备列表
host info 1 deviceList
(7)获取设备支持的命令/服务信息
六、UPnP扩展
CVE-2020-12695
1.命名:CallStranger漏洞
该漏洞允许攻击者绕过内网的数据防泄露系统(DLP)进行数据逃逸,可导致敏感数据泄露,并且可对设备所在内部网络进行扫描,甚至能劫持设备进行分布式拒绝服务(DDOS)攻击。
2.影响设备
CallStranger漏洞存在于协议设计中,因此该漏洞影响几乎所有支持UPnP的设备,包括Windows 10所有版本、路由器、访问接入点、打印机、游戏机、门铃对讲机、媒体应用程序和设备、摄像头、电视机等。根据SHODAN和ZoomEye的搜索结果,至少有数以百万计的在线设备受到影响。
3.漏洞分析
在关于UPnP的NT与CALLBACK订阅模块中,publisher path一般为订阅的服务,以GENA格式存放在设备的某个XML文件中。
CALLBACK的值一般为回调地址的URL。NT取upnp:event表示订阅事件。
该协议并没有对CALLBACK传入的URL进行限制和规范,也就是说,CALLBACKURL是攻击者可控的。
4.漏洞危害
CallStranger漏洞所造成的危害可以分三个方面:DDoS攻击、数据逃逸和端口扫描。其中造成的DDoS攻击可以分两种,SYN洪水攻击和TCP反射放大攻击。
5.漏洞缓解及修复
可采用如下措施进行漏洞缓解:
(1)检查可疑设备,如果没有必要,则关闭UPnP端口。
(2)在网关等设备中审计NOTIFYHTTP数据包。