TP-LINK路由器缓冲区溢出0 day 漏洞

导语:IBM安全研究人员发现TP-LINK路由器存在缓冲区溢出漏洞,攻击者可以利用该漏洞远程控制路由器。

路由器已经成为我们日常生活的必需品,在家庭和办公室随处可见。人们依赖路由器进行通信、银行交易、网上购物等等。IBM安全研究人员Grzegorz Wypych对消费者使用的最广泛的互联网路由器TP-Link WR-940进行了分析,发现其中存在一个0 day缓冲区溢出漏洞,恶意第三方可以利用该漏洞远程控制路由器设备。

下面对该漏洞进行分析:


TP-LINK路由器缓冲区溢出0 day 漏洞


图1: TP-Link WR940

认证和控制

2018年9月,美国消费者协会发布报告称80%以上的路由器存在安全漏洞,因此研究人员对使用最广泛的路由器进行了安全性分析。

首先,研究人员分析了TP-Link WR940运行的软件和硬件信息,硬件版本是TL-WR940N hardware version 3和TL-WR941ND hardware version 6,运行的固件版本都是150312。

从该设备的软件安全性来看,对路由器的控制主要应用在用户用来配置路由器的web接口上。但是对接口的控制无法保护路由器,而且易被攻击者利用。比如,在系统工具/测试选项中,用户可以通过ping发送ICMP echo请求和响应包,即发送包到IPv4地址或主机名。面板的安全控制可能会限制字符的类型和数量,但是不会限制用户用Burp Suite代理来拦截和修改请求。

Bug by Bug

然后研究人员开始寻找一些通用的应用漏洞。研究人员首先检查了命令注入,因为ping这样的操作大多是使用Bash shell的。但是研究人员没有通过静态分析发现对系统的引用,然后研究人员检查了注入攻击场景。

研究人员发现当用户发送ping请求后,会在设备的console上限制一个消息,如下图所示:


TP-LINK路由器缓冲区溢出0 day 漏洞


图2: Ping请求调用路由器console上的消息

然后研究人员运行了Burp Suite带来来检查到ping服务的出GET请求。下图中可以看到请求的参数,图2的console消息中也有同样的参数。


TP-LINK路由器缓冲区溢出0 day 漏洞


图3: 到ping服务的GET请求

然后,研究人员启动IDA disassembler来查看字符串引用:


TP-LINK路由器缓冲区溢出0 day 漏洞


图4: IDA Pro上到ping服务的GET请求

可以直接挑战到引用的函数的地址:

# DATA XREF: sub_44C610+5E0↑o 

然后可以看到另一个消息块:


TP-LINK路由器缓冲区溢出0 day 漏洞


图5: IDA Pro中的消息块

语法是用Microprocessor without Interlocked Pipeline Stages(MIPS,无互锁装置的流水线微处理器)Assembly语言编写的,MIPS是用来与MIPS微处理器协作的,主要用于网关、路由器这样的嵌入式系统。

在MIPS中央处理器单元中:

· 函数参数是在寄存器$a0-$a3中传递的,如果某个函数的参数多于4个,就会被推进栈中。

· 寄存器$t9常被用作跳转地址的holder,常用jalr指令来加载内存地址并跳转到寄存器$t9。

· 调用的函数必须保存$s0-$sX寄存器,X表示$s类型的可用寄存器的最大数量。

· 返回的值保存在$v0 or $v1寄存器中。

经典缓冲区溢出

下面进入下一步分析。

从下图中可以看出printf函数接收到一个到console记录中出现过的字符串的指针。这里的参数被加载到$a0寄存器中。

然后,调用ipAddrDispose函数。它会加载到$a2寄存器,值为564(十进制),它也可以作为函数中的一个参数。下面看一下该函数:


TP-LINK路由器缓冲区溢出0 day 漏洞


图6: ipAddrDispose函数暴露缓冲区溢出问题

Strcpy函数调用是TP-Link httpd进程控制的开始,也是存在漏洞的二进制文件。这是一个经典的缓冲区溢出问题。

还函数会一个字节一个字节地复制接收到的输入,并保存到一个大小并不合适的缓冲区中。因此数据的大小会超过缓冲区的边界。

漏洞是可利用的

研究人员为该漏洞创建了PoC,证明了该漏洞是可以被利用的。

首先分析数据大小超过可用空间后会发生什么,因此研究人员将ping_addr参数修改为hold number 0x41,超过了缓冲区的大小。下图是ipAddrDispose函数为栈帧预留的224字节空间。


TP-LINK路由器缓冲区溢出0 day 漏洞


图7: ipAddrDispose为栈帧预留了224字节内容

因为栈中有224字节数据,因此研究人员发送300字节的A以分析缓冲区溢出的结果。研究人员用Burp Suite拦截了HTTP请求,并修改了ping_addr 参数。


TP-LINK路由器缓冲区溢出0 day 漏洞


图8: 发送300字节的A

根据console中出现的消息,研究人员猜测可能覆盖了返回地址$ra,并开始控制程序执行。

TP-LINK路由器缓冲区溢出0 day 漏洞


图9: 路由器console消息表明地址可能被覆盖

在编写漏洞利用之前,还要检查如果发送了太大的payload,哪些会被覆写。下面看以下位于/tmp文件夹的复制的核心内存信息:

研究人员想知道如果利用该漏洞的话是否可以控制寄存器,以及可以控制哪个寄存器。因此研究人员下载了复制的核心内存信息:


TP-LINK路由器缓冲区溢出0 day 漏洞


图10: 分析TP-Link路由器核心内存信息

因为路由器是MIPS架构的,因此下一步是使用gdb-multiarch来打开复制的核心内存信息。


TP-LINK路由器缓冲区溢出0 day 漏洞


图11: 使用gdb-multiarch打开核心复制的核心内存

然后就可以控制以下三个寄存器了:

· $s0;

·

$s1; and

· $ra.

因为$a0寄存器只引用了栈中的一个地址,因为研究人员只获得了部分控制权。而且漏洞利用发生在MIPS架构上,这与常见的web应用缓冲区溢出漏洞利用是不同的。

总结

美国消费者协会2018年发布报告显示有83%的WiFi路由器存在安全漏洞,其中许多都是开源漏洞,受影响的产品包含多个来自全球的知名品牌。路由器已经不再是一个简单的中继设备,路由器拥有自己的操作系统、软件,同时也有专属的漏洞。路由器的漏洞是非常常见的,可以归因于不同的因素,成本因素也是主要考虑因素之一。

路由器被黑会带来什么后果呢?路由器漏洞会导致用户数据被泄露或被攻击者用于构建僵尸网络或攻击其他主机。攻击者还可以利用路由器漏洞来监视用户、发送钓鱼信息,修改用户访问网站的数据。如果路由器感染恶意软件,就可能会变成僵尸网络的一部分。

TP-Link也发布了相应的补丁,研究人员建议用户尽快更新固件,下载链接:

TL-WR940Nv3: https://www.tp-link.com/pl/download/TL-WR940N_V3.html#Firmware

TL-WR941NDv6: https://www.tp-link.com/pl/download/TL-WR941ND.html#Firmware


分享到:


相關文章: