FirmAE 模拟固件

news2024/12/23 4:15:23

一、介绍

FirmAE目标是创造一个可以供用户动态调试分析的环境,而不是复现和硬件一模一样的环境,,其卖点是大规模(Large-Scale)。
论文开头就直指“友商”Firmadyne,提出其模拟成功率低等问题, 其将原本Firmadyne的成功率16.28%提高到79.36%,其底层还是使用了QEMU。FirmAE 从固件的启动、网络、NVRAM、内核和其它五个方面 ,总结了导致固件仿真失败的原因及通用解决方法。
  
FirmAE中主要集成了四种模式, check模式、run模式、analyze 模式、debug 模式。在固件仿真当中我们通常利用的是前两种模式check模式和run模式。check 模式会对固件进行 仲裁仿真( arbitrated emulation 的各项操作,将设备运行后,检查网络连通性和服务可用性,最后仿真退出,保存相关的日志信息记录在缓存文件中。run模式是根据 check模式构建的各种处理信息,进行仿真,在仿真程序时不会退出。
   
在漏洞检测方面,FirmAE根据固件的文件系统和内核日志来推断Web服务状态,其发现了23个设备的12个0DAY。
    
基于Firmadyne实现了原型系统FirmAE。其总框架如下图:
FirmAE的整体架构为如上图所示。 FirmAE用和Firmadyne相似的方法(使用预构建的自定义Linux内核和库)来仿真固件映像它依然需要模拟目标镜像两次,以收集各种系统日志,并利用这些信息进行进一步的仿真,前一个仿真步骤称为 预仿真 ,后一个称为 最终仿真
Automation: 为了进行大规模分析,FirmAE致力于完全自动化。实际上Firmadyne的许多步骤已经自动化了,但是仍然需要一些用户交互。例如,用户必须首先使用特定选项提取目标固件的文件系统。然后,他们评估是否成功提取文件系统并检索架构信息。随后,他们为QEMU制作固件镜像并在预仿真中收集信息。最后,他们运行最终仿真的脚本并执行动态分析。FirmAE自动化了所有这些交互,并 添加了一个用于网络可达性和Web服务可用性的自动评估过程 为此,我们在FirmAE中构建了一个模块,定期运行ping和curl命令
Parallelizaton: FirmAE还 使用Docker 将仿真 并行化 ,以有效评估大量固件镜像 。每个固件镜像在每个容器中独立仿真,该容器配备所有所需的软件包和依赖项。这使得能够快速可靠地仿真目标镜像。FirmAE通过运行多个容器实例来并行仿真固件。 更多详细细节可参考 FirmAE论文

二、安装

1、克隆FirmAE
$ git clone --recursive https://github.com/pr0v3rbs/FirmAE
  
2、运行脚本 download.sh
$ ./download.sh  # 需要外网
  
3、运行脚本 install.sh
$ ./install.sh

三、用法

1、运行脚本 init.sh
$ ./init.sh
  
2、准备固件
$ wget https://github.com/pr0v3rbs/FirmAE/releases/download/v1.0/DIR-868L_fw_revB_2-05b02_eu_multi_20161117.zip
   
3、检测仿真
# 检查固件是否可以仿真,会给出仿真成功后可以访问web页面的ip,或是仿真失败给出仿真失败的原因比如固件提取失败、网络构建失败、服务启动失败等
sudo ./ run . sh - c < brand > < firmware >
相关的日志在FirmAE/scratch/3/目录下,其中3是IID的值。
   
4、分析目标固件
  • 分析模式,使用FirmAE分析器
    $  sudo ./ run . sh - a < brand > < firmware >
  • 运行模式,有助于测试网络服务或执行自定义分析器( 在已经执行过check模式下再进行仿真时,仿真的速度会变得很快
    $  sudo ./ run . sh - r  < brand > < firmware >
出现俩个“true”表明已成功模拟固件
在node1这台机器上用浏览器打开192.168.0.1,如下:无需输入密码即可进入

四、Debug

完成run.sh -c后,可debug固件:
1. 用户级基本调试实用程序。(当模拟固件可通过网络访问时很有用)
sudo ./ run . sh - d < brand > < firmware >
   
2. 内核级引导调试。
sudo ./ run . sh - < brand > < firmware >

五、Turn on/off arbitration

检查firmae.config:

六、Docker

首先,准备一个docker镜像:
$ . /docker -init .sh
注:为了更快更顺畅的下载包与github项目,修改FirmAE/core/Dockerfile:
    
并行模式
然后,运行以下命令之一 -ec只检查仿真, -ea检查仿真并分析漏洞。
$ . / docker - helper . py  - ec brand >< firmware or  firmware_path  >   # 默认等待时间2400s
日志:FirmAE/scratch/DIR-868L_fw_revB_2-05b02_eu_multi_20161117.zip.log
$ . / docker - helper . py  - ea brand >< firmware  or  firmware_path  >    # 默认等待时间3600s
日志:FirmAE/scratch/DIR-868L_fw_revB_2-05b02_eu_multi_20161117.zip.log, 卡死在:
  
调试模式
在成功模拟固件映像之后:
$ . / docker - helper . py  - ed  firmware
   
Emulation result
Google spreadsheet -  view
    
Dataset
Google drive -  download

七、参考

IoT固件Rehosting综述 - 在线工具-wetools.com微工具

FirmAE: Towards Large-Scale Emulation of IoT Firmware for Dynamic Analysis阅读笔记 - 知乎 (zhihu.com)

https://github.com/pr0v3rbs/FirmAE

How to use the fuzzer in FirmAE? · Issue #10 · pr0v3rbs/FirmAE · GitHub

使用FirmAE 对zyxel路由器固件仿真实践_黑客技术 (hackdig.com)

FirmAE及DlinkDIR320、600、645漏洞复现 - 『软件调试区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/849245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Navicat 导出excel表数据结构

效果展示&#xff1a; 实现过程&#xff1a; 1 打开Navicat 执行以下SQL&#xff0c;注意&#xff1a;将以下SQL中的数据库名称和表名称替换。 SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHARACTER_MAXIMUM_LENGTH 长度, IS_NULLABLE 是否为空, C…

代码随想录算法学习心得 50 | 739.每日温度、496.下一个更大元素I...

一、每日温度 链接&#xff1a;力扣 描述如下&#xff1a;给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&…

pytest自动化测试框架之标记用例(指定执行、跳过用例、预期失败)

pytest中提供的mark模块&#xff0c;可以实现很多功能&#xff0c;如&#xff1a; 标记用例&#xff0c;即打标签skip、skipif标记跳过&#xff0c;skip跳过当前用例&#xff0c;skipif符合情况则跳过当前用例xfail标记为预期失败 标记用例 有时候我们可能并不需要执行项目中…

HTTP协议——应用层

HTTP协议 只要保证, 一端发送时构造的数据, 在另一端能够正确的进行解析, 就是ok的. 这种约定, 就是 应用层协议 HTTP简介 HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;协议又叫做超文本传输协议&#xff0c;是一个简单的请求-响应协议&#xff0c;HTTP通常运行…

Spring-1-深入理解Spring XML中的依赖注入(DI):简化Java应用程序开发

学习目标 前两篇文章我们介绍了什么是Spring,以及Spring的一些核心概念&#xff0c;并且快速快发一个Spring项目&#xff0c;以及详细讲解IOC&#xff0c;今天详细介绍一些DI(依赖注入) 能够配置setter方式注入属性值 能够配置构造方式注入属性值 能够理解什么是自动装配 一、…

lwip不同的socket分别作为监听和客户端连接

在LWIP中&#xff0c;一个网络设备&#xff08;如以太网卡&#xff09;可以创建多个socket&#xff0c;用于处理不同的网络连接。一般&#xff0c;你可以创建一个socket用于监听&#xff08;listen&#xff09;连接&#xff0c;另一个socket用于主动发起&#xff08;connect&am…

本地化部署自建类ChatGPT服务远程访问

本地化部署自建类ChatGPT服务远程访问 文章目录 本地化部署自建类ChatGPT服务远程访问前言系统环境1. 安装Text generation web UI2.安装依赖3. 安装语言模型4. 启动5. 安装cpolar 内网穿透6. 创建公网地址7. 公网访问8. 固定公网地址 &#x1f340;小结&#x1f340; 前言 Te…

【ARM64 常见汇编指令学习 15 -- ARM 标志位的学习】

文章目录 ARM 标志位介绍Zero Condition flag(零标志位)零标志位判断实例 上篇文章&#xff1a;ARM64 常见汇编指令学习 14 – ARM 汇编 .balign,.balignw,.balign 伪指令学习 下篇文章&#xff1a;ARM64 常见汇编指令学习 16 – ARM64 SMC 指令 ARM 标志位介绍 在ARM架构中&am…

医学图像处理

医学图像处理 opencv批量分片高像素图像病理图像数据增强提升样本多样性基于 imgaug、skimage 实现色彩增强 降低样本多样性基于 DCGAN、TransposeConv 完成染色标准化 精细化提取特征自动生成数据标注 分类场景下的医学图像分析分割场景下的医学图像分析检测场景下的医学图像分…

揭秘Word高级技巧:事半功倍的文字处理策略

Microsoft Word是一款广泛使用的文字处理软件&#xff0c;几乎每个人都有使用过它的经历。但是&#xff0c;你是否知道Word中隐藏着许多高级技巧和功能&#xff0c;可以帮助你事半功倍地处理文字&#xff1f;在本文中&#xff0c;我们将揭秘一些Word的高级技巧&#xff0c;让你…

[] Adobe XD免费版功能一览,设计师们速来免费使用!

Adobe XD 作为一款流行的原型设计工具&#xff0c;免费使用对许多设计师来说是非常重要的。但现在 Adobe XD 的免费版体验已经不是那么舒适了。别担心&#xff0c;本文将为你推荐真正免费好用的 Adobe XD 替代工具。 Adobe XD 是免费的吗&#xff1f; Adobe XD 在早期确实是完…

Licheepi Nano屏幕驱动并输出打印信息

Licheepi Nano买回来好长时间&#xff0c;没咋玩&#xff0c;最近看了一个利用F1C100S自制迷你电脑的博客&#xff0c;里面主要参考的就是Licheepi Nano。我打算先在Licheepi Nano上完成屏幕操作、Debian文件系统和USB键盘等内容&#xff0c;这里介绍怎样利用Licheepi Nano外接…

Java进阶(1)——JVM的内存分配 反射Class类的类对象 创建对象的几种方式 类加载(何时进入内存JVM) 注解 反射+注解的案例

目录 引出java内存分配java内存分布概略图堆方法区常量池 创建对象内存分配 反射class文件的底层类加载顺序1.检查2.开辟静态资源空间3.常量池4.其他...5.创建一个唯一的类的对象获取Class对象的几种方式 创建对象几种方式new 看到new : new Book()反射 Class.forName(“包名.类…

断路器回路电阻试验

试验目的 断路器回路电阻主要取决于断路器动、 静触头的接触电阻, 其大小直接影响正常 运行时的发热情况及切断短路电流的性能, 是反应安装检修质量的重要数据。 试验设备 回路电阻测试仪 厂家&#xff1a; 湖北众拓高试代销 试验接线 对于单断口的断路器, 通过断口两端的接线…

8年测试经验,接口测试总结,测试进阶之路一篇打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、什么是接口测试…

开源数据库Mysql_DBA运维实战 (部署服务篇)

前言❀ 1.数据库能做什么 2.数据库的由来 数据库的系统结构❀ 1.数据库系统DBS 2.SQL语言(结构化查询语言) 3.数据访问技术 部署Mysql❀ 1.通过rpm安装部署Mysql 2.通过源码包安装部署Mysql 前言❀ 1.数据库能做什么 a.不论是淘宝&#xff0c;吃鸡&#xff0c;爱奇艺…

k8sday02

第四章 实战入门 本章节将介绍如何在kubernetes集群中部署一个nginx服务&#xff0c;并且能够对其进行访问。 Namespace ​ Namespace是kubernetes系统中的一种非常重要资源&#xff0c;它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 ​ 默认情况下&…

机器学习实战1-kNN最近邻算法

文章目录 机器学习基础机器学习的关键术语 k-近邻算法&#xff08;KNN&#xff09;准备&#xff1a;使用python导入数据实施kNN分类算法示例&#xff1a;使用kNN改进约会网站的配对效果准备数据&#xff1a;从文本文件中解析数据分析数据准备数据&#xff1a;归一化数值测试算法…

淘宝API接口为开发者提供了与淘宝平台进行数据交互和操作的便捷途径

淘宝API接口是指淘宝开放平台提供的一套接口&#xff0c;用于与淘宝网进行数据交互和操作。通过使用淘宝API接口&#xff0c;第三方开发者可以实现商品搜索、店铺信息获取、订单管理、商家服务等功能&#xff0c;从而实现与淘宝平台的对接和数据共享。 淘宝API接口的使用可以帮…

C语言赋值号的运算顺序

从右到左。 int & f(int & a) { printf("参数 %d\n", a); return a; } int main(void) {int a 9;int b 3;f(a) f(b);// 运行到此处&#xff0c;a 3&#xff0c;b 3return 0; } 输出