我试图启动一个进程(任何过程)为“不可信”使用SaferCreateLevel
与SAFER_LEVELID_UNTRUSTED
安全级别:SaferCreateLevel SAFER_LEVELID_UNTRUSTED:应用程序无法正常启动(0xc0000142)
允许程序执行时只访问授予打开知名组的资源,阻止访问管理员和高级用户权限和个人授予的权限。
使用从迈克尔·霍华德的DropMyRights的MDSN文章的代码(Browsing the Web and Reading E-mail Safely as an Administrator)的伪代码:
//get a handler on a Safer level
hSaferLevel = SaferCreateLevel(SAFER_SCOPEID_USER, SAFER_LEVELID_UNTRUSTED);
//Create a security token out of the safer level handle
hSecurityToken = SaferComputeTokenFromLevel(hSaferLevel);
//Create process as user
CreateProcessAsUser(hSecurityToken, "myapp.exe");
除进程无法启动:
的应用程序无法正确启动(0xc0000142)。
这是怎么回事吗?
注:启动在SAFER_LEVELID_NORMALUSER
的过程正常工作:
允许程序来执行的,不具有管理员或超级用户用户权限的用户。软件可以访问普通用户可访问的资源。
虽然因为每个人都为“普通用户”已经运行这几天,有一个在它没有什么价值。
我的应用程序是能够处理运行为“低”的用户。
最终目标是以与MandatoryIntegrity \ Low流程相同的方式运行流程(虽然未标记为“低”)。所以我测试了一下。
我用icacls
标记my application to run Mandatory Integrity Level\Low:
C:\Develop>icacls RTMS.exe /setintegritylevel Low
processed file: RTMS.exe
Successfully processed 1 files; Failed processing 0 files
而且我的应用程序正确启动,并在较低的完整性级别运行:
虽然我也许能使用AddMandatoryAce
API,或自己在安全令牌中摆弄ACL,我很好奇UNTRUSTED
更安全的级别 - 以及为什么我无法启动任何内容。
注:在Windows 7中,如果您标记calc
或notepad
为/setintegritylevel low
,他们将启动失败(没有错误,只是从来没有出现),甚至though this MSDN article talks about using calc as a test of low integrity level:
我确实尝试过'constrained';它工作,但它也有我想要的更多权限。另一方面,'不可信'似乎太严格了。我想这是可以想象的,没有**安全**级别匹配权限提供了一个'MandatoryIntegrityLevel \ Low'过程。 –
嗯,我已经尝试过程监视器,试图找出为什么** calc **不会作为'低'启动;我没有想到为什么我的应用程序(可以启动为“低”)未能作为“约束”启动。可能所有的事实都表明,没有“安全”级别可以用来模仿“低”的限制。 –
产生的进程继承其父进程的完整性级别,除非用于产生进程的令牌另有说明。使用'SaferComputeTokenFromLevel()'创建'SAFER_LEVELID_NORMALUSER'标记,然后使用'SetTokenInformation()'将标记的完整性级别设置为低。 –