Firmadyne部署测试——固件仿真安全测试

1. 论文参考(先敬大佬)

        Chen D D, Woo M, Brumley D, et al. Towards automated dynamic analysis for linux-based embedded firmware[C]//NDSS. 2016, 1: 1.1-8.1.

2 Firmadyne——官方部署模式

2.1 源码

https://github.com/firmadyne/firmadyne#databaseicon-default.png?t=O83Ahttps://github.com/firmadyne/firmadyne" \l "database

2.2 环境

VM Ubuntu 18.04(16.04也可)

2.3 部署流程

2.3.1 拉取文件

git clone --recursive GitHub - firmadyne/firmadyne: Platform for emulation and dynamic analysis of Linux-based firmware

(若导入超时失败,可以将https换成git;或是更改git源或是科学上网)

2.3.2 依赖导入

sudo apt-get install busybox-static fakeroot git dmsetup kpartx netcat-openbsd nmap python-psycopg2 python3-psycopg2 snmp uml-utilities util-linux vlan

2.3.3 Binwalk

git clone https://github.com/ReFirmLabs/binwalk.git
cd binwalk
sudo ./deps.sh
sudo python3 ./setup.py install

第三步时可能需要更新python3的版本>=3.6

2.3.4 切换和配置python版本(python>3.5时不需要考虑)

 一、python 3.6 的安装

安装 GCC toolchain

sudo apt install build-essential

 安装各种依赖关系

sudo apt install libssl-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev tk-dev libffi-dev

下载python原代码并编译

wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz

tar xf Python-3.6.5.tar.xz

cd Python-3.6.5

./configure --enable-optimizations

make -j 8

sudo make altinstall

二、默认python版本选择

 在安装完python3.6后,系统会存在着至少3个版本。可以通过update-alternatives 进行版本管理。

更新update-alternatives中python列表

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2

sudo update-alternatives --install /usr/bin/python python /usr/local/bin/python3.6 3

最后数字为对应python版本优先级,数值越大,优先级越高。(可搜索update-alternatives 命令解释)

设置完成后默认python版本为3.6

选择适当版本

切换至其他版本python

sudo update-alternatives --config python

然后根据提示输入相应版本对应数字即可。

还需要删除python3.5

sudo apt-get remove python3.5

rm -rf /usr/lib/python3.5/

rm -rf ~/.local/python3.5

2.3.5 设置pg数据库

sudo apt-get install postgresql
sudo -u postgres createuser -P firmadyne
接着输入密码firmadyne
sudo -u postgres createdb -O firmadyne firmware
sudo -u postgres psql -d firmware < ./firmadyne/database/schema

2.3.6 二进制文件下载

cd ./firmadyne; ./download.sh

2.3.7 QEMU安装

sudo apt-get install qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils

2.4 Firmadyne使用

2.4.1 路径配置更改

修改所有的路径变量地址

vi ./firmadyne/firmadyne.config

2.4.2 下载固件(Netgear路由器)

wget http://www.downloads.netgear.com/files/GDC/WNAP320/WNAP320%20Firmware%20Version%202.0.3.zip

选择的是Netgear WNAP320 的 v2.0.3

2.4.3 提取文件系统

 使用extractor提取filesystem

python3 ./sources/extractor/extractor.py -b Netgear -sql 127.0.0.1 -np -nk "WNAP320 Firmware Version 2.0.3.zip" images

-nk:no kernel,不提取内核;

-np:no parallel operation,没有并行操作;

-sql:将镜像信息表存储到数据库127.0.0.1 ;

-b:with the Netgear brand ();

Images:存储压缩文件在images.

2.4.4 识别架构并存储

./scripts/getArch.sh ./images/1.tar.gz

2.4.5 装载路由器文件系统内容存储对象到imagetables

./scripts/tar2db.py -i 1 -f./images/1.tar.gz

2.4.6 创建路由器的qemu磁盘镜像

./scripts/makeImage.sh 1

2.4.7 指定网络配置并将信息记录到log

./scripts/inferNetwork.sh 1

2.4.8 模拟运行防火墙

使用指定的网络配置模拟运行防火墙,这将通过产生TAP设备增加route修改主机系统配置

./scratch/1/run.sh

账号为admin,密码为password

第二次直接运行run.sh即可

2.5 攻击演示

2.5.1 Msf演示——查看日志基本不通过

chmod +x analyses/*.py

mkdir exploits

python3 ./analyses/runExploits.py-t 192.168.0.100 -o exploits/exploit -e x

2.5.2 snmp扫描

./analyses/snmpwalk.sh 192.168.0.100

2.5.3 WEB服务测试

./analyses/webAccess.py 1 192.168.0.100 log.txt

大致原理是对内部的常见web地址进行访问(并对重定向进行处理)

2.5.4 MACAddress-RCE

反弹了shell到终端

原理:/boardDataWW.php没有进行对mac地址进行上传验证,存在命令注入漏洞(也可以利用bp重定向)

3 局限性_

3.1 网络地址无法从内核中准确读取

通过实验发现无法准确的获取内核中关于接口配置

例如:DIR882A1_FW110B02.bin 固件文件的仿真中,由于无法获取地址,即在使用./scripts/inferNetwork.sh 1获取时,地址列表时空的(信息主要是通过硬件知识库获取,然后匹配固件架构后,自动分配)

3.2 内核结构作者使用通用结构目标,需要自定义更改

默认的执行路径如下,但实际的路径与默认有差异,需要更改

实际路径如下

最后好像有大佬解决了网络信息推测异常问题,成功仿真原作者无法实现的思科设备Cisco RV100W的设备固件。贴上大佬的链接:

原创 | Firmadyne仿真修复案例 (qq.com)icon-default.png?t=O83Ahttps://mp.weixin.qq.com/s?__biz=MzkyMzAwMDEyNg==&mid=2247515440&idx=1&sn=8c866ecd755ffdb5d3816fed0a8ce00a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吗喽_jie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值