众所周知在Windows系统中System权限是系统最高权限不同于此前的系统Windows Vista对System权限做了严格的保护措施这种保护措施就是所谓的Session 隔离措施本文将对Windows Vista的Session 隔离进行测试与分析希望对大家深入理解Windows的安全机制有所帮助 Session是Windows系统中的一个重要概念通常被翻译成会话利用Windows的终端服务一个远程用户可以在另一台计算机上建立一个会话并且登录进去在该服务器上运行应用程序不同终端建立不同的Session有不同的ID代表不同的环境和系统权限 一Vista与以前Windows版本的Session对比 如果我们仔细查看Vista中的进程就会发现存在两个csrssexe进程如果进行远程终端连接就会发现多个csrssexecsrssexe是Windows子系统(Windows Subsystem)的用户模式部分在Windows以前的版本中通常我们只能看到一个csrssexe进程那为什么在Visat中会出现两个进程呢?答案就是Session 隔离Vista将服务运行在Session 会话中而第一个交互登录的帐户则运行在Session 会话下通过给应用程序和服务分配不同的会话阻碍应用程序和服务进行通信这种提供系统安全的机制称为Session 隔离(图) 正是因为Session 会话机制的存在导致用户交互登录以后系统将会同时打开两个session(和)所有Windows Vista才需要两个csrssexe进程分别服务于这两个会话我们将Vista中的会话与Windows以前的版本(以Windows XP为例)做个对比 Windows XP中的Session ()当用户交互登录计算机后Session 会话被激活在Windows XP中Session 里面是允许同时存在服务程序和一般应用程序的在这种情况下如果一般恶意软件成功在一个计算机里面创建了一个交互式服务那么它可以向Windows应用程序窗口发送消息来达到控制应用程序的目的这就是为什么很多木马都以服务启动的原因 ()Windows是一个多用户多任务的操作系统当第一个终端用户登录Windows系统的时候会产生一个ID为的Session在Session 中只有普通应用程序我们可以在连接远程终端后通过query session和query process进程查看(Windows XP中并没有query命令可从Windows Server 中拷贝一个)从而验证上面结论的正确性可以看到Session ID为而且进程中并没有服务程序进程当第三个用户进行远程桌面登录的时候和上面的情况类似只不过这个时候的ID为而已(图) Windows Vista中的Session 我们登录Vista会产生两个会话一个是Session 一个是Session 在Session 里面运行的是服务程序而在Session 中运行的是应用程序当第一个终端用户登录Vista的时候会产生一个ID为的会话也就是说Vista里面的远程会话ID是从开始的这点证明了我们登录Vista的时候系统已经创建了两个Session通过query session和query process我们可以证明上面的结论是正确的(图) 通过对比我们知道Windows Vista在用户交互登录的时候会产生两个会话session 和session 我们在Windows XP和Vista中分别运行记事本程序通过Process Explorer查看进程的会话通过这个简单的实验证明了Vista中应用程序是运行在session 中的而XP中的应用程序是运行在session 中的通过查看svchost装载程序我们会发现在Vista和XP中都是运行在Session 里面的(图) 结论Windows Vista采用了Session 隔离机制将应用程序和服务会话隔离从而保证系统安全 二system权限在Vista的开启该如何进行 我们知道可以应用at命令将应用程序提升为system权限运行因为at命令是基于Tast Scheduler服务的在Windows以前的版本中有很多命令都是以system权限运行包括Task Schedule所以通过at命令我们可以将应用程序以System权限运行 在Vista中我们通过同样的方法将应用程序的权限提升为system是不可以的即使加上了/interactive参数也不行出现这种情况的原因是因为session 隔离导致的这里牵涉到WinSta窗口这个概念它的主要作用就是通过键盘鼠标与用户实现交互而在Windows XP中session 存在窗口站所有服务和应用程序之间可以通畅无阻地通信而在Vista中session 和session 分别运行服务程序和应用程序并且在session 中没有WindSta窗口站所以出现了上面错误Vista的session 隔离提高系统安全性的秘密就在WinSta窗口站中(图) 在Vista中我们虽然不能再借助at命令将第三方应用程序的权限提升为system权限但是使用工具却依然可以通过psexec还是可以撬开Vista中的system权限的通过上面的测试我们可以得出Vista下system权限提升的条件()程序不行保证不能在session 中运行(以服务方式运行)可以在session (用户环境)或者session (远程登录环境)()system进程必须运行在WinSta窗口站中可见Vista的权限分配比以前的Windows版本更具细致了(图) 让程序在Vista中以服务方式运行 让程序以服务方式运行这是某些病毒木马采用的技术当应用程序以服务方式运行后其隐蔽性会加强而且拥有更大的权限我们知道在Vista中服务和应用程序之间进行了session 隔离那么只有当切换到session 以后才能看到由交互式服务发起的消息对话框而这个切换过程是由另外一个系统自带的服务Interactive Service Detection Service来完成的那么在Vista中如何让应用程序以服务方式运行呢? 我们可以通过系统的sc服务配置程序和Windows resource Kit里面的工具srvanyexe来完成例如我们将画图程序安装为服务首先确保系统已经安装了Windows Server Resouce Kit Tools如果没有安装可从x?familyid=daffaeeebccffd&displaylang=en下载并安装安装完成后打开命令提示符窗口输入命令 sc create MSPAINT type= interact type= own start= auto binpath= C:\Program Files\Windows Resource Kits\Tools\srvanyexe obj= LocalSystem displayname= Mspaintexe(图) 如图可以看到命令成功执行但还显示警告: 服务 MSPAINT 被配置为交互式服务其支持正受到抨击该服务可能无法正常起作用我们不用去管然后运行regeditexe打开注册表编辑器定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services注册表项下可以看到新增了一个MSPAINT子项双击该项在右侧的详细窗格里新建一个字符串键值Application并将其数值设置为c:\windows\system\mspaintexe(图) 接下来运行servicesmsc打开服务管理器窗口找到Interactive Services Detection确保该服务未禁用并启动服务然后启动Mspaintexe服务系统就会弹出一个对话框单击check request按钮就切入到session 会话中了这时候就可以看到图画程序了单击Interactive Services Dialog detection对话框上的My desktop按钮就可以回到原来的桌面 在Vista中我们依然可以将应用程序安装为服务这时候查看系统在Session 里通过系统进程会发现在session 里启动了两个UDectionexe这就是Interactive Services Detection服务的Host进程这两个进程(服务)分别工作在Session 和下负责发送切换session的消息 intsryexe可以借助于Interactive Services Detection Service创建一个服务通过这点来看Interactive Service Decection Service服务倒成了一个危险的服务不过安全是相对的利用这种机制将应用程序注册成系统服务在实战中还是非常有用的特别是在Server系统中管理员可利用这种方式将某款管理程序成服务以提高其运行的可靠性 从Windows Vista开始微软在此后的Windows Server 和Windows 中其Session 隔离机制有了很大的加强了解这些比较底层的系统安全机制对于大家理解Windows系统提升系统管理能力是大有裨益的 |