物联网安全之QEMU固件仿真

admin 2024年10月13日18:09:44评论15 views字数 3981阅读13分16秒阅读模式

点击蓝字 关注我们

物联网安全之QEMU固件仿真

QEMU介绍

物联网安全之QEMU固件仿真

QEMU是⼀款开源的机器仿真工具和虚拟化工具。仿真指在⼀个系统上模仿另⼀个系统,例如在linux设备上运行windows程序。虚拟化是⼀种软件程序,将物理系统划分为多个组件,让这些组件独立工作,实现将一个单一的系统分成几个虚拟机。

在IoT漏洞挖掘时,由于我们分析和开发平台⼀般多使用x86架构,IoT设备使用的往往不是x86架构,为了运行IoT设备固件中程序分析安全问题,就需要QEMU帮助模拟运行。例如在x86的PC上模拟MIPS的路由器固件。

QEMU安装

物联网安全之QEMU固件仿真

APT安装。

sudo apt-get install qemu (系统态)sudo apt-get install qemu-user-static (⽤户态)

编译安装。

sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build -ysudo apt-get install git-email -ysudo apt-get install libaio-dev libbluetooth-dev libcapstone-dev libbrlapi-dev libbz2-dev -ysudo apt-get install libcap-ng-dev libcurl4-gnutls-dev libgtk-3-dev -ysudo apt-get install libibverbs-dev libjpeg8-dev libncurses5-dev libnuma-dev -ysudo apt-get install librbd-dev librdmacm-dev -ysudo apt-get install libsasl2-dev libsdl2-dev libseccomp-dev libsnappy-dev libssh-dev -ysudo apt-get install libvde-dev libvdeplug-dev libvte-2.91-dev libxen-dev liblzo2-dev -ysudo apt-get install valgrind xfslibs-dev -ysudo apt-get install libnfs-dev libiscsi-dev -ygit clone https://github.com/qemu/qemu.gitcd qemu/mkdir -p bin/debug/nativecd bin/debug/nativeapt install flex -yapt install bison -y../../../configure --enable-debugmake

QEMU两种模式

物联网安全之QEMU固件仿真

1. QEMU用户模式(User Mode):可以模拟运行不同平台编译的固件程序,针对单独二进制文件。

用户模式模拟运行MIPS程序: 

1)通过file命令分析⼆进制⽂件goahead的架构信息是32位 LSB MIPS,因此要选择小端模拟程序qemu-mipsel-static进行仿真;

2)需要将qemu-mipsel-static程序拷贝到执行目录; 

3)由于程序goahead采用动态编译,执行时需要动态链接库,因此需要使用chroot命令修改执行根目录,设置固件文件系统中的目录为执行根目录并运行程序goahead;

物联网安全之QEMU固件仿真

4)浏览器访问http://127.0.0.1,看到goahead成功启动。

物联网安全之QEMU固件仿真

2. QEMU系统模式:使用系统模式时会在当前机器上模拟⼀个包括CPU等外围设备的虚拟机,用户需要提供内核和磁盘镜像,还可以进行网络配置,可配置性更高。这种模式下可以对整个固件进行模拟仿真。

a. 系统模式创建MIPS虚拟机:

sudo qemu-system-mipsel -M malta -kernel ./vmlinux-3.2.0-4-4kc-malta -hda./debian_wheezy_mipsel_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic -netuser,hostfwd=tcp::8080-:80,hostfwd=tcp::2222-:22 -nographic

1)参数分析:

-M malta 

选择目标硬件平台。

-kernel ./vmlinux-3.2.0-4-4kc-malta

指定内核镜像。

-hda ./debian_wheezy_mipsel_standard.qcow

指定磁盘镜像。

-append "root=/dev/sda1 console=tty0" 

配置内核启动参数。

-net nic -net user,hostfwd=tcp::8080-:80,hostfwd=tcp::2222-:22 

qemu网络由虚拟机的虚拟网卡和与虚拟网卡交互的网络后端组成。-net nic 在虚拟机中创建⼀张虚拟网卡,-netuser 后端使用用户协议栈方式。“hostfwd”将客户机的端口映射到宿主机,前面的是宿主机端口号,后面的是客户机端口号;由于需要scp和web服务,因此要映射两组。

-nographic

禁用图形输出,重定向串行I/O到控制台。

物联网安全之QEMU固件仿真

2)挂载dev和proc。

mount -o bind /dev/ ./squashfs-root/dev mount -t proc /proc ./squashfs-root/proc/

3)通过scp将固件拷贝进mipsel虚拟机,修改程序执行根目录。

chroot ./squashfs-root/ sh

4)启动程序 goahead。

b. 系统模式创建AARCH64虚拟机

./qemu/bin/debug/native/qemu-system-aarch64 -machine virt -cpu cortex-a53 -nographic -m 2048-kernel Image -append "noinitrd root=/dev/vda rw console=ttyAMA0 loglevel=8" -driveif=none,file=rootfs.ext4,id=hd0 -device virtio-blk-device,drive=hd0 -net nic -nettap,ifname=tap0,script=no,downscript=no

1)参数分析: 

-machine virt

选择目标硬件平台,不同的qemu仿真程序支持的硬件平台不同。 

-cpu cortex-a53

选择cpu。

-m 2048

指定虚拟机内部的内存大小。

-kernel Image

指定内核文件。

-append "noinitrd root=/dev/vda rw console=ttyAMA0 loglevel=8" 

传递给内核的参数。

-drive if=none,file=rootfs.ext4,id=hd0

指定文件系统磁盘镜像。

-device virtio-blk-device,drive=hd0

指定guest上总线挂载的外部设备 

-net nic -net tap,ifname=tap0,script=no,downscript=no

网络配置,与MIPS虚拟机的user模式不同,此处选择tap模式。

虚拟机成功启动:

物联网安全之QEMU固件仿真

TAP模式配置网络 

由于qemu版本的原因,不支持用户协议栈模式,选择使用使用TAP模式。TAP模式中会在宿主机上建立一个虚拟网卡tap0,虚拟机通过这块网卡和外部进行通信。

物联网安全之QEMU固件仿真

1)主机操作:开启IP转发,实现宿主机上网卡间流量转发。

echo 1 > /proc/sys/net/ipv4/ip_forward

2)虚拟机操作:启动Qemu,配置ip。

 ifconfig eth0 172.16.14.250

物联网安全之QEMU固件仿真

3)主机操作:配置主机tap0网卡,需要和宿主机ip在同一网段。

ifconfig tap0 172.16.14.251

物联网安全之QEMU固件仿真

4)主机操作:添加正确的静态路由

物联网安全之QEMU固件仿真

5)主机操作:配置iptables打开NAT功能。

虚拟机是通过借助宿主机访问外部的,配置iptables规则对来自 172.16.14.0/24且从 eth0出去的包,要进行NAT,同时会对返回的包进行NAT。 

sudo iptables -t nat -A POSTROUTING -s 172.16.14.0/24 -o eth0 -j MASQUERADE

设置之后使用iptables-persistent 保存 iptables: 

sudo apt install iptables-persistent sudo netfilter-persistent save

6)虚拟机操作:添加正确的静态路由。

物联网安全之QEMU固件仿真

总结

物联网安全之QEMU固件仿真

固件仿真是固件安全分析重要的一环,在缺少设备或调试功能不可得的情况下,缺少固件仿真能力会使得漏洞分析流程无法进行。现有一些自动化固件仿真工具,省去了固件解包、架构信息识别、修复设备文件、配置网络等过程,但本质上还是QEMU工具的使用。考虑到物联网设备愈发灵活且复杂的情况下,自动化仿真工具不再是⼀种百发百中的解决方案,这时候就需要我们熟悉QEMU工具,做出灵活调整。

往期精彩合集

重温经典 栈溢出利用

drozer自动化测试避坑指南

Threat Modeling 联想优秀实践

源代码安全之自动化扫描工具Checkmarx

新版安卓ARM64 修改TracerPid 反调试bypass

记一次被burpsuite坑死的任意文件上传

浅谈ChatGPT|大语言模型安全

Raycast携ChatGPT升级个性化的高效工作环境

【重大福利在文末↓↓↓】CVE-2022-21198 Intel SMM 漏洞分析

物联网安全之FirmAE固件模拟仿真

联想GIC全球安全实验室(中国)

[email protected]

物联网安全之QEMU固件仿真

原文始发于微信公众号(联想全球安全实验室):物联网安全之QEMU固件仿真

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月13日18:09:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   物联网安全之QEMU固件仿真https://cn-sec.com/archives/1898094.html

发表评论

匿名网友 填写信息