一种基于模糊测试技术的UPnP协议测试方案
2019-04-18路晓明吴君轶徐志辉
◆魏 凡 姜 楠 路晓明 吴君轶 徐志辉
(1.北京工业大学 北京 100124;2.北京邮电大学 北京 100876;3.中移(杭州)信息技术有限公司安全产品部 浙江 310012)
0 引言
UPnP(Universal Plug and Play)协议是微软提出并推广的一种用于 PC机和智能设备的常见对等网络连接的体系结构[1]。UPnP协议主要用于智能设备的互联互通,使用UPnP协议时不需要设备驱动程序,在无需任何配置的前提下实现设备的发现、声明和服务调用等功能。
随着物联网设备的增加,UPnP协议的广泛使用,应用UPnP协议的一些设备的许多安全隐患逐渐暴露了出来。UPnP设备主要存在以下安全隐患:
(1)安全传输问题
UPnP协议的数据包一般以明文传输,攻击者可以轻松获得UPnP协议的通信信息。
(2)访问控制不当问题
UPnP网络中有两种节点——UPnP设备与 UPnP控制点,UPnP设备将提供服务给控制点使用。一般而言UPnP设备只希望给某些特定的控制点提供服务,而UPnP设备缺乏对UPnP控制点的认证,这导致攻击者无须任何凭证随意调用UPnP设备的服务。
(3)字符串处理不当问题
UPnP设备未对远程调用的数据包中的某些字段值进行检验,可能出现整数处理不当、堆/栈溢出和格式化字符串漏洞等问题,以上漏洞均可能导致设备异常(UPnP服务崩溃或设备崩溃),甚至可能导致攻击者可以在设备上执行任意代码。
关于UPnP协议的安全问题,许多专家学者已做过研究。针对UPnP协议的安全传输问题,文献[2]提出了一种由安全控制台来对设备进行权限控制、设备和控制点之间进行加密传输的安全协议,文献[3]设计并实现了一套安全的协议 UPnP-Sec;针对UPnP访问控制问题,文献[4]提出了一个带鉴权服务的家庭网关设备架构,文献[5]讨论了UPnP技术的用途和设备安全策略,分析了UPnP与Window XP安全缺陷之间的关系及解决策略。现有的研究大部分在对UPnP网络的实现与改进上,仅有文献[6]从固件角度对网络设备的UPnP协议安全进行分析,提出了一种基于固件分析的模糊测试技术。
本文主要对UPnP设备的访问控制不当漏洞、整数处理不当、堆/栈溢出和格式化字符串漏洞进行研究,设计出一种基于模糊测试技术的 UPnP协议测试方案,并根据该方案设计并实现了UPnP协议模糊测试工具。
1 模糊测试技术
1.1 简介
在安全测试中,模糊测试(Fuzzy testing)是一种通过向测试对象发送半畸形数据并监控测试对象的异常来发现测试对象的漏洞的测试技术[7]。模糊测试是一种基于黑盒或灰盒的测试技术,与传统的渗透测试技术不同的是,模糊测试的核心思想是利用带有攻击性的畸形数据,用于触发设备的各种漏洞,因此使用模糊测试技术使得漏洞的自动化挖掘成为可能。
1.2 模糊测试流程
如图1,模糊测试流程主要分为四步:数据生成;数据输入;异常监控;异常判定[8]。数据生成指的是带有攻击性的畸形数据的生成,数据生成决定着模糊测试的结果,是模糊测试的核心。数据输入指的是将畸形数据输入到测试设备。异常监控指的是在数据输入后,对测试设备的状态进行监控,异常监控决定着模糊测试的准确率。最后进行异常判定,对监控到的异常进行判定,得到测试结果。
1.3 数据生成的主要方法
1.2节提到,模糊测试的核心是数据生成,一般而言,目前的数据生成主要有两种方法:基于变异的数据生成,或者是基于生成的数据生成[9]。基于变异的数据生成方法是通过变异的方法
生成新的测试数据,这种数据生成的方式比较简单,但测试效率比较低,因为这种方式生成的数据有一定概率被测试设备丢弃,从而无法到达测试效果。基于生成的数据生成方法是基于对已有协议或数据的分析,再去生成随机数据,这种测试方法大大提高了测试效率,但对模糊测试工具的开发人员水平要求较高,有一定的测试难度。
图1 模糊测试流程
1.4 UPnP协议模糊测试存在的问题
使用传统的模糊测试方案测试应用UPnP协议的设备时,存在以下问题:
(1)UPnP设备的协议数据报文是由UPnP设备制造商决定,不同设备的协议数据报文不同,因此传统的数据生成方式不能满足UPnP协议模糊测试的需求,大部分测试数据被设备丢弃,测试效率比较低;
(2)UPnP设备作为一种物联网设备,UPnP往往是其提供的一种服务,UPnP服务的异常不等于设备异常,因此如何对UPnP服务的异常进行判定是问题所在。
必须解决以上两个问题才能保证协议测试的高效性和自动化进行,下面提出的测试方案将解决以上问题。
2 基于模糊测试的UPnP协议测试方案
2.1 UPnP协议脆弱点分析
一般来说,本方案的测试点由协议的脆弱点决定,这里的脆弱点指的是各种实现该协议的设备易发生安全漏洞的协议字段。本方案将使用基于已知漏洞特征的测试方法,这种方法将有效提高UPnP协议测试的效率,因为历史上出现过漏洞的协议字段往往依然存在漏洞[10]。我们在著名漏洞库 CVE[11](Common Vulnerabilities and Exposures)上对UPnP协议进行漏洞调研得知,最早的与UPnP协议有关的漏洞可追溯至2001年9月27日,从2001年9月27日至2018年8月25日,CVE上共有64个与UPnP协议有关的漏洞。其中缓冲区溢出的漏洞有27个,访问控制不当的漏洞有20个,拒绝服务漏洞有6个,其他漏洞有11个。通过对这些漏洞的分析与研究,我们发现UPnP协议的脆弱点主要集中在下面几个方面:
(1)访问控制不当
UPnP设备的服务无需任何认证即可远程调用。
(2)NOTIFY和M-SEARCH导致的缓冲区溢出
接收NOTIFY和M-SEARCH数据包的设备和控制点未对其中的Location字段长度进行检验,导致缓冲区溢出漏洞。
(3)缓冲区溢出及拒绝服务漏洞
UPnP设备未对控制点发来的SOAP远程调用数据包中的某些字段进行检查,导致拒绝服务或缓冲区溢出。
其中缓冲区溢出漏洞和拒绝服务漏洞可通过模糊测试进行挖掘,访问控制相关的漏洞可先用工具进行分析后人工挖掘。
2.2 畸形数据包的构造
畸形数据包的构造是模糊测试的关键,直接决定着模糊测试的效率。畸形数据包由正常数据包变异而来,本测试方案将使用随机和基于协议脆弱点的混合变异进行模糊测试,这种测试方法既保证了模糊测试的随机性,又提高了测试的针对性。
畸形数据包的构造主要在于正常数据包字段的变异,字段变异的策略有超长字符串、格式化字符串等,下面以NOTIFY消息数据包和SOAP方法调用数据包为例进行说明。
NOTIFY数据包是UPnP设备广播的数据包,UPnP控制点将接收并解析该数据包。NOTIFY数据包的Location字段为字符串类型,用于标识UPnP设备的描述文件地址,控制点接收到此消息会去Location字段指定的URL获取设备描述,下面畸形数据包变异了Location字段:
控制点使用SOAP方法调用UPnP设备提供的接口方法,不同的接口方法 SOAP报文结构不同,下面展示了对路由器的AddPortMapping方法中NewRemoteHost字段的变异:
2.3 UPnP协议测试方案
根据2.1节得到的UPnP协议脆弱点,我们设计了如图2测试流程。
其中,扫描器实现了对待测设备的扫描,扫描得到待测设备的设备信息并将其写入数据库;监控器对待测设备的异常进行监控,并将异常反馈到检测核心;检测核心根据数据库中的设备信息,对待测设备进行模糊测试;漏洞验证模块主要对已检测出的漏洞进行验证,保证测试结果的准确性。
2.4 测试工具的实现
我们使用 python语言实现该模糊测试工具,该测试工具在Linux下运行,只需将该测试工具和被测设备连入同一网段即可进行测试。该工具可自动获取 UPnP设备信息并完成模糊测试,测试得到的UPnP设备漏洞将存入数据库并展示给测试人员,实现了完全的自动化测试。
图2 协议测试流程
针对UPnP的两类节点(UPnP设备和控制点)的测试方法不同,由于UPnP控制点是无法提供服务(没有服务端口),我们在UPnP组播网络中对其进行模糊测试,使用ping技术进行异常监控;对于UPnP设备,我们先获得其UPnP端口和提供的服务,而后根据获得的服务进行模糊测试,使用端口检测技术进行异常监控。在整个测试流程中,除了访问控制类的漏洞需人工进行测试,其他测试均可自动进行。其中,模糊测试和设备监控同时进行、互不干扰,保证了异常监控的准确性和实时性。
3 UPnP模糊测试工具的设计与实现
3.1 测试工具系统架构设计
根据我们的UPnP协议模糊测试方案,我们设计了图3的系统架构:
图3 测试工具系统架构
3.3 测试结果
我们使用该模糊测试工具对多款UPnP设备进行了测试,发现多个安全漏洞,表1为测试结果(考虑部分漏洞未公布,对未公布漏洞的路由品牌未列出):
表1 UPnP设备测试结果
模糊测试得到漏洞的某品牌路由器1和某品牌路由器2的漏洞信息如下:
(1)某品牌路由器 1接口方法均可未授权进行访问,其实带参数的接口方法若参数中含有“>>x00”字符会导致UPnP服务崩溃(无法自动重启)产生拒绝服务;
(2)某品牌路由器 2接口方法均可未授权访问,其中“AddPortMapping”方法中的“NewPortMappingDescription”字段为空时导致UPnP服务崩溃(自动重启)。
4 结束语
本文对UPnP协议进行了详细的分析和研究,通过漏洞调研明确了UPnP协议的测试点和测试方法,最终设计出UPnP协议测试方案,并使用python语言实现了自动化的UPnP协议模糊测试工具。我们使用该工具对多款UPnP设备进行了测试,发现部分UPnP设备存在安全漏洞,测试结表明该模糊测试工具具有可用性和高效性。