作者:启明星辰ADLab
原文链接:https://mp.weixin.qq.com/s/OBgJJ3UqENhw92CJ2wE9pQ
2020年6月8日,安全研究员Yunus Çadirci公布UPnP(通用即插即用)协议漏洞公告(CVE-2020-12695),并将其命名为CallStranger漏洞。该漏洞允许攻击者绕过内网的数据防泄露系统(DLP)进行数据逃逸,可导致敏感数据泄露,并且可对设备所在内部网络进行扫描,甚至能劫持设备进行分布式拒绝服务(DDOS)攻击。根据CallStranger漏洞原理,启明星辰ADLab以某款智能电视作为测试目标,对CallStranger漏洞的危害性进行了演示分析。
与之前的UPnP漏洞不同,CallStranger漏洞存在于协议设计中,因此该漏洞影响几乎所有支持UPnP的设备,包括Windows 10所有版本、路由器、访问接入点、打印机、游戏机、门铃对讲机、媒体应用程序和设备、摄像头、电视机等。根据SHODAN和ZoomEye的搜索结果,至少有数以百万计的在线设备受到影响。
UPnP全称为Universal Plug and Play,即通用即插即用,UPnP允许各种网络设备在没有任何特殊设置或配置的情况下进行通信,使设备彼此可自动连接和协同工作。例如新的打印机插上电并连接网络之后,局域网内的计算机就知道了打印机的型号等信息,方便进行驱动安装。
在UPnP协议规范中有一个非常重要的功能模块,叫做事件(Eventing)。在UPnP服务进行的时间内,只要设备用于UPnP服务的变量值发生变化或者模式发生了改变,就会产生一个事件,随之向整个网络进行广播。或者用户可以事先向UPnP设备发送订阅请求,保证UPnP设备及时地将事件传送过来。
UPnP Device Architecture 2.0[1]中关于UPnP的NT与CALLBACK订阅模块有如下格式:
publisher path一般为订阅的服务,以GENA格式存放在设备的某个XML文件中,类似下图。
CALLBACK的值一般为回调地址的URL。NT取upnp:event表示订阅事件。
UPnP协议规范文档中提到:CALLBACK是必填区域,所填信息为发送事件信息的URL。一般情况下为UPnP供应商指定。如果其中定义了不止一个URL,设备会按顺序尝试连接,直到有一个连接成功。每个URL一般为HTTP协议(即前缀为”http://”)。设备不得以任何方式截断这些URL。如果内存不足以存储所有的CALLBACK URL,设备会拒绝订阅。
整个订阅流程大概可以简化如下图。
很显然,该协议并没有对CALLBACK传入的URL进行限制和规范,也就是说,CALLBACK URL是攻击者可控的。
下图为Intel UPnP SDK中检查CALLBACK URL的相关代码,create_url_list函数仅仅检查了URL是否合法,并没有确定其是否合理。
CallStranger漏洞所造成的危害可以分三个方面:DDoS攻击、数据逃逸和端口扫描。其中造成的DDoS攻击可以分两种,SYN洪水攻击和TCP反射放大攻击,如下图所示。
4.1 SYN洪水攻击
假设我们已经通过一些方法(如在局域网广播等)获得了某些设备UPnP服务的eventSubURL,下面就可以向UPnP设备发起一项订阅服务,格式如下:
-
SUBSCRIBE eventSubURL HTTP/1.1
-
NT: upnp:enent
-
Callback: delivery URL
-
Host: upnp设备:upnp服务端口
如前文协议规范中提到的,若CALLBACL Value中定义了不止一个URL,则会按顺序尝试TCP连接,直到有一个连接成功。那么攻击者可在CALLBACK Value中精心构造多个URL,使每一个都无法连接成功,这样UPnP设备就会用多个SYN包依次对每个URL尝试TCP握手。假设攻击者可以操控很多个设备,就会导致受害设备遭受DDoS攻击。
SYN数据包的数量根据设备操作系统和配置的不同而不同,利用某品牌智能电视对受害设备进行SYN洪水攻击测试,测试结果如下图所示。
该智能电视每收到一个CALLBACK Value就会发送8个SYN数据包尝试连接受害设备。若我们每个CALLBACK的URL值为25字节,那么带宽放大因子便可以达到8*60/25=19.2。因为CALLBACK Value的个数是没有限制的,所以理论上是可以无限放大的。
4.2 TCP反射放大攻击
Windows Media Player在播放视频时也有相应的UPnP服务,我们获取到的UPnP服务列表如下:
我们选取其中一项服务来测试一下。攻击者只需要发送210字节订阅包,如下图。
受害设备之后就会收到近700字节的数据包,放大因子达三倍多。其放大效果一般与UPnP设备的操作系统和厂商配置有关。
4.3 数据逃逸
一般情况下,企业内部网络都有不同的安全等级划分。当攻击者渗透到企业内网时,若内网开启数据泄露防护系统,无法将获得的敏感数据传输出去,此时UPnP设备会是一个很好的跳板。
在RFC7230的3.1.1节[2]中,并没有对Request Line的长度做任何限制,这使得攻击者可以将数据通过Callback的URL值传输出去。如下图,某品牌智能电视一次请求就传输了2500KB的数据。
4.4 端口扫描
如前文提到的,若CALLBACK定义了不止一个URL,则会按顺序尝试TCP连接,直到有一个成功,那么这个规则显然也可以用于端口扫描,如下图所示,假设攻击者需要扫描IP为192.168.1.13的555端口是否开启,那么攻击者只需要将某个可以监控的URL放置在后即可确认,若攻击者收到连接请求,则端口未开启,反之,则开启。
可采用如下措施进行漏洞缓解:
-
检查可疑设备,如果没有必要,则关闭UPnP端口。
-
在网关等设备中审计NOTIFY HTTP数据包。
在最新更新的UPnP协议规范[1]4.1.1节中,可以看出开发者限制了订阅事件的源IP和目标IP都必须在内网中,这从一定程度上修复了该漏洞。
本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1258/