孟祥宇,王纯,李炜
(1 北京邮电大学网络与交换技术国家重点实验室,北京 100876;2 东信北邮信息技术有限公司,北京 100191)
通用即插即用(UPnP,Universal Plug and Play)是各种各样的智能设备、无线设备和个人电脑等实现遍布全球的对等网络连接(P2P)的结构[1,2]。UPnP是一种分布式的,开放的网络架构,它可以充分发挥TCP/IP和网络技术的功能,不但能对类似网络进行无缝连接,而且还能够控制网络设备及在它们之间传输信息。
一个完整的UPnP系统是由设备、服务和控制点3部分所构成。UPnP设备是一个能够提供一种或多种UPnP服务的服务器,控制点是一个控制器,它可以检索设备和服务描述,发送动作到设备,查询设备服务的状态和从设备接收事件。UPnP的工作过程包括设备寻址、设备发现、设备描述、设备控制、事件通知和设备展示几个部分。UPnP使用的协议包括简单服务发现协议(SSDP,Simple Service Discovery Protocol)、简单对象访问协议(SOAP,Simple Object Access Protocol)、通用事件通知体系(GENA,Generic Event Notification Architecture)等[3]。
UPnP的应用范围非常广泛,可以更加方便的实现家庭智能网络中各种终端相互调用服务能力的新需求方案,但是应用UPnP设备同时也存在许多安全隐患。如传输加密问题、服务隐藏问题、重发攻击问题、缓冲区溢出问题等,在解决UPnP安全问题的方向上,相关的解决方案很少,UPnP论坛上也只是提出了一个有关安全控制台的规范[4]。
UPnP设备架构采用如图1所示的协议栈[3]。在最高一层,消息在逻辑上仅仅包含关于厂商设备的UPnP厂商特定信息。移至下一层协议后,协议内容由UPnP论坛工作委员会定义和提供。来自以上各层的消息存储在UPnP特定协议中,以上消息通过采用SSDP协议、GENA协议和SOAP协议来进行格式化。然后消息通过运行于UDP上的HTTPMU(Multicast UDP HTTP Messages)或HTTPU(Unicast UDP HTTP Messages),或是运行于TCP上的标准HTTP进行传输。最终,以上所有消息均通过IP进行传输。
图1 UPnP协议栈
整个UPnP的工作过程如图2所示,由以下几个过程构成[3,5,6]。
图2 UPnP的工作过程
简要介绍下UPnP的工作流程:设备加入网络后通过设备寻址就可自动获得IP地址,通过设备发现,控制点就可知道网络上存在哪些设备,通过设备描述控制点就可知道设备详细信息以及设备提供哪些服务,通过设备控制控制点可以使用设备的服务,通过设备事件设备就可以将其状态变化及时告诉给感兴趣的控制点,通过设备表征过程控制点可以用浏览器察看设备状态和控制设备。通过上述的6个方面,UPnP设备可以做到在“零配置”的前提下提供联网设备之间的自动发现、自动声明、直接信息交换和互操作等功能,真正实现“设备即插即用”。
UPnP的工作流程图如图3所示[7]。
图3 UPnP的工作流程图
如果某个具备UPnP功能的设备引导成功并连接到网络上,就会立刻向网络发出广播,向网络上的UPnP控制点通知自己已经准备就绪(即Notify消息),并且此消息包含设备的URL(Universal Resource Locator)。该广播将被同一局域网的所有控制点听到,以备控制点随后进行控制之用。类似地,如果某个控制点刚刚连接到网络上,也会向网络发出广播,表示自己准备就绪,可以控制网络上的设备(即M-Search消息),该广播也将被同一局域网的所有设备听到。
UPnP的设备安全问题大部分就是在上述的一播一听之间出现了问题。如果外部的攻击者向某个用户系统发送一个Notify消息,用户的控制点就会收到这个消息,并且根据设备提供的虚假URL,连接到一个特定虚假服务器上,用户的控制点接着向相应的虚假服务器请求下载服务,下载将要执行的服务内容,服务器当然会响应这个请求。UPnP系统将解释这个设备的描述部分,发现设备提供的服务会让控制点请求发送更多的文件,虚假服务器又需要响应这些请求。这样,就构成一个“请求响应”的循环,大量占用系统资源,造成UPnP系统服务速度变慢,服务调用的混乱,甚至停止。所以外部的攻击者控制UPnP控制点就会成为可能。而现在大量的网络报道证明这已经成为现实[8]。
UPnP设备通过SSDP广播自己和提供服务,而控制点通过SOAP来调用此服务。SOAP接口代表另一种可能的安全漏洞,因为这些软件API可能会暴露功能。例如一个打包应用程序可能有成百上千的关键操作被暴露,而所有这些都可以通过某个端口读取;攻击者可以得到更多他可以使用的标准信息。Web服务描述语言(WSDL)文件、通用描述、检测和整合(UDDI)等这些条目提供了关于服务的详细信息,例如如何调用它,希望发送和接收什么样的参数等,这些为黑客提供了登录所使用的信息。SOAP信息和WSDL文件都是XML格式的,这种格式是自描述的,它清楚地显示了数据元素和数据结构。拥有这些信息,黑客能够了解信息格式,并充分利用它。由于SOAP控制信息和回复没有进行检查和限制,这就会造成黑客进行监听,角色扮演和重播攻击,以及弄虚作假、串改、伪造、歪曲数据[8]。
图4 UPnP的三元结构图
由于UPnP设备在设备发现,设备控制流程进行明文传输,并且对调用权限不做任何控制,带来了很多安全隐患。下面提供作者设计的一种具有权限控制和安全检测的UPnP安全协议流程,可以在一定程度上解决上面提到的安全隐患。此协议流程的应用场景是在构建一个家庭智能网络的情况下使用到的,与原来传统的控制点调用设备服务的二元关系不同,采用第三方认证鉴权的方式[9],引入了一个类似安全控制台[4](SC,Security Console)的概念,安全控制台进行密钥管理,角色管理,证书管理的三元结构,如图4所示。
在每一个设备加入家庭网络前,如果想得到家庭网络内设备互联互通的功能,首先要进行初始化阶段,即必须要向SC进行登记信息,控制点(或者设备)向SC提供自己的设备唯一标识(UUID,Universally Unique Identifier)和公钥,然后SC向登记的控制点(或者设备)发放SC的自签名证书,并且将控制点(或者设备)的UUID和公钥签名并制作证书发放给控制点(或者设备),SC登记控制点(或者设备)的角色信息,并将角色信息加入到访问控制列表里,角色是SC确定控制点(或者设备)的安全级别的一个标识。
图5 初始化流程
初始化流程图如图5所示。
当控制点(或者设备)通过SSDP消息发现新的设备(或者控制点)加入到网络中,双方首先交换证书,如果证明对方证书是合法的,就将对方加入到信任的安全列表里,流程如图6所示。
图6 设备安全发现
在下载设备描述阶段,当控制点要进行设备描述文档和服务描述文档下载时,首先控制点要进行一次附带请求序列号的下载请求,每次发送请求序列号要递增,控制点对请求消息连同请求序列号用散列函数生成摘要,然后将请求消息、请求序列号、摘要用设备的公钥加密后传输。
设备在接到请求消息时,首先进行解密,然后通过摘要对消息完整性进行验证,通过请求序列号对重发性进行验证,验证无误后返回描述文档的内容。整个流程如图7所示。
设备安全控制控制点调用请求和应答与下载描述文档请求和应答相似,唯一不同的地方就是要连同控制点的角色信息一起做摘要,然后进行加密传输。
图7 描述文档下载流程
设备收到请求时执行的流程图如图8所示。
图8 设备安全控制调用流程
控制点和设备使用非对称加密算法进行通信,双方只有交换经过SC颁发的证书后才能够通信,之所以使用非对称加密算法,是因为公钥是不怕被第三方截取的;通信双方接到对方的公钥后就可以使用对方的公钥加密信息进行通信,只有拥有相应私钥的通信对象才能够解密,这样就可以使通信的消息安全到达对方,并且使用非对称密钥可以进行防抵赖验证[10]。
防重发攻击是通过请求序列号实现的[4],请求序列号每次请求时都要递增,递增到最大值时重新从0开始计算,请求序列号连同请求消息进行摘要运算,并且进行加密传输,所以,请求序列号的传输安全性是有保证的。信息传递前,将对方的请求序列号加一并与将要传递的消息构建新的数据分组并做摘要然后加密传输给对方,这样对方就可以根据得到是数据分组中的请求序列号判断是否是新的请求,如果不是就丢弃并等待正确的消息的到来。这样保证了通信双方一次连接的消息传递的抗重发攻击能力,从而保证了一次连接的抗干扰能力。
设备需要对非法的控制点或者认证中心实现服务隐藏,而服务隐藏是通过去SC做身份认证才能实现的,控制点或认证中心要想获得设备的设备描述文档就需要发送GET命令,GET命令里的描述信息是通过加密以及携带请求序列号传输的,这样很好的保证了设备描述信息的隐藏,隐藏了设备描述信息就可以避免服务描述信息被非法获取,从而保护了服务信息。
因为使用了加密算法和摘要运算,此安全协议在时间性能上比原协议有所下降,但是由于UPnP消息长度较小,并且新协议的安全性有很大提高,所以性能的下降在可以接受的范围内。
[1] 范新运. 基于UPnP的家庭智能系统研究与是实践[D]. 西安:西北工业大学,2005,3-10.
[2] UPnP,http://baike.baidu.com/view/27925.htm[EB/OL].
[3] UPnP Forum UPnP Device Architecture 1.1 Document Revision[Z].October 2008.
[4] UPnP Forum. UPnP™ Security Ceremonies Design Document for UPnP Device Architecture 1.0[Z]. October 3, 2003.
[5] 王增军. 基于Intel UPnP SDK的UPnP协议编程[M]. 北京:北京理工大学,2005,1-4.
[6] Abdullah Al Hasib, Prof. Dr. M. A. Mottalib, Vulnerability analysis and protection schemes of universal plug and play protocol[A]. 2010 13th IEEE International Conference on Computational Science and Engineering[C].222-228.
[7] Intel SDK for UPnP Devices Version 1.2.1. November 2002, UPNP编程指南[Z]. 7-8.
[8] 刘武明. UPnP设备安全服务的设计与实现[D]. 北京:北京大学,9-17.
[9] 张磊,廖建新,陈俊亮. 基于签约信息的智能业务鉴权系统的设计与实现[J]. 北京邮电大学学报, 27(增刊):98-101.
[10] 鹿晓文,陈援非,朱珍民,刘向前,王加连. UPnP-Sec:一种安全UPnP协议的设计与实现[R]. 北京:中国科学院计算机研究所,2-8.