当前位置: 首页 > news >正文

FirmAFL

FirmAFL使用并改进了Firmdyne模拟方式,并利用AFL对IoT固件实施高通量灰盒Fuzzing。

一、项目简介

FIRM-AFL 是 第一个针对物联网固件的高吞吐量灰盒模糊测试器支持mipsel、mipseb和armel三种CPU架构 ,涵盖Firmadyne数据库中90.2%的固件。
FIRM-AFL 解决了物联网固件模糊测试的两个基本问题:
  • 解决了兼容性问题:它通过启用 posix 兼容固件的模糊处理来解决兼容性问题,这些固件可以在系统仿真器中仿真;
  • 解决了性能瓶颈:采用“ 增强进程仿真”技术解决了系统模式仿真造成的性能瓶颈。通过将 系统模式仿真 (高通用性、低效率)用户模式仿真 (低通用性、高效率)相结合,增强的进程仿真作为系统模式仿真提供了高兼容性,作为用户模式仿真提供了高吞吐量。
要模糊测试的程序主要运行在用户模式仿真,以实现高效率。只有在必要时切换到全系统仿真,以确保程序的正确执行,从而实现通用性。
FIRM-AFL基于AFL和Firmadyne实现,其中AFL负责对物联网固件中用户指定的程序进行覆盖引导模糊测试,就像使用AFL对普通用户级程序进行模糊测试一样,Firmadyne负责用户模式仿真和全系统仿真之间的切换,以确保给定的程序能够被正确地仿真。
我们设计并实现了FIRM-AFL,这是AFL的增强功能,用于模糊化物联网固件。我们 保持 AFL 的工作流程不变,并将用户模式 QEMU 替换为增强的流程仿真,其余组件保持不变。新的工作流如图 所示:

二、用法

先安装依赖:
sudo apt -get install git
sudo apt -get install binutils -dev
sudo apt -get install -y libsdl1 .2 -dev zlib1g -dev libglib2 .0 -dev libbfd -dev build -essential binutils qemu libboost -dev git libtool autoconf xorg -dev
1 、获取项目
cd /home/zhang/Desktop/
git clone https :// github . com / zyw - 200 / FirmAFL . git
2 、编辑用户模式
cd ./FirmAFL /user_mode /
./configure --target -list =mipsel -linux -user ,mips -linux -user ,arm -linux -user --static --disable -werror
make
3 、编译系统模式
cd ../qemu_mode /DECAF_qemu_2.10 /
./configure --target -list =mipsel -softmmu ,mips -softmmu ,arm -softmmu --disable -werror
make
4、安装Firmadyne
cd ../../    # 即在 FirmAFL/目录下
sudo apt -get install busybox -static fakeroot git dmsetup kpartx netcat -openbsd nmap python -psycopg2 python3 -psycopg2 snmp uml -utilities util -linux vlan
git clone --recursive https ://github .com /firmadyne /firmadyne .git
5、安装binwalk
git clone https ://github .com /devttys0 /binwalk .git   #  FirmAFL/目录下
cd binwalk
sudo ./deps .sh
sudo python ./setup .py install
6、 编译Firmadyne数据库(自行设置数据库密码)
cd ../firmadyne
sudo apt -get install -y postgresql
sudo service postgresql start
sudo service postgresql status
# 用户的密码设置为: firmadyne
sudo -u postgres createuser -P firmadyne 安装postgres后状态不对    等价于 sudo -u postgres psql -c "create role firmadyne with login password 'firmadyne';"
sudo -u postgres createdb -O firmadyne firmware # 创建数据库firmware
准备好 data.xz数据:
  data.xz_免费高速下载|百度网盘-分享无限制 (baidu.com)
cd database
cp /home /zhang /Downloads /data .xz ./    # 此处data.xz的路径请自行更改
xz -d data .xz
mv data schema
chmod +x schema
sudo -u postgres psql -d firmware < ./schema
7、 使用Firmadyne仿真固件
7.1、进入Firmadyne目录,然后打开firmadyne .config, 修改 FIRMWARE_DIR 的路径为当前 Firmadyne 目录的绝对路径
vi ../firmadyne/ firmadyne . config
# 以下为 firmadyne.config 中的内容
# uncomment and specify full path to FIRMADYNE repository
FIRMWARE_DIR = /home/zhang/Desktop/FirmAFL/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
... ...
7.2、要为所有组件下载我们预先构建的二进制文件
sh ./download .sh    # 开启外网或者手工下载放到 firmadyne/binaries/目录下
7.3、 将 scripts/makeImage.sh 替换为 FirmAFL/firmadyne_modify/下的 makeImage . sh
cp ../firmadyne_modify /makeImage .sh ./scripts /
7.5、使用extractor提取filesystem
  • - nk:no kernel,不提取内核;
  • - np:no parallel operation,没有并行操作;
  • - sql: SQL服务器的主机名 
  • - b: 固件镜像的品牌
  • Images:存储压缩文件在images .
# extractor . py中的头部修改为 python3
sudo ./sources /extractor /extractor .py -b dlink -sql 127.0.0.1 -np -nk "../firmware/DIR-815_FIRMWARE_1.01.ZIP" images
提取后的文件如下:
此时数据库: psql -U firmadyne -h127.0.0.1 -p5432 -dfirmware
7.6、识别固件的架构并将结果存储在数据库的表中
sudo ./scripts /getArch .sh ./images /9050.tar.gz
此时数据库:
7.7、创建编号为9050的固件的qemu镜像
sudo ./scripts /makeImage .sh 9050
生成镜像:
/home/zhang/Desktop/FirmAFL/firmadyne//scratch//9050//image/:
/home/zhang/Desktop/FirmAFL/firmadyne//../image_9050:
7.8、指定固件的网络配置并将信息记录到 ./scratch/1/qemu.initial.serial.log
sudo ./scripts /inferNetwork .sh  9050
7.9、FirmAFL准备工作
cd ../
python3 FirmAFL_setup.py 9050 mipsel # 会在 FirmAFL/image_9050/目录下生成一些文件
8、替换run.sh
>>> 因为这个固件是项目示例,可以按照如下方法操作替换run.sh:
cp ./FirmAFL_config / 9050 /run .sh ./image_9050 /  # 即用FirmAFL_config中的run.sh替换image_9050中的run.sh
两者的区别在于:
>>> 若固件不是项目示例,则直接在FirmAFL /image_id /run .sh修改,以便使用我们修改后的 QEMU 和内核来模拟固件,并在 RAM 文件上运行。
For mipsel ,
ARCH=mipsel
QEMU="./qemu-system-${ARCH}"
KERNEL="./vmlinux.${ARCH}_3.2.1"
IMAGE="./image.raw"
MEM_FILE="./mem_file"
${QEMU} -m 256 -mem-prealloc -mem-path ${MEM_FILE} -M ${QEMU_MACHINE} -kernel ${KERNEL} \
For mipseb ,
ARCH=mips
QEMU="./qemu-system-${ARCH}"
KERNEL="./vmlinux.${ARCH}_3.2.1"
IMAGE="./image.raw"
MEM_FILE="./mem_file"
${QEMU} -m 256 -mem-prealloc -mem-path ${MEM_FILE} -M ${QEMU_MACHINE} -kernel ${KERNEL} \
9、运行模糊测试过程
运行 start.py 脚本后,FirmAFL将启动固件仿真,系统初始化(120s)后,将开始模糊测试过程。(也许你应该使用 root 权限来运行它。
cd image_9050
python3 start .py 9050
执行遇到错误:
参考: QEMU Segmentation fault when I run the example · Issue #47 · zyw-200/FirmAFL (github.com)
意思是对/home/zhang/Desktop/FirmAFL/qemu_mode/DECAF_qemu_2.10/shared/vmi.cpp中的391行注释掉,再重新 编译系统模式
最终结果:

三、参考

https://github.com/zyw-200/FirmAFL

IoT固件Rehosting综述 - FreeBuf网络安全行业门户

[翻译]Firm-AFL:高效的IOT固件灰盒fuzz-智能设备-看雪-安全社区|安全招聘|kanxue.com

FIRM-AFL: 通过增强进程仿真实现物联网固件的高吞吐量灰盒模糊测试_固件模糊测试_寂寞烟火~的博客-CSDN博客

论文FirmAFL固件模糊测试工具——复现之路_h0_yang的博客-CSDN博客

相关文章:

FirmAFL

FirmAFL使用并改进了Firmdyne模拟方式&#xff0c;并利用AFL对IoT固件实施高通量灰盒Fuzzing。 一、项目简介 FIRM-AFL 是 第一个针对物联网固件的高吞吐量灰盒模糊测试器。 支持mipsel、mipseb和armel三种CPU架构 &#xff0c;涵盖Firmadyne数据库中90.2%的固件。 FIRM-AFL 解…...

SpringMVC的整合完成CRUD(增删改查)

SpringMVC是一种基于Java的Web框架&#xff0c;它是Spring框架的一部分。SpringMVC通过使用MVC&#xff08;Model-View-Controller&#xff09;设计模式来组织和管理Web应用程序的开发。 在SpringMVC中&#xff0c;Model代表数据模型&#xff0c;View代表用户界面&#xff0c;C…...

Postman使用_Tests Script(断言测试)

断言测试可以在Collection、Folder和Request的 pre-request script 和 test script中编写&#xff0c;测试脚本可以检测请求响应的各个方面&#xff0c;包括正文、状态代码、头、cookie、响应时间等&#xff0c;只有测试符合自定义的要求后才能通过。 pm对象提供了测试相关功能…...

问道管理:华为概念股捷荣技术13天10板,监管质疑迎合热点炒作

捷荣技能&#xff08;002855.SZ&#xff09;一口气将气氛拉满。 盘面看&#xff0c;自8月29日启动到9月14日&#xff0c;捷荣技能用了13天时间&#xff0c;将累计涨幅推到了188%&#xff0c;期间有10个涨停板&#xff0c;如此冷艳之举&#xff0c;还在于其“华为概念”。 ​ …...

VR云游:让游客足不出户享受旅行的乐趣

随着人们的生活水平不断提高&#xff0c;对于旅行的需求也在日益增长&#xff0c;既要玩的舒心&#xff0c;也要享受的舒服&#xff0c;因此VR全景云游就成为了一种新型的旅行方式&#xff0c;人们足不出户就可以沉浸式游览各地自然风光与名胜古迹。 VR云游景区是一种全新的旅游…...

vue3学习源码笔记(小白入门系列)------ 重点!响应式原理 代码逐行分析

目录 备注响应式数据创建ref 和 reactive 核心 作用第一轮的 依赖收集 发生时机setup 阶段 去更改了 响应式数据 会发生依赖收集吗 派发更新派发更新是什么时候 触发的&#xff1f;扩展&#xff1a; setup阶段 响应式数据被修改 会触发组件更新吗 vue 是如何根据派发更新来触发…...

62、SpringBoot 使用RestTemplate 整合第三方 RESTful 服务

这节的要点&#xff1a; 就是弄两个项目 &#xff0c; 从 端口9090 这个项目&#xff0c;通过 restTemplate&#xff0c; 去访问 端口8080 的项目&#xff0c;并获取8080项目的数据。 ★ RESTful服务包含两方面的含义 1. 自己的应用要暴露一些功能供别人来调用。此时我们是服…...

Linux基本认识

一、Linux基本概念 Linux 内核最初只是由芬兰人林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统&#xff0c;是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多…...

leetcode top 100 (8)无重复字符的最长子串(滑动窗口

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 package TOP1_10;import java.util.HashMap; import java.…...

我也惊呆了!原来软件开发根本不需要会编码

一、前言 众所周知&#xff0c;完成一个大型的企业级系统&#xff0c;公司往往需要大量的人力做支持后盾&#xff0c;例如需要需求分析师、数据库管理员、前台美工、后台程序员、测试人员等。在快速发展中的企业&#xff0c;尤其是中小企业&#xff0c;都是一个萝卜多个坑&…...

定制化图标——Element UI 组件图标替换指南

本篇博客将介绍如何在使用 Element UI 组件时对原生图标进行定制化替换&#xff0c;提供了适用于满足个性化需求的方法和技巧。 引言 Element UI 是一款基于 Vue.js 的流行 UI 组件库&#xff0c;在前端开发中得到广泛应用。然而&#xff0c;在使用 Element UI 的组件时&#…...

63、SpringBoot---定制 RestTemplate--消息转化器、拦截器

★ 定制RestTemplate 如要对RestTemplate进行自定义设置&#xff0c;Spring Boot也提供了两种主要方式&#xff1a;▲ 局部式&#xff1a;在调用RestTemplateBuilder构建RestTemplate之前&#xff0c;先调用RestTemplateBuilder的方法对其定制&#xff0c;通过这种方式设置的R…...

面试系列 - Redis持久化机制详解

目录 一、Redis 持久化机制 二、混合使用 RDB 和 AOF 三、 RDB(Redis DataBase)详解 四、AOF&#xff08;Append-Only File&#xff09;详解 Redis 是一个内存数据库&#xff0c;为了持久化数据以确保数据不会在服务器重启时丢失&#xff0c;Redis 提供了两种主要的持久化机…...

Ceph入门到精通-存储集群ceph df 用量统计算法说明

3.2.5. Ceph 如何计算数据使用量 used 值反映了使用的实际原始存储量。xxx GB / xxx GB 代表可用的存储&#xff08;其中较小的数字&#xff09;和总存储容量。总容量反映了在复制、克隆或快照前存储数据的大小。因此&#xff0c;实际存储的数据量通常会超过名义上的存储量。这…...

堡垒机的相关介绍

描述 堡垒机&#xff0c;即在一个特定的网络环境下&#xff0c;为了保障网络和数据不受来自外部和内部用户的入侵和破坏&#xff0c;而运用各种技术手段监控和记录运维人员对网络内的服务器、网络设备、安全设备、数据库等设备的操作行为&#xff0c;以便集中报警、及时处理及审…...

无涯教程-JavaScript - INDIRECT函数

描述 INDIRECT函数返回由文本字符串指定的引用。 如果您在Excel公式中键入引用B1,则Excel会理解这引用了单元格B1。但是,Excel无法将文本字符串" B1"理解为引用。因此,如果单元格引用采用文本字符串的形式,则需要使用INDIRECT函数将其转换为实际的单元格引用。 立…...

LiveNVR监控流媒体Onvif/RTSP功能-支持海康摄像头海康NVR通过EHOME协议ISUP协议接入分发视频流或是转GB28181

LiveNVR支持海康NVR摄像头通EHOME接入ISUP接入LiveNVR分发视频流或是转GB28181 1、海康 ISUP 接入配置2、海康设备接入2.1、海康EHOME接入配置示例2.2、海康ISUP接入配置示例 3、通道配置3.1、直播流接入类型 海康ISUP3.2、海康 ISUP 设备ID3.3、启用保存3.4、接入成功 4、相关…...

一年一度的中秋节马上又要到了,给你的浏览器也来点氛围感吧

说在前面 一年一度的中秋节马上又要到了&#xff0c;给你的浏览器也来点氛围感吧 &#x1f315;&#x1f315;&#x1f315; 插件设计 效果 首先我们应该要先确定一下我们想要实现的效果是怎样的&#xff0c;如上图&#xff0c;我们希望在页面上鼠标点击的时候会在点击区域随…...

CentOS8安装mysql-community-client错误解决

安装MySQL5.7.37的mysql-community-client-5.7.37-1.el7.x86_64.rpm时&#xff0c;提示如下&#xff1a; 提示的意思是缺少依赖软件包。 使用如下命令安装依赖包&#xff1a; yum install libncurse* 实际安装如下两个软件包。 成功后再次安装mysql-community-client-5.7.37…...

故障排除指南:解决 Kibana Discover 加载中的 6 个常见问题

作者&#xff1a;Steffanie Nestor Discover 是 Elastic 的核心 Kibana UI&#xff0c;用于搜索、过滤和检查&#xff08;时间序列&#xff09;数据。 可视化用于数据聚合/摘要。 Discover UI 对于大数据 Elasticsearch 响应具有弹性&#xff0c;但有时会因&#xff08;未压缩的…...

创建一个简单的外卖订餐系统

在今天的快节奏生活中&#xff0c;外卖订餐系统已经成为了人们日常生活中不可或缺的一部分。这些系统通过在线点餐和配送服务&#xff0c;为用户提供了便捷的用餐体验。在本文中&#xff0c;我们将创建一个简单的外卖订餐系统&#xff0c;使用Python和Flask框架构建后端&#x…...

《追逐胜利:编程之路上的三子棋游戏实践》

文章目录 前言一、三子棋游戏规则二、步骤详解1.游戏菜单的实现2.棋盘的实现2.1 初始化棋盘2.2 打印棋盘 3.游戏逻辑实现3.1 玩家下棋3.2 电脑下棋 4.判断输赢4.1 win函数实现 5.完整代码 总结 前言 大家好&#xff01;我是艾老虎尤&#xff01;今天我很高兴来和大家分享我最近…...

身份和访问管理解决方案:混合型IAM

对于依赖于本地 IT 基础结构和传统安全模型的组织&#xff0c;可以更轻松地验证和授权企业网络内的所有内容&#xff0c;包括设备、用户、应用程序和服务器。尝试从公司网络外部获取访问权限的用户使用虚拟专用网络 &#xff08;VPN&#xff09; 和网络访问控制 &#xff08;NA…...

微信小程序动态添加表单模块

先来看看效果&#xff1a; 屏幕录制 2023-09-14 16.33.21 点击添加请假按钮&#xff0c;就会新增一个请假信息表单&#xff1b;点击左上角红色删除按钮&#xff0c;删除当前表单&#xff1b; 源码下载地址&#xff1a;https://download.csdn.net/download/xq30397022/88339822…...

HTML5+CSS3小实例:纯CSS实现彩虹倒映水面的唯美背景

实例:纯CSS实现彩虹倒映水面的唯美背景 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" …...

Beautiful Soup简介

BeautifulSoup是一个Python库&#xff0c;用于从HTML或XML文件中提取数据。它提供了一种简单而直观的方式来遍历、搜索和修改HTML或XML文档的结构。 以下是一些BeautifulSoup的主要功能&#xff1a; 解析器&#xff1a;BeautifulSoup支持多种解析器&#xff0c;包括Python的内置…...

Springboot2.7集成websocket及相关问题

1、集成websocket完整代码 导入maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 服务端代码 &#xff08;1&#xff09;注入bean Configur…...

MES管理系统和ERP系统在生产制造管理中的应用

MES生产管理系统通过过程管理、质量管理、设备管理、产品跟踪和溯源、性能分析和物料管理等方面来管理生产制造&#xff0c;旨在建立规范的生产管理信息平台&#xff0c;提高企业核心竞争力。ERP系统则通过制定生产计划、细分物料需求计划、车间订单下达和生产回报等步骤进行生…...

Netty Channel 详解

优质博文&#xff1a;IT-BLOG-CN 一、Netty 服务端启动过程 【1】创建服务端Channel&#xff1b; 【2】初始化服务端Channel&#xff1b; 【3】注册Selector&#xff1b; 【4】端口绑定&#xff1a;我们分析源码的入口从端口绑定开始&#xff0c;ServerBootstrap的bind(int in…...

技师学院物联网实训室建建设方案

一、概述 1.1专业背景 物联网&#xff08;Internet of Things&#xff09;被称为继计算机、互联网之后世界信息产业第三次浪潮&#xff0c;它并非一个全新的技术领域&#xff0c;而是现代信息技术发展到一定阶段后出现的一种聚合性应用与技术提升&#xff0c;是随着传感网、通…...

广州网页设计公司网站/职业技能培训机构

这是第五周。本周积极锻炼加上跑步&#xff0c;感觉很不错&#xff0c;肌肉变大了。学习开始有兴趣了&#xff0c;对java&#xff0c;找到了一个毕向东的视频&#xff0c;看的很来劲&#xff0c;加油&#xff0c;下周要学的更多&#xff0c;锻炼也不能停。转载于:https://www.c…...

做视频在哪个网站收益高/网站建设费用明细表

tf.nn.top_k(input, k, nameNone) 这个函数的作用是返回 input 中每行最大的 k 个数&#xff0c;并且返回它们所在位置的索引。 import tensorflow as tf import numpy as npinput tf.constant(np.random.rand(3,4)) k 2 output tf.nn.top_k(input, k)with tf.Session() a…...

如何查网站空间/营销网站模板

环景&#xff1a; Ubuntu 16.04.01 问题描述&#xff1a; 怎么设置同步NTP服务器 解决方案&#xff1a; 1.配置成NTP服务器 安装软件 apt-get install ntp /etc/init.d/ntp start2.配置为客户端 apt-get install ntpdate ntpdate 192.168.1.11 //ntp服务器地址执行后显…...

网站整合营销等服务/百度代发收录

GB28181音视频这块基本都需要PS&#xff0c;PS的打包和解析非常重要&#xff0c;GB28181文档只给出了打包纯视频或音视频一起打包的的说明&#xff0c;没有给出单独打包纯音频的说明&#xff0c;在实际场景中&#xff0c;特别是语音广播&#xff0c;语音对讲, PS打包纯音频很常…...

宣汉网站建设/互换链接的方法

问题导读&#xff1a;1.zookeeper在kafka的作用是什么&#xff1f;2.kafka中几乎不允许对消息进行“随机读写”的原因是什么&#xff1f;3.kafka集群consumer和producer状态信息是如何保存的&#xff1f;4.partitions设计的目的的根本原因是什么&#xff1f;id"iframe_0.9…...

php网站建设到护卫神/近期国家新闻

在小程序开发的时候会遇到一些页面不需要头部导航&#xff0c;或像淘宝的商品详情一样自定义的导航栏。那先要清楚这导航可不能写死&#xff0c;每种手机的导航都各不相同。 一、在app.json的window对象中定义导航的样式&#xff1a; 小程序开发文档中说明 "window":…...