gpt4 book ai didi

windows - 那么,Windows Atom 表的用途是什么?

转载 作者:可可西里 更新时间:2023-11-01 13:20:42 25 4
gpt4 key购买 nike

安全界一直在讨论一种称为“原子轰炸”的新代码注入(inject)技术(参见 Injection Attack DescriptionInformation Security Stack Exchange Question)。简单地说,攻击者可以使用原子表来存储可执行代码。

一个问题是全局原子表功能存在于所有版本的 Windows 中,并且是一个有意的功能,而不是一个错误。目前尚不清楚如何通过更改 Windows 来减轻威胁。

Windows 原子表的用途是什么?如果微软只是说“就是这样,没有更多的原子表”,会有什么影响?

最佳答案

TL;DR:我个人认为微软不会对全局原子表进行任何更改,因为这只是一个次要的安全问题。

原子表可让您将字符串与 16 位数字相关联。你给 Windows 你的字符串,它给你一个数字。然后,您只需知道分配的编号即可再次检索该字符串。

每个正常进程都有自己的本地原子表,但它通常是空的,不是安全问题。

有多个“全局”原子表由同一 window station 中的所有进程共享。 .其中 1 个被记录在案,称为全局原子表。 MSDN 也足够好 tell us那个RegisterClipboardFormatRegisterClass在他们当前的实现中也在内部使用他们自己的原子表。其他功能如 SetProp也使用原子,但我们只对漏洞利用使用的原子表感兴趣,原子被添加到该表中,并带有 GlobalAddAtom功能。

这个原子表的主要目的是充当一个简单的存储位置,以便不同的进程可以在一个名为 DDE 的协议(protocol)中相互通信。 .当一个进程想要向不同进程中的窗口发送消息时,您发送的消息不能超过 8 个字节(2 个参数,每个 4 个字节),这不足以传输文件系统路径或 URL。

为了解决这个限制,应用程序通过调用 GlobalAddAtom 将字符串/路径/URL 存储在公共(public)全局原子表中。 . GlobalAddAtom返回一个应用程序可以发送给另一个进程的数字。当另一个进程收到 DDE 消息时,它只是将数字传递给 GlobalGetAtomName函数来检索字符串。

这是一个安全问题吗?事实证明,这个过度炒作(恕我直言)漏洞利用 uses全局原子表完全完成该表的设计目的;将字符串从一个进程传输到另一个进程。

要将代码注入(inject)另一个进程,您通常会调用 OpenProcess获得所需进程的句柄,VirtalAllocEx在这个进程中分配一些内存,WriteProcessMemory用您的代码填充这个新分配的内存,最后 CreateRemoteThread开始执行此代码。

该漏洞利用基本上调用 GlobalGetAtomName以一种复杂的方式 (NtQueueApcThread) 避免使用 WriteProcessMemory .更令人印象深刻的是它如何构建 ROP 链并使用 NtQueueApcThread 执行它但这与原子表并没有真正的关系,原子表只是一种不寻常/聪明的内存传输方式。

该漏洞利用不允许恶意代码提升或以其他方式获得源进程尚未拥有的权限,因为 NtQueueApcThread不能用于任何随机进程,您仍然需要适当的权限才能访问所需的目标进程。 NtQueueApcThread当漏洞利用出来时,可能会让一些反病毒公司措手不及,但作为一个独立的代码,首先必须由某人执行,它本身不能造成太大的破坏,它必须与其他代码结合使用是可怕的。

微软可以删除原子表吗?不,不是真的,其他表太重要了。

他们可以删除全局原子表吗?不,不是真的,它是一个文档化的 API,并且已经存在 20 多年,而且 Microsoft 不喜欢破坏兼容性。

然而,他们可以稍微中和全局原子表。他们可以通过基于 integrity level 将其划分为多个隔间来降低其全局性。调用过程。这不会改变有问题的漏洞利用,因为它首先无法访问具有更高完整性级别的进程。

如果我们假设 Microsoft 更改了全局原子表,使其充当每个进程的表,会发生什么?

微软开始在 Windows XP 中摆脱 DDE,但在 Vista/7 中更加认真地对待它。在这台 Windows 8.1 机器上,Internet Explorer 仍将 DDE 用于“在同一窗口中打开”命令,但这不是 .html 文件的默认谓词。在注册表中搜索 ddeexec查找所有使用 DDE 处理其文件关联的应用程序。从好的方面来说,文件关联 DDE 仅在应用程序实例已打开时使用。最坏的情况;在双击新文件之前关闭应用程序。

DDE 也可用于做其他事情,但很难说哪些应用程序和/或功能会损坏以及它们会损坏的程度。

全局原子表可用于除 DDE 之外的其他事情,但很难说这样做有多普遍。

如果全局原子表被限制为仅与具有相同文件名的进程共享其字符串,那么许多这些问题就会消失,因为它通常仅用于与同一应用程序的其他实例进行通信。

关于windows - 那么,Windows Atom 表的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40553686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com