首先先简单介绍一下QEMU:QEMU是一款开源的机器模拟器和虚拟器(virtualizer)。作为机器模拟器,它能够在某一架构之上运行为另一架构而编写的程序,比如在PC上分析一些嵌入式设备的固件。作为虚拟器,它能够直接在宿主机CPU上执行代码。
磊科路由器后门事件的话可以看看这篇文章:http://www.freebuf.com/articles/terminal/55300.html。虽然有点久了,但还算经典,值得一试。
在复现后门之前,先讲解安装与配置QEMU的步骤。具体如下:
1.下载源码,配置与安装:源码下载地址是http://wiki.qemu.org/Download。由于仅需模拟MIPSEL CPU,可使用 ./configure --target-list=mipsel-softmmu来配置Makefile,加快安装速度。在make,make install之前,要先检查一下本机是否有g++编译器,安装时会用到。
2.下载openwrt-malta-le-vmlinux-initramfs.elf。这个程序为路由器固件提供运行环境。下载地址是:https://downloads.openwrt.org/snapshots/trunk/malta/generic/。malta平台用于在QEMU中模拟MIPS系统。
3.搭建网桥,以便能从外部访问虚拟机。以Ubuntu为例,首先先安装uml-utilities和bridge-utils,然后执行"sudo gpasswd -a 用户名 uml-net",将运行虚拟主机的用户的用户名(通常是你的ubuntu登录用户名)添加到uml-net用户组,使宿主机机能够访问网络接口,然后重启。随后编辑/etc/network/interfaces文件,添加如下内容:
auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user 用户名
auto br0
iface br0 inet dhcp
bridge_ports all tap0
最后执行
sudo /sbin/ifup tap0
sudo /sbin/ifup br0
来使设置生效。
4.搭建虚拟机与宿主机的文件传输通道。方法如下:
1. 使用dd创建一个文件
dd if=/dev/zero of=Desktop/share.img bs=1M count=350
2. 格式化share.img文件
mkfs.ext4 Desktop/share.img
3. 在宿主机上创建一个文件夹,如mkdir /tmp/share,然后执行mount -o loop Desktop/share.img /tmp/share
这样,在宿主机上把需要传输给虚拟机的文件放到/tmp/share下即可。
准备妥当后,便可以启动虚拟机了:
sudo qemu-system-mipsel -kernel openwrt-malta-le-vmlinuxinitramfs.elf -M malta -net nic,vlan=0,macaddr=23:33:33:33:33:33 -net tap,vlan=0,ifname=tap0,script=no -serial tcp::6666,server –nographic -drive file=Desktop/share.img
其中macaddr和端口地址可以自行指定。
随后便可以以Telnet的形式登陆。登陆完成后,通过dmesg的输出找到新挂载的img的设备名,然后进行挂载。随后设置root账户的密码,此时ssh服务会启动。
至此,安装与配置QEMU的工作完成。接下来讲解固件文件的提取与运行。
固件的提取使用的是binwalk,下载地址是https://github.com/devttys0/binwalk。下载完成后使用其中的setup.py和deps.sh(限Debian/Ubuntu用户,其他操作系统用户请按照INSTALL.md中的内容安装依赖包)安装binwalk及其依赖包。安装完成后执行”binwalk -e 固件名“来解压固件。然后将解压后的固件下载到虚拟机中,使用chroot命令来更改根目录。随后运行igdmptd后门程序。这里“already in use”是因为我之前已经开启过了QAQ。
运行netstat -an可以发现53413端口已开启。
最后便可以测试该后门了。
至此,QEMU安装与磊科路由器igdmptd后门程序复现便完成了,撒花~
参考文献:
http://n1trox.github.io/pdf/NW765firmware.pdf
http://blog.csdn.net/defeattroy/article/details/5261822
http://blog.csdn.net/scaleqiao/article/details/45197093
后记——不可不看的避坑指南:
-
安装QEMU时遇到“The following packages have unmet dependencies”怎么办?
答:看看这个:http://askubuntu.com/a/142808
-
dmesg返回的内容太多,怎么快速寻找挂载的img的设备名?
答:dmesg | grep "350 MiB"。其中“350”是之前生成文件时指定的大小。
-
即使是Ubuntu用户,也使用了sudo,安装binwalk依赖库的时候也可能会有部分库安装失败。这时就只能一个个自己手动装了QAQ。
-
虚拟机能够ping通,22端口也开了,为什么ssh连接不了?
答:iptables的问题。配置一下允许访问就行了。别忘了也给53413端口配一下哦。
inn0team是一个正在成长的小安全团队
微信号:inn0team
长按可关注我们
这篇没有点击阅读原文,哈哈哈哈哈哈
本文始发于微信公众号(inn0team):QEMU安装与磊科路由器igdmptd后门程序复现教程
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论