SYSTEM帐户启动的实质
其实不管用哪种方法,其本质都一样 。都是利用SYSTEM登录会话里已有的某个进程A,帮助我们创建一个进程B,进程B会自然而然地运行在SYSTEM登录会话里-从而具有SYSTEM权限 。
这里提到登录会话(Logon Session)的概念,这个概念比较抽象,甚至连MSDN里都有点语焉不详 。这里我们且不去管它(将会在后续的文章里给大家细述这个抽象概念) 。只需要了解:登录会话用来代表特定的安全主体,代表该安全主体的一次登录实例 。
每个进程,都必须运行在特定的登录会话里 。这里就有一个问题,在用户登录之前,Windows系统里已经运行了一些进程,这些进程显然也应该运行在登录会话里,这就是所谓的SYSTEM登录会话,它所代表的安全主体就是SYSTEM帐户 。
在Windows的安全机制里,特定登录会话里的某个进程所启动的其他进程,也会运行在该登录会话里,从而继承安全上下文 。
【1 Windows Vista如何以SYSTEM权限启动进程(图)】《以System帐户身份运行应用程序的三种办法》这篇文章所描述的方法,都是运用这种原理 。例如借助At命令以SYSTEM帐户身份启动进程,实际上是由Task Scheduler服务启动的,而Task Scheduler服务所在的进程svchost正是运行在SYSTEM登录会话,如附图所示 。
图中所示的Task Scheduler服务的进程svchost所在的登录会话ID(Logon Session ID)是0x0-3e7,这就是代表SYSTEM登录会话 。
用Psexec命令,道理也一样,实际上启动进程的是PsexecSvc服务,该服务的进程运行在SYSTEM登录会话 。
如何让用户能够看到SYSTEM下的进程?
在Windows 2000/XP下,这个不是什么问题 。然而在Windows Vista下问题就来了 。如果企图用AT命令启动某个Local SYSTEM进程,就会警告说不能和用户进行交互,哪怕加上/Interactive参数也不行!
原来在Windows Vista下,存在一个会话0隔离的问题 。而AT命令所对应的Task Scheduler服务运行在会话0,而会话0是不能和用户进行交互的 。
盆盆评注:这里要注意,会话和登录会话,是两码事 。具体的介绍,敬请期待后续的文章 。
原来在会话0里,并没有WinSta0这个窗口站 。天哪,又来了一个窗口站的概念,嗯,先不用管它,这里只需理解,窗口站用来保护进程的用户界面 。只有WinSta0这个特殊的窗口站才可以接受用户的鼠标、键盘事件,才能和用户进行交互 。
在Windows系统里,如果没有特别指定,SYSTEM登录会话里的进程,将会默认运行在Service-0X0-3E7$窗口站里,所以无法和用户进行交互 。
所以很显然,要让以SYSTEM权限运行的进程,能够和用户进行交互,必须满足以下条件:
1. 必须不能运行在会话0下,例如可以运行在当前用户所在的会话下(例如会话1、2等)
2. 该SYSTEM进程必须运行在WinSta0窗口站 。
对于开发人员来说,推荐参考Leo Jiang朋友的Blog文章,以便了解如何通过编程的方法,创建运行在WinSta0里的Local SYSTEM进程 。
而对于IT Pro来说,我们可以借助Mark Russinovich所写的Psexec工具,让任意指定的进程运行在SYSTEM权限下 。
而对于Windows Vista来说,其实有好些Local SYSTEM进程本身运行在WinSta0下(非会话0),例如Winlogon进程、某个csrss进程,还有我们大家很熟悉的UAC提示对话框(consent进程),都运行在SYSTEM下,但是可以和用户进行交互 。google_protectAndRun("render_ads.js::google_render_ad", google_handleError, google_render_ad);
推荐阅读
- 苹果手机如何导出照片到电脑
- 如何登别人的优酷会员账号_用别人的优酷账号登录方法说明
- Vista侧边栏 免检的安全温床?
- 唯品会如何分期付款_分期付款设置方法介绍
- 图 为Vista/Win2008中的IIS7添加PHP支持
- 赶集网如何认证_赶集网身份认证方法介绍
- 图 定制Vista媒体中心的开始菜单
- 图 跟我走进Windows Vista系统的安全中心
- 赶集网如何看别人简历_查看别人简历方法介绍
- 图 如何在Vista系统中进行VPN配置