IOT安全-QEMU使用

简介

QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器软件,在GNU/Linux平台上使用广泛。BochsPearPC等与其类似,但不具备其许多特性,比如高速度及跨平台的特性,通过KQEMU这个闭源的加速器,QEMU能模拟至接近真实电脑的速度。

根据冯诺依曼结构,一个计算机可分为:

  • 运算器
  • 控制器
  • 存储器
  • 输入设备
  • 输出设备

固件下载:https://people.debian.org/~aurel32/qemu/

命令大全:https://wiki.qemu.org/Documentation/Platforms

快速安装使用

如何快速的安装一个IOT测试环境镜像呢?Github上有比较方便的FAT(Firmware Analysis Toolkit )框架可以一键式启动一个镜像供使用方便我们进行漏洞研究,但很长时间我都没有把它给安装好(网友说需要科学上网,还未进行尝试),所以既然反正需要折腾,那就干脆直接折腾QEMU好了。

基础命令:

  • -m 指定内存大小
  • -M 指定虚拟机器「machine」的类型
  • -cpu 指定虚拟CPU的型号
  • -smp 指定对称多处理的核心数
  • -append 指定内核启动时使用的命令行参数「cmdline」

创建存储器

创建一个16G的虚拟磁盘文件

1
qemu-img create -f qcow2 drive 16G

虚拟硬件环境

  • 运算器、控制器 -> CPU、各种加速器*
  • 输入、输出设备 -> 网卡、CXL设备等

QEMU本身没有像VMware那样的GUI配置界面,所有配置通过命令行参数指定

1
2
3
qemu-system-x86_64 -machine q35 \
-smp 4,sockets=1,cores=4,threads=1 \
-m 4096

现在启动了一个机型为q35,处理器sockets1插槽cores4核threads4线程,-m内存4096MB,使用默认网络配置的虚拟机,由于没有启动盘,并不会启动某个系统

利用虚拟硬件环境启动系统

我们已经有了一块硬盘drive作为启动盘,指定给虚拟环境:

1
2
3
4
qemu-system-x86_64 -machine q35 \
-smp 4,sockets=1,cores=4,threads=1 \
-m 4096 \
-drive file=drive

会发现,指定后并没有什么区别,是因为这个“硬盘”我们没有给它“安装”系统

安装系统

参考为物理机安装系统:

  • 物理机硬盘 -> 虚拟磁盘文件drive
  • 安装媒介(写入了镜像的U盘) -> 系统镜像文件
1
2
3
4
5
qemu-system-x86_64 -machine q35 \
-smp 4,sockets=1,cores=4,threads=1 \
-m 4096 \
-drive file=drive \
-drive file=<系统镜像,如ubuntu-22.04.2-live-server-amd64.iso>,media=cdrom

按照ISO文件的引导进行安装即可,完成后可移除ISO文件重启

案例:模拟一个固件 CVE-2023-20073

下载固件

  • 官网途径

  • 设备中提取(后续补充)

  • 大佬分享(github等平台大佬的分享)

https://software.cisco.com/download/home/286287791/type/282465789/release/1.0.03.29

引用:https://cyan-io.github.io/posts/2023-07-30-qemu-quickstart/

疑难症


IOT安全-QEMU使用
https://cha111ng1.github.io/2023/08/23/IOT安全-QEMU使用/
作者
Cha111Ng1
发布于
2023年8月23日
许可协议