在这篇文章中,我们将演示如何模拟一个给定Iot设备的固件。
固件仿真可以用于许多不通的目的,比如提供一个更好的方法来分析固件,测试利用,完成远程调试等。基于这个技术,再没有一个物理Iot设备的情况下,你可以模拟一个不同架构的固件并进行交互。早期,完成一个固件仿真需要创建一个Qemu镜像,然后复制到固件的文件系统里,才能启动固件。现在,存在一种更简单的替代方案,在模拟固件的时候也更容易出现较少的问题,让我们一探究竟。
需要的工具
- AttifyOS VM 或者任何基于Linux的镜像
- 固件分析工具包(https://github.com/attify/firmware-analysis-toolkit)
- 需要模拟的固件(比如:Netgear WNAP320)
配置
准备好上面三个工具之后,第一步我们需要做的就是设置固件分析工具包。
固件分析工具包其实就是对Firmadyne的简单的封装,自动化了模拟新固件的过程。
下载并安装FAT,只需要跟随下面代码所示,递归的clone一个git项目就可以:
git clone --recursive https://github.com/attify/firmware-analysis-toolkit.git
接下来,我们需要安装几个单独的工具,比如:Binwalk,Firemadyne和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/这一行,然后修改Fireadyne的地址为当前的全路径,我这里修改完之后是这样的:
修改完之后,下一步就可以下载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
接下来,我们还需要安装PostgreSQL数据库,这一步直接按照官方Firmadyne wiki提供的指令就可以了:
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就可以了(为了避免后面不必要的问题)。
到这里我们已经全部安装完Firmadyne了。
安装Firmadyne Analysis Tookit
首先我们需要把fat.py和reset.py移动到firmadyne目录里。如
然后打开fit.py,修改root的密码(当运行这个脚本的时候就不会再需要输入密码了)和指定firmadyne的目录,例如:
到这里安装工作就完成了,请确认postgresql数据库启动并正常运行。
。。看样子我们一切顺利。
模拟一个固件
现在你需要做的就是指定一个固件名称然后运行fat.py来模拟一个固件,这里我们运行的是WNAP320.zip固件。
对于Brand参数,你可以指定任意brand,这个参数仅仅是为了数据库方便的目的。
输出的内容应该像下面所示:
当我们完成了固件的初始化过程之后,会得到一个IP地址,这种情况下是固件运行了一个web服务,你可以通过SSH访问这个web接口,然后就可以完成其他基于网络的利用了。
让我们打开firefox来验证一下是否我们可以访问这个web接口。
祝贺!!! – 我们已经成功的模拟了一个固件(最初用于MIPS Endian架构),并且得到了一个可以访问固件内部的web接口。
这就是这篇文章的全部,如果有任何问题,请联系我们。
审核人:yiwang 编辑:边边