以管理员身份运行时提升到高完整性级别

时间:2018-03-29 06:57:41

标签: c# .net permissions windows-10

我有一个C#WPF应用程序,它将有条件地评估其运行完整性级别,如果它对于手头的任务不够高,将使用runas动词重新启动自身。在几乎所有情况下,这种方法都很有效 - 如果它确定需要提升并且具有完整性水平<1。 0x3000(高),然后它与runas重新启动,一切都很好。

这种方法的问题在于,当a)运行应用程序的用户是实际命名的“管理员”帐户并且b)可执行文件标有非高完整性级别时(这可能发生),具有讽刺意味的是它不起作用如果您使用Internet Explorer等浏览器下载可执行文件,该浏览器会对其下载的文件应用强制信任标签。

当您实际以管理员身份运行时,似乎忽略了runas谓词,但仍然会评估信任标签。这导致重新启动的过程保持相同的完整性水平。有没有解决的办法?同意弹出窗口我没有任何问题,但是当以管理员身份运行时,根本不会(显然:不会)发生。但是,如果IL限制存在于(通常在我们的大多数情况下通常是可下载的)可执行文件中,那么它仍然会被强制执行。

注意:我提出的任何解决方案都必须允许应用程序在运行时决定是否需要提升并在需要时选择加入。在某些情况下,应用程序不需要额外的权限,因此不应该请求提升(因此使用清单可以作为选项进行排序)。

1 个答案:

答案 0 :(得分:1)

在@eryksun的帮助下,你似乎无法做我想做的事情。一旦在中等完整性级别下启动进程,除非启用了UAC,否则它无法逃脱此命运。由于RID 500 Administrator帐户明确地从UAC中排除,因此在以该用户身份运行时无法进行。

我能做的最好的事情是通过测试流程令牌信息中TOKEN_ELEVATION_TYPE.TokenElevationTypeFull的存在以及流程完整性等级&lt; 1来检测这种情况。 0x3000处。如果你陷入“你被提升,但处于中等诚信水平”的监狱,它似乎没有出路。

用户可以通过执行以下操作之一来避免这种命运:

  • 不通过导致IL标签应用于文件的方式下载可执行文件(例如,不是通过Internet Explorer - 可能是其他一些浏览器,但看起来不是Chrome)
  • 在执行之前主动删除IL标签(例如,使用icacls
  • 以RID 500管理员以外的用户身份运行可执行文件(假设可执行文件已配置为在需要提升的情况下使用runas动词重新启动自身)