原文地址: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接口。

這就是這篇文章的全部,如果有任何問題,請聯系我們


本文經安全客授權發布,轉載請聯系安全客平臺。


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.jmbmsq.com/639/