完全控制——剖析Vista的移动设备管理机制
技术与开发
长久以来,闪存、移动硬盘等移动设备的接入都为系统带来安全隐患,它们往往为系统带来病毒、木马。而Vista系统全新的移动设备管理技术可以让用户轻松灵活地管理移动设备驱动的安装,从而使系统更安全。这是采用何种技术实现的呢?下面就为大家仔细讲解。
用设备参数管理设备安装
随着Vista系统的诞生,它在安全方面有了长足的改进,特别是针对此前让人头疼的USB接口管理。Vista系统中引入了功能强大的设备接入管理机制,将所有参数的设置集成到组策略中,一方面可以实现针对单机USB接口的管理,另一方面也可以通过组策略大面积批量推广到整个域中,真正实现了高效率的管理。
为了便于各位读者理解,笔者简单介绍一下Vista系统中USB接口管理功能,首先我们通过gpedit.msc进入Vista的组策略,然后定位到“本地计算机策略→计算机配置→管理模板→系统→设备安装→设备安装限制”,在该选项下有多个参数供我们设置。
通过“允许/阻止使用与下列设备安装程序类相匹配的驱动程序安装设备”和“允许/阻止安装与下列ID相匹配的设备”等4个选项对接入的USB设备的设备ID和安装程序类相匹配的驱动程序两个参数来管理该设备的接入与否,真正实现了管理USB接口的功能。通过设定的过滤条件可以阻止满足某设备ID或安装程序类相匹配的驱动程序的USB设备连接到系统,在安装驱动过程中会出现“设备安装被策略阻止”的提示(图1)。

借助Vista系统组策略中的几个参数我们可以实现如下功能:
(1)系统禁止所有USB设备的安装,也就是说连接到USB接口的设备都无法功能。
(2)系统禁止某一个USB设备的安装,也就是说连接该设备时系统会阻止接入,而其他USB设备则可以正常连接使用。
(3)系统只允许某一个USB设备的安装与正常使用,其他USB设备连接到电脑上都会显示被策略拒绝而无法正常使用。
(4)系统禁止多个USB设备的安装,只要在组策略中添加了这些USB设备的信息即可实现过滤功能,而不在过滤范围内的其他设备可以顺利安装。
(5)系统允许多个USB设备的安装,只要在组策略中允许符合其参数的设备接入即可,其他设备无法顺利安装。
移动设备管理的核心——设备ID、GUID
那么Vista系统到底是如何如此轻松地管理USB设备的接入呢?我们首先要分析一下过滤和管理过程中用到的两个参数——设备ID和安装程序类相匹配的驱动程序(GUID)。
(1)设备ID
如同个人身份证一样,在电脑中的每个硬件都应该有自己的“身份证明”,而这些“身份证明”是由操作系统根据其制造厂商和芯片信息颁发的。在操作系统中为计算机每个可用的硬件以及一些软件模拟出来的虚拟硬件都分配了设备ID。不同设备的ID信息都不相同,所以在同一个操作系统中不同设备的ID信息都是唯一的。
那么如何才能查询硬件的设备ID呢?一般我们都是通过设备管理器来查看,在设备管理器中找到相应的设备,通过“属性”下的“详细信息”标签来辨别。在下拉菜单中找到设备ID或硬件ID即可了解(如图2)。

当然我们查询设备ID时会看到多行信息,每一行都对应一类设备,从上往下覆盖范围越来越广。比如笔者的联想512MB闪存设备在ID中的显示信息为“USBSTOR\DiskLenovo__USB_Flash_ Drive_”。通过这种层次ID信息我们可以根据自己的实际需要来限制和管理相应的移动设备,例如想禁止所有联想USB闪存的接入,只需要在前面提到的组策略中对设备ID为Lenovo__的进行过滤封锁即可。
技术点评:设备ID这个概念很早以前就存在了,不过微软此前的操作系统并没有将它与限制移动设备联系起来,在Vista系统中首次引入了通过一个设备的ID信息来管理和限制连接、读写等操作,并对设备ID信息采取分层处理,从而可以根据实际对某一类的设备进行批量管理。
(2)安装程序类相匹配的驱动程序(GUID)
除了设备ID,Vista组策略中还可以针对设备的安装程序类相匹配的驱动程序(GUID)进行设置。
小知识:什么是GUID
所谓GUID即全局统一标志符,它是指设备在一台电脑上通过算法生成的数字,通常操作系统会提供生成GUID的API。生成算法很有意思,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。GUID的唯一缺陷在于生成的结果串会比较大。GUID的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxx xxxxx”,其中每个x是0-f范围内的一个十六进制数字。例如:337c7f2b-7a34-4f50-9141-bab9e6478cc8即为有效的GUID值。
对于某一个设备来说,不管它安装在哪台机器上,生成的GUID标志符都是一样的,也就是说不同设备对应的GUID号肯定不同。我们同样通过设备管理器来查看设备对应的GUID号,在设备管理器中找到相应的设备,通过“属性”下的“详细信息”标签来辨别,在下拉菜单中找到“设备类GUID”即可了解。例如笔者的联想USB闪存对应的GUID号为{4d36e967-e325-11ce-bfc1-08002be10 318}。
了解了设备的GUID号后就可以通过组策略来限制和允许该设备的接入与否了。
技术点评:GUID的概念在硬件级编程中应用广泛,不过在Vista系统之前还只是存在于注册表、类及接口标志、数据库、自动生成的机器名、目录名中,对于普通用户来说没有多大的意义。而在Vista系统中GUID被从幕后推到了前台,它可以帮助我们更好地管理设备的安装与访问控制。
(3)设备ID和GUID为何都需要
可能有的读者看到此会问:“既然设备ID和GUID都标志了设备信息,为什么要在Vista中引入两个参数来实现管理设备接入与访问的功能呢?”
实际上这两个概念是迥然不同的,设备ID参数的引入可以帮助我们了解设备的具体信息,例如某类设备的设备ID都具有相同特征,因而可以用它统一管理一类设备,从而实现了批量管理的目的。GUID则与设备ID不同,它的信息对应的是单一设备,即使是同一个牌子同一个型号的同容量闪存,它生成的GUID也是不同的,因此可以通过GUID来管理单个的闪存,例如禁止前面提到的GUID号为{4d36e967-e325-11ce-bfc1-08002be10318}设备的访问后,插入其他同样是512MB的联想闪存依然可以正常访问,被禁止的仅仅是GUID对应的一个闪存而已。
Vista移动设备管理机制的扩展
笔者认为既然Vista组策略中的过滤是针对设备ID和GUID两个参数来允许和阻止设备驱动程序的安装操作,那么,不光是USB设备,其他设备也都有设备ID和GUID两个参数,因此笔者大胆地认为,对于其他设备也可以利用Vista移动设备管理机制来控制其驱动程序的安装。
笔者测试也证实了这个想法,先后将机器上的光驱和鼠标以及网卡等硬件的设备ID和GUID添加到了组策略中,禁止这些设备的驱动安装,结果这些设备就无法顺利安装驱动程序了,从而达到了阻止这些设备连接到系统中的目的。