gpt4 book ai didi

winapi - 如何识别/授权命名管道中消息的发送者? (创建命名管道)

转载 作者:行者123 更新时间:2023-12-05 05:21:49 26 4
gpt4 key购买 nike

我已经使用命名管道在两个应用程序之间建立了通信。第一个应用程序使用 CreateNamedPipe 创建一个命名管道,并使用第二个应用程序发送的 ReadFile 读取接收到的消息。两个应用程序都能够按预期方式进行通信。

是否有可能以某种方式识别接收到的消息的发件人?如果没有某种标识(例如获取发件人 exe 路径)或授权,所有其他应用程序都可以使用该管道向我的应用程序发送消息。

(编辑) 更多细节,因为在这种情况下它似乎很重要:
创建管道的应用程序作为 Windows 服务运行。这两个应用程序在同一系统上本地运行。

最佳答案

GetNamedPipeClientProcessId()将为您提供客户端进程的进程 ID。然后,您可以使用 OpenProcess() 打开进程的句柄。并调用GetModuleFileNameEx()以确定该进程中正在运行的应用程序。然后,您可以以任何您认为最好的方式审查应用程序,例如,您可能想要检查 digital certificate 的身份。或者您可能更愿意只检查路径名是否符合您的预期。

请注意,尝试限制对特定应用程序而非特定用户的访问永远不会稳健;攻击者始终可以控制已批准的应用程序,并用自己的代码替换其代码。基本上它不会超过减速带,但如果您觉得值得做,就可以做。


如果您真正想知道用户 连接了什么,您应该使用ImpersonateNamedPipeClient()正如评论中已经建议的那样,然后是 OpenThreadToken()等等。或者更好的是,在创建命名管道时设置权限,以便首先只有授权用户才能连接。


既然您已阐明客户端以提升的权限运行,我可以提出更具体的建议:执行上述两项操作。 配置命名管道的权限,只有Administrators组的成员才能访问;这将确保只有以提升权限运行的应用程序才能访问它。检查可执行文件也不会造成伤害,但仅靠它是不够的,因为攻击者可以启动您的应用程序的副本,抑制请求的提升,并将他们自己的代码注入(inject)到进程中。 (或者,正如 conio 指出的那样,修改他们自己的进程,使其看起来好像正在运行您的可执行文件;GetModuleFileNameEx() 不打算用作安全措施,因此它不会努力避免欺骗。)

关于winapi - 如何识别/授权命名管道中消息的发送者? (创建命名管道),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42027269/

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