μEMU部署测试(论文复现)

ops/2025/2/24 6:15:57/

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

Zhou W, Guan L, Liu P, et al. Automatic firmware emulation through invalidity-guided knowledge inference[C]//30th USENIX Security Symposium (USENIX Security 21). 2021: 2007-2024.

Automatic Firmware Emulation through Invalidity-guided Knowledge Inference | USENIXhttps://www.usenix.org/conference/usenixsecurity21/presentation/zhou

2. 结合的技术

  • 符合执行
  • 动态模糊测试
  • 固件仿真
  • 固件知识提取

3. 项目部署

3.1. 部署环境

VMware Staion 17

Ubuntu 18.04

3.2. 源码位置

uEmu: 基于符号执行等程序方法自动化构建物联网设备固件仿真分析环境

3.3. Vagrant 安装——方法1

3.3.1. Git获取文件

sudo apt install git
git clone https://github.com/MCUSec/uEmu.git
cd uEmu

当前的文件目录如下:

3.3.2. 启动并连接Vagrant

前提是本系统存在vagrant(sudo apt install vagrant virtualbox)

vagrant up
vagrant ssh

启动需要大概需要10分钟左右,结束后即可ssh连接

常用命令vagrant如下:

vagrant up 启动虚拟机
vagrant ssh 登录虚拟机 在内部通过 exit 退出
vagrant status 查看虚拟机状态
vagrant halt 关机
vagrant destroy 删除虚拟机

3.4. 源码安装——方法2

3.4.1. Kvm文件修改

由于 arm kvm 模式下的 qemu 将使用来自主机 arm linux 内核的 ptrace.h,但是真正的主机 μEmu 是 X86,因此您必须将linux 源代码中的 ptracearm.h添加到您的本地路径中: /usr/include/x86_64-linux-gnu/asm

3.4.2. 软件包导入

您必须安装一些软件包才能手动构建μEmu。 μEmu所需的封装与目前的S2E 2.0相同。导入指令为:

sudo apt-get -y install build-essential cmake wget texinfo flex bison python-dev python3-dev python3-venv python3-distro mingw-w64 lsb-release
sudo apt-get update
sudo apt-get -y install libdwarf-dev libelf-dev libelf-dev:i386 libboost-dev zlib1g-dev libjemalloc-dev nasm pkg-config libmemcached-dev libpq-dev libc6-dev-i386 binutils-dev
#单独安装GCC-9,不然会出bug
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-9 g++-9
#导入依赖文件
sudo apt-get -y install libboost-system-dev libboost-serialization-dev libboost-regex-dev libbsd-dev libpixman-1-dev  libncurses5 libglib2.0-dev libglib2.0-dev:i386 python3-docutils libpng-dev gcc-multilib g++-multilib gcc-9 g++-9

执行完成后,结果如下:

3.4.3. 存储库获取

mkdir uEmu 
export uEmuDIR=/home/gjj/uEmu 
sudo apt-get install repo   
cd $uEmuDIR
repo init -u https://github.com/MCUSec/manifest.git -b uEmu(拉取失败,24.3.2)
repo sync

注:当install无法执行时,即出现进程锁定问题,输入以下指令:

已解决——需要将python版本改成3.6以上,具体步骤如下(24.12.31)
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2 
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 1
sudo update-alternatives --config python

在遇到who you are 时
输入邮箱和名字
git config --global user.email "xxx@gmail.com"
git config --global user.name "xxx"

3.4.4. 构建μEmu

μEmu Makefile 可以按如下方式运行:

sudo mkdir $uEmuDIR/build
cd $uEmuDIR/build
make -f $uEmuDIR/Makefile && make -f $uEmuDIR/Makefile install(需要root权限,或者直接给chmod 777 权限)

需要等等很久(90min左右,看个人配置):

注意:默认情况下,该命令在发布模式下编译并安装μEmu。要更改此设置,请执行以下操作位置,运行时设置环境变量

注意:需要将作者给的文件(ptracearm.h)放入到如下目录中,并且整个过程需要用到科学上网(该文件作者也提供的了,找不到的可以私信)

3.4.5. 1.2.5 构建和准备 AFL

cd $uEmuDIR/AFL
make
sudo make install

此时就已经构建完成了测试

4. 固件测试

4.1. 测试对象

单元测试固件链接:MCUSec/uEmu-unit_tests: Unit test samples evaluated by uEmu

真实测试固件链接:MCUSec/uEmu-real_world_firmware: Real firmware fuzz-tested with uEmu

下载后,导入到项目目录中$uemu

4.2. 测试流程

4.2.1. 知识提取

以ARDUINO-F103-ADC.elf为例

python3 <repo_path>/uEmu-helper.py <firmware_name> <config_file_name>  [-h] [--debug]
示例:python3 uEmu-helper.py ARDUINO-F103-ADC.elf F103.cfg

最后会显示消耗的时间,10min左右(和主机配置、固件类型、固件大小等有关)

学习完成后的KB知识库存放在/s2e-last目录中

(ARDUINO-F103-ADC.elf-round1-state33-tbnum545_KB.dat)

4.2.2. 动态模糊测试

Usage: python3 <repo_path>/uEmu-helper.py <firmware_name> <config_file_name>  -kb KBFILENAME [-s SEEDFILENAME]
示例: python3 uEmu-helper.py ARDUINO-F103-ADC.elf F103.cfg -kb ./s2e-out-0/ARDUINO-F103-ADC.elf-round1-state33-tbnum545_KB.dat 

执行完成后,在将文件分析形成指定的db关系数据库后,再将形成的动态分析种子和分析关系数据库作用于固件的动态测试过程。

然后在两个shell中分别执行./launch-AFL.sh 和./launch-uEmu.sh


http://www.ppmy.cn/ops/160900.html

相关文章

【MySQL篇】持久化和非持久化统计信息的深度剖析(含analyze命令和mysqlcheck工具两种收集方式)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;从事IT领域✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(…

【网络安全】常见的web攻击

1、SQL注入攻击 定义&#xff1a; 攻击者在HTTP请求中注入恶意的SQL代码&#xff0c;当服务器利用参数构建SQL语句的时候&#xff0c;恶意的SQL代码被一起构建,并在数据库中执行。 示例&#xff1a; 用户登录&#xff1a; 输入用户名xx&#xff0c; 密码 or 1 …

深入了解XML:初学者的全面指南

深入了解XML&#xff1a;初学者的全面指南 在当今数字化的世界中&#xff0c;数据的存储和传输至关重要。XML&#xff0c;即可扩展标记语言&#xff08;eXtensible Markup Language&#xff09;&#xff0c;作为一种强大的工具&#xff0c;在这方面发挥着重要作用。本文将为初…

【GESP】C++二级真题 luogu-b3924, [GESP202312 二级] 小杨的H字矩阵

GESP二级真题&#xff0c;多层循环、分支语句练习&#xff0c;难度★✮☆☆☆。 题目题解详见&#xff1a;https://www.coderli.com/gesp-2-luogu-b3924/ 【GESP】C二级真题 luogu-b3924, [GESP202312 二级] 小杨的H字矩阵 | OneCoderGESP二级真题&#xff0c;多层循环、分支…

Starlink卫星动力学系统仿真建模第七讲-卫星姿轨控系统(Attitude and Orbit Control System, AOCS)设计规范

以下是一份卫星姿轨控系统&#xff08;Attitude and Orbit Control System, AOCS&#xff09;设计规范的框架和核心内容示例&#xff0c;供参考&#xff1a; 卫星姿轨控系统&#xff08;AOCS&#xff09;设计规范 1. 总则 1.1 目的 本规范旨在规定卫星姿轨控系统的设计要求、…

STM32-有关内存堆栈、map文件

STM32堆栈空间大小设置_stm32堆栈分配大小-CSDN博客 STM32堆栈的大小及内存四&#xff08;五&#xff09;区的分析 - 天街小雨润地狠 - 博客园 .map文件的位置

DeepSeek、微信、硅基流动、纳米搜索、秘塔搜索……十种不同方法实现DeepSeek使用自由

为了让大家实现 DeepSeek 使用自由&#xff0c;今天分享 10 个畅用 DeepSeek 的平台。 一、官方满血版&#xff1a;DeepSeek官网与APP 首推&#xff0c;肯定是 DeepSeek 的官网和 APP&#xff0c;可以使用满血版 R1 和 V3 模型&#xff0c;以及联网功能。 网址&#xff1a; htt…

浅谈网络 | 容器网络之Cilium

目录 Cilium介绍Cilium是什么Cilium 主要功能特性为什么用Cilium&#xff1f; 功能概述组件概况BPF 与 XDPeBPF (Extended Berkeley Packet Filter)XDP (eXpress Data Path) Cilium介绍 Cilium是什么 Cilium 是一个开源网络和安全项目&#xff0c;专为 Kubernetes、Docker 和…