在这篇文章中,我们将看看如何才能完成特定物联网设备的固件模拟。固件模拟可以用于许多不同的目的,例如更好地分析固件,进行开发,执行远程调试等。
通过这种技术,您可以模拟最初想在不同架构上运行的固件,并与其进行交互,即使没有物理物联网设备。固件模拟较早方法之一是创建Qemu镜像,然后将固件文件系统的内容复制到Qemu镜像上,然后启动镜像。
但是,存在一个更简单的方案,它在模拟固件时不容易出现问题。我们来看一下。
您需要的工具:
- AttifyOS VM或任何基于Linux的映像
- 固件分析工具包(https://github.com/attify/firmware-analysis-toolkit)
- 您想要模拟的固件(例如:Netgear WNAP320)
设置
一旦你拥有了上述的三个软件,第一步就是设置固件分析工具包。
固件分析工具包只是实际项目Firmadyne的一个包装,可以自动模拟新固件。
要下载和安装FAT,只需简单地克隆git存储库,如下所示:
git clone --recursive https://github.com/attify/firmware-analysis-toolkit.git
接下来,我们需要设置Binwalk,Firmadyne和Firmware-Mod-Kit等独立工具。
设置Binwalk
要设置Binwalk,只需先安装如下的依赖关系,然后安装该工具:
cd firmware-analysis-toolkit/binwalk
sudo ./deps.sh
sudo python setup.py install
如果一切顺利,您将能够运行binwalk
并看到如下所示的输出。
设置Firmadyne
要设置Firmadyne,需要到Firmadyne文件夹并打开firmadyne.config
。如下图所示。
取消该行FIRMWARE_DIR=/home/vagrant/firmadyne/
注释,并将地址修改为Firmadyne的当前路径。在我的案例中修改的行如下所示。
一旦更新了路径,下一步就是下载Firmadyne工作所需的额外二进制文件。这可能需要一段时间(1-2分钟,所以在这个时候我们可以喝杯咖啡或啤酒)。
完成后,下一步是安装Firmadyne的其余依赖项:
sudo -H pip install git+https://github.com/ahupp/python-magic
sudo -H pip install git+https://github.com/sviehb/jefferson
sudo apt-get install qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
此时还要根据Firmadyne官方wiki的说明来设置PostgreSQL数据库。
提示输入密码时,数据库的密码应该是firmadyne
(避免以后出现问题)。
sudo apt-get install postgresql
sudo -u postgres createuser -P firmadyne
sudo -u postgres createdb -O firmadyne firmware
sudo -u postgres psql -d firmware < ./firmadyne/database/schema
到此Firmadyne设置完成。
设置固件分析工具包
我们要做的第一件事是移动fat.py
和reset.py
到firmadyne
文件夹下。
完成后,打开fat.py
并修改root
密码(以便在运行脚本时不会要求您输入密码),并指定firmadyne的路径,如下所示。
这就是所有的设置。确保我们的postgresql数据库已启动并正在运行。
模拟固件镜像
为了模拟固件,我们需要运行./fat.py
并指定固件名称。在这个案例中,我们指定WNAP320.zip固件。
对于Brand
,我们可以指定任何参数。
我们的输出如下所示:
一旦完成了固件的初始设置过程,它将为我们提供一个IP地址。在这个案例中固件运行Web服务器,我们能够访问Web界面,以及通过SSH与固件交互进行一些基于网络的开发。
现在让我们打开Firefox,看看我们是否能够访问Web界面。
恭喜! - 我们已经成功地模拟了一个固件(最初是为MIPS Big Endian架构设计的),甚至可以在固件内部访问Web服务器!
由于译者水平有限,希望业内同行批评指正。