1

我有一个基于 C# 中的 WPF 的程序,我想删除用户调试应用程序的权限(SeDebugPrivilege)(至少在发布模式下)。最好的方法是什么?我在需要对非托管代码进行不安全调用的代码中找到了几种方法。我更喜欢纯粹在 C# 中执行此操作,或者更好的是,通过应用程序清单或其他方式来阻止用户在执行我的应用程序期间完全拥有 SeDebugPrivilege。无论如何声明一个 Windows 组并撤销整个组的特权?这样做的动机是通过遵循最小特权原则来更好地保护我的应用程序的一部分。还有其他特权我确定我想稍后删除,但我'

4

1 回答 1

1

我认为您可能误解了特权的影响,例如SeDebugPrivilege. 虽然您当然可以使用 删除进程令牌的权限AdjustTokenPrivileges,但这不会阻止应用程序调试,而是会阻止应用程序本身执行某些调试操作。但是,这可用于通过防止应用程序通过需要特权的方式影响其他进程来减少应用程序中可能存在的漏洞的影响。

请注意,默认情况下,即使没有 ,用户也可以调试他们自己启动的应用程序SeDebugPrivilege,因此即使以非管理员用户身份运行(默认情况下根本没有权限),这也不会阻止应用程序被调试。

当然,有许多应用程序示例尝试检测是否附加了调试器,并且它们的成功程度各不相同。充其量您将能够使调试应用程序变得更加困难,但如果您在用户的机器上运行,您将无法完全阻止它。

您也许可以定期检查System.Diagnostics.Debugger.IsAttached,如果值为 ,则采取一些措施true,但对于决心调试应用程序的人来说,克服它相对简单。

于 2012-11-14T22:42:24.010 回答