探秘 Zyxel 设备:固件提取分析

2024-04-05 952 0

1 前言

部门近期应急了一个Zyxel V_P_N未授权 RCE,在尝试进行漏洞复现的过程中,发现在.bin中无法提取文件系统,了解得知.bin文件是ZIP格式的固件映像受密码保护。 通过如下文章学习到了Zyxel固件解密方法[1],以此篇文章记录并说明踩过的坑。

Zyxel V_P_N Firewall 是一种网络安全设备,由 Zyxel 通信公司提供。它结合了防火墙和 V_P_N(Virtual Private Network,虚拟专用网络)功能,旨在保护企业⽹络免受未经授权的访问和恶意活动的威胁,并提供安全的远程访问解决⽅案。

2 固件提取

2.1 问题分析

固件版本 V_P_N 100_V5.30(ABFV)

解压V_P_N100_V5.30(ABFV.0)C0.zip

探秘 Zyxel 设备:固件提取分析插图

图2-1 解压V_P_N100_5.30压缩文件

尝试在.bin 文件中提取文件系统,并没有提取出文件系统。

$ binwalk -e 530ABFV0C0.bin
$ cd _530ABFV0C0.bin.extracted/
$ ls
0.zip         etc_writable  fwversion         wtp_image
compress.img  filechecksum  kernelchecksum    wtpinfo
db            filelist      kernelv_p_n100.bin

因为文件530ABFV0C0.bin是 ZIP 格式的固件映像受密码保护,也没有找到有关 Zyxel 使用密码的信息,但是固件一起的PDF文章中有一段对530ABFV0C0.ri的描述如下:

探秘 Zyxel 设备:固件提取分析插图1

图2-2 530ABFV0C0.ri作用描述

大致翻译为.ri文件是一个二进制固件恢复映像文件,仅在系统固件损坏紧急情况下使用。如果正常的固件升级文件(.bin)不能使用,且系统无法启动,这个文件可以用于尝试恢复固件至可用状态。由于.ri文件通常用于恢复损坏的固件,它可能包含完整的系统映像,所以尝试分析.ri文件。

尝试使用binwalk提取bin同目录下.ri文件。

$ binwalk -e 530ABFV0C0.ri

探秘 Zyxel 设备:固件提取分析插图2

图2-3 binwalk提权.ri文件

ri文件中提取出 240 和 240.7z。

探秘 Zyxel 设备:固件提取分析插图3

图2-4 ri文件中提取出240和240.zip

240.7z 为 240 文件的压缩包,所以继续提取 240 文件。

$ cd _530ABFV0C0.ri.extracted/
$ binwalk -e 240

探秘 Zyxel 设备:固件提取分析插图4

图2-5 binwalk提权240文件

可以在提取到的_240.extracted文件夹下看到 zyinit 二进制文件,linux 常规的初始化启动进程就是init,所以将焦点放在了zyinit。

探秘 Zyxel 设备:固件提取分析插图5

图2-6 240文件提取内容

参考文章中提到分析 zyinit 发现它启动了其他外部命令,特别是zld_fsextract命令。

zld_fsextract二进制文件中搜索密码,有很多很好的分析点,这里就不多赘述感兴趣可以自行跟进。发现 unzip 二进制文件使用这些选项来解压缩具有特定密码的文件,该密码在参数-P中定义。根据在线找到的信息并进行快速分析,二进制文件似乎根据二进制文件名称或二进制文件内容以某种方式计算解压缩密码。所以不需要密码,zld_fsextract使用 unzip 即可拿到镜像文件。

现在可以模拟 MIPS 环境执行二进制文件并尝试提取文件了。

2.2 QEMU 模拟

先来判断一下需要模拟什么环境,这里N32有一个比较大的坑。

$ file zld_fsextract 
zld_fsextract: ELF 32-bit MSB executable, MIPS, N32 MIPS64 rel2 version 1 (SYSV), statically linked, stripped

通过判断zld_fsextract文件类型, 一开始使用qemu-system-mips内核镜像选择vmlinux-3.2.0-4-5kc-malta结果环境启动不了。第二次换内核镜像为vmlinux-2.6.32-5-4kc-malta环境成功启动,但是运行zld_fsextract报错不兼容。

# ./zyinit
-bash: ./zyinit: cannot execute binary file

分析得知 N32 是用在32位和64位 MIPS 处理器上的一种中间形式[2],它允许使用64位寄存器和内存寻址,但保持了32位数据模型,这样可以减少由于64位数据类型较大而带来的性能和内存使用上的开销。所以需要选择支持N32 ABI的MIPS64架构的模拟器来运行。

准备文件系统和内核镜像:

vmlinux-2.6.32-5-5kc-malta  内核镜像
debian_squeeze_mips_standard.qcow2  文件系统

启动模拟环境:

$ qemu-system-mips64 -M malta -kernel vmlinux-2.6.32-5-5kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic -net tap,ifname=tap0,script=no,downscript=no -nographic

启动后用户名和密码都是root即可登录模拟系统.

接下来在宿主机创建一个网卡,是qemu内能和宿主机通信。

宿主机安装依赖:

$ sudo apt-get install bridge-utils uml-utilities

将如下代码保存为net.sh并运行即可:

sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tap0 -j ACCEPT
sudo iptables -I FORWARD 1 -o tap0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo ifconfig tap0 192.168.100.254 netmask 255.255.255.0

然后配置qemu虚拟系统的路由,在qemu虚拟系统运行如下net.sh并运行。

#!/bin/sh
ifconfig eth0 192.168.100.2 netmask 255.255.255.0
route add default gw 192.168.100.254

//虚拟系统可能没有vimnano,使用echo一行一行写。

这样宿主机和模拟环境就可以网络互通了。

2.3 QEMU 固件提取

将刚才问题分析时在宿主机上整个文件夹上传到qemu系统.

$ scp -r V_P_N100/ [email protected]:V_P_N100

这样就可以在虚拟机使用zld_fsextract二进制文件获取固件映像信息了,记得将530ABFV0C0.bin移动到zld_fsextract同目录下。

# cp 530ABFV0C0.bin _530ABFV0C0.ri.extracted/_240.extracted/
# cd _530ABFV0C0.ri.extracted/_240.extracted/
# ./zld_fsextract 530ABFV0C0.bin -s list

使用zld_fsextract二进制文件提取固件且无需指定密码。

# ./zld_fsextract 530ABFV0C0.bin ./unzip -s extract -e code

这时会在/rw/路径下生成compress.img,将这个文件传输到宿主机使用binwalk提取即可得到squashfs-root文件系统。

# ls -al /rw/
total 94480
drwxr-xr-x  3 root root     4096 Mar 19 07:58 .
drwxr-xr-x 23 root root     4096 Mar 19 07:59 ..
-r--r--r--  1 root root 96575488 Apr 19  2022 compress.img
drwxr-xr-x  6 root root     4096 Apr 19  2022 etc_writable
-rw-r--r--  1 root root      139 Apr 19  2022 filechecksum
-rw-r--r--  1 root root    35655 Apr 19  2022 filelist
-rw-r--r--  1 root root      327 Apr 19  2022 fwversion
-rw-r--r--  1 root root     8375 Apr 19  2022 wtpinfo

这里是宿主机提取compress.img得到squashfs-root截图。

探秘 Zyxel 设备:固件提取分析插图6

图2-7 镜像中提取出文件系统

拿到固件就可以开开心心进行漏洞复现和分析啦。

2.4 总结

参考文章中不仅提到了固件提取,还进行了密码分析。读者如果感兴趣可以跟着继续深度学习,这里只是将实操过程中的步骤进行更详细的展示,也是一次学习过程的笔记记录。

作者:fan@知道创宇404实验室
原文链接:https://paper.seebug.org/3137/

3 相关链接

[1]Zyxel固件提取和密码分析

[2] MIPS ABI n32意味着什么


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

webpack打包站点,js文件名批量获取思路
加密对抗靶场enctypt——labs通关
【论文速读】| 注意力是实现基于大语言模型的代码漏洞定位的关键
蓝队技术——Sysmon识别检测宏病毒
内网渗透学习|powershell上线cs
LLM attack中的API调用安全问题及靶场实践

发布评论