上篇文章的內容隱藏了這樣乙個事實,為什麼local system程序有能力加入到winsta0視窗站?
大家可以回想一下,在windows 2000/xp下,只有以local system執行的服務,可以選擇「允許服務與桌面互動」。這實際上就是讓該服務執行在winsta0視窗站裡,而不是執行在預設的service-0x0-3e7$視窗站裡。
但是為什麼以其他帳戶身份執行服務,不能選擇這個選項?甚至連以當前登入帳戶身份執行的服務都不行?例如當前以admin使用者帳戶身份登入到系統,而系統中存在著乙個服務,也以admin身份執行。
這裡我們可以檢視一下winsta0視窗站的安全許可權。可以用process explorer,或者除錯工具(例如windbg)進行檢視。
1. 用windbg檢視winsta0的acl
這裡首先介紹用windbg檢視winsta0視窗站的安全許可權(更加完整)。
由於windows vista預設禁用kernel debug,所以必須執行以下命令手動開啟kernel debug選項:
bcdedit -debug on
盆盆評注:注意,如果安裝了demon tools之類的工具,請不要開啟kernel debug的選項,以免產生衝突。
下圖是利用windbg所dump出來的winsta0安全描述符的完整記錄:
我們主要關心日誌中最後三個棕色加粗顯示的結果:local system帳戶擁有0x000f037f許可權組合;administrators組帳戶擁有0x00020166許可權組合;還有乙個sacl的ace為s-1-16-4096。
0x000f037f和0x00020166,看上去甚是古怪,但搞開發的兄弟應該很容易理解,這實際上是安全許可權的組合掩碼。
咱it pro不需要理解這到底是什麼意義,只需要知道0x000f037f代表擁有winsta0的所有可能許可權;而0x00020166代表擁有大多數可能的許可權,但是無法讀取螢幕內容。
還有乙個sacl的ace為s-1-16-4096。這又是什麼意思?
嘻嘻,這裡就要請大家參考mvp小青蛙s兄弟的大作《
windows vista uipi和視窗訊息的故事
》。原來在windows vista裡,每個安全物件,包括視窗站,都有mic等級的概念。這裡可以看到winsta0視窗站的mic等級就是s-1-16-4096,實際上就是low integrity level。當然在盆盆的多篇拙作裡也曾經多次提及,例如《windows vista有趣的標籤sid》。
winsta0視窗站的mic級別為什麼會是低階?這可能是為了方便ie瀏覽器這樣的low mic程序也能夠讀寫winsta0裡的內容。
2. 用process explorer檢視winsta0的acl
用windbg檢視winsta0的acl,可以得到比較豐富的資訊,但是有一點小缺點,無法檢視當前登入帳戶的許可權(相當於檢視無使用者登入時的winsta0的安全許可權)。
所以這裡借助process explorer進行檢視。
隨便找到乙個使用者程序,檢視其開啟的控制代碼,可以發現其中有\sessions\1\windows\windowstations\winsta0這樣的控制代碼,檢視其安全許可權。
可以看到當前登入帳戶(本例是admin)沒有訪問winsta0的許可權,如附圖所示。
除了system之外,還有乙個古怪帳戶s-1-5-5-0-148836具有所有可能的許可權,如附圖所示。
s-1-5-5-0-148836實際上就是admin登入會話的sid。這樣的結果非常有趣,winsta0的許可權是授予admin的一次登入例項(登入會話),而不是admin這個安全主體本身,很有意義。其實道理很簡單,登入會話是經過lsa驗證的一次登入例項,windows可以信任。而以admin身份執行的程序,並不一定都是由當前登入使用者觸發的,還有可能是以admin身份執行的服務,從winsta0的acl可以看出,這些服務無法訪問winsta0,儘管它們的身份就是登入使用者的帳戶本身!
process explorer雖然可以看到完整的安全描述符資訊,也可以看到更詳細的許可權。但是有兩個小缺點,一是無法顯示winsta0的mic級別,而是只顯示所謂的常規許可權,而沒有顯示針對視窗站的特定許可權。可能mark russinovich還沒有來得及更新,抑或這位大牛認為這太簡單了,認為大家很容易理解,不想再修改了。
盆盆評注:如何理解登入會話的sid?可以用服務和服務sid的關係進行模擬。
3. 小結
羅羅嗦嗦說了那麼多,結論呢?
實際上很簡單,檢視winsta0視窗站發現,只有system和登入會話sid擁有所有的可能許可權。所以這就可以解釋,為什麼在windows裡,只有執行在system許可權下的服務才可以選擇「允許服務與桌面互動」,因為實在是只有system才有許可權訪問winsta0視窗站啊!
SYSTEM帳戶 登入會話和視窗站(三)
盆盆 在寫上篇 文章時,就在納悶 為什麼windbg不能轉儲完整的winsta0視窗站的安全描述符?為什麼會少了登入會話sid和登入帳戶的對應ace?盆盆很快發現,原來是自己的問題。為了方便,直接用遠端桌面連線到另外一台實驗windows vista機器,這時候由於是遠端桌面登入的,拿到的是會話2。...
用SYSTEM帳戶登入系統
2007 02 24 15 19 26 分類 電腦 標籤 系統 字型大小大中小 訂閱1 操作簡述 本文將會用另類的方法幫助大家完成這個不可能完成之任務。先請大家在一台實驗機器上進行以下步驟 開啟任務管理器,在 程序 標籤頁關閉explorer程序。在 應用程式 標籤頁單擊 新任務 輸入 cmd 回車...
Windows最高許可權system帳戶
內容摘要 首先,我們要盡量避免平時使用管理員賬戶登入系統 windows最高許可權system帳戶,看見有很多朋友對系統許可權感興趣,我把收藏多年的貼子在發出來給大家學習下 合併了多張關於許可權的文章,修正了部分錯誤,如果還有錯誤的地方,大家可以在回帖提出我及時修正 什麼是system許可權?為什麼...