gpt4 book ai didi

c++ - 防止使用 ImpersonateNamedPipeClient()

转载 作者:可可西里 更新时间:2023-11-01 10:19:58 25 4
gpt4 key购买 nike

当命名管道客户端连接到服务器并写入一些数据时,服务器可以调用ImpersonateNamedPipeClient()冒充客户。 (服务器确实需要在调用 ImpersonateNamedPipeClient() 之前读取数据)。

正如我们在 this link 中看到的那样,这可能会导致权限提升安全漏洞。

是否可以阻止/禁用/拒绝此模拟,以便客户端可以连接到命名管道但不允许服务器模拟?

注意1:我知道客户端需要先在命名管道上写。但在某些情况下,客户端需要先写,所以我需要防止这个安全漏洞。

注意2:欢迎提供适用于Windows XP及以上版本的解决方案。

最佳答案

调用CreateFile()时要打开命名管道的客户端,请在 dwFlagsAndAttributes 参数中传递 SECURITY_IDENTIFICATION。这允许服务器识别用户并确定客户端的权限,但防止服务器模拟客户端的安全上下文。

如果您还想阻止服务器识别用户,您可以使用 SECURITY_ANONYMOUS

请注意,服务器仍然可以成功调用 ImpersonateNamedPipeClient(),但任何使用模拟 token 的尝试都将受到指定模拟级别的限制。例如,如果服务器在标识或匿名级别模拟客户端时尝试打开文件,则操作将失败。

有关详细信息,请参阅 Impersonation Levels MSDN 上的页面。

还应注意,从 Windows XP 服务包 2 开始,服务器无法模拟客户端,除非它拥有 SeImpersonatePrivilege 特权。 (参见 MSDN 上的 ImpersonateNamedPipeClient。)在默认配置中,只有系统服务和管理员拥有此权限。这有效地减轻了您链接到的文章中描述的许多(尽管不是全部)风险。

关于c++ - 防止使用 ImpersonateNamedPipeClient(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31506364/

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