欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

Windows Vista的UAC对话框果真是在会话0吗?

小青蛙s老大新发表的雄文,可以帮助读者朋友深入理解UAC安全桌面的切换机理。例如读者朋友们可以知道,为了防止用户进程干扰UAC的对话框,可以让它运行在安全桌面上。而大家知道,安全桌面(Winlogon桌面)默认是蓝绿色背景的,为了改善用户体验,微软特地对当前用户桌面截图,并以截图作为安全桌面的背景,这样看上去稍微舒服一些。这个原理,在盆盆的拙作《Windows Vista安全原理深入探索》一文里也有一些粗浅的介绍。

如果要让UAC对话框运行在用户桌面,而不是安全桌面,除了用小青蛙s介绍的方法,还可以修改本地安全策略、安全选项下的“用户帐户控制:提示提升时切换到安全桌面”,这样也可以达到目的。

不过这里并不是要讨论安全桌面问题,而是要探讨一下,这个UAC对话框(consent.exe)到底运行在哪个会话(session)。

何谓会话?

会话实际上是终端服务里的概念,在Windows Server 2000/2003下,如果用户在控制台,也就是鼠标、键盘登录,则会占据会话0;后续用终端服务登录的话,就陆续占据会话1、会话2。。。

对于桌面OS,例如Windows XP,其中的快速用户切换(FUS)、远程桌面功能,实际上就是缩小版的终端服务,类似于服务器版Windows的情况。

而在Windows Vista下,会话0不再由控制台登录的用户占据,而是专门划给服务和某些系统进程使用;控制台登录的用户占据的是会话1。这个特性叫做服务的会话0隔离,可以增加安全性。

要了解更多的会话0隔离的概念,可以参考小青蛙s的《Windows Vista 下Session 0 隔离的故事》,和盆盆的《Windows Vista服务隔离深度剖析》

UAC对话框位于哪个会话?

了解了什么叫做会话,接下来就可以查看UAC对话框位于哪个会话了。然而由于UAC对话框位于安全桌面,非常安全,连截图软件都不能正常工作,所以很难用工具对其进行监控。但是方法总是有的:

1. 借助Windows Server Longhorn

我们完全可以借助Windows Server Longhorn进行测试,这是因为Longhorn支持终端服务,我们可以远程登录,打开另外一个会话(Session 2),在Session 2里用Process Explorer等工具查看Session 1里的UAC对话框。

这个方法,在盆盆的《Windows Vista用户帐户控制深度剖析》一文中已有描述(参阅“毁誉参半的安全桌面”部分),此处不再赘述。

2. 借助Process Monitor

尽管其他进程无法监控UAC对话框,但是Process Monitor可以。只需事先运行Process Monitor,然后随便启动一个需要提升权限的程序,即可打开UAC对话框,可以选择继续或者取消,然后查看Process Monitor的日志,如附图所示。
图1 

从图中可以看到Session ID为1,而不是0!也就是说UAC对话框也运行在用户会话中!

然而更有趣的事情还在后面!

看到图中的Auth ID了吗?是一串古怪的数字00000000:000003e7,稍微了解Windows安全的朋友都知道,这代表System登录会话(System Logon Session)。

好嘛,现在完全乱套了,又是会话、又是登录会话,这都哪跟哪呀?

盆盆注释:“登录会话”和“会话”完全是两码事。“会话”来自终端服务的概念;而“登录会话”则用来代表每个登录用户的身份。 

不过这不妨碍我们用Logonsessions命令来查看登录会话和会话之间的对应关系(这又是一个Mark Russinovich开发的工具!),如附图所示。
图2

从图中可以看到“00000000:000003e7”这个登录会话,其对应的“User Name”是“MARKVISTA$”,这是盆盆测试用机器的计算机名,其SID为S-1-5-18,熟悉的朋友一看就知道是SYSTEM账户。说明这个登录会话就是System登录会话,也叫做999登录会话。

盆盆注释:999这个数值,和三九胃泰,还有999皮炎平等一点关系也没有,实际上999是"3e7"的十进制数值。

从图中可以看到,System登录会话一般对应于会话0,但是奇怪的是,UAC对话框虽然位于System登录会话,但是却占据会话1。这让盆盆困惑不解。 

盆盆注释:图2中System登录会话的“Logon time”,可以看成是计算机的启动时间,而不是用户的登录时间。

已发表 2007年4月14日 12:30 作者 ahpeng

评论通知

如果您想在帖子更新时接到邮件通知,请先登录。这里

订阅帖子评论使用 RSS

评论

2007年4月14日 14:20 by 夜里晒太阳

# re: Windows Vista的UAC对话框果真是在会话0吗?

路过先支持下盆盆,找时间再来详细看...

2007年4月14日 15:13 by ahpeng

# re: Windows Vista的UAC对话框果真是在会话0吗?

多谢兄弟支持哈~

2007年4月15日 1:48 by samwon

# re: Windows Vista的UAC对话框果真是在会话0吗?

不好意思,我问一下盆盆大哥,Vista使用详解这本书什么时候能买到?

2007年4月15日 8:25 by ahpeng

# re: Windows Vista的UAC对话框果真是在会话0吗?

To samwon:您好!

我看到当当网上面已经可以购买,但是不能确认是否已经到货:

http://product.dangdang.com/product.aspx?product_id=9279199

2007年4月24日 12:33 by gnaw0725

# re: Windows Vista的UAC对话框果真是在会话0吗?

这倒是很让人疑惑的事情

2007年5月24日 21:52 by aloki

# re: Windows Vista的UAC对话框果真是在会话0吗?

不知道盆盆有没有向微软咨询过这个问题?期待答案

2007年5月26日 7:45 by ahpeng

# re: Windows Vista的UAC对话框果真是在会话0吗?

To aloki:

这个问题我已经弄明白了。

System登录会话的进程,也有一些运行在会话1,其主要目的是为了让用户看到,包括Winlogon进程(安全桌面)。

因为会话0没有可见的部分,所以一般都是服务占据会话0

说说您的看法?

(必填) 
必填 
(必填)