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

Windows Vista 下 Session 0 隔离的故事

作者:张康宗 (http://www.KZTechs.com)
难度:Level 300

这是一篇讲述Windows Vista 新增特性之一:Session 0 隔离的文章。通过这篇文章,可以让您对Windows Vista Session 0 隔离的特性有更清楚地了解。

由于我的文章有很多的图片,但是在这里编辑排版实在困难,在blog里面,我只得把文章中的全部图片删除,只保留了文字,完整版本的文章我已经放到我的网站上了,地址是http://www.KZTechs.com, 本文涉及到两个资源:

 

一、      Session 0的历史和改变

Windows XPWindows Server 2003以及更早的Windows操作系统里面,所有的服务运行在一个叫做Session 0的会话里面。由于应用程序和服务都处于Session 0会话里面,这样就造成了服务可能成为恶意软件攻击的目标,这是因为服务的运行权限往往比一般的应用程序高,不少服务甚至运行在SYSTEM权限下,一旦应用程序获得了SYSTEM权限,则意味着他基本上可以做任何事情。

同时,如果一个恶意软件成功的在一个计算机里面创建了一个交互式服务,那么他可以做甚至包括向Windows应用程序窗口发送消息来达到控制应用程序的目的在内的任何事情。

l         Windows XP/Server 2003 下的Session 使用的解释:

1)  当第一个用户登录进console以后,Session 0会被激活。在Session 0 里面,会有以下一些内容:

注解:在 Windows XP/Server 2003里面,Session 0里面是允许同时存在服务应用程序和一般应用程序的,也就是这一点给系统带来了潜在的危害,正如上面提到的,如果一个恶意软件成功的在一个计算机里面创建了一个交互式服务,那么他可以做甚至包括向Windows应用程序窗口发送消息来达到控制应用程序的目的在内的任何事情。

 

2)  由于Windows XP/Server 2003是支持多用户登录的,因此当第二个用户登录以后,会创建另外一个SessionSession ID1Session 1里面包括的内容为:

注解:在Windows XP/Server 2003 里面,Session 1只会存在普遍的应用程序,Session 1没有服务应用程序的。

 

3)  当第三个用户登录以后,Session 2会被激活,Session 2Session 1类似,只有一般的应用程序。

 

上述说的是在Windows XP/Server 2003里面的情况,从上述描述可以得知,当有2个用户同时登录以后,只会存在Session 0Session 1这两个Session IDSession 2只有在第3个用户登录以后才会被激活。这个情况在Windows Vista 里面发生了一些变化。

 

l         Windows Vista 下的Session 使用解释

1)        Session 0只会存在服务应用程序,而且交互式服务已经被取消了。在Windows Vista里面,Session 0的布局是这样的:

 

2)        当第一个用户登录以后,所有的应用程序运行在Session 1里面。这一点和Windows XP/Server 2003 是完全不同的。Session 1的布局是这样的:

 

3)        当第二个用户登录以后,Session 2被激活,在Session 2里面,只会存在普通的应用程序,其布局如下:

由于上述的变化,Session 0运行的服务应用程序再也不能和用户桌面直接的联系了。Session 0被隔离了。

如果一个服务应用程序想和一个运行在当前桌面上的Window应用程序进行通信,难度会大大地增加。这样的变化无疑增加了Windows的安全性,但是却造成了Windows Vista里面的一个兼容性问题:一些原本为Windows XP/Server 2003设计的需要服务的应用程序,在服务的设计上可能选择使用了交互式服务方式,如果这些应用程序在Windows Vista里面运行,必然会导致一个兼容性问题:服务和桌面的交互上会由于Session 0的隔离导致出现问题,桌面应用程序无法很好的和服务进行通信联系。

 

二、交互式服务的用途

交互式服务在Windows Server 2003/XP里面,是能够经常看到的。也许因为交互式服务的选项在Services.msc里面仅仅是一个不起眼的复选框,很难让人引起重视,但是对于计算机安全来说,交互式服务的存在却有一些隐患。

如果一个服务被标注为交互式服务,那么意味着他可以和用户桌面进行通信,在Windows XP/Server 2003里面,如果一个服务没有被标注为交互式服务,如果它启动了一个窗口应用程序(例如:Windows画图工具),那么用户是没法看到他的,用户只能在进城里面发现该进程的出现,但是当这个服务被标注为交互式服务以后,就可以在用户桌面上出现画图的窗口,而且工作正常[2]

 



[2] 可以在Windows XP下使用Smallfrogs 编写的Windows Vista Session 0 Isolate Test Service服务应用程序来验证这个说法的正确性。Windows Vista Session 0 Isolate Test Service服务应用程序默认创建为交互式服务,当这个服务运行的时候,会询问用户是否启动画图工具,如果回答“是”,那么Windows Vista Session 0 Isolate Test Service服务应用程序将调用画图工具。如果在services.msc里面将Windows Vista Session 0 Isolate Test Service服务的交互式复选框取消掉,那么当出现询问对话框的时候,即使选择“是”,画图应用程序也不会出现在用户桌面上,但是用户可以在任务管理器里面看到画图程序进程的存在。

 

      Windows XPWindows Vista Session 0对比实战

这里使用由 Smallfrogs 编写的Windows Vista Session 0 Isolate Test Service服务应用程序来解释Session 0Windows XPWindows Vista 里面的区别。Windows Vista Session 0 Isolate Test Service服务应用程序可以在 http://www.KZTechs.com/windowsvista/ 站点免费获取到。

 

l         Windows XP SP2 环境

                        i.              首先安装该服务:解压缩下载到的Windows Vista Session 0 Isolate Test Service服务应用程序,然后使用参数 WinVistaSession0IsolateSrv.exe /install 来安装该服务。

                      ii.              服务安装成功以后,使用 WinVistaSession0IsolateSrv.exe /start 来启动该服务。

                    iii.              上述两个步骤出现以后,会弹出一个询问对话框:

                     iv.              在回答这个对话框之前,我们使用 Microsoft Visual Studio 2005 来确认一下Windows XP 里面Session 0的布局情况:

上图说明了消息框是由CSRSS.EXE发出的。同时可以观察到Windows Vista Session 0 Isolate Test Service服务应用程序的确是运行在Session 0下的,同时运行在Session 0下的还有很多普通的应用程序,如下图所示的TIMPlatform.exe进程:

       如果在上面提到的消息框里面点击“是”按钮,则会启动画图程序[3],使用Microsoft Visual Studio 2005观察可以知道画图程序也是运行在Session 0里面的,而且是以SYSTEM权限运行的。

                       v.              观察完以后,可以使用 WinVistaSession0IsolateSrv.exe /stop 命令停止服务。

                     vi.              使用 WinVistaSession0IsolateSrv.exe /uninstall 命令可以删除创建的 Windows Vista Session 0 Isolate Test Service服务。

 

l         Windows Vista 环境 [4]

                        i.              首先还是需要安装Windows Vista Session 0 Isolate Test Service服务。在Windows Vista 里面,默认的命令行窗口是没有足够的权限进行服务安装操作的,首先需要使用 Run as administrator cmd.exe窗口进行权限提升。具体的权限提升操作是:

1.         进入%SystemRoot%\System32目录;

2.         找到cmd.exe,在他上面点击右键,选择Run as administrator

3.         在出现的UAC提示对话框里面,选择允许按钮即可完成cmd.exe的权限提升。

                      ii.              接下来需要完成服务的安装,服务的安装命令是: WinVistaSession0IsolateSrv.exe /install,安装完成以后使用WinVistaSession0IsolateSrv.exe /start 命令启动服务。

                    iii.              服务启动以后,会出现第一个需要关注的点:

Windows XP里面,一旦启动服务,会立即弹出消息框,询问是否启动画图工具。但是在Windows Vista里面,默认情况下你不能看到这个消息框。这是因为在Windows Vista里面,服务应用程序是运行在Session 0上的,而您的桌面是处于Session 1上的,Session 0被隔离了

为了缓解由于Session 0被隔离造成的兼容性问题,在Windows Vista里面,Microsoft 设计了一个新的服务“Interactive Service Detection Service[5]。该服务用于缓解应用程序的交互式服务在Windows Vista 里面的兼容性问题。

                     iv.              继续刚才的试验,我们手工启动“Interactive Service Detection Service”服务,这个时候,会出现一个新的由系统发出的询问对话框:

这个对话框的意思是说Windows Vista 检测到了一个交互式服务,询问是否需要响应这个交互式服务的请求。当点击Check request按钮以后,Windows Vista 将自动的切换到Session 0环境下,在Session 0环境下,是没有用户桌面环境的。但是可以看到由Windows Vista Session 0 Isolate Test Service服务应用程序发起的消息对话框:

Windows Vista里面,由于Session 0的隔离,只有当切换到Session 0以后才能看到由交互式服务发起的消息对话框,而这个切换过程是需要另外一个系统自带的服务“Interactive Service Detection Service”来完成的。

如果需要从Session 0切换到Session 1,只需要点击 My desktop 按钮就可以切换回先前的Session环境了。

                       v.              最后,还是使用 Microsoft Visual Studio 2005 来验证一下在Windows Vista Session 0Session 1的布局情况,从下图可以得知,在Windows Vista 里面,应用程序和服务是运行在不同的Session上的。普通应用程序运行的Session 1和服务运行的Session 0是两个不同的Session,这样就能缓解针对服务的恶意程序的破坏能力了。



[3] 默认情况下,Windows Vista Session 0 Isolate Test Service服务应用程序被创建为交互式服务,只有当Windows Vista Session 0 Isolate Test Service服务应用程序是交互式服务时,画图程序界面才能被显示出来,否则是没有界面显示的。

[4] 这里以Windows Vista Beta 2为例。

[5] Windows Vista Beta 2里面,该服务的启动类型为手动。只有当系统检测到一个可视化窗口出现时,系统才会自动的启动这个服务。

 
 

四、      结论:

Windows Vista 里面,Microsoft 引入了Session 0隔离机制,由于这个机制的引入,一般的应用程序和服务是运行在不同的Session里面的,不同的Session由于拥有不同的消息循环,因此在Windows Vista里面,服务是无法使用像SendMessagePostMessage等函数和应用程序通信的。操作系统的得到了一定程序上的安全性增强。

已发表 2006年6月11日 23:51 作者 smallfrogs

评论通知

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

订阅帖子评论使用 RSS

评论

2006年6月12日 0:22 by Smallfrogs' Technical BLOG

# Windows Vista 下 Session 0 隔离的故事

2006年6月12日 8:17 by ahpeng

# re: Windows Vista 下 Session 0 隔离的故事

Great!
2007年4月14日 12:30 by 盆盆的博客

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

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

2007年4月14日 12:36 by 盆盆的博客

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

小青蛙s新发表的文章,可以帮助读者朋友进一步了解UAC安全桌面的机理。本文要讨论的是,默认启用安全桌面后,UAC对话框真的运行在会话0上面吗?本文用实验来查看,并试图给出原理解释。

说说您的看法?

(必填) 
必填 
(必填)