「内核对抗」gdrv.sys驱动漏洞分析

admin 2024年2月15日14:44:59评论23 views字数 1067阅读3分33秒阅读模式

    驱动程序是内核模式下的一个对象,当处于用户模式下时,需要一些中间方式来与驱动程序交互。为了做到这一点,需要看看它DEVICE_OBJECT是如何创建的。DEVICE_OBJECT通常有一个引用它的符号链接,允许客户端与驱动程序交互。该对象是客户端与之交互的对象。

    可以使用 IDA 来定位符号链接的名称。该DriverEntry函数类似于main()内核模式驱动程序中的函数。此外,DriverEntry函数原型化为接受指向 DEVICE_OBJECT的指针,查看DEVICE_OBJECT的Microsoft 文档,我们可以看到该结构的成员之一是指向DEVICE_OBJECT 的指针。

「内核对抗」gdrv.sys驱动漏洞分析

首先用Ghidra打开存在漏洞的驱动程序gdrv.sys(CVE-2018-19320),定位到入口点entry

「内核对抗」gdrv.sys驱动漏洞分析

DeviceGIO字符串用于调用来IoCreateDevice创建DEVICE_OBJECT

「内核对抗」gdrv.sys驱动漏洞分析

Entry中生成设备对象以及生成符号链接后,其中主要有两个设备控制请求

「内核对抗」gdrv.sys驱动漏洞分析

对应驱动代码类似于:

DriverObject->MajorFunction[IRP_MJ_XXX]

FUN_00012d10中,当IOCTL的值为0xC3502808IOCTL的也就是CTL_CODE这个宏,它用来定义三环的DeviceIoControl这个API的第二个参数

「内核对抗」gdrv.sys驱动漏洞分析

IOCTL的值为0xC3502808的时候,进入FUN_00012860

「内核对抗」gdrv.sys驱动漏洞分析

看到这个就是一个内存拷贝的操作,所有我们利用这个0xC3502808操作码,即可在三环和此漏洞驱动通信,达到任意内存读写的效果。

当然这个驱动程序现在已被众多杀软标记,但是结合ida、Ghidra等反编译工具以及gdrv-loader这个利用代码来学习驱动的加载、r3和驱动通信、定位DSE、关闭DSE等利用手法和机制是非常有学习价值的,具体的漏洞利用这个代码里非常清楚,包括了如何定位DSE,然后关闭和恢复,这种方式因为PG的存在可能会导致BSOD

gdrv-loader:https://github.com/v1k1ngfr/gdrv-loader/

这种老生常谈的vuln driver利用方式有:

  • 可以用来Disable DSE,从而达到加载自己未签名驱动的效果。

  • 还可以用来Disable Callback,从而屏蔽监控。

具体更多资料可以参考星球内资料学习:

关于驱动类资料随便截几张图展示(当然星球内驱动利用相关知识只是冰山一角「内核对抗」gdrv.sys驱动漏洞分析

「内核对抗」gdrv.sys驱动漏洞分析

「内核对抗」gdrv.sys驱动漏洞分析

「内核对抗」gdrv.sys驱动漏洞分析

加入链接「内核对抗」gdrv.sys驱动漏洞分析

「内核对抗」gdrv.sys驱动漏洞分析

原文始发于微信公众号(黑客在思考):「内核对抗」gdrv.sys驱动漏洞分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月15日14:44:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   「内核对抗」gdrv.sys驱动漏洞分析https://cn-sec.com/archives/2193184.html

发表评论

匿名网友 填写信息