代码之家  ›  专栏  ›  技术社区  ›  Matt Prigge

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

  •  1
  • Matt Prigge  · 技术社区  · 6 年前

    我有一个C#WPF应用程序,它将有条件地评估其运行的完整性级别,如果不够高,无法完成手头的任务,则将使用 runas 动词几乎在所有情况下,这种方法都非常有效——如果它决定需要提升并具有完整性级别<0x3000(高),然后用 符文 一切都很好。

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

    似乎 符文 当您实际以管理员身份运行时,会忽略谓词,但仍会评估信任标签。这将导致重新启动的进程保持相同的完整性级别。有办法解决这个问题吗?我对同意弹出窗口没有任何问题,但在以管理员身份运行时根本不会出现(显然不会)。但是,如果IL限制存在于(在大多数情况下通常是下载的)可执行文件上,则仍然会强制执行IL限制。

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Matt Prigge    6 年前

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

    我能想到的最好方法是通过测试 TOKEN_ELEVATION_TYPE.TokenElevationTypeFull 在流程令牌信息中,流程完整性级别为<0x3000。如果你被困在“你被提升了,但处于中等诚信水平”的监狱里,似乎没有出路。

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

    • 不通过会导致IL标签应用于文件的方式下载可执行文件(例如,不通过Internet Explorer-也可能是其他浏览器,但从外观上看不是Chrome)
    • 在执行之前主动移除IL标签(使用 icacls ,例如)
    • 以RID 500管理员以外的用户身份运行可执行文件(假设已将可执行文件配置为使用 runas 动词(如果需要提升)