0x01 前言

本文介绍了在对固件进行分析的环境准备部分,主要是对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

最好还是直接看官方github的readme吧…


安装完后测试了一下,在我测试的几个固件中(Tenda路由器,Cisco交换机、防火墙、路由器,D-Link路由器),目前只能运行大部分的路由器的固件,交换机和防火墙的固件都运行不起来。

Firmadyne是一款自动化分析嵌入式Linux系统安全的开源软件,由卡内基梅隆大学的Daming D. Chen开发完成的。它支持批量检测,整个系统包括固件的爬取、root文件系统的提取、QEMU模拟执行以及漏洞的挖掘。

实验环境及需要的工具:

  • 系统:Ubuntu14.04

    • 在Kali最新版和Ubuntu16.04LTS上都会有奇奇怪怪的问题,后来在issue中找到作者的实验环境为Ubuntu14.04
    • 下载:http://mirrors.ustc.edu.cn/ubuntu-releases/14.04/
  • 工具:
    • Firmadyne

      • 项目地址:https://github.com/firmadyne/firmadyne
      • README.md中有详细的配置和安装步骤
    • Firmware Analysis Toolkit
      • 项目地址:https://github.com/attify/firmware-analysis-toolkit
      • 该工具集包含了binwalkFirmadyne等必须的工具。这里我们只需要克隆该仓库到本地即可
    • qemu
      • 可以直接用apt-get安装,只安装一部分
      • 也可以从github的仓库编译安装所有的模块

0x02 环境配置

2.1 克隆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

2.2 安装binwalk


# 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/binwalkUsage: 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 porthzy@ubuntu:~$ 

2.3 安装Firmadyne

  1. 进入Firmadyne目录,然后打开firmadyne.config,修改 FIRMWARE_DIR的路径为当前Firmadyne目录的绝对路径

cd firmware-analysis-toolkit/firmadynevim 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... ...
  1. 安装Firmadyne

sh ./download.sh

2.4 安装postgresql数据库


sudo apt-get install postgresql# 用户的密码设置为:firmadyne
sudo -u postgres createuser -P firmadyne, with password firmadynesudo -u postgres createdb -O firmadyne firmware# 注意这里的数据库文件是在firmadyne/目录下,也就是该命令要在根目录firmware-analysis-toolkit/目录下执行
sudo -u postgres psql -d firmware < ./firmadyne/database/schema

启动postgresql数据库,确认其正在运行。

  • 这里我在kali测试的时候,如果没有先启动数据库,就进行添加用户的命令会报错。
  • 还遇到了一个问题,明明数据库服务在运行,但是添加用户的时候一直报的错也是服务没有运行的错,这种情况下我是直接重装了一遍postgresql
  • 具体出现的错大家可以在网上搜索解决方案即可。一般还是有现成的方法的。

sudo service postgresql startsudo service postgresql status

2.5 安装qemu

QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。

这里有两种安装方法:

  • 直接通过apt-get安装

    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解决

0x03 测试运行

  1. 将firmware-analysis-toolkit/目录下的fat.py和reset.py移动到firmadyne/目录下:

mv fat.py ./firmadyne
mv reset.py ./firmadyne
  1. 修改fat.py中的执行权限、firmadyne的路径firmadyne_path以及root密码root_pass

chmod +x fat.pyvim fat.py
# 以下是fat.py中的内容#!/usr/bin/env python2.7import 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"... ...
  1. 下载要模拟的路由器固件
  • 要模拟的路由器为:WNAP320

  • https://www.netgear.com/support/product/WNAP320.aspx#Firmware%20Version%203.7.11.4中下载固件文件

  • 假设我这里将固件文件重命名为 netgear.zip,并放在/home/hzy/firmware/目录下

  1. 测试运行

hzy@ubuntu:~/firmware-analysis-toolkit/firmadyne$ sudo ./fat.py
[sudo] password for hzy: __           _   / _|         | |  | |_    __ _  | |_ |  _|  / _` | | __|| |   | (_| | | |_ |_|    \__,_|  \__|                    Welcome to the Firmware Analysis Toolkit - v0.2Offensive IoT Exploitation Training  - http://offensiveiotexploitation.comBy 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键运行该固件,等运行完了以后就可以从浏览器访问了:

0x04 总结

主要还是参考了参考资料1,但是中间踩了很多坑,可以查阅参考资料3。

这个firmadyne还有其他的用法,可以参考下参考资料2。这篇文章就点到为止啦。

为了装这个分析环境,前前后后折腾了三个虚拟机。装软件和配环境是我的一生之敌!!(ಥ_ಥ)

By:hzy

0x05 参考资料

  1. 物联网设备的固件模拟环境搭建
  2. 嵌入式Linux固件模拟与安全分析系统Firmadyne交流
  3. Error:Traceback.

物联网设备固件分析:Firmadyne固件模拟环境搭建相关推荐

  1. 路由器逆向分析------路由器固件分析和动态调试环境搭建简述

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/70140865 01.路由器固件分析和动态调试环境搭建简述的原文 <Emula ...

  2. 路由器固件模拟环境搭建(超详细)

    路由器固件模拟环境搭建 0X01 想说的话

  3. 物联网安全专题 | 浅谈物联网设备安全分析方法 — 软件篇

    ✦前 言✦ • 物联网(Internet of Things,IoT)是互联网的延伸,是智能设备.移动网络及社交网络的结合体,可以给使用者提供更优质的应用体验.物联网时代的到来引入了大量的物联网设备, ...

  4. 13、SRS4.0源代码分析之GB28181实验环境搭建

    前言 严格的说SRS4.0正式发布版本中已经去掉了GB28181相关的代码(主要时因为该特性还有一些Bug需要修复),本文目的是记录之前学习和使用SRS GB28181推流处理的一些心得. 内容 一. ...

  5. 虹科物联网设备安全分析与防护平台——更智能的工业通信协议黑盒模糊测试

    工业控制系统 (ICS) 可能成为大型工业企业的重大漏洞.攻击者如果发现系统中的漏洞,可以将其作为攻击向量,也可以将其用于受攻击网络中的横向运动,在不同系统之间传播攻击. 传统上,连接工业控制系统的计 ...

  6. 高通android智能平台环境搭建_编译流程分析,高通平台环境搭建,编译,系统引导流程分析参考...

    高通有两个cpu,他们分别跑不同的系统,应用程序(ap)端是android系统,modem 端是高通自己的系统. 要编译出可供烧写使用的镜像文件需要三部分代码: 1) 获取经过高通打补丁的 andro ...

  7. php模拟环境搭建,PHP环境搭建最新方法

    很多朋友对PHP环境很为难,经过多次尝试都无法正确配置 其实配置PHP环境并不难,掌握要领就会很轻松 对于初级用户和想简单配置PHP环境的朋友,本人提供一种方法和PHP环境文件 就会让您轻松拥有高性能 ...

  8. 01-数据可视化分析工具dataease-开发环境搭建

    github拉取源码: https://github.com/dataease/dataease idea打开: 修改为本地maven环境:  等待依赖安装完成: 创建数据库: CREATE DATA ...

  9. 流媒体分析之srt 测试环境搭建

    本文主要用ffmpeg 与srs 服务器大环境支持srt 测试: 1. 编译 ffmpeg 支持srt 协议,我们采用libsrt 编译libsrt库 git clone https://github ...

最新文章

  1. 10 过滤器和监听器
  2. 前端学习 -- Css -- 内联元素的盒模型
  3. Android官方开发文档Training系列课程中文版:Android的安全建议 .
  4. 二叉排序树与文件操作的设计与实现_堆排序就这么简单
  5. [css] 如何使用css实现鼠标跟随?
  6. BNUOJ 1207 滑雪
  7. 面试官真是搞笑!让实现线程安全的单例,又不让使用synchronized!
  8. 20170923在线编程之输入年、月、日输出这是一年的第几天
  9. Windows Phone开发(12):认识一下独具个性的磁贴 转:http://blog.csdn.net/tcjiaan/article/details/7313866...
  10. 软件测试论坛_进阶测试攻略——价值驱动的软件测试
  11. 微博android源码,新浪微博客户端源码 android
  12. socks5协议(rfc1928)
  13. 【zhasite】托业英语阅读技巧有哪些
  14. python写生日祝福语大全_【Python 1-6】Python教程之——数字
  15. Orge配置Debug - 在Mac上利用Homebrew安装指定版本的Cmake
  16. java libraries在哪_java.library.path在哪? | 学步园
  17. Multisim基础 示波器 波形沿Y轴正方向上移一格
  18. 学人工智能需要什么基础?
  19. 2011年华为企业业务的15件大事
  20. 签入/签出是什么意思?

热门文章

  1. NMOS管与PMOS管的区别与总结
  2. openstack(m版)官网创建云主机过程
  3. golang常见面试题总结
  4. android 模拟器监听短信,android模拟器用命令和DDMS模拟来电和短信(示例代码)
  5. CentOS7-查看IP
  6. Java零基础入门学习教程(纯干货知识点+视频资源)
  7. Termux 搭建 gogs
  8. LocalDate日期操作与处理
  9. 小程序集成Three.js,使用npm安装gsap动画库
  10. vue中 给元素添加鼠标移入,鼠标移出的效果的事件