智能硬件安全

本文作者:i春秋作家——icqb32d3a26

1: 前期准备:

(1) 路由器固件

一般获取固件的方法有以下几种

  • 官方网站根据对应版本下载(√),点击下载
  • 在点击更新固件时抓取对应的更新固件链接
  • 拆开路由器,找到flash芯片后,通过热风枪取下flash芯片,使用编程器读取
  • 通过uart串口进入路由器调试界面,进行flash的备份

(2) binwalk工具

https://github.com/ReFirmLabs/binwalk


	

2: 固件信息提取


	

(1) 解压并用binwalk获取固件一些信息解压

1.png

binwalk获取信息

2.png

(2)从binwalk的结果,我们可以得知tenda这一个固件有trx header和lzma压缩后的数据组成。关于trx header的结构可以参考文章最后的参考链接,
下面使用通过binwalk -e解包


	

如图所示,解包结果如下

3.png

(3)进入到对应提取后的目录查看提取后的文件,对lzma压缩后的数据解压后得到1C这一个文件,再对1C进行binwalk操作。

如图所示,这一次binwalk返回足够多的信息,我们可以了解到这一个tenda路由器使用eCos小端的嵌入系统,在binwalk的结果中我们,我们看到还有一些html文件。

4.png

3: 对解压后的固件镜像再次进行提取(1)解压后的固件再次提取


	

如图所示,提取结果如下

5.png

但是我们可以发现,提取后的每一个文件都是data,并不是我们已知的类型,这到底是肿么回事?

我们查看具体的一个xml文件看一下,可以看到这并不是一个正常的xml文件,其中还混杂这其它二进制数据,应该是binwalk在处理xml或者html这类文件时,无法像其它文件一样通过文件头来确定整个文件的大小,github上也有对应的issue在讨论。

6.png

7.png

(2)如何继续分析
思路:

  • 寻找另外一个能够更好处理xml和html数据的工具进行提取
  • 分析路由对应cfe如何对镜像进行处理
  • 通过正则查找脚本语言相关的代码段进行分析

(3) 我们采用最简单的方法,通过正则查找脚本语言相关的代码段进行分析
Step 1. 使用strings命令将解压后的1C字符串输出到文本

strings 1C > tenda.txt

Step 2. 对应的这款tenda路由器使用asp脚本语言,我们可以通过查找<%xx%>这样的asp代码片段

grep -e "<%.*%>" tenda.txt

如图所示,asp代码片段全部用于在js中初始化一些关于路由器的参数值,没有相关的敏感信息

8.png

Step 3. 查找tenda路由器中的cgi处理程序,是否有一些隐藏的链接。

grep -e "cgi" tenda.txt

9.png

获取到的信息

/cgi-bin/upgrade

/cgi-bin/DownloadCfg/RouterCfm.cfg

/cgi-bin/UploadCfg

从命名上来看,我们可以得知,upgrade是用来更新固件的、DownloadCfg是用来下载配置文件、UploadCfg是用来上传配置文件的,我们测试下直接访问/cgi-bin/DownloadCfg/RouterCfm.cfg,是否能下载路由器的配置文件。

10.png

成功下载路由器的配置文件,文件中包含拨号连接的账号信息。

11.png

4: 现网案例查找

在路由器页面里面,我们可以通过js的一些特征作为搜索关键字

12.png

fofa中搜索

13.png

公网的一些案例

14.png

15.png

5:总结

也许一个信息泄露漏洞不能代表什么,但是却能够在你继续前行的道路给你力量。对固件静态分析也许也会有些收获,所以不拘泥于分析方法,多思考,或许会有新的发现。 
参考链接:

1. trx header

2. binwalk 提取xml和html的问题