gpt4 book ai didi

c++ - 我可以为那些知道互斥锁密码的进程全局创建 Windows 互斥锁吗?

转载 作者:可可西里 更新时间:2023-11-01 14:42:40 26 4
gpt4 key购买 nike

我想使用 WinAPI、CreateMutex()OpenMutex() 创建 Windows 互斥。但出于安全考虑,我希望互斥量由知道“密码”或硬编码魔术代码的进程打开。我不希望每个进程都访问互斥量。

例如,创建名称为“Globel\cd689f00-0462-11e5-b939-0800200c9a66”的互斥锁。所以只有知道互斥锁名称的进程才能访问这个互斥锁。但这不是一个好的解决方案,因为您可以简单地使用 Winobj.exe,并且您仍然有机会找到这个互斥体。我希望这个互斥体受到 ACL(访问控制列表)之类的保护。问题是,我找不到为 ACL 创建自己的 SID 的方法。

这是我所知道的和我想要的:1. 我知道我可以通过将其命名为“Global\MyMutexName”来让许多进程访问互斥锁。2.我也尝试去理解MSDN上提到的ACL和SID。但我仍然找不到创建自己的 SID 的方法(也许这没有意义?)。3. 我不想将我的进程提升为管理员。

最佳答案

您尝试执行的操作不符合 Windows 使用的安全模型。权限总是根据运行可执行文件的人授予,而不是根据可执行文件本身授予。但是,根据您的情况,可能会有合适的选项。

如果涉及的所有进程都在同一用户的上下文中,那么您可以使用 IPC(例如,命名管道)来识别您的“友好”进程和 DuplicateHandle()在进程之间将句柄传递给未命名的互斥量。

如果进程必须在不同的用户上下文中,一种选择是让系统服务在特权上下文中运行以充当代理。当然,这需要以管理员权限安装系统服务,但这通常是可以接受的;它只需要做一次。

如果应用程序必须是可移植的(无需安装,或者无需管理员权限即可安装)并且必须跨越用户边界,那么我认为您必须使用 IPC 来实现您自己的互斥体。当然,那会非常低效。

请记住,在任何这些情况下,恶意用户仍然可以访问互斥体 - 您能做的最好的事情就是稍微增加一点难度。例如,如果您使用实际的互斥锁,攻击者可以枚举其中一个进程的句柄、识别互斥锁并复制句柄。 (或者简单地将恶意代码注入(inject)所谓的“友好”进程之一以直接使用句柄。)甚至 IPC 也可能被监视和复制。

您应该认真考虑边际安全 yield 是否值得显着增加复杂性。 IMO,不太可能。

(顺便说一下,正确的解决方案是由系统服务完成所有需要访问互斥体的工作;用户运行的应用程序通常是一个瘦客户端,它除了提供 GUI 之外什么都不做。)

关于c++ - 我可以为那些知道互斥锁密码的进程全局创建 Windows 互斥锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30481214/

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