安全生产管理内网体化安全防护系统中.docxVIP

安全生产管理内网体化安全防护系统中.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

蒲堪峰:内部局域网中

蒲堪峰:内部局域网中USB设备分类监控系统的设计与实现

{安全生产管理}内网体化安全防护系统中

蒲堪峰:内部局域网中USB设备分类监控系统的设计与实现

在ReadFile调用中,调用先到达系统DLL()中的一个入口NtReadFile函数,然后这个用户模式的NtReadFile函数接着调用系统服务接口,最后由系统服务接口调用内核模式中的服务例程,该例程同样名为NtReadFile。系统中还有许多与NtReadFile相似的服务例程运行在内核模式中,为应用程序请求提供服务,并以某种方式与设备交互。它们首先检查传递给它们的参数,以保护系统安全或防止用户模式程序非法存取数据,然后创建一个称为“I/O请求包(IRP)”的数据结构,并把这个数据结构送到某个驱动程序的入口点;NtReadFile将创建一个主功能代码为IRP_MJ_READ的IRP,执行IRP的设备驱动程序最后可能会访问硬件;驱动程序完成一个I/O操作后,通过调用一个特殊的内核模式服务例程来完成该IRP。完成操作是处理IRP的最后动作,它使等待的应用程序恢复运行。

同样,对于USB设备的所有操作都是通过向USB设备发送相应的IRP完成的。USBMon拦截所有发往USB设备的IRP,并对其中的内容进行分析。如果发现USB设备处于配置阶段,说明新插入USB设备,这时,USBMon会通过发送相应的IRP得到新插入USB设备的设备类型,如存储类设备、USB集线器类设备或者厂商自定义设备等,再根据策略文件来决定是否启用这个设备。USBMon中的关键问题是IRP拦截、判断新设备的加入以及对厂商自定义类设备的管理。

2.HOOK系统的IRP消息

Windows2000下,设备和驱动程序的有着明显的堆栈式层次结构:处于堆栈最底层的设备对象称为物理设备对象,或简称为PDO,与其对应的驱动程序称为总线驱动程序;在设备对象堆栈的中间某处有一个对象称为功能设备对象(FDO),其对应的驱动程序称为功能驱动程序;在FDO的上面和下面还会有一些过滤器设备对象(FiDO);位于FDO上面的过滤器设备对象称为上层过滤器,其对应的驱动程序称为上层过滤器驱动程序;位于FDO下面(但仍在PDO之上)的过滤器设备对象称为下层过滤器,其对应的驱动程序称为下层过滤器驱动程序。这种栈式结构可以使I/O请求过程更加明了。每个影响到设备的操作都使用IRP,通常IRP先被送到设备堆栈的最上层驱动程序,然后逐渐过滤到下面的驱动程序。根据设备以及该IRP所携带的内容,每一层驱动程序都可以决定如何处理IRP,有时驱动程序不做任何事,只是向下层传递该IRP;有时驱动程序直接处理完该IRP不再向下传递;有时驱动程序既处理了该IRP又把该IRP传递下去。

USB设备驱动程序在与硬件设备进行通信时,一般使用USB总线驱动程序接口(USBDI,USBDriverInterface),而不直接使用HAL函数与硬件通信。USB驱动程序为了向其硬件设备发送一个请求,先创建一个USB请求块(URB),再把URB提交到总线驱动程序。例如:为了配置一个USB设备,USB设备的驱动程序需要提交几个URB来读取各种描述符或发送命令,向USBD的调用被转化为带有主功能代码为IRP_MJ_INTERNAL_DEVICE_CONTROL的IRP;然后,这个IRP会被发往由USB集线器驱动为USB设备创建的PDO对象。

微软提倡的IRP拦截方法是创建一个上层过滤设备对象,并将它加到要拦截设备所在的设备堆栈中,其过程为:先通过IoCreateDevice创建自己的设备对象;然后获得要拦截设备的设备对象指针;最后通过IoAttachDeviceToDeviceObject将自己的设备放到设备堆栈上成为一个过滤器。这种方法是最可靠,也是最常用的。但是,在USBMon中使用这种方法会有些问题。假如有一个USB存储设备接到USBHub上,USBHub的驱动程序会为这个USB存储设备创建一个PDO,然后由USB存储设备的驱动程序(Windows2000下为)创建FDO对象并加到PDO上。此时如果把过滤设备对象加入设备堆栈,过滤设备将在设备堆栈的最上层,I/O管理器发给USB设备的IRP将先经过过滤设备;而如果先加好了过滤驱动,再插入闪存时就会形成图2所示的设备堆栈结构。绝大多数的IRP都是由USBHub驱动建立的PDO对象完成,此时根本达不到过滤的效果

文档评论(0)

文档小天才 + 关注
实名认证
文档贡献者

就是文档小天才

1亿VIP精品文档

相关文档