本文作者: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)
由上图可知,该固件的熵非常高,表明该固件很有可能是经过加密或混淆的(加密的可能性更大),导致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
楼主残忍的关闭了评论