为无线设备固件提供qemu模拟执行与Fuzzing漏洞挖掘
发布时间:2021-11-13 11:58 所属栏目:53 来源:互联网
导读:科学怪人提供了一款虚拟环境来模糊无线固件,可以在运行时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和类似函数中。 (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读