MENU

UPnP安全(一):UPnP协议介绍

January 8, 2019 • 安全技术,编程开发

最近在做IoT安全相关的时,发现许多设备都具备、甚至都开启了UPnP功能。而近期又陆续看到一些UPnP安全问题的文章,因此打算对UPnP进行系统的学习并作一个总结和归纳。

UPnP的安全其实很早就有了,检索了一下发现最早的在06年就出现了相关的技术,同时这十多年间陆陆续续又有很多的攻击点出现。

为了对这些出现的安全问题进行学习、复现,首先要对UPnP协议体系有一定的认识,对其整个过程要有理解。

那接下来是第一篇,其中主要是对UPnP进行简单直白的介绍。

如果你对UPnP的知识和过程已经了然于胸,你可以移步在这里看看我关于UPnP安全的总结:UPnP 安全(三):IGD Profile 安全与

1. UPnP简介

UPNP(Universal Plug and
Play)即通用即插即用协议,是为了实现电脑与智能的电器设备对等网络连接的体系结构。而内网地址与网络地址的转换就是基于此协议的,因此只要我们的路由器支持upnp,并且我们使用支持此协议的xp操作系统,那么我们就可以借此提高点对点传输速度。

简单的来说,UPnP 最大的愿景就是希望任何设备只要一接上网络,所有在网络上的设备马上就能知道有新设备加入,这些设备彼此之间能互相沟通,更能直接使用控制它,一切都不需要设定,完全的Plug and Play。

2. UPnP意义

在网络世界里,当一个主机加入网络时,其行为模式跟我们物理硬件的添加和删除设备是类似的。

在私有网络和公网交互的时候,私有网络中的主机使用的是内网 IP 地址,是无法被外网的主机直接访问的。必须借助 NAT 网关设备(本地路由器)把内网地址映射到网关的公网地址上。

当内网中的主机想要被外界主机直接访问(比如开放 80 端口,对外提供 HTTP 服务),我们就需要在 NAT 设备中为当前主机手工配置端口映射,如果内网中有多台主机都想要被外界主机直接访问的话,我们必须在同一个 NAT 设备上为这些主机分别做端口映射,它们之间不能使用有冲突的端口。

这个过程需要用户手工逐一配置,显然给用户带来了很大的麻烦。

另外,如果内部网络中有多个上网设备,每个设备上都有Live Message之类的软件需要在网关上开启一个端口进行数据传输,如果每次都使用一个固定端口的话,就会和其他用户冲突。

UPnP 技术标准的出现就是为了解决这个问题,只要 NAT 设备(路由器)支持 UPnP,并开启。那么,当我们的主机(或主机上的应用程序)向 NAT 设备发出端口映射请求的时候,NAT 设备就可以自动为主机分配端口并进行端口映射。

这样,我们的主机就能够像公网主机一样被网络中任何主机访问了。

3. UPnP 应用场景

UPnP 典型的应用场景就是家庭智能设备的互联,还有,目前在网络应用比如 BitTorrent, eMule,IPFS,Ethereum 等使用 P2P 技术的软件,UPnP 功能为它们带来极大的便利。比如:利用 UPnP 能自动的把它们侦听的端口号映射到公网地址上,这样,公网上的用户也能对当前的 NAT 内网主机直接发起连接。

实现 UPnP 必须同时满足三个条件:

  • NAT 网关设备必须支持 UPnP 功能;这是因为它需要扮演控制点(239.255.255.250:1900)的角色,控制点提供的是 SSDP 服务。
  • 操作系统必须支持 UPnP 功能;比如 Windows 系列操作系统;
  • 应用程序必须支持 UPnP 功能;比如 Bt、eMule、IPFS, Ethereum 等。

以上三个条件必须同时满足,缺一不可。

注:大多数路由器都是支持 UPnP 的,有的是默认开启,有的需要手工开启。

4. UPnP协议体系

这个图是来自这里的:https://blog.csdn.net/braddoris/article/details/41646789

20130705200418625.png

UPnP是一个多层协议构成的框架体系,每一层都以相邻的下层为基础,同时又是相邻上层的基础。直至达到应用层为止。

最底部两层:IP和TCP

负责设备的IP地址。

第三层:传送层

这一层主要是将信息用特定的方式进行传送。

这个特定的方式就是指HTTP、HTTPU、HTTPMU协议,传送的数据就是按照SSDP、GENA、SOAP协议规定的XML数据。到这一层,已经解决了UPnP设备的IP地址和传送信息问题。

第四层:UPnP设备体系定义

仅仅是一个抽象的、公用的设备模型。任何UPnP设备都必须使用这一层。

第五层:UPnP论坛的设备定义层

在这个论坛中,不同电器设备由不同的专业委员会定义,例如:电视委员会只负责定义网络电视设备部分,空调器委员会只负责定义网络空调设备部分……,依此类推。

所有的不同类型的设备都被定义成一个专门的架构或者模板,供建立设备的时候使用。可以推知,进入这一层,设备已经被指定了明确用途。

当然,这些都必须遵守标准化的规范。从目前看,UPnP已经可以支持大部分的设备:从电脑、电脑外设,移动设备和家用消费类电子设备等等,无所不包,随着这个体系的普及,将可能有更多的厂家承认这一标准,最终,可能演化为公认的行业标准。

最上层:应用层

由UPnP设备制造厂商定义的部分。

这一层的信息是由设备制造厂商来“填充” 的,这部分一般有设备厂商提供的、对设备控制和操作的底层代码,然后,就是名称序列号呀,厂商信息之类的东西。

整个协议体系也可以参见这个图片:

20120601_1369609_image002_747039_97665_0.jpg

UPnP的一些术语

(这里做简单了解即可)

  • UUID(Universally Unique Identifier)

    • UUID含义是通用唯一识别码,其目的是让分布式系统中的所有元素,都有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。其格式为xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),分别为当前日期和时间,时钟序列,全局唯一的IEEE机器识别号,如果有网卡,从网卡mac地址获得,没有网卡以其他方式获得。
  • UPC(Universal Product Code)

    • 通用产品编码的缩写,它由12个数字构成,由统一编码委员会(Uniform Code Council)管理。
    • 这个值可由UPnP制造商指定。
  • UDN(Unique Device Name)

    • 单一设备名,基于UUID,表示一个设备。在不同的时间,对于同一个设备此值应该是唯一的。
  • HTTPMU

    • 在UDP上实现HTTP协议的多址传送
  • HTTPU

    • 在UDP上实现普通的HTTP传送协议。
  • SSDP(Simple Service Discovery Protocol:SSDP)

    • 简单服务发现协议,是内建在HTTPU/HTTPMU里,定义如何让网络上有的服务被发现的协议。
    • 具体包括控制点如何发现网络上有哪些服务,以及这些服务的资讯,还有控制点本身宣告他提供哪些服务。
    • 在UPnP工作流程的设备发现部分使用到该协议。

结束语

如果你看完这一篇之后有种‘似懂非懂、隔靴搔痒’的感觉,然后问:“所以呢?UPnP到底怎么工作的呢?现实中到底是怎么作的呢?”,那么恭喜你,你是个求知欲很强的好童鞋。

可以移步这里啦:UPnP 安全(二):UPnP 协议具体流程

参考资料

Tags: UPnP
Archives QR Code
QR Code for this page
Tipping QR Code