Windows

系統帳戶訪問令牌缺少組

  • June 24, 2018

我遇到了關於 Windows SYSTEM 帳戶的奇怪現象。查看以 SYSTEM 身份啟動程序的這三種不同方式:

  • Sysinternals PSExec
  • 任務計劃程序
  • GPO 啟動腳本。

使用這些方法啟動的程序會導致不同的訪問令牌組成員身份!

由任務計劃程序啟動的程序在其訪問令牌中具有完整的組集。

由任務計劃程序啟動(圖片)

另一方面,由 PSExec/Startup Script 啟動的程序在其訪問令牌中具有大量減少的組 - 只有這四個

由 PSExec/啟動腳本啟動(圖片)

BUILTIN\Administrators (S-1-5-32-544)
Everyone (S-1-1-0)
NT AUTHORITY\Authenticated Users (S-1-5-11)
Mandatory Label\System Mandatory Level (S-1-16-16384)

有人知道為什麼會這樣嗎?

對於上下文:

BITS 服務在嘗試將文件添加到使用啟動腳本或 PSExec 啟動的程序中的傳輸時拋出“使用者尚未登錄到網路”0x800704DD 錯誤 - 與使用任務計劃程序啟動的程序正常工作。

Windows 10 1703 上的所有測試;來自 whoami /all 和 Sysinternals Process Explorer 的組成員身份

這取決於服務的配置方式,更具體地說,取決於服務 SID 類型。

如果服務 SID 類型為“無”,那麼服務只會獲得一個普通的 SYSTEM 令牌,與其他系統程序(例如等)使用的令牌services.exe相同winlogon.exe。這是遺留情況;早在 Windows XP 中,所有服務都有這種令牌,除非它們被配置為作為特定使用者帳戶執行。

如果服務 SID 類型是“受限制的”或“不受限制的”,則為服務生成更具體的令牌,包括特定於該服務的特殊安全標識符,例如,NT SERVICE\Schedule用於任務調度程序。這有助於在不同服務之間提供一些粒度。在 Windows 7 及更高版本中,大多數內置服務都是“不受限制的”。組策略服務是一個例外;這可能是微軟的疏忽。(我原以為這是為了向後兼容而刻意選擇的,但由於在 Windows 7 中它始終在共享服務程序中執行,這一點被破壞了。)

正如您已經觀察到的,除了獲取NT SERVICE標識符之外,令牌還被賦予了許多其他標識符。據我所知,這沒有記錄,但也不是特別令人驚訝;它使服務令牌更像一個互動式令牌,這可能很有用。(特別重要的是,受限制的令牌就是這種情況,否則它們幾乎沒有訪問權限。)

如自我回答中所述,當單個程序共享多個服務時,程序令牌必須包含任何服務所需的每個 SID。因此,如果組策略服務(或任何其他 SID 類型為“none”的服務)與“無限制”服務共享一個程序,它會獲得與它本身“無限制”完全相同的令牌。

因為早期版本的 Windows 有效地將組策略服務作為“無限制”執行,並且因為即使 Windows 10 在記憶體非常有限的電腦上也這樣做,所以如果它是絕對的,重新配置組策略服務的 SID 類型可能不會太危險**有必要這樣做。除了作為一個非常短期的解決方案之外,我不建議這樣做,部分原因是仍然存在一些風險(特別是關於前向兼容性),但主要是因為每次升級到新版本的 Windows 10 時,該設置很可能是恢復。

更好的解決方法是讓啟動腳本執行計劃任務或安裝和執行服務以代表啟動腳本執行所需的任何工作。

引用自:https://serverfault.com/questions/917892