电脑?手机?路由?
不不不,都不是。现在想黑掉这些设备,需要等待机会,比如有一枚特别好使的漏洞(像最近 Windows上的永恒之蓝漏洞)。
有个设备不在关注视线内,但比上面的设备都容易黑多了,那就是打印机。
现代打印机大多具备联网功能,使用安全特性极少的嵌入式系统,内核老旧固件更新很麻烦,是天然的攻击载体。
过去国内外已经出现过多起案例,比如有黑客通过内部打印机入侵银行、运营商网络,进去盗窃。为了提醒大家目前的打印机安全做得很差,有位英国高中生曾经利用公开漏洞黑掉了15万台打印机,打印出一堆字符表情包。
一台打印机到底可以怎样被黑掉呢?嘶吼编辑今天就来给大家科普,以下内容均来自Hacking Printers Wiki,一个汇聚各种打印机安全知识的百科网站。我们主要讲原理,具体代码请自行去百科网站检索。
拒绝服务
打印机的处理资源是有限的,处理器、内存、带宽在内的几大块,只要其中一块资源被过多消耗,它就无法工作。换句话说,只要你可以连接打印机,你便能让别人无法打印。
大多数公司没法使用打印机并不会造成什么严重后果,但印刷厂例外,即使是极短暂的停机,也会遭受经济损失。
方法一:传输通道
大多数打印机都是队列处理,每次只能处理一个任务。如果一个任务总不发结束信号,就能一直占据打印通道,直到触发超时。
向打印机的9100/tcp端口群发请求,建立连接后不发送关闭请求,便可以耗尽打印机的带宽资源。
在局域网内寻找打印机
缓解方法:为打印机设置较高的超时时间
方法二:文档处理
在打印文档的描述语言中添加无限循环之类需要耗费大量计算资源的代码,让打印机的图像处理功能始终处于忙碌状态。
使用PostScript、PJL语言都可以做到,极少数具有监督机制的打印机会在十分钟后自动重启,一部分会在30分钟后中断掉任务,大多数打印机需要手动去关闭任务。
缓解方法:重启
方法三:物理损坏
打印机的存储介质是NVRAM(包括EEPROM和闪存),使用寿命有限,厂商保证大约是10万次擦写次数。使用重复擦写命令可以快速消耗掉打印机的存储介质寿命。
经测试20台激光打印机,有8台设备在24小时内有损坏。
提权攻击
本类别主要介绍绕过打印机的保护机制、扩展攻击者能力的方法。
方法一:重置为默认状态
将打印机重置为出厂默认状态是一项很有用的技巧,它可以去除用户保护密码这类安全机制。一般来说,在打印机上操作组合键可以将其重置为出厂默认状态,但这个难度颇高,得物理接触。
然而,打印机厂商的实现偏差让在线重置成为可能。使用SNMP、PJL、PostScript等命令,都有可能重置一台打印机。只需要你连上它的9100/tcp端口,发送命令即可。
方法二:绕过审计系统
由于执行打印配额、安全风险等原因,一些复印店、学校、安全公司会使用审计系统限制内部成员使用打印机,
通常有两种手段,一种是特制的打印机驱动程序,这里不做讨论;另一种是搭建独立的审计系统服务器,打印请求经过该系统审查,然后转发给打印机。
常见的打印作业系统有LPRng、CUPS,它们两的某个版本都存在绕过漏洞。如果你可以连接上打印服务器,执行测试命令便可以绕过了。
绕过限制后可以干什么呢?无限制的打印文档、假冒其他人名义打印特殊文档以及更进一步攻击都可以。
方法三:访问传真机和扫描仪
多功能打印机上,大多附带传真机和扫描仪两个功能。如果你能访问它们,便能有更多获得敏感信息的机会。
传真功能基本都有标准化命令,不同品牌打印机使用不同命令。安装好相应型号的驱动程序,连上打印机执行命令即可。
扫描仪功能没有标准化命令,似乎只有少数厂商公布过相关的PJL命令,公共文档缺失。你可以在这个网站上找自己型号的命令。操作和传真功能一样。
访问打印队列
一台打印机上,最有价值的数据是打印队列里的文档。这些文档平常都被严密保护,而在打印机里,你可以自由查看编辑。
方法一:获取打印队列的文档
少数打印机会在Web服务器里存储打印的文档,比如惠普DesignJet Z6100ps,但大部分是没有的。
这时你可以使用标准PJL命令或者专有PostScript命令开启文档保留功能,它们保存在内存中,可以通过控制面板再次打印。这类的限制较高,需要你物理接触打印机把留存的文档打印出来。
方法二:编辑打印的文档
如果攻击者能修改打印的结果,是否从根本上破坏了打印机的信任?下边将介绍两种基于PostScript的技巧。
第一种是内容覆盖,PCL命令可以在文档顶部叠加内容,但仅限当前的打印文档,无法长久保持。使用PostScript去重新定义页面操作,能在打印文档上叠加任意的图形文字,比如加个恶搞的表情,把某段内容变成空白,这在商战中防不胜防。
在打印文档上添加表情
第二种内容替换的成功率不是太好,和第一种方法类似,但更麻烦。该方法在LaTeX文档上测试成功过,其它格式还在努力研究中。
信息泄漏
除了打印文档外,打印机还可以泄漏其它敏感信息。
方法一:访问内存
如果攻击者可以访问打印机内存,就有可能获得密码或打印文档等敏感信息。如果拥有写入权限,还可能导执行任意命令。
Brother、施乐等品牌的打印机曾曝光过此类漏洞。
方法二:访问文件系统
打印机一般无法直接访问文件系统,但少数型号为了提升打印质量,开放了访问权限,用户可以下载字体、图形放进去。
这类打印机一旦联网,将存在严重安全隐患,可以检索敏感信息、查看打印队列等,甚至引发远程命令执行。
惠普LaserJet系列、柯尼卡美能达bizhub MFP系列、OKI激光打印机等产品都曾曝光过类似漏洞。
方法三:爆破密码
打印机出厂默认状态下通常没有密码或通用密码,用户需主动设置密码才能保护设备。
但这类设备对爆破没有任何防护,16位key(二进制)的密码,最多6小时就能解开。少数早期惠普打印机存在密码泄漏漏洞,发送一条请求即可获知密码。
代码执行
任何计算设备都可能存在代码执行漏洞,打印机也不例外。目前大部分打印机支持两种外部代码执行方式:固件更新、安装其它软件包。
方法一:缓存区溢出
像打印机这类嵌入式设备,通常没有ASLR、NX/DEP、用户态等保护机制,因此所有代码都是以root用户运行。
CVE-2010-0619:影响利盟激光打印机
LPD守护进程缓存区溢出:影响惠普LaserJet系列、戴尔3110cn、京瓷FS-C5200DN和三星MultiPress 6345N等打印机
方法二:固件更新安全
由于历史原因,打印机的固件更新要求权限极低,普通打印者就可操作。后来各家厂商慢慢意识到危险,开始要求固件更新检查数字签名。
目前惠普、佳能、利盟、施乐使用数字签名进行固件更新验证,理光声称只有维修人员有密码可以执行固件更新,柯尼卡美能达称使用哈希值进行验证,其它品牌尚无公开信息。
方法三:软件包安全
近些年来,打印机厂商开始推出可安装软件的打印机,它们对开发商开放SDK,以便开发定制软件。
打印机上只有带厂商代码签名的软件才能安装,要获得类似签名的可能性极小,但厂商自身的安全开发流程也很重要。
惠普曾经公开过SDK,被用户找到了绕过签名安装软件的方法,后来惠普不再公开SDK,其它厂商的SDK也均不对大众开放。
目前主流打印机软件平台的SDK信息统计
最后
本文旨在科普打印机的安全状况,向大众普及安全意识、引导打印机厂商加强对产品安全性的认识。请大家合理合法利用文中资源,不要干坏事哦。