科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道Windows远程内核漏洞注入(10)

Windows远程内核漏洞注入(10)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

I386体系支持4种访问权限,也就是通常所说的特权级别。Windows NT 使用了其中的两个权限,使得NT操作系统可以在不完全支持这四种特权级别的体系中运行。
  • 评论
  • 分享微博
  • 分享邮件

  对注入放火墙驱动程序的思考

  当在防火墙驱动程序中注入一个内核级漏洞时,将需要考虑很多问题。我们将要示范的漏洞是由处理DNS反馈信息过程引起的,DNS反馈信息是由SYMDNS.SYS处理的。如果DNS处理过程不能成功返回,那么就不能用socket来通信。在研究这个问题之前,首先必须理解多种协议层的通信机制。

  下面是网络层的概要:

  1).网络驱动程序接口规范(Network Driver Interface Specification Layer)

  NDIS 为从物理设备到网络传输提供一个通路

  NDIS驱动程序直接与网络适配器打交道。

  2).网络协议层(Network Protocol Layer)

  此处为 TCP/IP. (TCPIP.SYS)

  3).传输层驱动接口(Transport Driver Interface Layer)

  TDI为网络协议、客户端协议、以及网络API例如Winsock提供接口。

  4).网络应用程序接口(Network API Layer)

  网络应用程序接口例如Winsock,为网络应用程序提供编程接口。

  所有基于主机的放火墙的限制策略都工作在内核模式,通常可以通过TDI过滤驱动程序或者 NDIS 挂钩过滤驱动程序。虽然我没有见过这一类的放火墙产品,但是挂钩AFD接口也是可能的。

  我们所面对的问题:SYMDNS.SYS必须返回到TDI过滤驱动程序SYMTDI.SYS,不幸的是一旦执行我们的shell code,通信就不会结束。这里有一些的解决方案:

  (a) “clean” 返回

  Clean返回包括在没有出现BSOD的情况下从shell code返回,有包括能继续正常的通信,这个是很难实现的。经过攻击后的堆栈不是处于最佳状态,所以必须返回到原来堆栈桢的状态

  (b) 卸载 TDI 或者 NDIS 的过滤驱动

  卸载过滤驱动是另外一个可行的方法。我们可以很方便的调用驱动程序的卸载程序,这就相当于从DriverEntry程序调用DriverObject->DriverUnload。这个驱动程序的偏移地址可以通过目标驱动程序的DRIVER_OBJECT获得。

  如果DriverUnload的成员DRIVER_OBJECT为空,意味目标驱动程序的卸载程序不存在。DRIVER_OBJECT可以被DEVICE_OBJECT的成员所引用,可以通过把驱动程序名作为参数传递给IoGetDeviceObjectPointer,取得指向DEVICE_OBJECT的指针。

  (c) 分离或删除驱动程序(Detach/delete the devices)

  驱动可以通过调用 IoAttachDevice 或 IoAttachDeviceToDeviceStack 把自身的设备对象附加到其它设备,因而对原始设备的请求首先被传递到立即设备。我们可把DEVICE_OBJECT作为参数传递给IoDetachDevice来分离驱动程序,有可以把DEVICE_OBJECT作为参数传递给IoDeleteDevice来移除设备。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章