加入收藏 | 设为首页 | 会员中心 | 我要投稿 52站长网 (https://www.52zhanzhang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

为无线设备固件提供qemu模拟执行与Fuzzing漏洞挖掘

发布时间:2021-11-13 12:30:00 所属栏目:安全 来源:互联网
导读:科学怪人提供了一款虚拟环境来模糊无线固件,可以在运行时hook固件以提取其当前状态。然后,可以在虚拟环境中重新执行它们以进行fuzz。为此,需要将固件映像重新组合为可以用QEMU执行的ELF文件。通过基于Web的UI简化了固件映像的重组。 使用入门 基本配置 该
科学怪人提供了一款虚拟环境来模糊无线固件,可以在运行时hook固件以提取其当前状态。然后,可以在虚拟环境中重新执行它们以进行fuzz。为此,需要将固件映像重新组合为可以用QEMU执行的ELF文件。通过基于Web的UI简化了固件映像的重组。
 
使用入门
 
基本配置
 
该工具包含用于配置编译的基于Web的UI,这包括符号和内存转储的管理,Makefile和链接脚本由编译系统自动生成。可以通过以下命令启动编译系统,然后将浏览器导航到http://127.0.0.1:8000/
 
python3 manage.py runserver
编译系统已经包含符号和初始内存转储,可以浏览可用的项目和转储,而无需实际的硬件,可以使用IDA Pro或Ghidra等。符号会被截断为前1k个符号,因此,如果函数没有立即显示在列表中,请不要担心。
 
每个固件版本都位于一个不同的项目中,该项目存储在projects中,项目包含一个project.json文件,该文件包含符号名称和包括内存转储的内存布局。可用的符号可用于生成C语言中的补丁以及用于固件仿真。要为CYW20735编译所有补丁和仿真器,请运行以下命令:
 
make -C projects/CYW20735B1
通常,编译项目使用QEMU运行仿真就行。但是对于fuzz,将固件保持在不同的状态并从那里继续进行fuzz可能非常有趣。因此,如果当前没有任何支持的硬件,则可以在xmitstate以后跳过此步骤。
 
使用make -C projects/CYW20735B1编译项目后,可以模拟固件状态,直到输入Idle线程为止。执行以下命令:
 
qemu-arm projects/CYW20735B1/gen/execute.exe
或从Web前端执行它并获得更多信息:
 
Frankenstein:一款用于为无线设备固件提供qemu模拟执行和Fuzzing漏洞挖掘的框架Frankenstein:一款用于为无线设备固件提供qemu模拟执行和Fuzzing漏洞挖掘的框架
 
附加固件
 
execute.exeELF文件不会与外界通信。因此,它会终止在 Idle线程中。但是,为了Fuzzing固件,需要将其连接到真实主机并获得随机的无线输入中。
 
我们提供了一个额外的补丁程序hci_attach.exe,补丁程序抽象了Bluetooth Core Scheduler(BCS)的调用约定。BCS通常从硬件寄存器中获取输入,这些寄存器包含来自物理层的解码数据包。替换bluetoothCoreInt_C每312.5µs(1/2蓝牙时钟周期)调用BCS 的中断处理程序的调用。现在,此中断处理程序正在从Linux主机的标准输入(STDIN)读取数据。可以输入任意输入,即来自/dev/urandom的数据。
 
cat /dev/urandom | qemu-arm projects/CYW20735B1/gen/hci_attach.exe
hci_attach.exe还会在btattach主机上调用命令,该主机是Linux Bluez蓝牙堆栈的一部分。运行此文件后,主机将拥有一个新的蓝牙设备。可以使用hciconfig列出当前设备。将UART数据从仿真设备传递到Linux主机的hook安装在固件函数uart_directWrite和类似函数中。

(编辑:52站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读