2012-11-14 27 views
1

禁用SeDebugPrivilege我在C#基于WPF的程序,我想删除用于调试应用程序(SeDebugPrivilege)(在Release模式至少)用户的特权。什么是最好的方式去做这件事?我发现了一些代码中需要对非托管代码进行不安全调用的方法。我更愿意纯粹用C#或者甚至更好的方式通过应用程序清单或其他方式来阻止用户在执行我的应用程序期间拥有SeDebugPrivilege。无论如何宣布Windows组和撤销整个组的权限?这样做的动机是通过遵循最小特权原则来更好地保护我的应用程序的一部分。还有其他的特权,我确定我希望在稍后的某个时候删除,但是我一次只想担心一件事。在C#

+0

您是否试图阻止用户调试应用程序或执行调试活动*使用*您的应用程序? – Iridium

+0

@Iridium这听起来像是想减轻应用程序中任何漏洞的影响。如果应用程序具有'SeDebugPrivilege',那么它可以做它喜欢的事情,并且包括任何恶意代码,这些代码偶尔会以某种方式蔓延。 –

+0

@Iridium我曾打算过前者。我误解了SeDebugPrivilege的目的。我想在这一点上,我想知道如何撤销用户或组的使用SeDebugPrivilege –

回答

1

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

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

当然还有的是试图检测调试器是否安装应用程序的例子很多,他们成功的不同程度的做到这一点。最好的情况是,您可以使调试应用程序变得更加困难,但如果您在用户的机器上运行,则无法完全阻止它。

您或许可以定期检查System.Diagnostics.Debugger.IsAttached,如果值为true则采取一些措施,但是对于确定要调试应用程序的人来说,这将是相对直接的。

+0

任何东西都可以调试。如果你真的必须,你可以删除调试附加阻止代码。这就是盗版软件的工作原理,他们修补许可证检查功能以返回“激活”或其他。某些应用程序可能需要更长的时间,但可以调试一切。甚至你的引导程序与bochs –

1

我想知道如何撤销你希望你的应用程序以撤消用户权限用户或组使用的SeDebugPrivilege

所以呢?看来你希望管理员用户无法调试你的应用程序。

这是根本错误的方式去了解这一点。我,用户,是我的机器的所有者。 我是确定您的应用程序允许执行什么操作的人,而不是反之亦然。

对于具有SeDebugPrivilege的应用程序来说,它可能会执行任何它喜欢的任何事情,这很可能包括剥离管理特权的登录用户。然而,如果你在我自己的机器上设法将我变成非管理员,未经我的同意,那么在从备份恢复后(我是这台机器上唯一的管理员,所以我会被塞满),我会一定要记一些相当不愉快的博客文章对你的软件... :)

我拿到这个:用户负责。不是应用程序。对此你几乎没有办法,我希望随着时间的推移,你可以做的更少。