编者按:本文节选自华章网络空间安全技术丛书《物联网渗透测试》一书中的部分章节。
固件分析方法
固件是控制 IoT 设备的核心,这也是我们在分析 IoT 设备的其他组件之前,希望从固件分析开始的原因。根据 IoT 设备所面向的行业,提取固件镜像并且对其内容进行反汇编的过程可能非常简单。与之类似,对于某些行业的垂直细分领域而言,其采取了专用保护措施,而这些保护措施可能会导致逆向分析过程更加困难或更加耗时。尽管如此,固件分析时还是存在一些通用模式的。通常,测试人员在固件分析时最关注的内容主要包括:
口令。
API Token。
API Endpoint(URL)。
存在漏洞的服务。
后门账户。
配置文件。
源代码。
私钥。
数据的存储方式。
在后面的章节中,进行固件分析时我们也会重点关注这些内容。本节将向读者概要介绍固件正向分析与逆向分析的方法。
下面列出了 IoT 固件分析时所用到的基本方法:
1)固件提取。
2)固件分析。
3)文件系统提取。
4)文件系统加载。
5)文件系统分析。
6)基于固件仿真的动态分析。
固件提取
在对固件内容进行分析前,我们首先需要获取固件的二进制文件。本节将会对目标设备固件提取所涉及的各种技术进行介绍。
准备工作
提取固件的过程中我们会用到多个工具。由于 Kali Linux 中已经默认安装了所需要的大多数工具,因此在这里将主要使用 Kali Linux 系统。下面是需要用到的工具:
Kali Linux:Kali Linux 可以从网站https://www.kali.org/downloads/直接下载。如果读者使用 VMware 或者 VirtualBox 虚拟机,那么建议从链接https://www.offensive-security.com/kali-linux-vmware-virtualbox-imagedownload/下载 Kali 的虚拟镜像。
Ettercap:虽然 Kali Linux 中已经默认安装了 Ettercap,但是也可以从链接https://ettercap.github.io/ettercap/downloads.html下载。
Wireshark:Wireshark 也默认包含在 Kali Linux 中,也可以从链接http://www.wire-shark.org下载。
SSLstrip:Kali Linux 中已经默认安装了 SSLstrip,也可以从链接https://github.com/moxie0/sslstrip下载。
Flashrom:Kali Linux 中并未默认安装 Flashrom,但是可以执行以下命令方便地安装该工具:
此外,还可以通过链接https://www.flashrom.org/Downloads下载 Flashrom。
测试流程
目前,从 IoT 设备中提取固件的方法有很多。我们将在本节中对其中的大部分方法进行介绍。固件镜像的获取方法主要包括:
从厂商网站下载。
代理或镜像设备更新时的流量。
直接从设备转储固件。
通过 Google 搜索引擎搜索/科研渠道。
反编译与之相关的移动应用。
从厂商网站下载
获取固件最简单的方法就是从厂商网站下载固件。
图 1~图 5 中的截图展示了如何从厂商网站获取固件:
1)进入目标厂商的网站。
2)在搜索栏中输入目标设备,如图 1 所示。
3)选择 Support 选项卡,如图 2 所示。
4)单击 Drivers&Tools 按钮,如图 3 所示。
5)单击下载链接,如图 4 所示。
6)用户也可以选择 Copy Link Address,在测试主机上直接执行 wget(wget <http://URL.com>)命令进行文件下载,如图 5 所示。
图 1
图 2
图 3
图 4
图 5
代理或镜像设备更新时的流量
有时候厂商网站可能并不支持固件下载,此时读者可以选择第 2 种方法(即在设备固件更新过程中,代理转发设备更新时的流量),或者选择第 3 种方法(直接从设备转储固件)。为了在设备更新过程中实现对固件更新流量的代理转发,读者必须在更新期间实施中间人(Man-In-The-Middile,MITM)攻击或者镜像设备流量。或者,读者也可以代理转发 Web 或移动应用的流量,从中提取出固件下载的 URL 地址。
众所周知,厂商会对固件下载请求中的 user-agent 字段进行验证,所以读者可能还需要调整数据包首部中的 user-agent 字段。以下是针对 IoT 设备实施 MITM 攻击进而监控设备流量的基本步骤,用到的工具包括 Kali Linux、Ettercap、Wireshark 和 SSLstrip。其中 Kali Linux 中已经安装了本节中需要用到的所有工具。
当前有多种方法和工具可以对目标设备发起 MITM 攻击,进而实现流量转发。下面介绍的就是其中一种捕获设备流量的方法。
1)启用 IP 转发功能:
2)配置 iptables,将目的端口 80 的流量重定向至 SSLstrip 监听的端口 10000。
3)启动 SSLstrip:
4)启动 Ettercap GUI:
5)图 6 展示了上述操作的运行结果。
图 6
6)单击菜单栏中的 Sniff 菜单,再单击 Unified sniffing 选项,如图 7 所示。
图 7
7)选择所要监听的网卡,如图 8 所示。
图 8
8)选择 Scan for hosts 选项,如图 9 所示。
图 9
9)此时即启动 Wireshark 程序,可以看到部分接口有流量通过,如图 10 所示。
10)单击 Start capturing packets 按钮开始捕获目标设备的网络流量,如图 11 所示。
图 10
图 11
11)根据实际需求过滤出所关注的网络报文。在本例中,目标设备的 IP 地址为 192.168.1.137,如图 12 所示。
图 12
直接从设备转储固件
如果通过厂商网站或者流量代理的方法均无法获取固件,还可以尝试通过 UART、SPI 或者 JTAG 接口直接转储固件。直接进行固件转储需要拿到物理设备,并拆解设备找到其中的闪存芯片。找到闪存芯片之后,读者可以直接通过 UART 接口也可以使用 SOIC8 测试夹来连接芯片进而转储固件,其中用到了工具 Flashrom 以及支持 SPI 的硬件开发板,例如 Shikra1。图 13 展示了如何使用 SOIC 测试夹和 Shikra 连接设备。
1 Shikra 是一款用于固件分析的硬件设备,用户借助 Shikra 可以与不同的底层数据接口(通过 USB 接口)进行交互。—译者注
图 13
图片来源:http://www.xipiter.com/uploads/2/4/4/8/24485815/9936671_orig.jpg562
将固件内容转储为 bin 文件的命令如下所示:
使用 Flashrom 或者前面介绍的某种方法提取到了设备固件之后,分析人员就可以开始对固件的二进制文件进行分析了。
Google 搜索
如果出于某些原因,我们难以借助前面介绍的方法提取出固件镜像,那么最后的选择就是求助于 Google 搜索。可以直接在 Google 中输入想要查找的固件名称,搜索是否存在目标固件的下载链接,也可以搜索一下其他人的工作成果,看看是否已经有人对该设备的固件进行了研究。此外,设备厂商在岗或者离职的工作人员也可能会将固件文件上传到其个人的存储空间或 Web 服务器上。无论哪种情况,都可以使用 Google dorking 技术缩小指定目标设备的搜索范围。我们还可以通过链接https://www.exploit-db.com/google-hacking-database利用 Google Hacking 数据库来搜索固件或设备。
测试分析
在本节中,我们简要介绍了如何通过厂商站点、部署 MITM 测试环境捕获设备流量、直接从设备转储固件以及 Google 搜索等方法来获取固件。现在,我们来解释下为什么需要通过这些方法获取固件,难道不是直接从厂商网站下载就行了吗?
当从厂商网站下载固件时,通常情况下,用户可以通过厂商提供的服务链接、文件共享或社区论坛下载到需要的固件。但有时厂商在下载固件前要求用户提供口令,或者将固件打包为需要口令才能解压的 ZIP 文件。如果碰到了这种情况,为了节省时间我们就可以直接采用其他方法获取固件。
接下来,我们简要介绍了如何使用 Kali Linux、SSLstrip、Ettercap 和 Wireshark 搭建 MITM 测试环境,以在设备更新期间捕获设备流量。
图书简介:https://item.jd.com/12623610.html
相关阅读
评论