Change 嘶吼专业版
今年早些时候,Chromecast流媒体加密狗、谷歌家庭设备和智能电视的用户都强制收获了一条来自youtube PewDiePie频道的推广信息。这次劫持事件据说是由管顶级流量的UP主们的一场粉丝争夺战引发的。报道称,***利用了配置不当的路由器,这些路由器启用了通用即插即用(Universal Plug - and - Play,简称UPnP)服务,导致路由器将公共端口对向私有设备,并向公共互联网开放。
许多设备(如照相机、打印机和路由器)都使用UPnP协议,使其能够自动发现及检查本地网络上的其他设备,并能相互通信来共享数据或流媒体。但在它带来便利的同时也带来了安全隐患,比如从***者控制设备到绕过防火墙保护等等,不一而足。
在上述事件之后,我们调查了家庭网络中与UPnP相关的事件,发现许多用户的设备中仍然使用UPnP协议。
表1.启用了UPnP的主要设备类型
今年1月份,我们检测到有76%的路由器启用了UPnP协议,还有27%的媒体设备(例如DVD播放器和媒体流设备)也启用了UPnP。一旦UPnP中的漏洞被***者利用,路由器或其他设备就很容易变为代理,进而沦为混淆僵尸网络、分布式拒绝服务***(DDoS)或垃圾邮件活动的源头,并且让人几乎无法跟踪恶意活动的执行情况。此前已有过此类案例,利用路由器UPnP协议中的漏洞使之被迫连接到端口,发送垃圾邮件或其他恶意邮件。
IoT僵尸网络Satori就曾因利用UPnP漏洞而臭名昭着。该漏洞(CVE-2014-8361)是Realtek SDK miniigd UPnP SOAP接口中的命令注入漏洞。2015年5月,与此漏洞相关公告发布,并提供了相应的缓解措施,但根据我们收集的最新数据,许多设备仍在使用较旧的、可能易受***的UPnP版本。
图1. Shodan中对UPnP检测的相关结果(2019年3月5日数据)
在线搜索引擎Shodan能呈现全球使用UPnP协议的设备的数量和分布情况。在扫描UPnP使用的标准端口1900后,我们检索出了1,649,719个设备。下表中列出了一些知名的UPnP库,MiniUPnPd和Custom(Broadcom的UPnP库)是大多数检索设备所使用的。
表2. Shodan显示结果中的前三个UPnP库(2019年3月5日数据)
UPnP相关的漏洞和家庭网络中的设备现状
通过我们自己的扫描工具,我们研究了家庭和其他小型网络环境中使用的UPnP库,并确定了可能导致设备容易受到***的因素。简而言之,我们发现大多数设备仍然使用旧版本的UPnP库,而这些UPnP库中存在的许多漏洞已被公布多年。
MiniUPnPd
我们的物联网扫描工具数据显示,启用UPnP的设备中有16%使用了MiniUPnPd库。 MiniUPnPd是一个知名的UPnP守护进程,用于NAT(网络地址转换)路由器提供端口映射协议服务。有趣的是,我们检测到安装了旧版本的MiniUPnPd的设备中,有24%在使用MiniUPnPd 1.0, 30%在使用MiniUPnPd 1.6,只有5%的设备使用MiniUPnPd 2.x版本(miniupnpd 2.1是最新版本)。
表3.MiniUPnPd各版本的使用比例
具有上述旧版本守护进程的设备必须进行更新,才能杜绝一些已知的高风险漏洞。例如,CVE-2013-0230是MiniUPnPd 1.0版本中的ExecuteSoapAction中基于堆栈的缓冲区溢出漏洞,允许***者执行任意代码;CVE-2013-0229是MiniUPnPd 1.4之前的一个ProcessSSDPRequest函数漏洞,它允许***者通过请求触发缓冲区的过度读取来引发拒绝服务(DoS);CVE-2017-1000494是MiniUPnPd 2.0版本之前的一个未初始化的堆栈变量漏洞,它允许***者发起DoS***(分段错误和内存损坏)。
Windows UPnP服务器
我们还发现,有18%的设备使用基于Windows的UPnP。这些设备,尤其是Microsoft Windows XP计算机(Windows NT 5.1),应检查是否已应用MS07-019补丁。(不过Windows XP在2014年4月已经寿终正寝,这意味着它不再受到微软的支持,安全问题也将得不到解决。)Windows XP自带的UPnP功能是开箱即用的,而该补丁能解决UPnP内存损坏漏洞CVE-2007-1204,(此漏洞允许远程***者在本地服务帐户上下文中运行任意代码)。
Libupnp(用于UPnP设备的可移植SDK)
用于UPnP设备的SDK(便携式软件开发工具包)libupnp是另一个众所周知的UPnP库,它能支持多种操作系统。根据我们的数据,检测设备中有5%在使用libupnp库包,虽然不占有很大比例,但我们注意到,具有该库的设备大多是1.6.18 / 1.6.19之前的版本(当前版本为1.8.4)。而在1.6.18之前版本里,unique_service_name函数中存在基于堆栈的缓冲区溢出漏洞(CVE-2012-5958),它允许远程***通过用户数据报协议(UDP)数据包执行任意代码。
结论
对于用户来说,要确定设备是否有UPnP相关的漏洞或者是否受到了感染是很棘手的。有些设备可能隐藏在NAT之后,这样即使存在漏洞,用户也不会当即看到风险所在。为了防止利用UPnP相关漏洞的***,用户应该确保他们的设备的更新。如果怀疑设备被感染,应该重新启动该设备,将其重置为原始工厂设置,或者为了谨慎起见,将其全部替换。除非网络需要在设备中启用UPnP功能,否则最好在设备允许的情况下禁用。然而,需要注意的是,关闭UPnP可能也会连带禁用一些功能,包括本地设备的依赖关系,或者需要忽略来自设备的请求。
家庭用户也可以遵循这些措施以增加安全性:
1、使用趋势科家庭网络的HouseCal工具扫描家庭网络,并检查哪些设备的UPnP端口1900处于打开状态。
2、转到设备的设置页面(例如路由器的设置页面)以禁用UPnP。
3、根据需要手动配置端口转发设置。