原文地址:https://blog.attify.com/getting-started-with-firmware-emulation/
译文来自安全客,译者:0A3D6G,译文地址:https://www.anquanke.com/post/id/151277

在这篇文章中,我们将演示如何模拟一个给定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接口。

这就是这篇文章的全部,如果有任何问题,请联系我们


本文经安全客授权发布,转载请联系安全客平台。


源链接

Hacking more

...