解密SonicOSX固件:逆向工程SonicWall防火墙加密机制
摘要
Bishop Fox研究人员成功逆向工程了保护SonicWall SonicOSX固件的加密机制,通过分析VMware OVA镜像提取密钥,并逐步解密固件文件系统。研究团队在DistrictCon Year 0会议上展示了详细过程,并开源了自动化工具Sonicrack,用于从VMware虚拟机组中提取密钥并解密NSv固件镜像。
背景
SonicWall生产一系列下一代防火墙设备,广泛用于大型企业网络边界保护。设备型号包括SOHO、TZ(消费者和小型企业)、NSa(中型企业)、NSsp和Supermassive(大型企业),以及NSv(虚拟化和云部署)。这些设备运行SonicOS操作系统,目前有四个主要版本(5至8)处于活跃支持状态。
在7.1.1版本之前,硬件设备的固件镜像使用专有的SIG加密格式分发,而NSv虚拟机使用LUKS加密保护嵌入式卷。2022年2月,Catalpa发布了一种从内存中提取加密密钥并解密NSv卷的技术。2023年12月,Praetorian改进了该技术,逆向工程了密钥派生过程,并发布了解密静态NSv镜像的工具。
从7.0.1版本开始,SonicWall将操作系统升级为SonicOSX,带来了平台功能、OS架构、文件系统组织和固件打包的重大变化。值得注意的是,7.1.1及更高版本的NSv虚拟机使用与硬件设备固件相同的专有SIG加密。
演练第一部分:提取密钥
在本演练中,我们使用SonicOSX版本7.1.1-7047的Open Virtualization Application(OVA)版本。目标是解包VMware OVA镜像,获取根文件系统,以便分析其中的文件并了解操作系统功能。
初始步骤
OVA包是一个tar存档,解包后包含多个VMware用于构建虚拟机的文件,但我们只关心主虚拟机磁盘(VMDK文件)。该文件也是一个存档,可以使用7zip解包。通常,此存档包含多个在虚拟机启动时挂载的卷镜像。其中一个应包含固件,我们通常只需挂载镜像即可提取。如果未加密,则只需解包即可获取根文件系统。
当文件系统加密时,我们必须先解密才能解包文件系统。为此,我们需要找到加密密钥以及加密方式的指示。在硬件设备中,我们期望密钥包含在某种安全存储机制中,如可信平台模块(TPM)。但在虚拟机中,没有此类机制可用,因此我们知道密钥必须包含在虚拟机镜像中的某个位置。
解包和分析
我们首先解包OVA文件,然后解包disk1.vmdk,找到几个嵌入式卷:
- BOOT卷包含EFI引导加载程序。
- INSTALL-CACHE卷包含SIG格式的固件。
对固件二进制文件运行binwalk时,未能识别任何文件签名,熵分析显示整个文件具有高熵,表明已加密。
引导加载程序分析
由于虚拟机卷中只有一个其他文件,加密密钥很可能在引导加载程序中。使用binwalk自动解包bootx64.efi生成以下文件:
- grub.cfg
- dropin.cfg
- soniccorex.bin
- initramfs.gz
检查Grub配置文件,发现dropin.cfg用于强制执行安全启动,soniccorex.bin是Linux内核,initramfs.gz用作初始ramdisk(initrd)。初始ramdisk用于在挂载真实根文件系统之前进行准备工作,例如解密文件系统。
初始ramdisk分析
解包initramfs存档后,我们在文件系统中发现一个密钥文件onetime.key和一个加密存档sunup.cpio.gz.enc。检查init脚本,发现当onetime.key存在于主initram文件系统中时,使用该密钥解密sunup镜像 before mounting it。
使用openssl命令解密sunup镜像:
|
|
解包后,我们获得阶段2 initramfs(sunup安装程序),其中包含可能的固件密钥:
- FW-crypt-release.key
- SUNUP-crypt-release.key
- SCX-crypt-release.key
演练第二部分:解密固件
分析sunup卷中的init脚本,指向init.d目录中的几个Bash脚本,这些脚本又指向/usr/bin中的更多Bash脚本。最终,我们找到负责解密固件和安装根文件系统的文件:
- /usr/bin/installer
- /usr/bin/fwDecrypt
- /usr/bin/multi-crypto
- /usr/lib/config/platform/system.sh
fwEncrypt函数分析
在/usr/bin/installer中,找到用于解密固件镜像的主要函数:
|
|
fwEncrypt调用fwEncryptExtract函数,该函数从SIG固件镜像的头部解析格式,提取加密的密钥材料,并调用recoverAesX解密以获取AES密钥。recoverAesX使用FW_DECRYPT_KEY(密钥加密密钥,KEK)解密AES密钥。FW_DECRYPT_KEY在/usr/lib/config/platform/system.sh中定义为FW-crypt-release.key。
installer_decrypt_key函数分析
在/usr/bin/multi-crypto中,installer_decrypt_key函数尝试使用KEK解密密钥材料,使用两种不同的填充类型:oaep和pkcs1。两种函数调用都使用openssl执行AES密钥解密。
sw-crypt-package函数分析
sw-crypt-package函数从SSDH包中提取256字节头部,base64编码,并传递给swpackage_decrypt函数:
|
|
INSTALLER_DECRYPT_KEY在system.sh中定义为SCX-crypt-release.key。解密AES密钥后,swpackage_decrypt使用openssl解密SSDH包的其余部分。
最终解密
解密后的SW包包含根文件系统。运行binwalk确认:
|
|
解包rootfs镜像:
|
|
最终,浏览SonicOSX的根文件系统,找到主二进制文件sonicosv,证明解密成功。
Sonicrack工具
为了将研究成果开源,Bishop Fox发布了Sonicrack工具,用于自动从VMware虚拟机组中提取密钥并解密VMware NSv固件镜像。使用Sonicrack:
|
|
首次运行针对OVA镜像以提取密钥,之后可以使用密钥解密任何VMware SIG固件(7.1.1及更高版本)。
结论
通过逆向工程SonicOSX固件的加密机制,Bishop Fox团队成功解密了固件文件系统,并开源了Sonicrack工具,助力安全研究人员进行善意安全测试。这一过程涉及多层解密和密钥提取,展示了固件加密的复杂性及解密方法的有效性。