[Windows Vista]安全桌面凭什么那么安全?
写了三篇系列《Windows Vista如何以SYSTEM权限启动进程》小文章,借着这股劲,再来简单分析一下安全桌面。
安全桌面,大家应该不会感到陌生。UAC的权限提升提示对话框、用户网络凭据的保存对话框,还有欢迎登录界面,都是运行在安全桌面上。
究其本质,安全桌面,也叫做Winlogon桌面,实际上是WinSta0窗口站里默认具有的三个桌面之一。另外两个桌面,一个是Default桌面,也就是用户桌面,就是我们平时登录后所在的桌面,还有一个是屏保桌面(且不去管它)。
那么为什么安全桌面那么安全,以至于Windows把那么重要的任务都交给它?
难道是因为它的名字?当然不会!Windows并没有因为它的名字里有“安全”,就放心地把安全攸关的任务交给它(就这一点来说,很有点类似湖南卫视的武警战士,并没有因为某位超女的名头大,就随便放行)。
1. 一切还是得看安全权限设置
和窗口站一样,桌面也是一个安全对象,也需要通过安全描述符对其进行安全保护。
怎么才能查看Winlogon桌面的安全权限?
很简单,只需通过Process Explorer查看Winlogon进程的句柄表,里面会有一个\Winlogon的句柄,查看其安全属性。可以发现只有SYSTEM帐户才有所有可能的权限,而Administrators组帐户,只有有限的一些权限,如附图所示。

这就充分说明,在安全桌面上,只有以SYSTEM权限运行的进程,才可以读取安全桌面上的内容;其他进程呢,哪怕是以Administrators身份运行(够大了吧),还是不行。
所以UAC对话框运行在安全桌面上,真的是安全得很哪!只有SYSTEM运行的进程,才有可能读写UAC对话框的窗口。当然用户本身自然也可以,安全桌面本身也属于WinSta0,可以接受用户键鼠事件。
2. Mark Russinovich说过桌面才是安全边界
还记得盆盆翻译过一篇来自大牛Mark Russinovich的文章《Windows Vista用户帐户控制、PsExec和安全边界》吗?里面就曾经强调过,桌面才是Windows的安全边界,而UAC和IE保护模式都不是安全边界(充其量只是大大提升了安全级别,但并不是安全边界)。
如果理解桌面的ACL,就可以很好地理解桌面是安全边界这句话。
3. 其他桌面呢?
可以用Process Explorer查看其他桌面的安全权限设置情况,其中默认用户桌面\Default的安全权限和WinSta0窗口站完全一样。这没什么,默认用户桌面本来就是继承WinSta0的权限。