本文介绍了在对固件进行分析的环境准备部分,主要是对Firmadyne这个工具的环境搭建,最后搭建完用Netgear的路由器固件进行测试。
不想这么麻烦的,直接看评论,用配好的docker镜像:
在docker hub中搜索镜像:https://hub.docker.com/search?q=firmadyne&type=image
# pull image
# e.g. sudo docker pull mborgerson/firmadyne:auto
docker pull image:Tag
# run
sudo docker run -it mborgerson/firmadyne:auto
安装完后测试了一下,在我测试的几个固件中(Tenda路由器,Cisco交换机、防火墙、路由器,D-Link路由器),目前只能运行大部分的路由器的固件,交换机和防火墙的固件都运行不起来。
Firmadyne是一款自动化分析嵌入式Linux系统安全的开源软件,由卡内基梅隆大学的Daming D. Chen开发完成的。它支持批量检测,整个系统包括固件的爬取、root文件系统的提取、QEMU模拟执行以及漏洞的挖掘。
实验环境及需要的工具:
Firmware Analysis Toolkit
binwalk
、Firmadyne
等必须的工具。这里我们只需要克隆该仓库到本地即可qemu
Firmware Analysis Toolkit
工具集仓库
# 1. 安装依赖
sudo apt-get install busybox-static fakeroot git dmsetup kpartx netcat-openbsd nmap python-psycopg2 python3-psycopg2 snmp uml-utilities util-linux vlan
# 2. clone
git clone --recursive https://github.com/attify/firmware-analysis-toolkit.git
# 1. 安装依赖和binwalk
cd firmware-analysis-toolkit/binwalk
sudo ./deps.sh
sudo python setup.py install
# 2. 对于 python2.x,还需要安装以下的库
sudo -H pip install git+https://github.com/ahupp/python-magic
sudo -H pip install git+https://github.com/sviehb/jefferson
测试是否安装成功:
hzy@ubuntu:~$ binwalk
Binwalk v2.1.2-c036535
Craig Heffner, ReFirmLabs
https://github.com/ReFirmLabs/binwalk
Usage: binwalk [OPTIONS] [FILE1] [FILE2] [FILE3] ...
Disassembly Scan Options:
-Y, --disasm Identify the CPU architecture of a file using the capstone disassembler
... ...
-s, --status=<int> Enable the status server on the specified port
hzy@ubuntu:~$
firmadyne.config
,修改 FIRMWARE_DIR的路径为当前Firmadyne目录的绝对路径
cd firmware-analysis-toolkit/firmadyne
vim firmadyne.config
# 以下为firmadyne.config中的内容
#!/bin/sh
# uncomment and specify full path to FIRMADYNE repository
FIRMWARE_DIR=/home/hzy/firmware-analysis-toolkit/firmadyne/
# specify full paths to other directories
BINARY_DIR=${FIRMWARE_DIR}/binaries/
TARBALL_DIR=${FIRMWARE_DIR}/images/
SCRATCH_DIR=${FIRMWARE_DIR}/scratch/
SCRIPT_DIR=${FIRMWARE_DIR}/scripts/
# functions to safely compute other paths
... ...
sh ./download.sh
sudo apt-get install postgresql
# 用户的密码设置为:firmadyne
sudo -u postgres createuser -P firmadyne, with password firmadyne
sudo -u postgres createdb -O firmadyne firmware
# 注意这里的数据库文件是在firmadyne/目录下,也就是该命令要在根目录firmware-analysis-toolkit/目录下执行
sudo -u postgres psql -d firmware < ./firmadyne/database/schema
启动postgresql数据库,确认其正在运行。
sudo service postgresql start
sudo service postgresql status
QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。
这里有两种安装方法:
sudo apt-get install qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
git clone git://git.qemu.org/qemu.git
cd qemu
git submodule init
git submodule update --recursive
apt install libglib2.0 libglib2.0-dev
apt install autoconf automake libtool
./configure
make
make install
在执行命令./configure
以后可能会报错:
ERROR: pixman >= 0.21.8 not present.
Please install the pixman devel package.
可以通过执行命令:apt-get install libpixman-1-dev
解决
mv fat.py ./firmadyne
mv reset.py ./firmadyne
firmadyne_path
以及root密码root_pass
chmod +x fat.py
vim fat.py
# 以下是fat.py中的内容
#!/usr/bin/env python2.7
import os
import pexpect
import sys
# Put this script in the firmadyne path downloadable from
# https://github.com/firmadyne/firmadyne
#Configurations - change this according to your system
firmadyne_path = "/home/hzy/firmware-analysis-toolkit/firmadyne"
binwalk_path = "/usr/local/bin/binwalk"
root_pass = "123456"
firmadyne_pass = "firmadyne"
... ...
要模拟的路由器为:WNAP320
在https://www.netgear.com/support/product/WNAP320.aspx#Firmware%20Version%203.7.11.4
中下载固件文件
假设我这里将固件文件重命名为 netgear.zip,并放在/home/hzy/firmware/目录下
hzy@ubuntu:~/firmware-analysis-toolkit/firmadyne$ sudo ./fat.py
[sudo] password for hzy:
__ _
/ _| | |
| |_ __ _ | |_
| _| / _` | | __|
| | | (_| | | |_
|_| \__,_| \__|
Welcome to the Firmware Analysis Toolkit - v0.2
Offensive IoT Exploitation Training - http://offensiveiotexploitation.com
By Attify - https://attify.com | @attifyme
[?] Enter the name or absolute path of the firmware you want to analyse : /home/hzy/firmware/netgear.zip
[?] Enter the brand of the firmware : Netgear
[+] Now going to extract the firmware. Hold on..
[+] Firmware : /home/hzy/firmware/netgear.zip
[+] Brand : Netgear
[+] Database image ID : 2
[+] Identifying architecture
[+] Architecture : mipseb
[+] Storing filesystem in database
[!] Filesystem already exists
[+] Building QEMU disk image
[+] Setting up the network connection, please standby
[+] Network interfaces : [('brtrunk', '192.168.0.100')]
[+] Running the firmware finally
[+] command line : sudo /home/hzy/firmware-analysis-toolkit/firmadyne/scratch/2/run.sh
[*] Press ENTER to run the firmware...
从[+] Network interfaces : [('brtrunk', '192.168.0.100')]
可以看到,启动了一个服务,可以通过192.168.0.100访问
接下里按Enter
键运行该固件,等运行完了以后就可以从浏览器访问了:
主要还是参考了参考资料1,但是中间踩了很多坑,可以查阅参考资料3。
这个firmadyne还有其他的用法,可以参考下参考资料2。这篇文章就点到为止啦。
为了装这个分析环境,前前后后折腾了三个虚拟机。装软件和配环境是我的一生之敌!!(ಥ_ಥ)
By:hzy