hacktricks/network-services-pentesting/pentesting-printers/firmware-updates.md
2023-08-03 19:12:22 +00:00

140 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- 你在一家**网络安全公司**工作吗想要在HackTricks中看到你的**公司广告**吗?或者你想要获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
- 发现我们的独家NFT收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
- 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
- **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或者 [**Telegram群组**](https://t.me/peass) 或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
- **通过向[hacktricks仓库](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud仓库](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**。
</details>
恶意固件更新的危险性是众所周知的,并且早在[【1】](http://hacking-printers.net/wiki/index.php/Firmware_updates#cite_note-1)和[【2】](http://hacking-printers.net/wiki/index.php/Firmware_updates#cite_note-2)中就已经讨论过。然而,与其他网络设备不同,**打印机通常将固件更新部署为普通的打印作业**。这为攻击者打开了一扇宽阔的大门因为访问打印功能通常是一个低门槛。关于为什么会有这样不安全的设计决策的动机我们只能进行推测但似乎历史原因起了一定的作用打印机过去是通过并行或USB电缆连接的。在没有网络连接的情况下安全性就不那么重要了而且在没有密码保护的Web服务器或类似功能的情况下打印通道是将数据发送到设备的唯一方式。
已经通过[【3】](http://hacking-printers.net/wiki/index.php/Firmware_updates#cite_note-cui2011print-3)对HP设备、[【4】](http://hacking-printers.net/wiki/index.php/Firmware_updates#cite_note-jordon2014wrestling-4)对佳能PIXMA系列以及[【5】](http://hacking-printers.net/wiki/index.php/Firmware_updates#cite_note-heiland2011patched-5)和[【6】](http://hacking-printers.net/wiki/index.php/Firmware_updates#cite_note-weidenbach2016pwn-6)对各种施乐型号的网络打印机进行了固件修改攻击的演示。作为对策,打印机制造商开始对其固件进行数字签名[【7】](http://hacking-printers.net/wiki/index.php/Firmware_updates#cite_note-hp2012rfu-7)。
## 厂商
为了对固件部署程序进行概述,[【8】](http://hacking-printers.net/wiki/index.php/Firmware_updates#cite_note-8)已经下载了前10个打印机制造商的1,400个固件文件并进行了系统分类。结果如下。
### HP
固件可以从[support.hp.com](http://support.hp.com/)或直接从[ftp.hp.com](ftp://ftp.hp.com/pub/networking/software/pfirmware/)通过FTP下载。可以获取419个HP传统的远程固件更新`.rfu`格式文件和206个较新的“HP FutureSmart”二进制文件`.bdl`)。`.rfu`文件包含专有的PJL命令如`@PJL UPGRADE SIZE=…`,表明固件更新是以普通的打印作业方式部署的。这已经由[【3】](http://hacking-printers.net/wiki/index.php/Firmware_updates#cite_note-cui2011print-3)进行了演示并导致HP自2012年3月起对其所有打印机固件进行数字签名[【7】](http://hacking-printers.net/wiki/index.php/Firmware_updates#cite_note-hp2012rfu-7)。
### 佳能
固件可在[www.canon.com/support](http://www.canon.com/support/)上获得。然而,佳能要求提供有效的设备序列号才能下载任何固件。根据[【4】](http://hacking-printers.net/wiki/index.php/Firmware_updates#cite_note-jordon2014wrestling-4)的说法他们能够修改佳能PIXMA系列的固件“没有签名正确的做法但它确实有非常弱的加密”。根据与佳能技术支持代表的电子邮件往来“固件必须由佳能进行数字签名才能被打印机接受”。
### 爱普生
固件可以从[epson.com](http://epson.com/)和通过FTP从[download.epson-europe.com](ftp://download.epson-europe.com/)下载。文件以WinZip自解压的`.exe`文件形式提供并可以使用unp[\[9\]](http://hacking-printers.net/wiki/index.php/Firmware_updates#cite_note-9)进行解压缩。其中的`.efu`文件可以使用Binwalk[\[10\]](http://hacking-printers.net/wiki/index.php/Firmware_updates#cite_note-10)进行分析从中提取实际的固件。可以获得49个未知格式“SEIKO EPSON EpsonNet Form”的`.rcx`文件和九个包含PJL命令`@PJL ENTER LANGUAGE=DOWNLOAD`)的`.prn`文件。爱普生没有发布任何关于保护机制的信息。2016年之前发布的固件没有应用代码签名并且可以被篡改正如[【11】](http://hacking-printers.net/wiki/index.php/Firmware_updates#cite_note-11)所示。他们“认为自1999年以来生产的大量设备[…]可能存在漏洞”。
### Dell
固件可以从[downloads.dell.com](http://downloads.dell.com/)和[ftp.us.dell.com/printer](ftp://ftp.us.dell.com/printer)获取。可以使用unp解压文件并使用unzip的变体提取包含的`.zip`文件。Dell不生产任何打印设备而是重新标记其他供应商的产品。因此找到了各种各样的固件文件包括18个包含`@PJL FIRMWARE=…`的`.hd`文件25个包含`@PJL ENTER LANGUAGE=DOWNLOAD`的`.prn`文件和30个包含`@PJL LPROGRAMRIP`的`.fls`/`.fly`文件。关于保护机制Dell没有发布任何公开可用的信息。
### Brother
固件无法直接下载。相反需要运行一个Windows二进制文件该文件会检查可用的打印机并从Web服务请求最新固件的下载链接。通过猜测正确的参数可以获得98个文件的链接。固件文件不需要解压因为它们已经以原始格式存在。79个文件的扩展名为`.djf`,包含`@PJL EXECUTE BRDOWNLOAD`而9个`.blf`文件包含`@PJL ENTER LANGUAGE=PCL`。Brother没有发布任何公开可用的保护机制信息。
### Lexmark
固件可以从[support.lexmark.com](http://support.lexmark.com/)获取并可以使用unp解压。可以获得63个包含PJL头`@PJL LPROGRAMRIP`的`fls`文件以安装固件。Lexmark的安全白皮书声称“包必须使用对Lexmark专有且仅Lexmark知道的对称加密算法进行加密并嵌入在所有设备中的安全方式。然而最强大的安全措施来自于要求所有固件包必须包含来自Lexmark的多个数字2048位RSA签名。如果这些签名无效\[...\],固件将被丢弃’\[12\]。
### Samsung
固件可以从[www.samsung.com/us/support/download](http://www.samsung.com/us/support/download)下载。下载的文件可以是zip存档或Windows可执行文件可以在wine中运行并使用unp进一步解压。通过这种方式可以获得33个以`@PJL FIRMWARE`开头的`.hd`文件和相关的包含`@PJL DEFAULT SWUPGRADE=ON`的`.prn`文件。Samsung没有发布任何公开可用的保护机制信息。
### Xerox
固件可以在[www.support.xerox.com](http://www.support.xerox.com/)上公开获取。下载的文件以zip格式提供并可以使用unzip解压。固件文件有不同的格式包括16个包含`@PJL FIRMWARE=…`的`.hd`文件36个用于旧设备的PostScript文件和35个`.dlm`文件这是Xerox当前使用的格式并包含数字签名。然而[5]发现了部署过程中的一个缺陷,并由[6]扩展,导致远程代码执行-私钥和用于代码签名的工具包含在固件本身中。
### Ricoh
在[support.ricoh.com](https://support.ricoh.com/)上的“固件下载中心”不对普通公众开放。幸运的是,互联网上包含了一些驱动程序/固件下载页面的直接链接因此可以通过简单的Google搜索`site:support.ricoh.com firmware`获取31个固件文件。可以使用unp解压文件。14个`.bin`文件包含`@PJL RSYSTEMUPDATE SIZE=…`而15个`.brn`文件与`settings.ini`相关联,包括`@PJL FWDOWNLOAD`和`USERID=sysadm, PASSWORD=sysadm`。Ricoh没有提供任何关于保护机制的最新信息。在2007年的一份白皮书中Ricoh声称“只有服务技术人员才有密码和专用帐户用于进行固件更新”\[13\]。
### Kyocera
Kyocera不向最终用户发布固件。然而在公开可用的Kyocera经销商论坛上链接了各种型号的固件下载[ftp.kdaconnect.com](ftp://ftp.kdaconnect.com/)。可以使用unp解压文件并包含可挂载的cramfs\[14\]和squashfs\[15\]映像以及专有的二进制格式。固件以`!R! UPGR'SYS';EXIT;`前缀部署为打印作业- PRESCRIBE页面描述语言的升级命令\[16\]。Kyocera没有发布任何公开可用的保护机制信息。
### Konica
尽管没有积极推广,但可以从[download6.konicaminolta.eu](http://download6.konicaminolta.eu/)下载Konica Minolta打印机的固件。较新的互联网连接设备具有执行固件更新的功能。压缩文件以不同的格式提供并可以使用unp、unzip和tar解压结果得到38个专有的`.bin`文件20个基于PostScript的旧设备的“softload打印机模块”和14个具有不同扩展名的文件包含像`@PJL ENTER LANGUAGE=FIRMUPDATE`这样的PJL命令。Konica Minolta的安全白皮书声称使用“哈希值”验证固件\[17\]。可以怀疑这样的方案是否具有密码学安全性。
## 结果
在十个分析的制造商中,有九个在其固件更新过程中使用[PJL](http://hacking-printers.net/wiki/index.php/PJL)命令,这是更新部署为普通打印作业的强有力指标。剩下的制造商-Kyocera-应用PRESCRIBE页面描述语言。因此可以说在打印行业中通过打印通道本身安装新固件是常见的并且存在一个几乎所有打印机设备中的**主要设计缺陷****数据和代码通过同一通道传输**。然而,由于大多数制造商没有提供关于保护机制的合理说明,因此很难利用这个问题。因此,对固件修改攻击的深入分析应该成为未来研究的一部分。下面是所有获取的固件文件的文件头或类型的摘要:
| 制造商 | 扩展名 | 数量 | 文件头或类型 |
| :--- | :--- | :--- | :--- |
| HP | rfu | 419 | @PJL UPGRADE SIZE=… |
| bdl | 206 | FutureSmart二进制格式 | |
| Epson | rcx | 49 | SEIKO EPSON EpsonNet Form |
| prn | 9 | @PJL ENTER LANGUAGE=DOWNLOAD | |
| brn | 7 | 未知二进制,包含配置文件 | |
| Dell | fls, fly | 30 | @PJL LPROGRAMRIP |
| prn | 25 | @PJL ENTER LANGUAGE=DOWNLOAD | |
| hd | 18 | @PJL FIRMWARE=… | |
| brn | 3 | 未知二进制,包含配置文件 | |
| ps | 2 | PostScript标题固件更新 | |
| pjl | 1 | @PJL ENTER LANGUAGE=FLASH | |
| Brother | djf | 79 | @PJL EXECUTE BRDOWNLOAD |
| blf | 9 | @PJL ENTER LANGUAGE=PCL | |
| 品牌 | 格式 | 大小 | 固件标识 |
| --- | --- | --- | --- |
| Lexmark | fls | 63 | @PJL LPROGRAMRIP |
| bin, fls | 6 | 未知二进制格式 | |
| Samsung | hd | 33 | @PJL FIRMWARE=… |
| fls, hd0 | 4 | @PJL DEFAULT P1284VALUE=… | |
| Xerox | ps | 36 | PostScript标题固件更新 |
| dlm | 35 | Xerox动态可加载模块 | |
| prn, bin | 20 | @PJL ENTER LANGUAGE=DOWNLOAD | |
| hd | 16 | @PJL FIRMWARE=… | |
| brn | 10 | 未知二进制,包含配置文件 | |
| bin | 10 | @PJL SET JOBATTR="@SWDL" | |
| fls, hd, hde | 8 | @PJL DEFAULT P1284VALUE=… | |
| fls, xfc | 4 | @PJL ENTER LANGUAGE=XFLASH | |
| pjl | 3 | @PJL FSDOWNLOAD [name].rpm | |
| axf | 3 | RISC OS AIF可执行文件 | |
| Ricoh | brn | 15 | @PJL FWDOWNLOAD… |
| bin | 14 | @PJL RSYSTEMUPDATE SIZE=… | |
| fls | 4 | @PJL LPROGRAMRIP | |
| Kyocera | cramfs, img | 98 | cramfs映像 |
| bin, squashfs | 79 | squashfs映像 | |
| bin, kmmfp | 41 | u-boot legacy uImage | |
| efi, kmpanel | 13 | 专有图像格式 | |
| Konica Minolta | bin | 38 | 未知二进制,附加校验和文件 |
| ps | 20 | PostScript标题软件加载打印机模块 | |
| ftp, prn | 11 | @PJL ENTER LANGUAGE=FIRMUPDATE | |
| upg | 1 | @PJL ENTER LANGUAGE=UPGRADE | |
**如何测试此攻击?**
代码签名的安全性基于保持私钥的长期商业机密。然而,仍然存在一些潜在易受恶意固件攻击的打印机,这可能是因为它们尚未进行更新,或者因为专有校验和算法被销售为具有密码学安全性的数字签名方案。必须指出,如果供应商不记录其固件格式和更新程序,分析固件可能很困难,通常需要进行一些逆向工程。因此,测试固件修改攻击的可行性并不容易。在简单的测试中,可以翻转一个位并检查打印机设备是否仍然接受修改后的固件。如果不接受,则打印机验证了校验和或数字签名。找到差异并不总是容易的,编写恶意固件(带有正确的校验和)可能是一个耗时的项目。
其他攻击场景包括:
* 即使固件已签名,也可能能够降级到某个已知存在安全弱点的(已签名)固件版本。
* 即使固件已签名有时也可以挂载它以获取更多信息特别是Konica Minolta固件易于挂载
* 固件签名并不意味着它是安全的。使用binwalk/grep等工具可以找到具有已知漏洞的组件如[CVE-2015-7547](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2015-7547)。
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- 您在**网络安全公司**工作吗您想在HackTricks中看到您的**公司广告**吗或者您想获得最新版本的PEASS或下载PDF格式的HackTricks吗请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
- 发现我们的独家[NFT](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
- 获取[**官方PEASS和HackTricks衣物**](https://peass.creator-spring.com)
- **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
- **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享您的黑客技巧**。
</details>