【发布时间】:2011-11-30 19:46:08
【问题描述】:
这类似于“how create medium integrity level process from low integrity level process?”,但我的角度略有不同。 (无论如何都没有回答。):)
如果文件保存为低完整性(通常来自浏览器等低完整性应用),则它会被标记为低完整性强制标签。 (这个标签也可以和icacls /setintegritylevel low一起应用。)如果这样的文件被执行,它就会变成一个低完整性的进程,可以理解。
是否有某种方法可以(通过同意 UI)将此过程提升到中等完整性?如果应用程序标有requiresAdministrator 清单,或者如果它使用runas 动词调用ShellExecute,则可以达到高度完整性,但显然这也需要管理员权限。进入中等完整性不需要管理员权限,它仍然会解锁许多低完整性进程无法使用的权限。
显然,任何这样做的机制都应该需要用户同意 UI(应该不可能静默进行,否则有什么意义?),但是如何调用呢?
我发现关于这个主题的唯一讨论涉及拥有自己的原始中等完整性流程并从中分离出低完整性流程;这允许通过通信提升到中等完整性进程并让它启动任何东西。但是,当操作系统本身最初以低完整性启动进程时,这无济于事。
【问题讨论】:
-
如果一个进程具有 Low Mandatory Integrity Level 标签 (
S-1-16-4096),则该进程将成为Low完整性。我现在正在查看 MSDN 代码,您在其中复制当前令牌,并添加LowILsid。大概创建一个中等完整性级别的流程同样容易——添加一个中等完整性级别标签 (S-1-16-8192)。 -
没关系,这行不通。调用
SetTokenInformation,尝试添加更高的完整性标签失败,1314 - A required privilege is not held by the client. -
@Miral:你能重现这个问题吗?
-
@HarryJohnston:我无法重现从 IE9 保存为低完整性的文件,不(这个想法是基于用户报告,但可能是由其他原因引起的)。我已经复制了我上面提到的情况,其中通过未指定意味着与问题无关的文件标记为低完整性的文件将作为低完整性进程运行并且无法将自身提升到中等,只有高。这似乎很奇怪。我接受此提升必须需要同意 UI,我只是很惊讶似乎没有一个标准的经纪人来处理它,因为它具有高度的完整性。
-
@Miral:我认为底线是文件不应该在没有充分理由的情况下被标记为低完整性。正确的解决方案不是让可执行文件能够请求非特权用户允许将自己提升到中等,而是识别并纠正导致它首先被标记为低完整性的问题。
标签: windows windows-vista uac integrity