【问题标题】:Disabling the SeDebugPrivilege in C#在 C# 中禁用 SeDebugPrivilege
【发布时间】:2012-11-14 22:03:58
【问题描述】:

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

【问题讨论】:

  • 您是否试图阻止用户调试应用程序,或使用您的应用程序执行调试活动?
  • @Iridium 在我看来,这个想法是为了减轻应用程序中任何漏洞的影响。如果应用程序有SeDebugPrivilege,那么它可以为所欲为,其中包括任何碰巧以某种方式蔓延的恶意代码。
  • @Iridium 我本来打算是前者。我弄错了 SeDebugPrivilege 的用途。我想在这一点上,我想知道如何撤销用户或组对 SeDebugPrivilege 的使用
  • AFAIK 如果没有任何本机/不安全代码,就无法做到这一点...删除此特权不会产生太大影响 IMO...您的目标到底是什么?也许还有其他选择...
  • SeDebugPrivilege 不是“调试程序的能力”——它是“调试其他用户拥有的程序的能力”。即使是有限的用户也完全可以调试他们拥有的进程。

标签: c# security privileges least-privilege


【解决方案1】:

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

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

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

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

【讨论】:

  • 任何东西都可以调试。如果你真的需要,你可以删除调试附加阻塞代码。盗版软件就是这样工作的,他们修补许可证检查功能以返回“激活”或其他任何内容。某些应用程序可能需要更长的时间,但一切都可以调试。甚至你的引导加载程序都带有 bochs
猜你喜欢
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
相关资源
最近更新 更多