编者按:本文节选自华章网络空间安全技术丛书《物联网渗透测试》一书中的部分章节。
固件分析
一旦我们提取到了固件,接下来的主要工作就是对固件进行分析。其中涉及如何深入固件内部,发现尽可能多的安全隐患,这也正是本节中我们所要做的主要工作。
准备工作
在本节中,我们将会了解提取出固件二进制文件后如何开展固件分析。在这一过程中,有多种固件分析方法供我们选择,帮助我们找到固件中的安全隐患。
正如前面提过的,固件中包含了很多渗透测试人员感兴趣的内容,如 API key、私有证书、硬编码的认证信息以及后门等。
测试流程
为了分析固件,我们将对其逆向以查看其内部组件。固件中的内部组件包括 boot-loader、内核、文件系统以及其他内容。其中我们最感兴趣的是文件系统,因为文件系统中保存了我们需要的所有信息。显然,读者也可以分析 bootloader 并查看其中包含的内容,还可以篡改固件并构建新的固件(我们将在接下来的章节中讨论),但是现在我们只关心如何对固件进行逆向分析以及从中提取出文件系统。
正如之前已经介绍过的,固件是一个二进制文件压缩包,而文件系统只是其中的一个组件,存储在二进制文件的特定偏移地址中,且具有一定的尺寸。然而,此时我们还不知道关于固件中文件系统的任何信息,包括其偏移量和尺寸。为了找到这些信息,需要使用 hexdump 和 grep 等工具来搜索我们所关注内容的特征信息。下面以 Squashfs 文件系统为例进行介绍:
1)如果想要查找 Squashfs 文件系统,可以使用 grep 命令在 hexdump 的执行结果中查找“hsqs”字符串1,如图 1 所示。
1 Squashfs 文件系统的头部特征字符串较多,目前已知的有 7 种:标准固件大端序模式为 sqsh,标准固件小端序模式为 hsqs,LZMA 压缩下的大端序模式为 sqlz,3.3 版本的 Squashfs 文件系统在 LZMA 压缩下的大端序模式为 qshs,部分非标准固件小端序模式为 shsq(多为 D-Link 固件),DD-WRT 固件小端序模式为 hsqt,DD-WRT 固件大端序模式为 tqsh。—译者序
图 1
2)读者可以看到,我们在地址 0x000e20c0 处发现了 Squashfs 文件系统。获得了这些信息之后,就可以使用 dd 命令将从该地址开始到文件末尾的内容全部转储下来,如图 2 所示。
图 2
3)一旦获得了从固件二进制文件中截取出来的 Squashfs 文件系统,就可以运行 unsquashfs 等命令来查看整个文件系统,这一过程非常简单。
接下来使用 unsquashfs 命令来看一下我们是否能够提取出整个文件系统,如图 3 所示。
图 3
4)正如在前面的截图中所看到的,我们提取出了 Squashfs 文件系统镜像。读者可以忽略图 3 中的警告和错误,这只是在提示我们没有以 root 用户权限运行该命令。一旦我们提取出了文件系统,就可以浏览文件系统中的各个目录,对其中的各个文件分别进行分析来挖掘漏洞。图 4 是对整个文件系统目录的截图。
图 4
上面就是对固件进行逆向分析并从固件二进制镜像中提取文件系统的方法。我们还可以采用 Binwalk 等工具自动执行前面的所有操作。Binwalk 由 Craig Heffner 开发,借助 Binwalk 我们只需要一条命令就能够从固件二进制镜像中提取文件系统。
5)为了安装 Binwalk,首先需要从位于https://github.com/devttys0/binwalk.git的 Git-Hub 代码库中克隆 Binwalk 代码,命令如下:
6)然后运行./deps.sh 命令安装 Binwalk 需要的所有依赖文件和二进制文件。
7)Binwalk 安装成功后,读者可以在命令行中敲入 Binwalk 命令并按回车键来确认安装是否成功。如果安装成功,此时命令行窗口会显示出 Binwalk 的帮助菜单,如图 5 所示。
8)下面我们使用 Binwalk 命令从相同的固件中提取出文件系统。这里在执行提取操作时将用到-e 参数:
9)接下来窗口中会显示出固件中的所有分段,并提取出固件内容,如图 6 所示。
图 5
图 6
10)参数-t 和-vv 可以采用可读性更强以及更加详细的方式打印出命令执行结果。Binwalk 执行完毕之后,会生成名为_[firmwarename].extracted 的文件夹,该文件夹中保存了 Binwalk 提取出的整个文件系统,如图 7 所示。
以上就是采用手工和自动两种方式从固件的二进制文件中提取文件系统的过程。
测试分析
本例中的文件系统提取方法同我们之前采用的方法相同,均是首先使用 magic 字节以及首部特征字符串(例如 Squashfs 文件系统中的 sqsh 字符串等)检测文件系统以及其他组件的偏移。在下面的 URL 链接中可以查看 Binwalk 所能识别的文件系统类型:
图 7
读者还可以在 Binwalk 中手工添加更多特征,然后重新编译 Binwalk 源代码,从而实现对其他文件系统的识别。
拓展学习
除了提取文件系统,读者还可以使用 Binwalk 进行一系列其他操作,例如针对某个特定固件镜像进行熵分析,该操作能够帮助读者判断固件镜像是否进行了压缩或者加密。熵分析需要在运行 Binwalk 时带上-E 参数,之后再跟固件名,操作命令如图 8 所示。
图 8
从上面的截图中可以看出,该固件并未加密,因为加密的固件镜像熵值会出现大幅波动。
延伸阅读
想了解更多关于固件分析与逆向分析的内容,可以访问 Binwalk 开发者 Craig Heffner 的博客。读者可以从博文中了解到不同的固件镜像会如何变化,以及可能存在哪些漏洞。Craig Heffner 的博客链接为http://www.devttys0.com/。
图书简介:https://item.jd.com/12623610.html
相关阅读
评论