导语:关于打印机的安全你知道多少?又有哪些不知道的潜在危害呢?今天这篇文章就给大家详细讲解那些你所不知道的关于打印机安全的姿势。
关于打印机的安全你知道多少?又有哪些不知道的潜在危害呢?今天这篇文章就给大家详细讲解那些你所不知道的关于打印机安全的姿势。目前市场上的打印机,使用的协议和固件都各不相同。
本地打印机和网络打印机的区别
本地打印机就是直接连接到用户PC的打印机,不过现在几乎所有的打印机似乎都是网络打印机,网络打印的服务器允许多个客户端共享一个或多个打印设备。
当前网络打印机的高级视图可能是这样的:
网络打印是通过网络将数据传送给打印服务器,从而实现打印功能的一种工作方式。它可以直接包含页面描述语言或首次调用打印机作业的控制语言。
下面让我们更仔细地看一下图表中的每一个部分以及各自所代表的东西。
固件部分
根据我的经验,打印机一般会使用几个不同的嵌入式设备操作系统。
虽然我将在这里列出其中的一些,但不会详细介绍它们:
1.常用的且精简过的GNU / Linux。 2.WindRiver Linux5。 3.VxWorks6。 4.ThreadX6。 ……
虽然系统各不相同,但还都有一些共同点:
1. 精简指令或命令集,以减少没有必要的功能。
2.“legacy kernel”——通常围绕2.6.XYZ内核版本,
3.可能包括“隐藏”功能,这可以通过一个小补丁实现,例如,存在的ssh文件,但需要在配置文件中启用。
4.相比于家庭打印机,在办公所用的打印机中,ssh更多。
5.不过有时候,固件的存储方式很有意思。在SD卡上,你可以在物理访问的30秒中进行移除/切换
这些事实表明,打印机可能很容易受到某些攻击。经过实际测试,我发现这些攻击通常都很复杂,因为某些函数甚至都不存在,或者某种程度上需要通过远程文件系统来实现。
在打印机设备、打印服务器、桌面pc,甚至在打印机内部之间的通信中,还使用了大量的协议,让我们来看看都是使用了什么协议?
网络打印协议
言而总之,就是有各种各样的网络打印协议,例如NCP或AppleTalk。在Windows世界中,SMB或CIFS协议打印机很受欢迎。网络打印机直接支持的最常见的打印协议是LPD、IPP和raw port 9100打印,现在我将对这些协议进行深入的分析。此外,有些设备支持在诸如FTP或HTTP文件上传之类的通用协议上打印。
行式打印机远程(LPR)协议:LPR在端口TCP515端口上运行,可以通过CLI的“lpr” 打印命令访问。打印内容时,客户端会发送一个自定义的打印作业或用户名的控制文件,以及一个包含要打印的实际数据的数据文件。 互联网打印协议(IPP):是一个在互联网上打印的标准网络协议,它容许用户远程打印并管理打印工作。用户可以透过相关界面来控制打印品所使用的纸张种类、分辨率等各种参数。IPP是一个可扩展的协议,基于HTTP,因此它继承了所有现有打印的安全特性,比如基本身份验证和SSL/TLS加密。 服务器信息块(SMB)协议:用于在计算机间共享文件、打印机、串口等。SMB 协议可以用在因特网的TCP/IP协议之上, 它默认在Windows上使用,通常在TCP445端口上运行。 简单网络管理协议:由一组网络管理的标准组成,包含一个应用层协议、数据库模型和一组资源对象,标准的SNMP服务使用161 端口。
通过远程打印的操作,黑客可以知道你的IP,并通过Shodan检测出使用该IP的所有物联网设备。
攻击方法
DoS
1.利用传输通道,阻塞打印端口,使打印机保持忙碌,不再打印任何东西;
2.利用文档处理,通过PDL操作文档,并让打印机解读该文档,如PS中的无限循环;
3.利用物理攻击,恶意软件导致NVRAM初始化。
特权升级
1.重新设置工厂默认值以绕过身份验证;
2.绕过accounting等类似的验证。
对打印作业访问
1.试着在打印机上找到存储的打印作业,并提取它们;
2.改变打印作业。
信息泄露
1.内存访问可能导致诸如密码或打印文档等敏感数据的泄露。
2.文件系统访问可能检索诸如配置文件或存储打印作业之类的敏感信息。
3.凭据披露会对更改的默认登录凭据进行暴力攻击以获得访问权限
代码执行
1.缓冲区溢位:打印机提供额外的语言和网络服务,可能会引来攻击;
2.固件更新:打印机将固件更新部署为普通打印作业是很常见的也就是所谓的恶意固件;
3.软件包:自定义和操作的打印机应用程序
恶意传播
恶意软件通过目标网络打印机,可以感染同一IP的所有设备。
攻击工具
上面提到的很多技术都需要攻击者掌握底层结构的知识,例如,PDL,PCL等。尽管临时抱佛脚,现了解也是可以的,但必定太费事。因此,借用成熟的工具就成了必然选择。
浏览器攻击框架(BeEF):是一款专注于浏览器端的渗透测试工具,它允许穿透测试人员通过使用客户端攻击向量来评估目标环境的实际安全。BeEF可以通过一段编制好的javascript控制目标主机的浏览器,通过浏览器拿到各种信息并且扫描内网信息,同时能够配合metasploit进一步渗透主机。 Praeda:是一款用Perl编写的自动打印机数据采集工具,该工具可以帮助渗透测试人员在安全评估期间收集可用的数据,比如,设备密码、用户名、电子邮件地址。 PRET:这个是用python编写的工具,用来检查我上面提到的所有攻击向量。它试图通过网络或USB连接到打印机,并试图利用目前打印机支持的PS、PJL和PCL。当成功连接时,就会有大量可用的命令。 Linux Exploit Suggester:是一个perl脚本,由于嵌入式操作系统的内核版本通常远低于当前linux的桌面或服务器发行版本。那么就要用到该脚本。
案例分析
我将通过例子来介绍如何对一台网络打印机实施攻击。攻击前,首先要明确打印机哪些端口是开放的以及相关的操作系统,我会使用nmap来获取这些数据信息,扫描结果如下所示:
可以发现,该打印机只开放了9100端口,且运行一个较旧的Linux内核。另外,该打印机并没有开放TCP22端口,因此想要实施文件系统的攻击是不可能的了。
接着我使用PRET来检查一下我的Epson打印机,结果如下所示:
还是没有SSH,甚至该打印机都不是使用标准的打印控制语言,我猜想是不是这是一台定制化的打印机。一般情况下,使用PRET,将会监测到文件系统, 从而创建目录,更改配置文件甚至dump整个NVRAM。
接下来,我将使用Linux Exploit Suggester,以发现是否存在可以利用的Linux漏洞:
$ perl Linux_Exploit_Suggester.pl -k 2.6.31 Kernel local: 2.6.31 Searching among 65 exploits... Possible Exploits: [+] american-sign-language CVE-2010-4347 Source: http://www.securityfocus.com/bid/45408/ [+] can_bcm CVE-2010-2959 Source: http://www.exploit-db.com/exploits/14814/ [+] do_pages_move Alt: sieve CVE-2010-0415 Source: Spenders Enlightenment [+] half_nelson Alt: econet CVE-2010-3848 Source: http://www.exploit-db.com/exploits/6851 [+] half_nelson1 Alt: econet CVE-2010-3848 Source: http://www.exploit-db.com/exploits/17787/ [+] half_nelson2 Alt: econet CVE-2010-3850 Source: http://www.exploit-db.com/exploits/17787/ [+] half_nelson3 Alt: econet CVE-2010-4073 Source: http://www.exploit-db.com/exploits/17787/ [+] msr CVE-2013-0268 Source: http://www.exploit-db.com/exploits/27297/ [+] pipe.c_32bit CVE-2009-3547 Source: http://www.securityfocus.com/data/vulnerabilities/exploits/36901-1.c [+] pktcdvd CVE-2010-3437 Source: http://www.exploit-db.com/exploits/15150/ [+] ptrace_kmod2 Alt: ia32syscall,robert_you_suck CVE-2010-3301 Source: http://www.exploit-db.com/exploits/15023/ [+] rawmodePTY CVE-2014-0196 Source: http://packetstormsecurity.com/files/download/126603/cve-2014-0196-md.c [+] rds CVE-2010-3904 Source: http://www.exploit-db.com/exploits/15285/ [+] reiserfs CVE-2010-1146 Source: http://www.exploit-db.com/exploits/12130/ [+] video4linux CVE-2010-3081 Source: http://www.exploit-db.com/exploits/15024/ $
虽然发现的线索很少,但根据经验,我决定再次使用netcat检查PJL,同时手动调用以下的命令:
或
期间,我也尝试了其他PJL命令注入技术,由于每种技术的命令语法差异很大,再加上我也不太了解PS/PCL,因此我也就放弃了使用该方法进行的攻击。
神奇的PRET脚本
由于各种因素,PRET暂时攻击失败。但我发现PRET源文件夹中有一个名为“lpdtest.py”的隐藏脚本,该脚本可以用来测试行式打印机后台程序中较老的漏洞。
尝试从打印机的文件系统获取文件,代码如下所示:
此测试对用户输入的数据(例如主机名,用户名,作业名,文件名等)进行fuzz处理。
不过由于漏洞较老,已被厂家修复,所以可想而知,使用该脚本依然没能成功实施攻击。
总结
由于实验环境的限制,我的渗透测试就告一段落,如果你还对打印机上的漏洞利用感兴趣。我可以提供一些建议,比如利用固件更新,并尝试对固件执行shell和逆向操作,但这些都需要大量的精力投入。我可以总结一些基本的攻击规律供各位参考:
1.找到一种进入系统的方式;
2.检查打印机使用的语言,并尝试实施代码注入;
3.尝试从Web界面dump文件系统目录结构;
4.如果条件允许,上传自定义的恶意固件;
5.关注新的漏洞利用方法
本文为翻译文章,如有不足之处,欢迎各位大牛指正^_^