D-Link-DIR-850L路由器分析之获取设备shell

无线安全 2019-11-10

本文作者:cq674350529

在对 IoT 设备进行安全分析时,通常设备对我们而言像个"黑盒子",通过给它提供输入然后观察它的反馈输出,而对设备的"内部"并不了解。如果能够通过某种方式进入设备"内部",获取到设备的 shell,则会对后续的分析提供极大的便利。

针对 IoT 设备,常见的获取设备 shell 的方式有以下几种:

1、利用设备自身提供的 telnet 或 ssh 服务;

2、利用设备PCB板上预留的调试接口,如 UART;

3、利用设备存在的已知漏洞,如命令注入漏洞;

4、利用设备提供的本地升级(或更新)机制。

这里主要关注第 4 种方式,即利用设备提供的本地升级(或更新)机制来获取设备的 shell。目前,很多厂商生产的设备都具备升级(或更新)的功能,包括在线升级和本地升级等方式。如果在升级功能的具体实现过程中缺乏对固件文件的有效校验,则可以利用这一"缺陷",通过对固件文件进行修改及重打包,实现获取设备 shell 的目的。

使用该方法的前提:

(1) 能够获取到固件文件;

(2) 能够成功对固件进行解压及重打包。

有一些设备同时支持在线升级和本地升级两种方式,其中在线升级机制做得比较完善,但本地升级机制可能存在缺陷。对于本地升级机制存在的缺陷,可能有人认为危害很小,毕竟只能影响自己的设备,但其可能存在以下两个"隐患":

1、"软件源"污染:有人通过对固件进行修改及重打包后,将其发布到网上,而其他人下载了该固件文件,然后对设备进行升级更新;

2、"暴露"设备:利用本地升级机制的缺陷,可以进入设备"内部"对设备进行更深入的分析,发现设备存在的安全缺陷。

有些设备的在线升级(或更新)机制可能也存在缺陷,此时其危害会更大。

下面以 D-Link DIR-850L 路由器为例,介绍如何利用设备的本地升级机制来获取设备的 shell。

固件初步分析

从 D-Link 官网下载DIR-850L型号的路由器固件DIR850LB1_FW221WWb01.bin (截止到撰写本文时的最新版本,对应硬件版本为B1),然后利用Binwalk工具对其分析,如下。

$ binwalkDIR850LB1_FW221WWb01.bin 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------

由上可知,采用Binwalk工具没有任何输出。利用Binwalk工具计算一下该固件的熵,结果如下。

$ binwalk -E DIR850LB1_FW221WWb01.bin 

DECIMAL       HEXADECIMAL     ENTROPY
--------------------------------------------------------------------------------
0            0x0             Rising entropy edge (0.995199)

img

由上图可知,该固件的熵非常高,表明该固件很有可能是经过加密或混淆的(加密的可能性更大),导致Binwalk工具分析提取失败,因此需要对该固件的加密方式进行分析。

简单地说,一个系统越是有序,信息熵就越低;反之,一个系统越是混乱,信息熵就越高。 Binwalk工具的作者曾介绍过熵、加密和混淆等内容,更多内容可参见文末的相关链接。

固件加解密分析

在 Pierre 2017 年的博客 《Pwning the Dlink 850L routers and abusing the MyDlink Cloud protocol》

https://pierrekim.github.io/blog/2017-09-08-dlink-850l-mydlink-cloud-0days-vul


本文由 信安之路 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论