知识屋:更实用的电脑技术知识网站
所在位置:首页 > 网络安全 > 安全资讯

企业网络的盲点:利用打印机进行入侵

发布时间:2014-08-13 15:58:27作者:知识屋

Copyright (c) 2010 Czy Invicta <>
All rights reserved.

在每一个公司的网络中,都会存在基于Microsoft Windows的打印机连接到网络上进行共享,因此可用于许多员工在同一时间使用打印服务。本文介绍如何滥用此功能进行本地权限提升或进行打印机服务器上的远程入侵——取决于命令行访问目标系统。

Windows打印机驱动程序已经有一个漫长而有趣的历史了,有很多完全不同的打印机制造商如何执行打印机驱动程序。但是,为了防止每个打印机制造商的要推倒重来,制定了本地驱动程序。 Microsoft提供了通用打印机驱动程序,可以自定义供应商和可扩展的打印机配置文件(这些驱动是微型驱动)。还为驱动相关页面描述语言(打印机命令语言PostScript),但确定是在内核模式还是用户模式实施驱动程序是至关重要的:截至到Windows NT 4.0,它是唯一可在内核模式下运行打印机驱动程序,自从Windows 2000以后,同时在用户模式下都可以执行。下表给出了概述不同的可能性。

操作系统 内核模式
(第二版打印机驱动程序)
用户模式
(第三版打印机驱动程序)
Windows NT 否 
Windows 2000、2003、XP
Windows Vista

用户模式与内核模式的打印机驱动程序

用户模式打印机驱动程序很容易理解:一个内核模式错误会导致你的系统出现蓝屏并崩溃,而在用户模式下,您只需要重新启动打印后台处理程序(Spoolsv.exe),在用户模式下进行软件开发和调试简单得多。

为了让应用程序使用一台打印机,一个不同的组成部分就需要大量的互动。例如一个文本文件,记事本程序必须使用本地已安装的打印机,记事本调用各种GDI(图形设备接口)的Win32功能的API。 GDI的渲染引擎和打印机驱动程序的打印数据,将其转发到打印后台处理程序中。该打印后台处理程序的主要任务是后台处理打印作业,进一步转换和选择将数据发送到打印机。
假使一个本地已安装的打印机使用的是旧内核模式的驱动程序,过程如下所示:


内核的打印作业处理模式

如果网络打印机替代本地打印机,客户端后台处理打印作业将转发到服务器端的打印后台处理程序。


本地权限提升……内核模式的打印机驱动程序

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果我们想提升本地系统上的权限,我们为什么不只是安装修改过的内核模式打印机驱动程序运行任意命令呢?嗯!第一,它不允许普通用户安装打印机驱动程序(这要求高级权限加载和卸载设备驱动程序(SeLoadDriver))。第二,内核模式打印机驱动程序的命令是有限的。不过,下面我们将看到如何挑战并解决这一问题。

在这个例子中,我们假设互动(但有限)访问 Windows XP SP3的客户端系统(目标系统)上,我们要提高我们的权限。诀窍是安装在这个系统中添加网络打印机的打印机驱动程序的一部分。因此,我们需要第二个系统(攻击者系统),我们安装和共享恶意本地打印机。要启动驱动程序,从目标系统连接到攻击者的系统上安装共享打印机必须建立。 Internet打印(HTTP打印机只来自于Web80端口的TCP连接)不幸的是不是一个选择,因为在这种情况下打印机驱动程序的安装需要管理权限(见[1])。因此,只有传统方式映射到共享打印机才可以使用,并TCP连接端口139(NetB会话服务)或445(SMB)是必需的。如果这些要求得到满足,那么可以实现一下特权:

·攻击者:操纵内核模式打印机驱动程序。现在,这台打印机是共享的,以便它可以被反复使用网络-同样来自于目标系统。
·目标系统:作为一个正常登录的用户帐户,打印机驱动程序的操作自动复制攻击者系统到目标系统。
·目标系统:现在所有需要执行的是已在恶意内核模式打印机驱动程序内置的命令启动打印作业。

不幸的是,在内核模式中只能执行某些GDI函数,这部分检查调用用户的权限。
例如,函数EngMapFile可以用来创建或读取文件-任意文件访问,但这是不可能的,因为函数检查NTFS访问权限。令人惊讶的是,这一检查不会产生函数EngDeleteFile,它有可能已经删除任意文件。但是,为了执行任意命令,有必要加载一个内核模式的DLL(进一步的资料[2]),来自于一个所谓的函数EngLoadImage相关的文件。此相关的文件(我们选择的文件名sample.dll)需要指定给打印机,这可能看起来像清单1 的.inf文件。

上面的例子是基于Windows驱动程序工具包MSPLOT的.inf文件。此文件包含打印机上的所有必要的信息条目,更多的信息可以从[4]找到。
该代码在打印机驱动程序DLL相关的一部分如清单2所示。

这个内核模式DLL可以包含任何的功能。下面的示例代码展示,该文件rsvp.exe如何覆盖SampleFunction函数。这最终导致权限提升升,因为Windows服务的QoS RSVP协议可以启动一个普通用户,并作为本地系统运行(在这个例子中,你可能要迅速启动Windows服务,因为Windows文件保护(见[7] )将恢复原始文件)(见清单3)。


ZwClose(hFileHandle);
return 0;
}
NTSTATUS
DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath) {
return STATUS_SUCCESS;
}

当然,还有许多其他的可能性永久提升您的权限,你可以在内核模式下执行任意命令。然而,在上述的例子中,它不常用,因此不会触发反病毒软件的警报。

不幸的是,无法使用内核模式打印机驱动程序,如上表展示。因此,下面的文章部分将展示如何使用一个用户模式打印机驱动程序提升权限。


用户模式打印机驱动程序

~~~~~~~~~~~~~~~~~~~~~~~~

(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜