Firmware Analysis Toolkit 模拟固件

2024-03-09 09:30

本文主要是介绍Firmware Analysis Toolkit 模拟固件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、前言

Firmadyne是一款自动化分析嵌入式Linux系统安全的开源软件,由卡内基梅隆大学的Daming D. Chen开发完成的。
支持批量检测,整个系统包括固件的爬取、root文件系统的提取、QEMU模拟执行以及漏洞的挖掘
Firmware Analysis Toolkit固件分析工具包(以下简称为 FAT)基于 Firmadyne 并进行了一些更改。
FAT 是在 Python 3 中开发的。但是,您需要同时安装 Python 3 和 Python 2,因为 Firmadyne 的部分及其依赖项使用 Python 2。强烈建议在虚拟机中安装 FAT。
实验环境及需要的工具:
1、系统:Ubuntu 18.04.5
   下载:http://mirrors.ustc.edu.cn/ubuntu-releases/
2、工具:
    2.1、Firmadyne
        项目地址:GitHub - firmadyne/firmadyne: Platform for emulation and dynamic analysis of Linux-based firmware
        README.md中有详细的配置和安装步骤
    2.2、Firmware Analysis Toolkit
        项目地址:https://github.com/attify/firmware-analysis-toolkit.git
        该工具集包含了binwalk、Firmadyne等必须的工具。这里我们只需要克隆该仓库到本地即可。
要求环境python默认对应python3版本

二、安装Firmadyne

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
cd /home
git clone --recursive https://github.com/firmadyne/firmadyne.git

2.2、Extractor--安装binwalk

提取器依赖于 binwalk 工具,因此我们需要安装它及其依赖项。
# 1. 安装依赖和binwalk
git clone https://github.com/ReFirmLabs/binwalk.git
cd 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# 3. 测试是否安装成功
$ 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 port

2.3、安装配置postgresql数据库

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

2.4、安装Firmadyne

2.4.1、要为所有组件下载我们预先构建的二进制文件
sh ./download.sh
2.4.2、进入Firmadyne目录,然后打开firmadyne.config,修改 FIRMWARE_DIR的路径为当前Firmadyne目录的绝对路径
vi /home/firmadyne/firmadyne.config
# 以下为firmadyne.config中的内容
# uncomment and specify full path to FIRMADYNE repository
FIRMWARE_DIR=/home/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
... ...

2.5、安装qemu

QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。
两种安装方法: apt list --installed | grep qemu 或者 qemu-img -V # 查看版本
  • 直接通过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

三、安装FAT(firmware-analysis-toolkit)

3.1、clone并执行./setup.sh

git clone https://github.com/attify/firmware-analysis-toolkit
cd firmware-analysis-toolkit
./setup.sh

3.2、编辑fat.config

安装完成后,编辑fat.config文件并提供sudo密码。 Firmadyne 的某些操作需要 sudo 权限。 提供 sudo 密码以自动执行该过程

3.3、安装qemu

cd qemu-builds
wget -O qemu-system-static-2.5.0.zip "https://github.com/attify/firmware-analysis-toolkit/files/4244529/qemu-system-static-2.5.0.zip"
unzip -qq qemu-system-static-2.5.0.zip && rm qemu-system-static-2.5.0.zip
cd ..

四、测试运行FAT

4.1、运行FAT

$ ./fat.py <firmware file>
  • 提供固件文件名作为脚本的参数。
  • 该脚本将显示分配给创建的网络接口的 IP 地址。 记下来。
  • 最后,它会说运行固件。 按 ENTER 并等待固件启动。 Ping 上一步中显示的 IP,或在浏览器中打开。
要删除所有分析的固件映像,请运行:$ ./reset.py

4.2、下载要模拟的路由器固件

要模拟的路由器为:WNAP320
在WNAP320 | Access Point | NETGEAR Support中下载固件文件,并放在/home/firmware-analysis-toolkit/目录下

4.3、测试运行

root@node1:/home/firmware-analysis-toolkit# ./fat.py /home/firmware-analysis-toolkit/'WNAP320 Firmware Version 2.0.3.zip'
firmadyne_path0:/home/firmadyne
sudo_pass:firmadyne__           _/ _|         | || |_    __ _  | |_|  _|  / _` | | __|| |   | (_| | | |_|_|    \__,_|  \__|Welcome to the Firmware Analysis Toolkit - v0.3Offensive IoT Exploitation Training http://bit.do/offensiveiotexploitationBy Attify - https://attify.com  | @attifyme
args.firm_path:/home/firmware-analysis-toolkit/WNAP320 Firmware Version 2.0.3.zip
[+] Firmware: WNAP320 Firmware Version 2.0.3.zip
[+] Extracting the firmware...
firmadyne_path:/home/firmadyne
extractor_cmd:/home/firmadyne/sources/extractor/extractor.py, extractor_args:['-np', '-nk', '/home/firmware-analysis-toolkit/WNAP320 Firmware Version 2.0.3.zip', '/home/firmadyne/images']
tag:WNAP320 Firmware Version 2.0.3.zip_51eddc7046d77a752ca4b39fbda50aff
image_tgz:/home/firmadyne/images/WNAP320 Firmware Version 2.0.3.zip_51eddc7046d77a752ca4b39fbda50aff.tar.gz
[+] Image ID: 7
[+] Identifying architecture...
[+] Architecture: mipseb
[+] Building QEMU disk image...
[+] Setting up the network connection, please standby...
[+] Network interfaces: [('brtrunk', '192.168.0.100')]
[+] All set! Press ENTER to run the firmware... #空格键
[+] When running, press Ctrl + A X to terminate qemu
[+] Command line: /home/firmadyne/scratch/7/run.sh
Creating TAP device tap7_0...
Set 'tap7_0' persistent and owned by uid 0
Bringing up TAP device...
Adding route to 192.168.0.100...
Starting firmware emulation... use Ctrl-a + x to exit
firmadyne
.........................................................
System initilization is ..  [DONE...]
Welcome to SDK.
Have a lot of fun...
netgear123456 login: [   25.872000] brtrunk: port 1(eth0) entering forwarding state
[   31.376000] eth0: no IPv6 routers present
[   31.784000] brtrunk: no IPv6 routers present

[+] Network interfaces : [('brtrunk', '192.168.0.100')]可以看到,启动了一个服务,可以通过http://192.168.0.100/访问

中间过程需要按Enter键运行该固件,等运行完了以后就可以从浏览器访问了 admin/password:

五、制作firmware-analysis-toolkit镜像

GitHub - leiwuhen92/firmware-analysis-toolkit_docker: 制作firmware-analysis-toolkit的docker镜像,用于固件模拟与仿真
docker pull 1162886013/simulation:1.0
docker run -it --rm --privileged -p 8066:80 -v /dev:/dev -v /home/firmware_run/input:/root/input 1162886013/simulation:1.0 ./fat.py /root/input/"WNAP320 Firmware Version 2.0.3.zip"

端口映射以便可以访问Netgear 固件的网页:

在docker容器内(IP:172.17.0.2)添加端口映射
```shell
root@30f4fcce93c7:~/firmware-analysis-toolkit# iptables -t nat -A POSTROUTING -j MASQUERADE
root@30f4fcce93c7:~/firmware-analysis-toolkit# iptables -t nat -A PREROUTING -d 172.17.0.2 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100:80
root@30f4fcce93c7:~/firmware-analysis-toolkit# iptables -t nat -A POSTROUTING -d 192.168.0.100 -p tcp --dport 80 -j SNAT --to 172.17.0.2web访问地址:http://宿主机hostip:8066    # admin/password

六、参考

https://github.com/firmadyne/firmadyne  安装可行

https://github.com/attify/firmware-analysis-toolkit

https://github.com/leiwuhen92/firmware-analysis-toolkit_docker

安装postgres后状态不对_无痕的博客-CSDN博客

这篇关于Firmware Analysis Toolkit 模拟固件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/790244

相关文章

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU

hdu4431麻将模拟

给13张牌。问增加哪些牌可以胡牌。 胡牌有以下几种情况: 1、一个对子 + 4组 3个相同的牌或者顺子。 2、7个不同的对子。 3、13幺 贪心的思想: 对于某张牌>=3个,先减去3个相同,再组合顺子。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOExcepti

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

【算法专场】模拟(下)

目录 前言 38. 外观数列 算法分析 算法思路 算法代码 1419. 数青蛙 算法分析 算法思路 算法代码  2671. 频率跟踪器 算法分析 算法思路 算法代码 前言 在前面我们已经讲解了什么是模拟算法,这篇主要是讲解在leetcode上遇到的一些模拟题目~ 38. 外观数列 算法分析 这道题其实就是要将连续且相同的字符替换成字符重复的次数+

模拟实现vector中的常见接口

insert void insert(iterator pos, const T& x){if (_finish == _endofstorage){int n = pos - _start;size_t newcapacity = capacity() == 0 ? 2 : capacity() * 2;reserve(newcapacity);pos = _start + n;//防止迭代

PHP实现二叉树遍历(非递归方式,栈模拟实现)

二叉树定义是这样的:一棵非空的二叉树由根结点及左、右子树这三个基本部分组成,根据节点的访问位置不同有三种遍历方式: ① NLR:前序遍历(PreorderTraversal亦称(先序遍历)) ——访问结点的操作发生在遍历其左右子树之前。 ② LNR:中序遍历(InorderTraversal) ——访问结点的操作发生在遍历其左右子树之中(间)。 ③ LRN:后序遍历(PostorderT