在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类应该如何完成?还是反思?
谢谢!
您收到的进程句柄是Process_ALL_ACCESS。这可能会允许外部应用程序窃取HANDLE并拥有对目标进程的完全访问权限,从而滥用信任关系。
您所描述的问题与.NET无关,更不用说Process
了,而是与Windows有关,并且您的进程是否运行提升了这一概念,这是在Windows Vista中引入的。通过提升进程,非管理员用户和非提升进程可能不会干扰提升进程。您请求PROCESS_ALL_ACCESS
并不一定意味着您将获得此类权利。或者,您可以使用不同的帐户(见下文(,这是Vista之前的技术,至今仍然有效。
如何在C#中限制System.Diagnostics.Process HANDLE访问权限?
所有Windows进程,无论是否由.NET创建,都可以由其他应用程序枚举,并返回HANDLE
以供进一步检查或可能的操作。
如何减少进程句柄的权限?
如果您想在某种程度上保护您的进程,您可以提升运行它。这样就限制了对管理员和其他提升进程的操作。其他未提升的进程或常规用户可能会看到该进程,但仅此而已。
不同的帐户
一般来说,对于非提升进程,一个特别有效的对策是在试图操纵它的进程的不同用户帐户中运行它们,从而将受众仅限于管理员。