固件外设仿真处理工具——Laelaps

0 .论文(先敬大佬)

Cao C, Guan L, Ming J, et al. Device-agnostic firmware execution is possible: A concolic execution approach for peripheral emulation[C]//Proceedings of the 36th Annual Computer Security Applications Conference. 2020: 746-759.

论文地址:Device-agnostic Firmware Execution is Possible: A Concolic Execution Approach for Peripheral Emulation | Proceedings of the 36th Annual Computer Security Applications Conferenceicon-default.png?t=O83Ahttps://dl.acm.org/doi/10.1145/3427228.3427280

关键点:符号执行优化、工具集成完整、concolic混合执行

1 .Laelaps部署

1.1 Docker安装(github也提供VM文件)

安装在VM虚拟机中,使用的是Ubuntu 18.04版本

sudo docker pull guanleustc/laelaps:1.0

Sudo docker run -it guanleustc/laelaps:1.0 /bin/bash

若无docker,可以通过sudo snap install docker进行安装

进入系统中

sudo docker run -it guanleustc/laelaps:1.0 /bin/bash

1.2 源码安装

1.2.1 安装 Python virtualenvwrapper 

链接:https://virtualenvwrapper.readthedocs.io/en/latest/

安装virtualenvwrapper可以建立一个隔离的环境,将环境所需的依赖进行单独存储,而不污染本地依赖环境。

Virtualenvwrapper的使用教程链接:https://zhuanlan.zhihu.com/p/70389886

以下所有步骤都在此虚拟环境中操作。因此,请先执行此命令。

workon laelaps

1.2.2 构建 qemu-3.0.0

sudo apt-get build-dep -y qemu

mkdir ./build && cd ./build

../qemu-3.0.0/configure --python=python3 --target-list="arm-softmmu" --disable-vnc --disable-curses --disable-sdl --disable-hax --disable-rdma --enable-debug

make

可以在以下路径中找到PATH.qemu-system-armarm-softmmu/qemu-system-armqemu-system-arm

1.2.3 下载 ARM GCC 工具链

链接:

https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2

解压缩并将目录放在PATH.BIN

1.2.4 安装 angr

wget https://files.pythonhosted.org/packages/35/19/07442cc5789f6c40eae7ea2bd34a04402fa94f9e3d94cba0ab8354d231cf/angr-8.19.2.4.tar.gz

tar xf angr-8.19.2.4.tar.gz

cd angr-8.19.2.4

pip install -e ./

CD 到 angr 的根目录,并使用以下命令对其进行操作。

patch -p1 < $(root_of_this_repo)/p.patch

1.2.5 安装 avatar2

cd avatar2

pip install -e ./

1.2.6 安装 concolic

cd concolic

pip install -e ./

此时手动源码安装完成

2 测试STM32100E-EVAL MCU_RTOS

测试采用的是docker部署模式进行演示,若使用是源码编译,唯一不同的是就是需要输入workon laelaps,进入virtualenvwrapper 虚拟环境。

2.1 固件文件

固件文件存储在项目PATH的proj/proj_stm_stm32100e_eval_rtos_readWrite中

2.2 测试过程

  1. 运行内部的driver.py脚本启动仿真

./driver.py

  1. Read操作过程

  1. Write操作过程

  1. 处理完所以的read和write请求后,系统进行等待状态,程序进入中断
  2. 在另一个终端输入

./scratch/kill.sh

即可停止仿真程序

注:若出现无法找到Killall命令

执行命令,安装所需依赖即可

apt-get install psmisc

2.3 测试结束

仿真结束后会在相应的文件夹中生成logfiles和myavatar日志文件夹,如下图

2.3.1 Logfiles 路径检索结果

Debug.txt文件是程序在执行中的输出结果,例如程序执行中输出hello world ,此时输入的结果会被debug保留在debug.txt文件中

Laelaps.txt中存储着程序执行过程,和终端输出相同

Real_path.txt记录的是外设路径检索的结果,即外设仿真模拟路径的最终结果

2.3.2 Myavatar 仿真结果

此结果是在Avatar2的结果上进行的改进

其中qemuTarget0.log是qemu执行的日志,即路径选择后,程序执行的报告

QemuTarget0_err.txt 记录了程序内部函数跳转过程,表示方式和IDA中的反编译窗口一样

最后记录了程序错误点

QemuTarget0_out.txt 记录了程序的中断过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小吗喽_jie

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

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

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

打赏作者

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

抵扣说明:

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

余额充值