这篇文章的目的是介绍Hyper-V平台TPM组件服务进程vmsp.exe相关的通用TPM漏洞CVE-2025-2884分析与复现.文章结合了笔者魔改的用户模式隔离进程调试工具和逆向代码及调试结果分析了通用TPM漏洞CVE-2025-2884的利用过程和漏洞成因.Windows 11 24h2 canary preview 启用嵌套虚拟化模式Hyper-V 的 虚拟信任级别(VTL)是Windows的Hyper-V 虚拟化技术中用于隔离不同安全域的安全机制.VTL1 是其中较高的特权级别,其特性如下
VTL1 的特权高于 VTL0(最低权限级别),在虚拟安全模式(Virtual Secure Mode)中,VTL1 用于运行安全内核和隔离用户模式(IUM isolated user mode process)的代码,这些程序通过系统调用与 VTL0 中的内核交互.常见IUM进程有LsaIso.exe,vmsp.exe等.
开启虚拟安全模式可在 Windows 安全中心>设备安全>核心隔离详细信息>中找到内存完整性启用后重启计算机就能开启.
在VTL0 域中即使获取了内核级的范围权限 ,也无法对VTL1中内存进行操作.这种设计可抵御内核级攻击,保护用户密码哈希、BitLocker加密密钥等机密信息.VTL1 的安全内核模式由securekernel.exe承载用于调度用户IUM模式系统调用.
笔者使用最新版的LiveCloudKd工具找到了一种可以嵌套虚拟化模式下调试虚拟机内用户模式隔离进程方法,原理在于区别虚拟机分区中虚拟安全模式隔离了跨VTL内存的访问权限,
对于虚拟机的父分区仍然可以调用内核模式hypercall或winhv.sys驱动api直接操作虚拟机线性物理内存,LiveCloudKd工具为我提供了一个签名的驱动hvmm.sys通过应用层api就能实现这些操作,即使在虚拟机中这片保护的物理内存被划分给VTL1级别,仍然可以在父分区使用物理地址对这片虚拟机内的内存进行访问.如果要调试用户IUM模式进程就需要patch一下
securekernel!SkpsIsProcessDebuggingEnabled函数,在新版中这个函数被内联在IumInvokeSecureService系统调用实现中,简单描述下特征securekernel默认的调试策略被保存在其镜像策略配置中,直接修改配置或patch文件二进制会导致securekernel签名验证失败,重启虚拟机蓝屏,所以这种方式是不可行.但是对于运行时的代码只需要匹配包含特征的代码patch掉SkpsEnableDebugging条件始终为true就可以.
在这里我们需要得到3个关键的数据:1.搜索到这片代码所在的物理页面地址的映射2.找到一个立即触发的securekernel函数地址HvGetVpRegisters通过这个hypercall得到虚拟地址RIP和cr33.找到securekernel进程虚拟机地址和物理页面地址的映射一个最常见的可以稳定触发的securekernel函数笔者找到的是IumInvokeSecureService这个函数,通过SharpDisasm这个工具反编译目标得到函数返回指令ret地址,然后不断搜索匹配的个函数所在页面的二进制数据,直到匹配到一个合适的物理页面,然后把指令ret改成如下无限循环汇编代码修改内存后并不会引起虚拟机蓝屏,查询虚拟机所有vcpu的RIP通过HvGetVpRegisters这个hypercall,如果rip的低位与这个指令的低16位匹配,这样我们得到了一个符合条件的虚拟地址gva和匹配的物理地址gpa,就可以计算出页表页目录的基址cr3(也是通过hypercall)等.也同样通过SharpDisasm汇编指令匹配SkpsIsProcessDebuggingEnabled字符串,
得到要patch代码的地址根据securekernel计算得出的基址,加上偏移量转为物理地址后patch目标汇编代码,这样我们就成功绕过并启用调试用户IUM模式进程.1.下载最新版的LiveCloudKd2.复制所有文件到:"C:\Program Files\Windows Kits\10\Debuggers\x64"3.修改"C:\Program Files\Windows Kits\10\Debuggers\x64\cfg\RegParam.reg" 其中WinDbgPath改成"C:\Program Files\Windows Kits\10\Debuggers\x64\"4.安装vc运行库x64版5.regsvr32 "C:\Program Files\Windows Kits\10\Debuggers\x64\ExdiHvSrv.dll"6."C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -exec bypass -Command "Set-VMProcessor -VMName YourVMName -ExposeVirtualizationExtensions $true"其中YourVMName是你的虚拟机名字,启用嵌套虚拟化模式7.复制虚拟机内C:\Windows\System32\securekernel.exe文件到:"C:\Program Files\Windows Kits\10\Debuggers\x64"和笔者工具同目录8.虚拟机运行后运行笔者工具,看到打印出securekernel.exe基址即为成功笔者工具使采用.net程序实现,笔者工具无需禁用安全启动或者修改bcdedit配置,下图是笔者在的Win11 24h2物理机上嵌套虚拟化模式下调试用户模式隔离进程vmsp.exe效果 TPM模块实现2.0(Trusted Platform Module)是可信平台模块的第二代版本,是一种安全密码处理器的国际标准,TPM模块实现可以是cpu上的加密芯片固件程序或者Hyper-V等虚拟机平台TPM组件模拟服务进程如vmsp.exe.笔者poc采用uefi程序实现,初始化TPM客户端通过与Hyper-V服务的共享物理页面 PcdTpmBaseAddress = 0xFED40000获取适配的TPM版本模式,
使用字段的结构地址进行所有的TPM通信数据包交互,有固定的输入输出缓冲区大小设置和操作返回等读写功能.
通用TPM漏洞CVE-2025-2884补丁发布与今年6月所影响包含所有共享tpm组件代码的固件及服务端应用程序,基于笔者的IUM模式进程调试工具我们得到了一种可以调试vmsp.exe进程的方法,下面我我们就通过代码结合调试分析下这个漏洞.
该漏洞存在于CryptHmacSign函数中,补丁前后的代码分析如下:到达目标的漏洞代码需要调用Tpm2_CreatePrimary函数创建一个signKey,具体方法需要预定义一个key参数模板publicArea,
成功后在返回结果可以得到它的句柄,根据tpm文档构造参数传入调用TPM2_Sign,预先验证参数的signScheme和signKey的相关字段匹配
...(已截断)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-288798.htm
[原创]Hyper-V平台IUM进程调试工具及通用TPM漏洞CVE-2025-2884分析与复现
81 浏览
3 回复
debug isolated usermode process on Nested Virtualization guest vm src on my github 460K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6U0j5Y4N6S2L8X3M7#2x3o6g2Q4x3V1k6e0k6h3y4#2M7X3g2C8k6i4u0F1k6h3I4u0g2f1#2p5k6h3u0#2k6#2)9J5c8Y4c8J5k6h3g2Q4x3V1k6E0j5h3W2F1
帖主你好,手机被前夫远程控制,感觉主副机的那种,看到你贴,想maf
贴主你好,手机被前夫远程控制,感觉主副机的那种,看到你贴,感觉你定能解决,有偿重谢,如果可以帮忙可打电话16675432005。谢谢