您如何限制 C# .NET 中的 System.Diagnostics.Process HANDLE 访问权限?
Posted
技术标签:
【中文标题】您如何限制 C# .NET 中的 System.Diagnostics.Process HANDLE 访问权限?【英文标题】:How do you limit System.Diagnostics.Process HANDLE access rights in C# .NET? 【发布时间】:2021-09-06 12:15:17 【问题描述】:在 C#/.NET 中使用 System.Diagnostics.Process 时,您收到的 Process HANDLE 是 PROCESS_ALL_ACCESS。这可能允许外部应用程序窃取 HANDLE 并拥有对目标进程的完全访问权限并滥用信任关系。
如此处所示,.NET 只是默认为完全访问:https://referencesource.microsoft.com/#system/services/monitoring/system/diagnosticts/Process.cs,167
如何减少 Process HANDLE 的权限?使用非托管代码使用调用 openprocess() 创建一个新的 Process 类应该如何完成?还是反射?
谢谢!
【问题讨论】:
这可以允许外部应用程序窃取 HANDLE。如果您的进程可以打开另一个具有所有访问权限的进程,并且有人可以使用重复的句柄访问权限打开您的进程 - 几乎总是可以并直接打开目标进程。没有人会更快地从您的流程中窃取句柄 一本好书:docs.microsoft.com/en-us/windows/win32/procthread/… 【参考方案1】:您收到的进程句柄是 PROCESS_ALL_ACCESS。这可能允许外部应用程序窃取 HANDLE 并拥有对目标进程的完全访问权限并滥用信任关系。
您所描述的问题与 .NET 无关,更不用说 Process
,而是与 Windows 以及您的进程是否运行 提升 Windows Vista 中引入的概念有关。对于提升的进程,非管理员用户和非提升的进程可能不会干扰提升的进程。仅仅因为您请求PROCESS_ALL_ACCESS
并不一定意味着您将获得此类权利。或者,您可以使用不同的帐户(见下文)、Vista 之前的技术,并且今天仍然有效。
如何限制 C# .NET 中的 System.Diagnostics.Process HANDLE 访问权限?
所有 Windows 进程,无论它们是否由 .NET 创建,都可以由其他应用程序枚举,并返回一个 HANDLE
以供进一步检查或可能的操作。
如何减少进程句柄的权限?
如果您想在一定程度上保护您的进程,您可以提升运行它。然后,这将操作限制为管理员和其他提升的进程。其他非提升进程或普通用户可能会看到该进程,但仅此而已。
不同的帐号
一般来说,对于非提升进程,一种特别有效的对策是在与试图操纵它的进程不同的用户帐户中运行它们,从而将受众限制为仅限管理员。
【讨论】:
以上是关于您如何限制 C# .NET 中的 System.Diagnostics.Process HANDLE 访问权限?的主要内容,如果未能解决你的问题,请参考以下文章
C# .NET Framework API(非 Win32 API)中的 CreateProcessAsUser()
如何在asp.net C# Webform中制作像网格一样的Excel
如何使用C#从asp.net MVC中的枚举绑定下拉列表[重复]