提升进程权限的内核模式驱动程序

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/ZeroMemoryEx/Tokenizer

Tokenizer

相关技术点

  • 进程的访问控制和安全标识符(SID)等信息由进程令牌(token)控制
  • _EPROCESS是代表进程对象的数据结构,其中的_EX_FAST_REF成员用于储存指向内核对象的指针或引用计数
  • Windows中不同版本的_EX_FAST_REF_EPROCESS中的偏移量不同
  • 通过替换进程的令牌实现进程权限提升

项目用途

Tokenizer是一个内核模式驱动程序,可以将进程EPROCESS中的进程令牌替换为系统令牌,从而提升进程的权限。该驱动程序设计用于与用户模式应用程序一起使用,通过IOCTL向驱动程序发送进程ID来实现权限提升。

该技术的主要用途是在需要执行高权限操作的场景中实现权限提升,如在维护和修复系统时,需要对某些进程执行高权限操作,但是这些进程的权限较低,无法完成相关操作,此时可以使用Tokenizer提升其权限。

该项目主要包括以下步骤:

  1. 通过进程ID获取进程的_EPROCESS结构体
  2. _EPROCESS结构体中获取进程令牌的指针
  3. 将进程令牌替换为系统令牌,实现权限提升

该项目的使用方法包括两种:

  1. 生成具有高权限的进程
  2. 提升现有进程的权限

在使用过程中,需要注意不同版本的Windows中_EX_FAST_REF_EPROCESS中的偏移量不同,如果驱动程序无法正确定位_EPROCESS结构体中的进程令牌,可能会导致系统或目标进程崩溃。

Tokenizer

  • Tokenizer是一个内核模式驱动程序项目,允许使用系统令牌替换EPROCESS中的进程令牌,从而有效提高进程的权限。该驱动程序旨在与通过IOCTL将进程ID发送到驱动程序的用户模式应用程序一起使用。

技术细节

  • 当创建进程时,它继承了创建它的用户的令牌,系统使用该令牌确定进程可以执行的操作。令牌包含有关用户安全标识符(SID)、组成员身份和特权的信息。

 

  • 令牌成员位于_EPROCESS结构中的偏移量0x4b8处,该结构是表示进程对象的数据结构。令牌成员在_EX_FAST_REF结构中定义,它是一个联合类型,可以存储指向内核对象的指针或引用计数,具体取决于指针的大小。_EX_FAST_REF结构在_EPROCESS中的偏移取决于使用的Windows版本,但在最近的Windows版本中通常位于偏移量0x4b8处。

ad1a1b7183230542

  • x64和x86架构的Windows构建号令牌偏移

    x64偏移 x86偏移
    0x0160(5.2晚期) 0x0150(3.10)
    0x0168(6.0) 0x0108(3.50至4.0)
    0x0208(6.1) 0x012C(5.0)
    0x0348(6.2至6.3) 0xC8(5.1至5.2早期)
    0x0358(10.0至1809) 0xD8(5.2晚期)
    0x0360(1903) 0xE0(6.0)
    0x04B8 0xF8(6.1)
      0xEC(6.2至6.3)
      0xF4(10.0至1607)
      0xFC(1703至1903)
      0x012C

    ad1a1b7183230629

  • Windows中的_EX_FAST_REF结构包含三个成员:ObjectRefCountValue

     

ad1a1b7183230727

  • 要在_EX_FAST_REF中显示进程令牌,我们传递包含令牌的_EX_FAST_REF结构的地址,该结构通常位于_EPROCESS结构中的偏移量0x4b8处。

     

ad1a1b7183230741

用法

  • 您可以生成特权进程或提升已存在的进程ID。

     

ad1a1b7183230753

  • 为了说明这一点,我们将专注于第二个选项并以CMD为例。

     

ad1a1b7183230804

  • 继承的令牌

     

ad1a1b7183230817

  • 通过IOCTL将进程ID发送到驱动程序

     

ad1a1b7183230827

  • 接收到来自用户模式应用程序的PID后,驱动程序使用它来获取指向目标进程的_EPROCESS结构的指针。然后,驱动程序访问_EPROCESS结构的令牌成员以获取进程令牌的指针,然后用系统令牌替换它,从而将进程的安全上下文更改为系统的安全上下文。但是,如果驱动程序未正确定位_EPROCESS结构中的令牌成员,或者令牌的偏移量不是0x4b8,则驱动程序可能会崩溃系统或目标进程,这个问题将在后续更新中解决。

     

ad1a1b7183230838

  • cmd令牌之后

     

ad1a1b7183230854

  • 进程特权、组、权限

     

ad1a1b7183230907

 

DEMO

 
标签:工具分享, 本地提权