引言
进入设备运行态,获取运行态文件系统数据是目前对网络设备安全性、内部机制研究的第一步。分析设备的引导启动过程是目前此类研究的关键一步,各大设备厂商提供的云产品镜像,给安全研究员利用qemu、vmware相关产品分析该过程提供了极大的便利,本文总结了一些分析该过程常见的几种操作及思路。
引导基础知识
Linux 系统的引导方法多样,具体取决于硬件架构、固件接口(如 BIOS 或 UEFI)以及用户需求。以下是常见的 Linux 系统引导方法及其特点:
-
1. 传统 BIOS + MBR 引导 适用场景:旧硬件(不支持 UEFI)。 引导流程: BIOS 初始化硬件后读取 MBR(主引导记录,位于磁盘的第一个扇区)。 MBR 中的引导程序(如 GRUB Stage 1)加载第二阶段引导程序(如 GRUB Stage 2)。 GRUB 显示菜单供用户选择内核,最终加载 Linux 内核和 initramfs。
工具:
GRUB Legacy:旧版 GRUB,已逐渐被 GRUB2 取代。 GRUB2:主流引导加载程序,支持多系统启动和复杂配置。 LILO(Linux Loader):较老的引导程序,现已较少使用。
-
2. UEFI + GPT 引导 适用场景:现代硬件(支持 UEFI 和 GPT 分区表)。 引导流程: UEFI 固件直接读取 GPT 分区表中的 ESP(EFI System Partition,通常为 FAT32 格式)。 从 ESP 加载 EFI 应用程序(如 grubx64.efi 或 vmlinuz.efi)。 EFI 应用程序加载内核并启动系统。
工具:
GRUB2:支持 UEFI,需安装到 ESP 分区。 systemd-boot(原 gummiboot):轻量级 UEFI 引导程序,集成于 systemd。 rEFInd:第三方 UEFI 引导管理器,支持自动检测多系统内核。 直接 EFI 启动:通过 efibootmgr 配置 UEFI 直接加载 Linux 内核(vmlinuz)。
-
3. 网络引导(PXE)适用场景:无盘工作站、批量部署服务器。引导流程: 客户端通过网卡 PXE 固件从 DHCP 服务器获取 IP 和 TFTP 服务器地址。下载引导文件(如 pxelinux.0)和内核镜像。加载内核并启动系统(可能挂载网络文件系统如 NFS)。
工具:
PXELINUX(SYSLINUX 分支):配置 TFTP 服务器提供引导文件。GRUB2:支持网络引导(HTTP、TFTP 等协议)。
在目前设备虚拟机以及笔者的研究经历中,主要面对过有LILO (Linux Loader)
以及GRUB2
。后续的内容也将围绕这两者进行介绍。
LILO (Linux Loader)
此处以ivanti 9.1r18.x
为例,虚拟机启动之后会进入LILO bootloader
界面,里面会呈现current
,rollback
,factory-reset
等三个分区(视不同情况呈现不同)。
虚拟机启动
目前网上公开的针对ivanti 9.x
系列的分析文章主要以入侵取证为主,因此分析目标以硬件设备为主,工具主要为qemu,通过qemu加载其硬盘img镜像的方法来分析其磁盘加密的方式。在我们的研究中,较为方便的是运行vmware虚拟机,但是在研究过程中发现以qemu的方式对机器性能依赖更少,将vmware vmdk磁盘转为img镜像也很方便,使用以下命令即可
qemu-img convert -O raw PSA-V-VMWARE-ICS-9.1.R18.xxxxxx-VT-disk1.vmdk test.img
qemu虚拟机的启动命令为(virtio-net网络)
qemu-system-x86_64 -serial stdio -device ich9-ahci,id=ahci -drive file=test.img,id=disk,if=none -device ide-hd,drive=disk,bus=ahci.0
系统进入、及网络配置
目前ivanti官方已经停止对9.x系列维护,因此使用熟知的"init=//bin/sh"方式即可进入初始化文件系统,键入的时机在qemu启动下较为明显,启动后的光标处即可;在vmware中,通过↑↓选择current
后,直接键盘键入即可(虽无提示)
进入初始化文件系统后,已经可对感兴趣的文件、硬盘分区进行本地获取,因此现阶段需解决与host主机网络通信。在该文件系统中,/{kernelnumber}/modules/
下已经存有相关驱动,其中就包括针对vmware、qemu 各类型网卡的驱动文件,安装即可(安装成功后,ifconfig 可看到eth0网卡)
#for vmware *mount -t proc none /proc/sbin/insmod /kernelnumber/modules/vmxnet.ko/sbin/insmod /kernelnumber/modules/vmxnet3.ko/sbin/ifconfig eth0 a.b.c.d netmask 255.255.255.0ping -c 1 a.b.c.x# for qemu *# qemu add net interface# qemu-system-x86_64 -serial stdio -device ich9-ahci,id=ahci -drive file=test.img,id=disk,if=none -device ide-hd,drive=disk,bus=ahci.0 -nic user,model=virtio-net-pcimount -t proc none /proc/sbin/insmod /kernelnumber/modules/virtio_net.ko/sbin/ifconfig eth0 10.0.2.Xping -c 1 10.0.2.2# 10.0.2.2 为virtio-net-pci模式下主机ip
之后可通过网络进行文件传输
dd if=/dev/loop6 bs=1M > /dev/tcp/192.168.0.1/1337
持久化后门
到这一步,实际上通过对ivanti的架构分析以及服务细节,已经可植入持久化的shell进入方式。涉及磁盘的解密即可通过lilo-pulse-secure-decrypt
等开源工具,以及逆向内核等方法分析细节。
GRUB2
目前公开资料中针对ivanti 22.x
grub2
的加密文件系统解密方法,以及进入运行系统的方法较多。最为方便的一种是直接修改虚拟机挂起后直接修改vmem
文件(9.x系列使用该方法会直接导致重启),直接进入运行态的系统,结合对ivanti的分析,通过这一步再加修改、增加某些关键机制文件可在重启后直接获取shell入口方法。
LUKS
GRUB2 自 2.00 版本开始原生支持 LUKS1 加密分区的解密,2.06 进一步支持 LUKS2 格式,提供更灵活的密钥管理和大扇区优化。也是目前在研究中最为常见的用于文件系统加密的方法,解密的主要方法是找到相关的lvmkey。
目前针对invanti22.x的公开资料中主要是通过init=//bin/sh
(早已修复)进入初始化系统,直接读取lvmkey,位于/etc/lvmkey
中,后进行磁盘解密挂载
-
• High Signal Detection and Exploitation of Ivanti's Pulse Connect Secure Auth Bypass & RCE
或是swing师傅,通过逆向内核直接解密分区系统,提取lvmkey-CVE-2025-0282 Ivanti Connect Secure VPN 栈溢出漏洞分析
在笔者的研究经历中也有通过观察直接从内核调试中直接dump,以下进行详细阐述:对某设备的磁盘进行挂载后发现,其初始化文件系统为data
,应是进行了加密
后通过qemu对其进行引导启动查看日志
发现较为明显的关键字 "Decryptrd",通过binwalk -e kernel.img
,提取kernel,逆向分析
对kernel进行调试,dump出解密后的初始化文件系统
后续从文件系统中找到lvmkey,进行加密磁盘的挂载,获取并可修改文件系统
lzma -d dump01-82557165.lzma cpio -id < dump01-82557165 cryptsetup --key-file root-key luksOpen /dev/sdb3 rootmount /dev/mapper/root ./rootfs/
总结
以上总结了相关针对加密磁盘的一些思路、方法和常用的调试命令,内容较为基础,主要为互联网相关知识的梳理总结。通过分析目标系统整体文件系统,通常还能发现其他很多有趣的点,比如厂商license的格式细节、内部服务接口等敏感信息,对于体系研究都能有不错的启发。以上内容还请读者进行指正。
原文始发于微信公众号(自在安全):Ivanti Connect Secure加密磁盘镜像取证与解密技术初探
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论