使用者帳戶控制運作方式

用戶帳戶控制 (UAC) 是 Windows 安全性的重要部分。 UAC 藉由限制惡意代碼以系統管理員許可權執行的能力,來降低惡意代碼的風險。 本文說明UAC的運作方式,以及它如何與用戶互動。

UAC 程式和互動

使用UAC時,需要 系統管理員存取令牌 的每個應用程式都必須提示使用者同意。 唯一的例外是父進程和子進程之間存在關聯性。 子進程會從父進程繼承使用者的存取令牌。 不過,父進程和子進程必須具有相同的 完整性層級

Windows 會藉由標示其完整性層級來保護進程。 完整性層級是信任的度量:

  • 高完整性應用程式是執行修改系統數據之工作的應用程式,例如磁碟分區應用程式
  • 低完整性應用程式是執行可能危害作業系統之工作的應用程式,例如網頁瀏覽器

完整性層級較低的應用程式無法修改具有較高完整性層級之應用程式中的數據。 當標準使用者嘗試執行需要系統管理員存取令牌的應用程式時,UAC 會要求使用者提供有效的系統管理員認證。

為了進一步瞭解此程序的運作方式,讓我們進一步瞭解 Windows 登入程式。

登入程式

下圖顯示系統管理員的登入程式與標準使用者的登入程式有何不同。

描述UAC Windows 登入程式的圖表。

根據預設,標準和系統管理員用戶都會存取資源,並在標準使用者的安全性內容中執行應用程式。
當使用者登入時,系統會為該使用者建立存取令牌。 存取令牌包含授與使用者存取層級的相關信息,包括 (SID) 和 Windows 許可權的特定安全識別碼。

當系統管理員登入時,系統會為使用者建立兩個不同的存取令牌: 標準使用者存取令牌系統管理員存取令牌。 標準使用者存取權杖:

  • 包含與系統管理員存取令牌相同的使用者特定資訊,但系統管理 Windows 許可權和 SID 會移除
  • 它用來啟動不會在標準使用者應用程式 (執行系統管理工作的應用程式)
  • 它用來透過執行程式來顯示桌面 explorer.exe。 Explorer.exe 是所有其他使用者起始進程繼承其存取令牌的父進程。 因此,除非使用者同意或認證來核准應用程式以使用完整的系統管理存取令牌,否則所有應用程式都會以標準使用者身分執行

身為 Administrators 群組成員的使用者,可以在使用標準使用者存取令牌時登入、流覽 Web 及讀取電子郵件。 當系統管理員需要執行需要系統管理員存取令牌的工作時,Windows 會自動提示使用者核准。 此提示稱為 提高許可權提示,其行為可透過原則或登錄來設定。

UAC 用戶體驗

啟用UAC時,標準使用者的用戶體驗與系統管理員使用者不同。 執行 Windows 的建議且更安全的方法是確保您的主要使用者帳戶是標準使用者。 以標準使用者身分執行有助於將受控環境的安全性最大化。 使用內建的 UAC 提高許可權元件,標準使用者可以輸入本機系統管理員帳戶的有效認證,輕鬆地執行系統管理工作。

標準用戶的預設內建 UAC 提高許可權元件是 認證提示

以標準使用者身分執行的替代方式是在核准模式 管理員 系統管理員身分執行。 使用內建的 UAC 提高許可權元件,本機 Administrators 群組的成員可以藉由提供核准,輕鬆地執行系統管理工作。

管理員 核准模式中系統管理員帳戶的預設內建 UAC 提高許可權元件稱為同意提示

認證提示

當標準使用者嘗試執行需要用戶系統管理存取令牌的工作時,就會顯示認證提示。 系統管理員也可以藉由將 [用戶帳戶控制:系統管理員在核准模式原則 管理員 中提高許可權提示的行為] 設定值設定為 [提示輸入認證] 來提供其認證。

顯示UAC認證提示的螢幕快照。

當使用者嘗試執行需要用戶系統管理存取令牌的工作時,會顯示同意提示。

顯示 UAC 同意提示的螢幕擷取畫面。

UAC 提高許可權提示

UAC 提高許可權提示會以色彩編碼為應用程式特定,可讓您更輕鬆地識別應用程式的潛在安全性風險。 當應用程式嘗試以系統管理員的完整存取令牌執行時,Windows 會先分析可執行檔以判斷其發行者。 應用程式會先根據檔案的發行者分成三個類別:

  • Windows
  • 發行者已驗證 (簽署)
  • 未簽署 (發行者未驗證)

提高權限提示色彩編碼如下:

  • 灰色背景:應用程式是 Windows 系統管理應用程式,例如 控制台 專案,或由已驗證的發行者簽署的應用程式螢幕快照,其中顯示具有已簽署可執行檔的 UAC 認證提示。
  • 黃色背景:應用程式未簽署或已簽署,但不受信任 的螢幕快照,其中顯示具有未簽署可執行檔的 UAC 同意提示。

保護盾圖示

某些 控制台 專案,例如日期和時間,包含系統管理員和標準使用者作業的組合。 標準使用者可以檢視時鐘並變更時區,但需要完整的系統管理員存取令牌,才能變更本機系統時間。 以下是日期和時間 控制台 項目的螢幕快照。

顯示日期和時間屬性中 UAC Shield 圖示的螢幕快照。

[ 變更日期和時間... ] 按鈕上的防護圖示表示程式需要完整的系統管理員存取令牌。

保護提高許可權提示

藉由將提示導向 至安全桌面,進一步保護提高許可權程式。 預設會在安全桌面上顯示同意和認證提示。 只有 Windows 進程可以存取安全的桌面。 為了提高安全性層級,建議您在提示提高許可權原則設定時,保持 用戶帳戶控制:切換至安全桌面

當可執行檔要求提高許可權時,交 互式桌面也稱為 使用者桌面,會切換至安全桌面。 安全桌面會使用戶桌面變暗,並顯示必須先回應才能繼續的提高許可權提示。 當用戶選取 [ ] 或 [ ] 時,桌面會切換回使用者桌面。

注意

Windows Server 2019 開始,無法將剪貼簿的內容貼到安全桌面上。 這是目前支援的 Windows 用戶端 OS 版本的相同行為。

惡意代碼可能會呈現安全桌面的其中一項功能,但當 [用戶帳戶控制:管理員 核准模式原則設定中系統管理員提高許可權提示的行為] 設定為 [提示同意] 時,如果使用者選取 [],惡意代碼就不會提高許可權。 如果原則設定設 為 [提示輸入認證],則發出認證提示的惡意代碼可能會收集用戶的認證。 不過,惡意代碼不會獲得更高的許可權,而且系統具有其他保護,可減輕惡意代碼,即使使用已收集的密碼也無法控制使用者介面。

雖然惡意代碼可能會呈現安全桌面的叢集,但除非使用者先前已在計算機上安裝惡意代碼,否則無法發生此問題。 由於需要系統管理員存取令牌的程式在啟用 UAC 時無法以無訊息方式安裝,因此使用者必須選取 [ ] 或提供系統管理員認證,以明確地提供同意。 UAC 提高許可權提示的特定行為取決於安全策略。

UAC 架構

下圖詳細說明UAC架構。

描述UAC架構的圖表。

若要進一步瞭解每個元件,請檢閱下列數據表:

使用者

元件 說明
用戶執行需要許可權的作業 如果作業變更文件系統或登錄,則會呼叫 Virtualization。 所有其他作業都會呼叫ShellExecute。
ShellExecute ShellExecute 會呼叫 CreateProcess。 ShellExecute 會從 CreateProcess 尋找ERROR_ELEVATION_REQUIRED錯誤。 如果收到錯誤,ShellExecute 會呼叫應用程式資訊服務,以提升許可權的提示來嘗試執行要求的工作。
CreateProcess 如果應用程式需要提高許可權,CreateProcess 會拒絕具有ERROR_ELEVATION_REQUIRED的呼叫。

系統

元件 說明
應用程式資訊服務 系統服務,可協助啟動需要一或多個更高許可權或用戶權力才能執行的應用程式,例如本機系統管理工作,以及需要更高完整性層級的應用程式。 應用程式資訊服務可在需要提高許可權時,使用系統管理使用者的完整存取令牌為應用程式建立新的程式,以協助啟動這類應用程式。 根據設定的原則,使用者可能會同意。
提升 ActiveX 安裝 如果未安裝 ActiveX,系統會檢查 UAC 滑桿層級。 如果已安裝 ActiveX,則會核取 [使用者帳戶控制:在提示提高許可權時切換至安全桌面 群組原則 設定。
檢查UAC滑桿層級 UAC 有一個滑桿可從四個層級的通知中選取。
  • 一律通知 會:
    • 當程式嘗試安裝軟體或對計算機進行變更時通知您。
    • 當您變更 Windows 設定時通知您。
    • 凍結其他工作,直到您響應為止。
    如果您經常安裝新軟體或造訪不熟悉的網站,建議您使用。
  • 只有當程式嘗試對計算機進行變更時,才會通知我
    • 當程式嘗試安裝軟體或對計算機進行變更時通知您。
    • 當您對 Windows 設定進行變更時,通知您。
    • 凍結其他工作,直到您響應為止。
    如果您不常安裝應用程式或造訪不熟悉的網站,建議您使用。
  • 只有在程式嘗試對計算機進行變更 (不會使桌面變暗時通知我,)
    • 當程式嘗試安裝軟體或對計算機進行變更時通知您。
    • 當您對 Windows 設定進行變更時,通知您。
    • 在您回應之前,請不要凍結其他工作。
    不建議使用。 只有當電腦上的桌面變暗需要很長的時間時,才選擇此方法。
  • 請勿通知 (停用 UAC 提示) 會:
    • 當程式嘗試安裝軟體或對計算機進行變更時,通知您。
    • 當您對 Windows 設定進行變更時,通知您。
    • 在您回應之前,請不要凍結其他工作。
    基於安全性考慮,不建議使用。
已啟用安全桌面 用戶帳戶控制:核取提示提高許可權原則設定時,切換至安全桌面
  • 如果已啟用安全桌面,則不論系統管理員和標準使用者的提示行為原則設定為何,所有提高許可權要求都會移至安全桌面。
  • 如果未啟用安全桌面,則所有提高許可權要求都會移至互動式使用者的桌面,並使用系統管理員和標準使用者的個別用戶設定。
CreateProcess CreateProcess 會呼叫 AppCompat、Fusion 和 Installer 偵測,以評估應用程式是否需要提高許可權。 接著會檢查檔案以判斷其要求的執行層級,該層級會儲存在檔案的應用程式指令清單中。 如果指令清單中指定的要求執行層級不符合存取令牌,且將錯誤 (ERROR_ELEVATION_REQUIRED) 傳回ShellExecute,CreateProcess就會失敗。
AppCompat AppCompat 資料庫會將資訊儲存在應用程式的應用程式相容性修正專案中。
融合 Fusion 資料庫會儲存來自描述應用程式之應用程式指令清單的資訊。 指令清單架構會更新為新增要求的執行層級欄位。
安裝程式偵測 安裝程式偵測會偵測安裝程式檔案,這有助於防止安裝在未經使用者瞭解和同意的情況下執行。

內核

元件 說明
虛擬化 虛擬化技術可確保不符合規範的應用程式不會以無法判斷原因的方式,以無訊息方式執行或失敗。 UAC 也提供寫入受保護區域之應用程式的檔案和登錄虛擬化和記錄。
檔系統和登錄 每一使用者檔案和登錄虛擬化會將每部計算機登錄和檔案寫入要求重新導向至對等的每個使用者位置。 讀取要求會先重新導向至虛擬化的每個使用者位置,再重新導向至每部計算機的位置。

滑桿永遠不會完全關閉UAC。 如果您將它設定為 [永不通知],它將會:

  • 讓UAC服務保持執行
  • 導致系統管理員起始的所有提高許可權要求自動核准,而不會顯示 UAC 提示
  • 自動拒絕標準使用者的所有提高許可權要求

重要

若要完全停用 UAC,您必須停用原則用戶帳戶控制:以 管理員 核准模式執行所有系統管理員

警告

當 UAC 停用時,某些 通用 Windows 平台 應用程式可能無法運作。

虛擬化

由於企業環境中的系統管理員會嘗試保護系統,因此許多企業營運 (LOB) 應用程式都設計成只使用標準使用者存取令牌。 因此,當 UAC 開啟時,您不需要取代大部分的應用程式。

Windows 包含檔案和登錄虛擬化技術,適用於不符合 UAC 規範且需要系統管理員存取令牌才能正確執行的應用程式。 當不符合 UAC 規範的系統管理應用程式嘗試寫入受保護的資料夾,例如 Program Files 時,UAC 會提供應用程式自己的虛擬化檢視,以檢視它嘗試變更的資源。 虛擬化復本會保留在使用者的配置檔中。 此策略會為每個執行不符合規範應用程式的使用者建立虛擬化檔案的個別複本。

大部分的應用程式工作會使用虛擬化功能來正常運作。 雖然虛擬化可讓大部分的應用程式執行,但這是短期修正,而不是長期解決方案。 應用程式開發人員應該儘快將其應用程式修改為符合規範,而不是依賴檔案、資料夾和登錄虛擬化。

在下列案例中,虛擬化不是一個選項:

  • 虛擬化不適用於已提升許可權且使用完整系統管理存取令牌執行的應用程式
  • 虛擬化僅支援32位應用程式。 無限制的64位應用程式在嘗試取得 windows 物件的唯一標識子) (句柄時,會收到拒絕存取的訊息。 原生 Windows 64 位應用程式必須與 UAC 相容,並將數據寫入正確的位置
  • 如果應用程式包含具有要求執行層級屬性的應用程式指令清單,則會停用虛擬化

要求執行層級

應用程式指令清單是一個 XML 檔案,可描述並識別應用程式應該在運行時間系結至的共用和私用並存元件。 應用程式指令清單包含用於 UAC 應用程式相容性的專案。 在應用程式指令清單中包含項目的系統管理應用程式會提示使用者提供存取使用者存取令牌的許可權。 雖然它們在應用程式指令清單中沒有專案,但大部分的系統管理應用程式都可以使用應用程式相容性修正來執行,而不需要修改。 應用程式相容性修正是資料庫專案,可讓不符合 UAC 規範的應用程式正常運作。

所有符合 UAC 規範的應用程式都應該將要求的執行層級新增至應用程式指令清單。 如果應用程式需要系統管理存取權,則將應用程式標示為要求的執行層級 需要系統管理員 確保系統將此程序識別為系統管理應用程式,並執行必要的提高許可權步驟。 要求的執行層級會指定應用程式所需的許可權。

安裝程式偵測技術

安裝程式是專為部署軟體而設計的應用程式。 大部分的安裝程式都會寫入系統目錄和登錄機碼。 這些受保護的系統位置通常只能由安裝程式偵測技術中的系統管理員撰寫,這表示標準用戶沒有足夠的存取權來安裝程式。 Windows 啟發式偵測安裝程式,並要求系統管理員使用者的系統管理員認證或核准,以便以訪問許可權執行。 Windows 也會以啟發學習方式偵測卸載應用程式的更新和程式。 UAC 的設計目標之一是防止安裝在使用者不知情且未經同意的情況下執行,因為安裝程式會寫入檔系統和登錄的受保護區域。

安裝程式偵測僅適用於:

  • 32 位可執行檔
  • 沒有要求執行層級屬性的應用程式
  • 以已啟用UAC的標準使用者身分執行的互動式進程

在建立32位進程之前,會檢查下列屬性以判斷它是否為安裝程式:

  • 檔名包含關鍵詞,例如「安裝」、「安裝程式」或「更新」。
  • 版本設定資源欄位包含下列關鍵詞:廠商、公司名稱、產品名稱、檔案描述、原始檔名、內部名稱和導出名稱。
  • 並存指令清單中的關鍵詞會內嵌在可執行檔中。
  • 特定 StringTable 專案中的關鍵詞會連結在可執行檔中。
  • 資源文本數據中的關鍵屬性會連結在可執行檔中。
  • 可執行檔內有以位元組為目標的序列。

注意

關鍵詞和位元組序列衍生自各種安裝程式技術觀察到的常見特性。

注意

用戶帳戶控制:必須啟用偵測應用程式安裝和提示提高許可權原則,安裝程式偵測才能偵測安裝程式。 如需詳細資訊,請參閱 用戶帳戶控制設定清單

後續步驟

深入瞭解 用戶帳戶控制設定和組態