hacktricks/network-services-pentesting/pentesting-printers/firmware-updates.md

12 KiB
Raw Blame History

通过 htARTE (HackTricks AWS Red Team Expert)从零开始学习AWS黑客攻击

支持HackTricks的其他方式

恶意固件更新的危险众所周知,并且已经由[1][2]早期讨论过。与其他网络设备不同的是,打印机通常将固件更新部署为普通打印作业。这为攻击者打开了一扇宽广的大门因为通常很容易获得打印功能的访问权限。人们只能推测这种不安全设计决策的动机但似乎历史原因起了作用打印机过去是通过并行或USB电缆连接的。在没有网络连接的情况下安全性不那么重要而且在没有密码保护的Web服务器或类似功能的情况下打印通道是向设备发送数据的唯一方式。

针对网络打印机的固件修改攻击已经由[3]针对HP设备、[4]针对Canon PIXMA系列和[5]以及[6]针对各种Xerox型号展示过。作为对策打印机制造商开始对他们的固件进行数字签名[7]

供应商

为了概述固件部署程序已经下载并系统分类了1400个固件文件针对前10大打印机制造商[8]。结果如下。

HP

固件可以从support.hp.com下载或者通过FTP直接从ftp.hp.com下载。可以检索到419个HP传统远程固件更新(.rfu)格式和206个更新的HP FutureSmart二进制文件(.bdl)。.rfu文件包含专有的PJL命令@PJL UPGRADE SIZE=…,表明固件更新被部署为正常的打印作业。这已经由[3]展示过并导致HP自2012年3月起对所有打印机固件进行数字签名[7]

Canon

固件可以在www.canon.com/support下载。然而Canon要求提供有效的设备序列号才能下载任何固件。根据[4]他们能够修改Canon PIXMA系列的固件没有签名正确的做法但它确实有非常弱的加密。根据与Canon技术支持代表的电子邮件通信固件必须由Canon数字签名打印机才能接受它

Epson

固件可以从epson.com下载也可以通过FTP从download.epson-europe.com下载。文件以WinZip自解压.exe文件形式提供可以使用unp[9]解压。使用Binwalk[10]分析包含的.efu文件它提取实际的固件。可以获得49个未知格式的.rcx文件SEIKO EPSON EpsonNet Form和9个包含PJL命令的.prn文件(@PJL ENTER LANGUAGE=DOWNLOAD。Epson尚未发布任何保护机制信息。2016年之前发布的固件没有应用代码签名可以像[11]所示进行操作。他们相信自1999年以来生产的大量设备[...]可能是脆弱的’。

Dell

固件可以从downloads.dell.comftp.us.dell.com/printer获取。文件可以使用unp解压包含的.zip文件可以使用unzip的变体提取。Dell并不生产任何打印设备而是重新标记其他供应商的产品。因此发现了各种固件文件包括18个包含@PJL FIRMWARE=….hd文件25个包含@PJL ENTER LANGUAGE=DOWNLOAD.prn文件和30个.fls/.fly文件包含@PJL LPROGRAMRIP。关于保护机制Dell尚未发布任何公开可用的信息。

Brother

固件不能轻易下载。相反需要运行一个Windows二进制文件该文件检查可用的打印机并从Web服务请求最新固件的下载链接。通过猜测正确的参数可以获取98个文件的链接。固件文件不需要解压因为它们已经以原始格式提供。79个文件扩展名为.djf,包含@PJL EXECUTE BRDOWNLOAD而9个.blf文件包含@PJL ENTER LANGUAGE=PCL。Brother尚未发布任何公开可用的保护机制信息。

Lexmark

固件可以从support.lexmark.com下载并可以使用unp解压。可以获得63个包含PJL头@PJL LPROGRAMRIPfls文件以安装固件。Lexmark的安全白皮书声称包必须使用对称加密算法进行加密通过一个只有Lexmark知道并安全嵌入在所有设备中的密钥。然而最强的安全措施来自于要求所有固件包必须包含来自Lexmark的多个2048位RSA数字签名。如果这些签名无效[...]固件将被丢弃’[12]

Samsung

固件可以从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公开获取。下载的文件以zip格式提供可以使用unzip解压。固件文件有不同的格式16个包含@PJL FIRMWARE=….hd文件36个用于旧设备的PostScript文件和35个.dlm文件这是Xerox目前使用的格式包括数字签名。然而[5][6]发现了部署过程中的一个缺陷,导致远程代码执行——私钥和用于代码签名的工具包含在固件本身中。

Ricoh

support.ricoh.com的‘固件下载中心’不对公众开放。幸运的是,互联网包含直接链接到一些驱动程序/固件下载页面因此可以使用简单的Google搜索(site:support.ricoh.com firmware)获取31个固件文件。文件可以使用unp解压。14个.bin文件包含@PJL RSYSTEMUPDATE SIZE=…而15个.brn文件与settings.ini相关联,包括@PJL FWDOWNLOADUSERID=sysadm, PASSWORD=sysadm。Ricoh没有提供任何最新的保护机制信息。在一份可追溯到2007年的白皮书中Ricoh声称只有服务技术人员有密码和专用账户进行固件更新[13]

Kyocera

Kyocera不向最终用户发布固件。然而在一个公开可用的Kyocera经销商论坛中链接了各种型号的固件下载ftp.kdaconnect.com。文件可以使用unp解压并包含可挂载的cramfs[14]和squashfs[15]镜像以及专有的二进制格式。固件作为打印作业部署,前面加上!R! UPGR'SYS';EXIT;——PRESCRIBE页面描述语言的升级命令[16]。Kyocera尚未发布任何公开可用的保护机制信息。

Konica

虽然没有积极推广,但可以从download6.konicaminolta.eu下载Konica Minolta打印机的固件。较新的联网设备有能力自行进行固件更新。压缩文件有不同的格式可以使用unp、unzip和tar解压结果是38个专有的.bin文件20个用于旧设备的基于PostScript的softload打印机模块和14个包含PJL命令的不同扩展名的文件@PJL ENTER LANGUAGE=FIRMUPDATE。Konica Minolta的安全白皮书声称固件使用哈希值进行验证[17]。可以怀疑这样的方案在密码学上是否安全。

结果

在分析的十个制造商中,九个使用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