0x00 前言本文將要介紹Zyxel固件解密的兩種通用方法,記錄測試心得。
0x01 簡介本文將要介紹以下內容:
基礎知識
通過已知明文攻擊解密zip文件
通過跟踪進程參數獲得zip加密口令
0x02 基礎知識1.固件下載固件下載地址:https://portal.myzyxel.com/my/firmwares
需要註冊賬戶,可下載指定版本的固件
2.常見固件類型ATP
USG FLEX
VPN
ZyWALL/USG
這里以VPN50 5.36(ABHL.0)為例,下載後保存為VPN50_V5.36(ABHL.0).zip
接下來介紹固件解密的兩種方法
0x03 通過已知明文攻擊解密zip文件參考資料:https://attackerkb.com/topics/N3i8dxpFKS/cve-2023-28771/rapid7-analysis
VPN50_V5.36(ABHL.0).zip中的文件內容如下:
536ABHL0C0.bin
536ABHL0C0.conf
536ABHL0C0.db
536ABHL0C0.pdf
536ABHL0C0.ri
VPN50_V5.36(ABHL.0)C0-foss.pdf
其中,536ABHL0C0.bin和536ABHL0C0.db被加密,需要解密
解密條件:
1、已知完整的明文文件和zip文件
2、明文文件需要被相同的壓縮算法壓縮
3、加密算法為ZipCrypto Store
對於VPN50_V5.36(ABHL.0).zip,536ABHL0C0.conf同536ABHL0C0.bin中的db/etc/zyxel/ftp/conf/system-default.conf文件一致,同536ABHL0C0.db中的etc/zyxel/ftp/conf/system-default.conf文件一致,滿足條件1
對於條件2,需要確定536ABHL0C0.bin和536ABHL0C0.db的壓縮算法,參考資料也未涉及這部分內容,這裡詳細介紹分析流程
查看536ABHL0C0.bin中db/etc/zyxel/ftp/conf/system-default.conf的壓縮信息:zipdetails -v 536ABHL0C0.bin
返回結果:
得出壓縮算法如下:
所以在壓縮536ABHL0C0.conf時需要加入參數-9設定為compress better,即Maximum Compression
完整解密命令如下:
(1)安裝pkcrack
(2)解密536ABHL0C0.bin
(3)解密536ABHL0C0.db
需要注意536ABHL0C0.bin和536ABHL0C0.db的system-default.conf絕對路徑不同
0x04 通過跟踪進程參數獲得zip加密口令參考資料:https://security.humanativaspa.it/zyxel-firmware-extraction-and-password-analysis/
解密原理:從.ri文件能夠提取出zld_fsextract,zld_fsextract能夠根據文件內容計算出解壓口令進而解密.bin文件
經測試,使用zld_fsextract也可以解開其他固件的.bin文件
1.提取zld_fsextract
查看文件類型:file zld_fsextract
返回結果:zld_fsextract: ELF 32-bit MSB executable, MIPS, N32 MIPS64 rel2 version 1 (SYSV), statically linked, stripped
提示zld_fsextract為MIPS結構,需要搭建MIPS環境運行
2.搭建MIPS環境
3.監控進程啟動
注:
需要加入參數-f跟踪由fork調用所產生的子進程,加入參數-s 199指定trace結果的每一行輸出字符串的長度,如果未設置參數-s,無法記錄完整的解密口令
返回結果實例:
從中獲得解密口令GfmirkjRUJla2evWFLtqJoI5a6vfOmDgR/OIl7lFSWrXBm3S7yJTmdaMlV19HGr
注:
該解密口令不適用於536ABHL0C0.db
0x05 小結本文介紹了Zyxel固件解密的兩種通用方法,分享了在解密過程中需要記錄的細節。