U盘PE| w764位旗舰版下载 | U盘装win7系统 | U盘启动 |win7pe | win10下载 |加入收藏土豆PE官网U盘PE,U盘装win7系统,win7pe,U盘启动,U盘装系统,w764位旗舰版下载站!
当前位置:主页 > 新闻资讯 >

在Windows 11内部预览版中,KUSER_SHARED_DATA结构体发生了哪些新变化?(上)

来源:http://www.tudoupe.com时间:2022-03-18

简介

不久前,我发现一个有趣的推文, 涉及Windows 11内部贝塔版本的一些计划修改。

这大大地吸引了我的注意力。Kuser_Shared_DATA 是一个静态虚拟内存空间的结构 。在经典的Windows内核里可在0xff 78万,00,00美元时找到。从利用漏洞的角度来看,由于其静态特性,瞄准器经常用来攻击系统的核心。特别是当它涉及到 长途入侵核心。虽然 Kuser_Shared_DATA 结构没有 entosskrnl 的指针, 但该结构不可能没有 entosskrnl 的指针 。也不可执行,然而,在与 Kuser_Shared_DATA 结构相同的内存页面上也有内存。此外,该页面上也没有数据。因此,它可以作为一个有固定地址的代码洞发挥作用。

在编写本报告时, Windows 11 目前内部预览版本中的 KUSER_Shared_DATA 结构长度为 0x738 字节。

使用Windows,内存“ page” 一般为 0x100 字节长度 。即4KB。由于 Kuser_Shared_DATA 结构长度为 0x738 字节,所以,该纪念页仍有 0x8C8字节的记忆,供攻击者利用。因此,这些未使用的字节保留与 Kuser_Shared_DATA 结构的其余部分相同的内存权。即RW,或读/写权限。这意味着“KUSER_Shared_Data 代码洞”不仅仅是一个可读代码洞。而且,还具有静态地址。实际上,Morten Schenk曾于2017年在BlackHat讨论过这一技术。我以前写过一篇文章会上简要讨论了滥用这一结构来制定守则的缺陷。

如果这一编码缺陷得到适当处理,攻击者必须在他们的记忆中发现一个新地点,以储存他们的贝壳。另外,如果攻击者读/写原件,可删除与KUSER_Shared_DATA相对应的页面条目(PTE)。因此,现在可以把记忆页写下来。然而,为了实现这一点,攻击者必须绕过KASLR,并抄录其记忆中的原话之一,这意味着攻击者完全控制该系统。一种弥补代码差距的方法,其目的是迫使攻击者首先避开KASLR。然后,为了把恶意代码存储在记忆中这就增加了利用漏洞的障碍。如果攻击者无法直接写到静态地址中,您必须确定更多的记忆位置。因此,它可以归类为规模较小、重点更突出的缓解措施。无论如何,我仍然认为这是一个令人着迷的研究课题。

最后,在开始之前,这一辩论是在Ntoskrnl安全系统的框架内进行的;当虚拟化安全特征(VBS)启用时,可以在Ntoskrnl安全系统中使用安全特征。这些特征不适用于VTL1级安全内核。萨尔·阿马尔正确地指出,这种结构体的地址,在VTL1,这是完全随机的。

值 0xff7800 现在只读 。

可更改 Kuser_ Shared_Data 。我的第一个想法是,记忆地址会在某个时候(以某种方式)完全随机化。为了验证这一点,使用 WinDbg, 我将 Kuser_ Shared_ DATA 结构的静态地址给了 dt 命令 。令我惊讶的是,拆除后,可在0xff 78万 00 00个工地找到施工地点。

我的下一个想法是,它试图用 0x800 作为冲抵。Kuser_Shared_Data 结构创建,确定是否发生了任何事故。执行该操作后,通过检查PTE,Kuser_Shared_Data现在只读,正如我们所发现的那样。

后来,我曾和我的同事Yarden Shafir谈过话。他告诉我,Kuser_Shared_DATA(例如,系统成员)中有些物品将随时更新。同时,他还逼我继续挖掘因为很明显,KUSER_Shared_DATA 结构无疑使用只读 PTE书写/加载。我最终发现这也是有意义的,因为与 KUSER_Shared_DATA 相对应的 PTE 脏部分设为零 。这表明记忆页尚未写成。那么,是什么原因导致这种情况的发生?

利用这个知识,我开始寻找 任何与开发协会有关的东西 这使我好奇。

不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,

当在开发协会中查找 0x7800 或“userhard” 术语时,我碰巧发现了一个我以前从未见过的符号:nnt!MMWREWUSERSHAREDDATA。在IDA中,此符号似乎含有 0x7800 的定义 。

然而,在实时审查调试会议时,我发现地址似乎不同。 不仅如此,而且地址在重新启动后也发生了变化!

然而,是否有两个不同的记忆页提到两个不同的结构的情况?是同一件事吗?或者它们有某种关联吗?在审查了这两个专题研究组之后,尽管如此,我证实这两个虚拟地址是不同的。不过,使用了相同的页码(PFN)。此外,使用命令, 我们可以找到 KUSER_ Shared_ ATA 结构和新符号! MmWriteable SharedUserData 的 PTE :

!pte poi(nt!MmWriteableSharedUserData)

如上所述,与“静态” KUSER_Shared_DATA结构相对应的 PTE 拥有地址 0xffe7bc00。地址 0xffcc340c47010 与 nt! MmWrityable 共享用户数据 PTE 虚拟地址对应 。

同等虚拟地址的实际地址(在PTE的情况下)将通过将PFN乘以页面大小(Windows上通常为0x100)的方式提供。用于生成匹配 4KB 页面的“ 最后” 分页符结构 。因为两个虚拟地址都和PFN一样这表明,如果将PFN转换为实物地址(在本例中为0xfc100),可以转换成实物地址。相同的物理页面将用两个虚拟地址绘图! 我们可以检查每个虚拟地址对应的物理地址, 以及虚拟地址本身 。

我们有两个带有不同记忆权的虚拟地址(一个是只读地址,另一个是读/写),并有一个物理页面支持。换句话说,我们有两个虚拟地址,对同一物理内存有不同的看法。

内存段

对世界上最流行的Kuser_Shared_DATA作了以下修改:内存部分的理念是 此处的“元素” 。这表明记忆可以同时由两个进程共享(内核也是如此)。就像我们的情况一样其工作方式是,虚拟地址序列可以映射为相同的物理内存。

在本例中,――“静态” Kuser_Shared_DATA (另一个虚拟地址) 共享相同的物理内存段 。这意味着,这个结构现在有两个“观点”。具体如下所示:

这需要改变一个虚拟地址(如nt)!同时,将修改另一个虚拟地址(0xff7800)的内容。这是因为一个虚拟地址内容的任何变化都会导致对物理内存进行更新。由于这一物理内存的内容由两个虚拟地址共享,所以,两个虚拟地址的内容都将更新。允许 Windows 在保存前一个 Kuser_ Shared_ DATA 地址的同时保存此地址 。还可以随机生成新的地图视图 。先前在 Kuser_Shared_DATA 结构中发现的静态读写代码缺陷已被“ 缓解 ” 。“ 旧” 地址 0xff7800 现在可指定为只读 。因为有一个新的视角可以用来取代这个内存。这种观点是不合逻辑的!我们现在对已经取得的成就提出了更为复杂和低层次的具体细节。

nt!MiProtectSharedUserPage

在继续分析之前,让我定义两个词。当我指定存储位置 0x7800 (KUSER_Shared_DATA 静态地图) 时,我将Kuser_Shared_Data称为“静态”。当我介绍新的随机地图时,很多人对此感兴趣。我称这个符号为nt! MmWrityable SharedUserData。这样的话,我总能指出我所说的"转变"

在温德堡进行了一些动态检查之后我知道Kuser_Shared_DATA是如何更新的。为此,我首先在装满了的扬托斯克恩特上 设置一个断点。在当前调试会话中,以下命令可用于实现此目的 :

sxe ld nt

.reboot

我们可以看到新找到的符号 ent! mmWrityableUserSharedData 与“静态” Kuser_Shared_DATA 位置的链接, 一旦达到断点 。

这显然表明,在整个装载过程中,符号将再次修改。

在对开发协会的反向分析中,我发现了一个功能上的交叉引用!MiProtectShaed用户页面,nt!MmWribable Shareed用户数据,这对我们非常重要。

虽然执行工作仍然停滞不前,由于 entoskrnl 设置断点,我使用了函数 ant! 在 MiProjectShaed 用户页面中添加了另一个断点 。并发现,在到达新的断点后,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,

更有趣的是,在装载过程的现阶段,“静态”KUSER_Shared_DATA仍然是静止的。可读的,写入! 虚拟 PTE 地址 0xffb7fbc00 与虚拟地址 0xff7800 相关 。随着系统重新启动,其结果是,安托斯克恩克尔的装货停止了。PTE的地址也发生了变化。如前所述,此地址可供购买! 本页面是我们对2011年埃及抗议的特别报导的一部分。并且不同的系统,此地址可能更改 :

因为我们知道 0xff7800,这个“ 静态” Kuser_ Shared_ Data 结构的地址,在某些时候,它会变成只读。这意味着这一职能可能负责改变地址的权力。并动态地弹射 ent! MmWribable SharedUserData 。它特别以命名契约为基础。

不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,我们可以观察nt! 在此指令执行时, 符号 mmWrityable SharedUserData 已修改为 RDI 值 。怎么会这样?

让我们来看看这个函数的开始。内核模式地址和nt! 我们不必对此做任何事情。 Faty_ KernelShaledUserDataAaslr_ private_ enable(这是我们想要做的)兴趣不大)。

在上图中,内核模式为 0xffb700。在 WinDbg 的重新组合窗口中标记红框 。事实上,它是该列表项(例如PTE阵列的地址)的页面基本地址。第二个值,这是 0x7bc00 常数 。用于定位此 PTE 阵列的值 。获取与 KUSER_Shared_Data 连接的 PTE 数据 。以下公式可用于计算这个数字(PTE阵列的索引):

1. 将目的地虚拟地址(此处为 0xff7800)除以页面大小(此处为 0x100),以获得虚拟页码( VPN)。

2. VPN必须乘以PTE的大小(64比特系统=8字节)。

这意味着连接“静态” Kuser_Shared_Data 结构的 PTE 将引入nt! MI_ RED_PTE_LOCK_FREE。 上述 PTE 的地址是 0ffb7fc00。

简单来说,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,并将其返回,同时,他们还查看了田野中的页面。如果它们位于PML4E阵列同一地址空间的同一地点,则可以进行威慑。它包括PML4页面结构的 PML4 页面表格条目矩阵。回顾一下,PML4结构是一个直截了当的分页结构。所以,换句话说,这保证了指定的清单项目位于分页符结构内的某处。这可以在下面看到。

然而,稍有细微差别的是,函数决定表格项目是否在用户模式分页结构中。这个结构也被称为“暗影空间”。回想一下,根据KVA Shadow的实现情况(即当微软的内核分离(KPTI)实现时,内核表与内核不匹配。现在有两种不同的页面结构:一个用于内核模型的实施,另一个用于代码的其余部分。建立了新的用户模型集。采用这种缓解方法是为了防止出现梅尔唐的漏洞。但是,这张支票有一个非常简单的"情境"因为PTE已清楚定位到内核模式的位置所以,这无疑不是由“用户模式页面断页结构”表达的。

如果 PTE 不位于阴影空间,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,几个“比特”中的 PTE假若以物配主者在重重黑暗中,在返回内容之前,PTE也将受到一些审查。查找 KVAS 是否启用 。从利用漏洞的角度来看,就我们对变革的广泛关切而言,这一点并不重要。然而,它仍然是“过程”的一个组成部分。

此外,对我们来说不是! 特质_ Kernel SharedUserDataAslr_ private_ Isenabled 并不特别有益- 我们不会利用它。我们只能通过确定规则来判断我们是否走对了轨道。这一功能似乎主要是为了为这一功能收集指示和遥测数据。

这篇文章是全球之声网络特别报导的一部分。“静态” Kuser_Shared_Data 结构内容的 PTE 将传送到堆叠地址: RSP 。页:1类似的,此堆叠地址也用于其它用途( 如:nt! Mo_RED_PTE_LOCK_FREE) 请求 。再说一次,这对我们来说并不特别重要。然而,这是这一进程中的一个必要步骤。

然而,更有趣的是,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,然后用RAX还回去由于规定内存属性/权利的KUSER_Shared_DATA结构载于RAX,KUSER_Shared_DATA结构的“比特”也位于RAX。所以,它必须与它相匹配 一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点一点点从 Kuser_Shared_Data“ 静态” PTE 获取页码(PFN) 。在 PTE 中, 此值为 0xf52e 。其值是0x800

这支新军稍后会调用新兵! MimakeValidPte,让我们继续前进。

我们现在可以继续通话了!MimakeValidPte电话。

不久后我再讨论一下PFN的记录,PFN的“价值”在技术上是一个抽象的价值。当它乘以 0x100 (页面大小) 时,您被指定了物理内存地址 。在内存分页过程中,它一般是下一页分页结构的地址。或者,如果它出现在"终局"小报上这篇文章是我们PT(页面表)特别报导的一部分。可以计算4KB对齐的最后物理内存页。

除此之外,也使用虚拟地址阵列来保存新生力量人民阵线的记录。PFN数据库是给此阵列命名的名称 。这样做的原因是,内存管理可使用线性(虚拟)地址访问页面表格条目。这就提高了性能,因此,MMU不需要通过所有页面段来检索PFN、标签等等。实际上,这为查找记录提供了直截了当的技巧。也就是说,使用索引来访问阵列。这对所有"阵列"来说都是如此。包括PTE数组。同时,nt! a 函数, 如 MiGetPte 地址,也可以使用索引获取相关的页表阵列。例如PTE阵列!PDE 阵列中的 PDPT 元素这是2011年埃及抗争特别报导的一部分。等等。

小结

Copyright © 2012-2014 Www.tudoupe.Com. 土豆启动 版权所有 意见建议:tdsky@tudoupe.com

土豆系统,土豆PE,win7系统下载,win7 64位旗舰版下载,u盘启动,u盘装系统,win10下载,win10正式版下载,win10 RTM正式版下载,win8下载,电脑蓝屏,IE11修复,网络受限,4K对齐,双系统,隐藏分区,系统安装不了,U盘装系统,笔记本装系统,台式机装系统,diskgenius运用,GHSOT装系统,U盘修复,U盘技巧,U盘速度,U盘不能格式化,U盘复制发生错误,U盘加密,U盘选购,开机黑屏,蓝屏,进不了系统,上不了网,打不开程序,点击无反应,系统设置,PE个性化,PE添加网络,PE维护系统

点击这里给我发消息