眾所周知在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系統提升系統管理能力是大有裨益的
From:http://tw.wingwit.com/Article/os/xtgl/201311/8845.html