c - 限制进程对管道的访问 (Windows)

标签 c windows kernel driver

是否可以通过进程限制对命名管道的访问(图像名称或进程 ID 都可以)?

此处的上下文是一个 Filter Minidriver,它必须与执行大部分业务逻辑的用户空间服务进行通信。由于此通信是安全敏感的,我想保护它免受外部干扰,而默认情况下,驱动程序创建的命名管道似乎可以通过任何用户空间进程进行通信知道管道的名称(通过静态或动态分析很容易发现)。

这是我已经知道的:管道是 Windows 中的安全对象,因此,它们具有安全描述符。这个安全描述符可以包含一个 DACL,它应该限制对该对象的访问。我广泛搜索了条件 ACE 的文档和示例,我希望它们可以做我想做的事,但我没有找到任何相关内容。

编辑:我接受了 MSalters 的回答。人们普遍认为 SYSTEM == ring0 虽然驱动程序的代码签名看起来很重要,但 SYSTEM 可以轻松禁用代码签名,所以无需将权限从 SYSTEM 升级到 ring0 - 它们已经相同了。另一方面,即使是默认的安全描述符(在 minifilter 驱动程序上下文中 - 参见 FltBuildDefaultSecurityDescriptor)也包含一个限制,因此只有 SYSTEM 和 Administrators 可以访问该对象,所以没有需要采取进一步的行动(或者看起来可能)。

最佳答案

图像名称无论如何都不安全,任何人都可以创建“Notepad.EXE”。进程 ID 只是一个数字,可以重复使用,所以这也不是保护。此外,您可以通过多种方式将 DLL 偷运到另一个进程中,因此即使您知道某个特定进程正在运行您的 EXE,您仍然不知道它是否正在运行只是您的执行文件。

Windows 安全模型使用安全主体(用户和系统帐户)的概念。这些直接由 ACL 支持,并且受到保护以防止欺骗。如果您的过滤器驱动程序拒绝与任何人交谈,这是有道理的,但它愿意与用户 X 的进程 A 交谈,它应该愿意与用户 X 的任何进程交谈。

关于c - 限制进程对管道的访问 (Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37433329/

相关文章:

c - 在c中查找两个文本文件之间的差异

c - 理解 `man ls` 长格式 : set-user-id and set-group-id modes

linux - 在 gdb 断点处运行命令,c 或 cont 都不起作用

linux - 需要重新插入才能建立 USB 设备链接

c - 从图创建邻接表的两种实现

java - STUN UDP请求包问题

windows - keras plot_model 告诉我安装 pydot

c++ - 确定内存位置是否更改值

c - #include "windows.h"它是如何工作的

kernel - 我的操作系统内核在 D : Some embedded strings don't work