Qemu复现雄迈摄像头固件漏洞
QEMU 是一个面向完整 PC 系统的开源仿真器。除了仿真处理器外,QEMU 还允许仿真所有必要的子系统,如连网硬件和视频硬件。它还允许实现高级概念上的仿真(如对称多处理系统(多达 255 个 CPU)和其他处理器架构(如 ARM 和 PowerPC)。
2020年2月4日,有外国研究人员发表了一篇文章:基于Xiongmai的DVR,NVR和IP摄像机的固件后门漏洞。最新的固件版本虽然默认禁用了Telnet访问和调试端口(9527/tcp),但打开了9530/tcp端口,攻击者可以利用这个端口发送一个特殊的命令来启动Telnet守护进程,并使用固定密码访问shell。从目前情况来看,已有几十个品牌和数百个型号易受到黑客攻击,其中一位国外研究人员列出了一些易受攻击的产品。
本文将通过QEMU模拟雄迈摄像头(基于固件),实现对该漏洞的复现。
Qemu实现过程(Qemu安装和虚拟机启动及配置见附录)
固件:AHB7804R-LMS2015.bin(文件如下)
通过binwalk提取出文件系统,如下:
将_user-x.cramfs.img.extracted中的squashfs-root文件夹,复制到_romfs-x.cramfs.img.extracted的/usr中。
同理,将_custom-x.cramfs.img.extracted中的squashfs-root文件夹,复制到_romfs-x.cramfs.img.extracted/squashfs-root/mnt/custom中。
Qemu虚拟机开启固件服务
虚拟机与主机的网络相通,把提取出的文件系统传入Qemu虚拟机。
挂载文件系统中的dev和proc文件夹到虚拟机。
mount -o bind /dev ./squashfs-root/dev
mount -t proc /proc ./squashfs-root/proc
模拟进入固件的shell。
chroot ./squashfs-root/ sh
固件服务开启。
cd /etc/init.d
./rcS
PS:启动文件中会修改ip,这里需要恢复ip
ifconfig eth0 192.168.3.2/24
再次进入固件shell,开启服务
dvrHelper /lib/modules /var/Sofia 192.168.3.2 9578 1
攻击效果
POC执行前
POC执行后(https://github.com/Snawoot/hisilicon-dvr-telnet)
附录:
虚拟机启动及网络配置
- 开启虚拟机
qemu-system-arm -M versatilepb -kernel vmlinuz-3.2.0-4-versatile -initrd initrd.img-3.2.0-4-versatile -hda debian_wheezy_armel_standard.qcow2 -append "root=/dev/sda1" -net nic -net tap,ifname=tap1,script=no,downscript=no -nographic
- 主机与虚拟机的网络配置
主机
tunctl -t tap0 -u `whoami` #这边新建一张网卡和虚拟机进行通信
ifconfig tap0 192.168.3.1/24
虚拟机
ifconfig eth0 192.168.3.2/24
Qemu仿真必需信息:
- 模式
- user mode:开启单一二进制文件
- system mode:搭建虚拟机进行系统仿真
- 架构:
- arm
- mips:大端mips、小端mipsel
- user mode(可执行二进制文件仿真,即:执行其中的某一程序):
- 不依赖动态链接库(安装:apt-get install qemu-user-static)
- qemu-arm-static
- qemu-mips-static
- qemu-mipsel-static
- 依赖动态链接库
- qemu-arm
- qemu-mips
- qemu-mipsel
- 不依赖动态链接库(安装:apt-get install qemu-user-static)
system mode:(用户配置的Qemu:指定运行的内核或者虚拟硬盘等文件)
- qemu-system-arm
- qemu-system-mips
- qemu-system-mipsel
PS:架构选择(查看文件信息)
file 文件
Qemu使用
- user mode(可执行二进制文件仿真):开启固件中的单一服务
1. 查找开源组件的架构、32-bit或64-bit、大小端等信息
2. 根据(1)的信息选择对应的qemu类型
3. 将选择的qemu拷贝到要仿真固件的squashfs-root目录下,在squashfs-root目录下执行命令cp `which qemu-mipsel-static` ./
4. 使用chroot进行仿真命令执行,如sudo chroot ./qemu-mipsel-static bin/busybox
- system mode搭建指定系统虚拟机
Qemu安装:
在线安装
Ubuntu:apt-get install qemu Centos:yum install qemu-kvm
源码安装
官网源码下载:https://www.qemu.org/download/ wget https://download.qemu.org/qemu-版本?.tar.xz tar xvJf qemu-版本?.tar.xz cd qemu-版本? (mkdir build、cd build) ./configure(./configure --target-list=arm-softmmu --audio-drv-list=) make
PS
编译中使用的参数 --enable-kvm:编译 KVM 模块,使 Qemu 可以利用 KVM 来访问硬件提供的虚拟化服务 --enable-vnc:启用 VNC --enalbe-werror:编译时,将所有的警告当作错误处理 --target-list:选择目标机器的架构。默认是将所有的架构都编译,但为了更快的完成编译,指定需要的架构即可 安装 make -j 12 CPU会影响编译速度,一般设置为CPU核数的双倍 make install | tee make-install.log
源码安装报错解决:
./configure中的报错: zlib libs 安装:apt-get install zlib1g zlib1g-dev glib 安装:apt install libglib2.0-dev pixman 安装:apt-get install libpixman-1-dev 再次 ./configure
安装完后检查:
VNC support yes: KVM support yes (不用重启电脑)qemu-,tab两次: ubuntu使用在线安装,有
最新评论