穿透Session 0 隔離
服務(Service)對於大家來說一定不會陌生,它是Windows 作業系統重要的組成部分。我們可以把服務想像成一種特殊的應用程式,它隨系統的“開啟~關閉”而“開始~停止”其工作內容,在這期間無需任何使用者參與。
Windows 服務在後臺執行著各種各樣任務,支援著我們日常的桌面操作。有時候可能需要服務與使用者進行資訊或介面互動操作,這種方式在XP 時代是沒有問題的,但自從Vista 開始你會發現這種方式似乎已不起作用。
session0隔離原理
在Windows XP、Windows Server 2003 或早期Windows 系統時代,當第一個使用者登入系統後服務和應用程式是在同一個Session 中執行的。這就是Session 0 如下圖所示:
但是這種執行方式提高了系統安全風險,因為服務是通過提升了使用者許可權執行的,而應用程式往往是那些不具備管理員身份的普通使用者執行的,其中的危險顯而易見。
從Vista 開始Session 0 中只包含系統服務,其他應用程式則通過分離的Session 執行,將服務與應用程式隔離提高系統的安全性。如下圖所示:
這樣使得Session 0 與其他Session 之間無法進行互動,不能通過服務向桌面使用者彈出資訊視窗、UI 視窗等資訊。這也就是為什麼剛才我說那個圖已經不能通過當前桌面進行截圖了。
總結:當我們登入計算機後,各個服務在session0中執行,我們再啟動其他程式,在session1中執行(在不啟動其他session的時候)
session檢查
在實際開發過程中,可以通過Process Explorer檢查服務或程式處於哪個Session,會不會遇到Session 0 隔離問題。我們在Services 中找到之前載入的AlertService 服務,右鍵屬性檢視其Session 狀態。