处理加密的路由器固件
https://www.zerodayinitiative.com/blog/2020/2/6/mindshare-dealing-with-encrypted-router-firmware
Last updated
https://www.zerodayinitiative.com/blog/2020/2/6/mindshare-dealing-with-encrypted-router-firmware
Last updated
也许你阅读我们以前多次 漏洞研究,决定试一试。伟大的!您从供应商网站下载了家用路由器的固件,将其放入以便您可以。然后出现了下面的画面……
图 1. binwalk 把手举到空中,耸了耸肩,什么也没报告。
现在怎么办?
一般来说,每个非 binwalk 友好固件都将是一次冒险,因此无法提供破解所有类型加密固件的分步指南。本博客旨在通过一些常见场景并提供处理此类固件的一般指南。我们还将提供解密 D-Link DIR-882 固件的示例。
回首往事:加密固件发布的三种常见场景
解密固件的最简单方法是在固件中查找解密程序。“如何?” 你问。如果路由器可以解密新固件以进行更新,则解密例程必须位于旧固件映像中的某处。如果您遇到加密固件,请访问供应商网站并查找固件的存档版本,下载所有旧版本并开始浏览。
以下是三种常见的固件发布场景:
场景一
设备固件在出厂时未加密,也不包含任何解密程序。解密例程与未加密版本的固件一起提供,新版本 (v1.1) 用于将来加密固件更新。随后的固件版本被加密。
图 2:固件发布场景 1
在这种情况下,我们可以从固件 v1.1 中获取解密例程,并使用它来解密最新的固件版本 1.2。
场景二
设备固件在原始版本中是加密的。供应商决定更改加密方案并发布包含新解密例程的未加密过渡版本 v1.2。
图 3:固件发布场景 2
与场景1类似,我们可以从v1.2镜像中获取解密例程,并将其应用到最新的加密固件中。阅读固件版本的发行说明可能有助于识别未加密的过渡版本。发行说明通常会指导用户升级到中间版本,然后再升级到最新版本。中间版本很可能是未加密的过渡固件。
场景3
设备固件在原始版本中是加密的。但是,供应商决定更改加密方案,并发布包含新解密例程的未加密过渡版本。
图 4:固件发布场景 3
在这种情况下,没有简单的方法来获得解密程序。一种方法是购买设备并直接从硬件中提取未加密的固件。另一种可能的途径是对固件进行更多分析,以期“破解加密”。
场景 3:淘汰十六进制编辑器
在十六进制编辑器中快速滚动固件可以让我们直观地了解我们正在处理的内容。以二进制方式查看;以十六进制模式查看。是否有 0xFF 字节或 0x00 字节的字段?文件中有模式吗?它是随机十六进制字节的同质 blob 吗?在这种情况下,固件很有可能已经代替了带有静态密钥的简单 XOR。检查直方图,是否有一个十六进制字节比其他十六进制字节出现的频率更高?
场景 3:压缩、加密或混淆?
理论上有效,实践中也有效
图 5:binwalk 无法识别固件映像中的任何内容
图 6:早期 DIR-882 路由器固件的 binwalk 扫描结果
这表明我们处于固件发布时间表的场景 1。在浏览了固件镜像的所有可用版本后,我们发现固件的 v1.04B02 是过渡版本,它包含在 v1.10B02 固件包中。您还可以计算图像的熵以快速确定哪个已加密。
图 7:未加密过渡版本和第一个加密固件的 binwalk 结果
然后我们使用 binwalk 从 v1.04B02 固件中提取文件系统。
图 8:binwalk 提取固件版本 1.04B02 的根文件系统
图 9:提取的文件系统的 /bin 目录内容。
只是一个小问题
图 10:使用 QEMU 执行跨架构 chroot 并解密固件
图 11:binwalk 成功检测到解密固件的不同部分
结论
你有它!这就是您处理加密固件的方式。如果您遇到场景 3,请不要惊慌。消费者路由器通常在计算能力方面受到限制。此限制排除了更慢、更难破解的非对称加密,例如 RSA。此外,供应商有时会为多个路由器使用相同的加密方案。事实上,imgdecrypt
二进制文件也可用于解密 DIR-878 和 DIR-867 的固件。寻找属于同一产品线、具有相同处理器架构的路由器。环顾四周,您可能会中大奖。无论如何,我祝你在你的硬件黑客努力中好运,并期待看到你的提交!
参考资料和进一步阅读
熵提供了对固件的重要见解。具有高熵的固件部分建议加密。低熵字节的一部分表明低随机性、结构和可预测性。,它允许我们确定是否被压缩、加密或混淆。在这个分析阶段,的可能会变得有用。
让我们将新发现的知识应用于加密的 D-Link DIR-882 固件映像:
从供应商的,我们可以找到该路由器的所有旧固件。如果我们用 binwalk 检查最早的固件版本 v1.00B07,它将正确检测到 uImage 标头,以及 LZMA 压缩数据:
成功提取后,我们可以开始调查固件更新过程并确定固件是如何被解密的。幸运的是,快速浏览文件系统后imgdecrypt
,在/bin
目录中发现了一个看起来很有前途的二进制文件。
我们有主机和二进制之间处理器架构差异的小问题。幸运的是,我们可以使用 QEMU 执行跨架构的 chroot。为此,首先我们将qemu-mipsel-static
二进制文件复制到/usr/bin/
固件根文件系统的目录中。我们还将加密的固件复制到未加密的固件文件系统。最后,我们 chroot 进入固件根目录并获得一个可以工作的 shell。特别感谢名为 chung96vn 的研究人员向我们展示了这种跨架构的 chroot 技术。
有了一个工作外壳,我们就可以运行imgdecrypt
和解密加密的固件。
你可以在 Twitter 上找到我,并关注获取最新的漏洞利用技术和安全补丁。