Answers:
是的,它确实以提升的特权执行。
您可以通过打开一个提升的和一个非提升的命令提示符来非常轻松地进行测试。同时运行命令notepad.exe
,然后尝试将空白文本文件保存到C:\Windows
。一个将保存,一个将引发权限错误。
如果这还不足以为您确认(这确实让我不满意),则可以使用SysInternals的AccessChk。您需要从提升的命令提示符下运行此命令。
让我们首先检查两个正在运行的记事本进程:
accesschk.exe -v -p notepad
)[11140] notepad.exe
Medium Mandatory Level [No-Write-Up, No-Read-Up]
RW DOMAIN\Tannerf
PROCESS_ALL_ACCESS
RW NT AUTHORITY\SYSTEM
PROCESS_ALL_ACCESS
[11004] notepad.exe
High Mandatory Level [No-Write-Up, No-Read-Up]
RW BUILTIN\Administrators
PROCESS_ALL_ACCESS
RW NT AUTHORITY\SYSTEM
PROCESS_ALL_ACCESS
一个运行在我的域用户名下,另一个运行在Administrators内置组下。它也具有很高的强制性水平。您还可以使用该-f
标志运行,以细分特权和令牌。
我认为跑步时事情可能会变得有些复杂msiexec
。我有一个易于测试的Google Chrome独立安装程序。
D:\Users\tannerf>accesschk.exe -p msiexec.exe
[10540] msiexec.exe
RW BUILTIN\Administrators
RW NT AUTHORITY\SYSTEM
D:\Users\tannerf>accesschk.exe -p chrome_installer.exe
[5552] chrome_installer.exe
NT AUTHORITY\SYSTEM
OWNER RIGHTS
RW NT SERVICE\msiserver
不再那么切割和干燥了!看起来chrome_installer.exe
进程是通过MSIServer服务运行的。
这使我想知道其他安装程序可能会有什么行为,因此我运行了一个方便的Evernote.msi:
[6916] msiexec.exe
High Mandatory Level [No-Write-Up, No-Read-Up]
RW BUILTIN\Administrators
PROCESS_ALL_ACCESS
RW NT AUTHORITY\SYSTEM
PROCESS_ALL_ACCESS
[4652] msiexec.exe
System Mandatory Level [No-Write-Up, No-Read-Up]
R BUILTIN\Administrators
PROCESS_QUERY_INFORMATION
PROCESS_QUERY_LIMITED_INFORMATION
有趣; 这次有一个msiexec.exe在系统级别下运行。我使用Process Monitor来发现弹出的实际安装窗口来自系统级msiexec进程。取消较高的强制级别也杀死了系统级进程。
[7472] msiexec.exe
Medium Mandatory Level [No-Write-Up, No-Read-Up]
RW DOMAIN\Tannerf
PROCESS_ALL_ACCESS
RW NT AUTHORITY\SYSTEM
PROCESS_ALL_ACCESS
[4404] msiexec.exe
System Mandatory Level [No-Write-Up, No-Read-Up]
R BUILTIN\Administrators
PROCESS_QUERY_INFORMATION
PROCESS_QUERY_LIMITED_INFORMATION
看来Evernote可以通过两种方式获得系统级访问权限。双击安装程序将得到相同的结果。
我认为这很好地证明了除非另有说明,否则进程将继承权限。这不能保证msiexec SomeProgram.msi
在所有流程流程中都具有较高的强制性级别;它可以在系统级别或MSIServer下运行。您的里程可能会有所不同,并且看到这些规则似乎“被破坏”的很多情况也不会令我感到惊讶。
C:\Windows
尽管从提升的cmd.exe启动了记事本,但我还是拒绝了尝试将文件保存到的权限。有没有办法打破“应该从父母那里继承”的规则?
默认情况下,Windows进程将从父进程继承其安全上下文:
进程的默认安全描述符中的ACL来自创建者的主令牌或模拟令牌。
但是,可以使用较少的特权来生成进程:
虽然流程继承了产生它的流程的完整性级别,但是可以在创建流程时自定义完整性级别。除了在用户界面特权隔离技术中定义窗口消息的边界外,Windows Explorer,Internet Explorer,Google Chrome和Adobe Reader等应用程序还使用强制完整性控制来隔离系统中易受攻击对象的文档。
有关此其他MSDN页面的强制性完整性控制维基百科,也在此处提到。另一个演示还提到了流程继承。
但是,我相信cmd.exe将启动具有最大特权继承级别的子进程,如@Tanner的测试和答案所示。
可以通过两种方式取消执行的命令的特权:
runas /trustlevel:0x20000 "msiexec SomeProgram.msi"
(运行runas /showtrustlevels
以了解这0x20000
是默认的用户信任级别-这甚至适用于安装/运行“需要”提升特权的程序-无需以管理员身份运行时实际授予它们。这通过了Tanner的记事本测试),按照此SU答案psexec -l -d msiexec SomeProgram.msi
根据这个SU答案(也许还需要一些“”,我没有对此进行测试,因为runas
对我来说足够好用)