Windows中Session 0隔离对服务程序和驱动程序的影响

Windows中Session 0隔离对服务程序和驱动程序的影响


读完Impact of Session 0 Isolation on Services and Drivers in Windows的笔记
推荐使用Logonsessions查看当前所有Session以及其进程、使用ProcessExplorer查看当前进程的内核对象来进行验证。


Session 0隔离:


   在Windows XP,Windows Server 2003以及更早的版本中,第一个登录的用户以及Windows的所有服务都运行在Session 0上。
这样做危险的地方是,用户使用的应用程序可能会利用Windows的服务程序提升自己的权限。
    如下图所示,第一个登录的用户与Windows服务程序运行在同一个会话中,第二个以及后续的登录用户
(在XP中为通过FUS登录的用户,在Server 2003中则为远程登录的用户)就运行在其他的会话中。
    Windows Vista,Windows Server 2008及后续版本中,Windows服务运行于Session 0,第一个登录的用户则在Session 1中运行。
   
Session 0是一个非交互型的(noninteractive)Session,只能运行系统进程以及服务程序。
    所以服务程序已经不能像之前一样工作,比如不能访问视频驱动程序。


           
            Windows XP,Windows Server 2003及更早版本                                Windows Vista,Windows Server 2008及后续版本


受影响的程序:
主要影响到了一些以服务程序形式安装的应用程序或者驱动程序和一些由运行在Session 0下的操作系统进程以及操作系统服务程序加载的驱动程序。
比如:
1、打印机驱动,由spooler service加载(spooler service运行在Session 0下)
2、UDMF的驱动程序(其托管进程WUDFHost.exe运行在Session 0下)


潜在的问题:
当然,所有服务程序或者由服务程序加载的驱动程序,如果它们运行时假设用户运行于Session 0,在新版操作系统中将不能运行。
1、服务程序创建的用户界面,用户是看不到的,因为用户都不在Session 0中运行。
2、服务程序尝试发送窗口消息(例如调用SendMessage或者PostMessage)是不可行的。
原因是,应用程序运行在另外一个Session中,接收不到消息,并且服务程序跟应用程序的消息队列是不一样的。
3、用Local来创建或者打开命名对象默认已经不再是创建或者打开/BaseNamedObjects/下的对象,
而是创建或者打开/Session/<n>/BaseNamedObjects/下的对象,Local对象已经被不同Session隔离。
在Session 1中创建事件对象以及在系统中生成的事件对象的名称的例子:
    CreateEvent(NULL, FALSE, FALSE, "Object") --> /Session/1/BaseNamedObject/Object
    CreateEvent(NULL, FALSE, FALSE, "Global//Object") -->/BaseNamedObject/Object
用户应用程序和服务程序的同步最好是用Global命名空间。


有关创建服务程序以及由服务托管的驱动程序的建议:
1、与应用程序通信时,使用RPC、命名管道等C/S模式代替窗口消息
2、如果服务程序需要UI与用户交互的话,有两种方式:
    ①用WTSSendMessage来创建一个消息框与用户交互
    ②使用一个代理(agent)来完成跟用户的交互,服务程序通过CreateProcessAsUser创建代理。
        并用RPC或者命名管道等方式跟代理通信,从而完成复杂的界面交互。
3、应该在用户的Session中查询显示属性,如果在Session 0中做这件事,将会得到不正确的结果。
4、明确地使用Local或者Global为命名对象命名,Local/为Session/<n>/BaseNamedObject/,Global/为BaseNamedObject/
5、将程序放在实际环境中测试是最好的方法,如果条件不允许,可以在XP的FUS下测试。在XP的FUS下能工作的服务程序将很可能可以在新版系统中工作,注意XP的FUS下的测试不能检测到在Session 0下跟视频驱动有关的问题


 


附《Impact of Session 0 Isolation on Services and Drivers in Windows》地址:http://www.microsoft.com/whdc/system/sysinternals/session0changes.mspx

展开阅读全文

没有更多推荐了,返回首页