摘要:此类漏洞存在于DIR-823G中,在实际测试访问上述HNAP API接口函数时,我们发现接入WLAN的用户无需认证可以远程调用上述API接口函数,所以,攻击者通过调用其中的一些敏感函数如GetClientInfo、SetWanSettings、SetFactoryDefault、SetWLanRadioSettings,能够达到信息窃取、DNS劫持、重置出厂设置、开启Guest Wi-Fi等越权访问类漏洞攻击,详细漏洞原理参见https://github.com/leonW7/D-Link,如下以其中典型的CVE-2019-7390举例说明:。研究人员共发现DIR-823G上6个安全漏洞,其中包含4个越权访问类型、2个命令注入类型漏洞,内网攻击者或者被钓鱼的正常用户,可直接越权修改DNS配置、开启Guest Wi-Fi网络、嗅探连接Wi-Fi的用户设备信息、重置路由器,直至远程执行任意代码。

D-Link 路由器 HNAP 协议系列漏洞披露

一、摘要

当前在“万物互联”的背景下,IoT设备应用日益流行,也频繁爆出高危安全漏洞。从致瘫北美大半个网络DNS服务的Mirai僵尸网络[1]到动辄导致数十万摄像头暴露的安全漏洞[2][3],可见以Wi-Fi路由器、摄像头、智能家居为代表的IoT设备已经俨然成为DDOS攻击、隐私泄漏的重要源头,对互联网安全构成严重威胁。近期,“奇安信技术研究院”团队在IoT安全方面开展了持续研究,选取主流IoT品牌D-Link的多款在用路由器进行漏洞挖掘,开发了自动化测试工具集,在短时间内,高效地发掘了14个高危漏洞,可造成越权访问、DNS劫持、远程命令执行等严重危害。在此基础上,研究人员结合DNS Rebinding技术,实现了穿透攻击处于内网的路由器,更进一步对此类漏洞在常见应用场景下的攻击效果进行评估,结果显示此类安全威胁广泛存在,目前所有漏洞均得到CVE确认,并在第一时间通知相关厂商。

二、背景

HNAP协议(Home Network Administration Protocol)是思科公司提出的基于SOAP实现的网络管理协议,用户通过访问该协议的接口可以远程识别、配置、管理网络设备,普遍应用于智能家居、SOHO办公等中小型网络中[4]。HNAP协议在路由器上应用广泛,同时也带来了不少安全问题,早在2014年就爆发了针对Linksys路由器上HNAP协议攻击的“The Moon”蠕虫,影响数十个型号[5];D-Link设备也广泛使用了HNAP协议,历史上也曾爆过认证绕过、远程命令执行等高危安全问题[6][7]。近期,奇安信技术研究院的研究人员选取市场上常见的DIR-823G、DIR-878等D-Link路由器作为分析对象,发现多个新的安全问题。所研究设备对应的固件为最新版本(FW1.02B03、FW1.12B01),其官网的产品和固件最新信息如下所示:

D-Link 路由器 HNAP 协议系列漏洞披露

D-Link 路由器 HNAP 协议系列漏洞披露

(更新于2019-06-05)

三、漏洞挖掘与安全披露

挖掘过程:研究人员首先通过逆向分析和动态调试澄清路由器对HNAP协议的实现架构和处理流程,其中DIR-823G在goahead完整实现了全部功能,DIR-878在lighttpd中通过调用librcm.so、rc模块实现。下图所示为DIR-823G处理HNAP的入口函数sub_42383C及功能函数表off_58C560:

D-Link 路由器 HNAP 协议系列漏洞披露

D-Link 路由器 HNAP 协议系列漏洞披露

在此基础上,综合使用二进制静态分析和动态Fuzzing技术,发现了DIR-823G、DIR-878存在多个命令注入、越权访问、缓存区溢出漏洞,目前总计申请获得了14个CVE编号。其中DIR-823G没有开启对HNAP API的访问认证,导致大量敏感API暴露,越权问题普遍存在,更严重的是数个API函数使用中存在命令注入,导致攻击者只需内网用户权限即可攻击网关路由器,获取路由器的root shell,攻击门槛低,结合钓鱼式植入攻击即可实现大范围传播的蠕虫病毒;DIR-878虽然开启了HNAP API访问认证,但是API函数普遍存在命令注入问题,进一步的Fuzzing过程中还发现了多处缓存区溢出、拒绝服务等安全问题。

安全披露流程:研究人员在发现漏洞的第一时间通过厂商官网、安全服务邮箱报告了相关漏洞情况,并积极沟通修复方法。目前DIR-823G的漏洞披露已经收到厂商的明确回复,具体的更新固件尚未发布。基于此,出于安全考虑,研究人员在披露过程中并未公布完整利用代码,技术讨论与申报CVE的截图中也均掩盖高危漏洞利用时的敏感路径和参数信息,希望厂商及时修复并更新发布固件。

结合DNS Rebinding的漏洞危害效果评估(附视频链接)

由于路由器通常应用在局域网中,在以往的攻防对抗中,其安全漏洞的攻击面很难直接暴露在公网上,因此,攻击者越来越多的通过钓鱼植入等方式诱导内网用户下载执行攻击代码,从而从内部控制路由器,反向连接到公网上的攻击者服务器,实现穿透攻击。其中DNS Rebinding技术即可以很好的达到这种打入局域网内部的攻击效果,近年越来越受到攻击者的青睐,接下来我们结合这项技术展示上述路由器漏洞可能带来的安全危害。

第一步,选取上述漏洞中的DIR-823G漏洞(CVE-2019-7297),结合DNS Rebinding技术演示漏洞利用过程:

该命令注入漏洞的攻击门槛低,只需要利用代码在WLAN中运行即可。攻击者可通过发送内嵌恶意代码的网页URL链接给WLAN网内用户,网页中恶意代码将多次请求攻击者的远程DNS服务器解析主机名,触发DNS Rebinding,重定向攻击控制网关路由器。由此实现,只需要一个URL链接即可拿下路由器的攻击效果,具体过程如下图所示:

D-Link 路由器 HNAP 协议系列漏洞披露

Step1:攻击者发送恶意URL链接 http://dnsrebind.smilehacker.net/dns_hijacking.html;

Step2:受害者点击链接,受害者浏览恶意网页,网页JS代码攻击篡改路由器上的DNS服务配置;

Step3:内网其他主机用户访问重要网站(例如login.taobao.com)被劫持。

测试环境下攻击视频演示:

https://research.qianxin.com/wp-content/uploads/2019/06/dns_rebind.mp4

攻击原理解析:

1、攻击者发送恶意URL链接 http://dnsrebind.smilehacker.net/dns_hijacking.html;

2、受害者点击该链接,此时DNS server 将主机名解析为攻击者的web服务器IP;

3、网页中视频播放一分钟左右,JS脚本会POST请求http://dnsrebind.smilehacker.net/HNAP1/;

4、此时DNS server将响应客户端的第二次对dnsrebind.smilehacker.net的解析请求,返回地址为路由器网关IP192.168.0.1, 漏洞攻击数据包将送达到路由器, 攻击成功,且不会触发浏览器跨域限制;

5、视频中的攻击载荷修改了路由器的DNS服务配置,将淘宝登陆域名login.taobao.com指向了攻击者的仿冒网站,达到了DNS劫持的目的。

(DIR-878的命令注入漏洞类似,但是需要破解路由器web管理员的登陆密码,利用难度更高)

第二步,危害影响效果评估:

上述攻击中,两次DNS请求的间隔时间取决于浏览器中DNS记录缓存刷新时间,只要在这个攻击潜伏的窗口期内,用户没有关闭浏览器,即可攻击成功!为了尽可能缩小这个时间窗口期,在攻击者控制的DNS server中设置DNS记录的生命周期 TTL值为0,并挑选常见的个人用户主机浏览器配置结合下载执行的攻击负载,进行攻击窗口期测试,结果如下(系统、浏览器均为默认配置):

首先,以Windows 10 + Chrome举例说明,如下攻击者web服务器Apache日志记录显示:

D-Link 路由器 HNAP 协议系列漏洞披露

受害用户的IP地址222.76.49.153第一次访问了仿冒网站的钓鱼网页exec_wget.html(内嵌有执行下载木马命令的攻击负载),日志显示,间隔102秒之后内网中的攻击生效,路由器执行wget命令,访问并下载了恶意后门backdoor。由此可见,虽然DNS服务器中解析记录的TTL设置为0,但是由于浏览器、操作系统、本地路由器DNS Server等存在不同程度的DNS记录缓存,所以导致攻击不能立即生效,需要一个时间窗口。

接下来,研究人员挑选常见操作系统、浏览器、路由器DNS设置等组合的应用场景,对攻击生效的时间窗口进行多次测试,结果如下:

D-Link 路由器 HNAP 协议系列漏洞披露

上述结果中,在不同的浏览器和操作系统配置下,攻击所需要的时间窗口大小不同,多数情况下只要一分钟左右,可见此类漏洞结合DNS Rebinding的钓鱼攻击方式存在较高的成功概率。

上述MACOS + Safari应用环境下的测试日志:

D-Link 路由器 HNAP 协议系列漏洞披露

视频演示:

https://research.qianxin.com/wp-content/uploads/2019/06/rebinding_Mac.mp4

四、漏洞详情

研究人员共发现DIR-823G上6个安全漏洞,其中包含4个越权访问类型、2个命令注入类型漏洞,内网攻击者或者被钓鱼的正常用户,可直接越权修改DNS配置、开启Guest Wi-Fi网络、嗅探连接Wi-Fi的用户设备信息、重置路由器,直至远程执行任意代码;在DIR-878上共发现了8个命令注入漏洞,具备登陆权限下可以远程执行命令。具体漏洞详情如下:

1、越权访问类型漏洞(CVE-2019-7388~7390,CVE-2019-8392)

此类漏洞存在于DIR-823G中,在实际测试访问上述HNAP API接口函数时,我们发现接入WLAN的用户无需认证可以远程调用上述API接口函数,所以,攻击者通过调用其中的一些敏感函数如GetClientInfo、SetWanSettings、SetFactoryDefault、SetWLanRadioSettings,能够达到信息窃取、DNS劫持、重置出厂设置、开启Guest Wi-Fi等越权访问类漏洞攻击,详细漏洞原理参见https://github.com/leonW7/D-Link,如下以其中典型的CVE-2019-7390举例说明:

CVE-2019-7390:越权修改DNS配置,实现DNS劫持

通过调用HNAP接口的SetWanSettings函数,可以直接修改DNS设置,如下图所示,攻击前的DNS设置:

D-Link 路由器 HNAP 协议系列漏洞披露

图中可见其中的静态DNS设置并没有开启。未授权的攻击者远程访问SetWanSettings函数修改该配置,发送HNAP请求,具体数据报文格式如下:

POST请求头:

D-Link 路由器 HNAP 协议系列漏洞披露

图中可见其中的静态DNS设置并没有开启。未授权的攻击者远程访问SetWanSettings函数修改该配置,发送HNAP请求,具体数据报文格式如下:

POST请求头:

D-Link 路由器 HNAP 协议系列漏洞披露

Body以及返回结果:

D-Link 路由器 HNAP 协议系列漏洞披露

返回结果显示设置成功,路由器对应的功能界面显示攻击请求后的DNS服务器已被修改为192.168.3.1:

D-Link 路由器 HNAP 协议系列漏洞披露

命令注入类型漏洞(CVE-2019-7297~7298、CVE-2019-8312~8319)

此类漏洞在两款路由器中均存在,多处HNAP功能函数在调用系统shell执行相关命令时,没有严格过滤外部输入参数,导致命令注入漏洞,漏洞详细信息可参见https://github.com/leonW7/D-Link、https://github.com/lieanu/vuls/tree/master/dlink/DIR-878,现以CVE-2019-7297举例说明:

漏洞原理:该漏洞位于DIR-823G的/bin/goahead,GetNetworkTomographyResult函数对应的处理流程sub_442260,该函数的具体代码如下:

D-Link 路由器 HNAP 协议系列漏洞披露

在调用system之前,Ping操作shell命令经过了多次字符串格式化处理和拼接,相关伪代码摘取出来如下所示:

int32_t str = &v5;

memset(str, 0, 256);

snprintf(str, 6, (int32_t)"ping ");

strncat(str, str2, strlen(str2));

strcat(str, (int32_t)" -c ");

int32_t str4 = &v3;

sprintf(str4, (int32_t)"%d -w %d

相关文章